Index: /reasoner/measures/EASyProducer-1.1-3.patch
===================================================================
--- /reasoner/measures/EASyProducer-1.1-3.patch	(revision 264)
+++ /reasoner/measures/EASyProducer-1.1-3.patch	(revision 264)
@@ -0,0 +1,136641 @@
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/Test.class b/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/Test.class
+new file mode 100644
+index 0000000..a86c3fc
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/Test.class
+Binary files differ
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/package-info.class b/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/package-info.class
+new file mode 100644
+index 0000000..ed394f0
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/package-info.class
+Binary files differ
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/Test.class b/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/Test.class
+new file mode 100644
+index 0000000..9f41899
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/Test.class
+Binary files differ
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/package-info.class b/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/package-info.class
+new file mode 100644
+index 0000000..875c999
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/package-info.class
+Binary files differ
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+new file mode 100644
+index 0000000..e69de29
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+new file mode 100644
+index 0000000..4bd01c4
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+@@ -0,0 +1,2 @@
++W:\IndenicaWorkspace\EASy-Standalone-test\src\standaloneTest\package-info.java
++W:\IndenicaWorkspace\EASy-Standalone-test\src\standaloneTest\Test.java
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.project b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.project
+new file mode 100644
+index 0000000..5a27378
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.project
+@@ -0,0 +1,23 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<projectDescription>
++	<name>EASy-Standalone</name>
++	<comment></comment>
++	<projects>
++	</projects>
++	<buildSpec>
++		<buildCommand>
++			<name>org.eclipse.jdt.core.javabuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>org.eclipse.m2e.core.maven2Builder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++	</buildSpec>
++	<natures>
++		<nature>org.eclipse.jdt.core.javanature</nature>
++		<nature>org.eclipse.m2e.core.maven2Nature</nature>
++	</natures>
++</projectDescription>
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.settings/org.eclipse.m2e.core.prefs b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.settings/org.eclipse.m2e.core.prefs
+new file mode 100644
+index 0000000..14b697b
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.settings/org.eclipse.m2e.core.prefs
+@@ -0,0 +1,4 @@
++activeProfiles=
++eclipse.preferences.version=1
++resolveWorkspaceProjects=true
++version=1
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/build.xml b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/build.xml
+new file mode 100644
+index 0000000..1e35d14
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/build.xml
+@@ -0,0 +1,258 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<!-- Project name must not contain whitespaces -->
++<project name="Standalone Tools" default="all" basedir=".">	
++	<property file="${user.home}/global-build.properties"/>
++	<property name="easyPlugins" value="easyPlugins"/>
++
++	<include file="${home.base.dir}/${projects.standalone.dir}/standalone.macros.xml"/>
++			
++	<target name="init">
++		<!-- Delete generated folders -->
++		<delete dir="junitResults"/>
++		<delete dir="${easyPlugins}"/>
++		<delete dir="build"/>
++        <delete dir="${home.base.dir}/${projects.standalone.dir}/antLibs"/>
++		
++		<!-- Delete accidentally created files and folders -->
++		<delete dir="easyLoader"/>
++		<delete dir="emma"/>
++		<delete dir="newGenerator"/>
++				
++		<!-- Create folders -->
++		<mkdir dir="junitResults"/>
++		<mkdir dir="${easyPlugins}"/>
++		<mkdir dir="build"/>
++		<mkdir dir="build/zip"/>
++		<mkdir dir="build/zip/Plugins"/>
++		<mkdir dir="build/zip/Features"/>
++		<mkdir dir="build/generatedLibs"/>
++        
++        <!-- Update/Prepare ANT Generator -->
++        <mkdir dir="${home.base.dir}/${projects.standalone.dir}/antLibs"/>
++        <copy todir="${home.base.dir}/${projects.standalone.dir}/antLibs" failonerror="true" overwrite="true" flatten="true">
++			<fileset dir="${home.easyLoader.dir}/build/jar">
++				<include name="**/*.jar" />
++			</fileset>
++		</copy>
++	</target>
++	
++	<target name="gather.easy.plugins">
++		<copy todir="${easyPlugins}" failonerror="true" overwrite="true" flatten="true">
++			<fileset dir="${home.base.dir}">
++				<include name="**/build/jar/*.jar" />
++			</fileset>
++		</copy>
++	</target>
++	
++	<target name="createLibs">
++		<!-- Lib generation with Patrik's ANT plugin for automated EASy-Bundle generation -->
++        <taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"/>
++        <!-- pluginPath="${easy.bundles.dir}" -->
++        <!-- pluginPath="${easyPlugins}" -->
++        <antgenerator forced="yes" pluginPath="${easy.bundles.dir}" target="${basedir}/build/generatedLibs"
++            basedir="${basedir}" eclipsepath="${eclipse.plugins.dir}" classesPath="${home.easyLoader.dir}/build/classes"
++            libsPath="${home.easyLoader.dir}/libs">
++            
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.core.no_eclipse_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.ivml.core_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.vil.core_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.reasoning.reasoner_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.apache.commons.io.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.java.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.instantiation.velocity_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.eclipseInfrastructure.Feature"/>
++            <addfeature path="${projects.features.dir}"/>
++        </antgenerator>
++        
++        <!-- Fix me -->
++        <copy todir="${basedir}/build/generatedLibs/unbundled" failonerror="true" overwrite="true" flatten="true">
++            <fileset dir="${easy.bundles.dir}">
++                <include name="org.eclipse.equinox.common_3.6.200.jar" />
++                <include name="org.eclipse.equinox.preferences_3.5.100.jar" />
++            </fileset>
++        </copy>
++        
++        <!-- copy generated bundles to command line tool before compilation -->
++        <copy todir="EASyCommandLine/lib" failonerror="true" overwrite="true" flatten="true">
++			<fileset dir="${basedir}/build/generatedLibs/unbundled">
++				<include name="**/*.jar" />
++			</fileset>
++            <fileset dir="${home.easyLoader.dir}/libs/">
++				<include name="org.eclipse.osgi*.jar" />
++			</fileset>
++            <fileset dir="${eclipse.plugins.dir}">
++				<include name="org.apache.ant*/lib/ant.jar" />
++			</fileset>
++		</copy>
++    </target>
++
++    <!-- standalone with some experimental stuff -->
++	<target name="createLibs.ex">
++        <mkdir dir="build/generatedLibs.ex"/>
++	    <!-- Lib generation with Patrik's ANT plugin for automated EASy-Bundle generation -->
++        <taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"/>
++        <!-- pluginPath="${easy.bundles.dir}" -->
++        <!-- pluginPath="${easyPlugins}" -->
++        <antgenerator forced="yes" pluginPath="${easy.bundles.dir}" target="${basedir}/build/generatedLibs.ex"
++            basedir="${basedir}" eclipsepath="${eclipse.plugins.dir}" classesPath="${home.easyLoader.dir}/build/classes"
++            libsPath="${home.easyLoader.dir}/libs">
++            
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.core.no_eclipse_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.ivml.core_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.vil.core_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.reasoning.reasoner_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.apache.commons.io.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.java.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.instantiation.velocity_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.maven.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.experimental.core_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.eclipseInfrastructure.Feature"/>
++            <addfeature path="${projects.features.dir}"/>
++        </antgenerator>
++        
++        <!-- Fix me -->
++        <copy todir="${basedir}/build/generatedLibs.ex/unbundled" failonerror="true" overwrite="true" flatten="true">
++            <fileset dir="${easy.bundles.dir}">
++                <include name="org.eclipse.equinox.common_3.6.200.jar" />
++                <include name="org.eclipse.equinox.preferences_3.5.100.jar" />
++            </fileset>
++        </copy>
++        
++        <!-- copy generated bundles to command line tool before compilation -->
++        <copy todir="EASyCommandLine/lib" failonerror="true" overwrite="true" flatten="true">
++            <fileset dir="${basedir}/build/generatedLibs.ex/unbundled">
++                <include name="**/*.jar" />
++            </fileset>
++            <fileset dir="${home.easyLoader.dir}/libs/">
++                <include name="org.eclipse.osgi*.jar" />
++            </fileset>
++        </copy>
++        <dist target="build/generatedLibs.ex" />
++        <!-- cannot be bundled due to various conflicts, rans anyway in own process -->
++        <withMaven target="build/generatedLibs.ex"/>
++    </target>
++    
++    <!-- standalone runtime without xText but full Java instantiators and some experimental stuff - QM version is 
++         smaller-->
++    <target name="createLibs.runtimeNoXtext">
++        <mkdir dir="build/generatedLibs.rt.noXtext"/>
++        <!-- Lib generation with Patrik's ANT plugin for automated EASy-Bundle generation -->
++        <taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"/>
++        <!-- pluginPath="${easy.bundles.dir}" -->
++        <!-- pluginPath="${easyPlugins}" -->
++        <antgenerator forced="yes" pluginPath="${easy.bundles.dir}" target="${basedir}/build/generatedLibs.rt.noXtext"
++            basedir="${basedir}" eclipsepath="${eclipse.plugins.dir}" classesPath="${home.easyLoader.dir}/build/classes"
++            libsPath="${home.easyLoader.dir}/libs">
++            
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.runtime_feature_noXtext"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.reasoning.reasoner_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.java.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.apache.commons.io.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.instantiation.velocity_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.maven.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.serializer.feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.eclipseInfrastructure.Feature"/>
++            <addfeature path="${projects.features.dir}"/>
++        </antgenerator>
++        
++        <!-- Fix me -->
++        <copy todir="${basedir}/build/generatedLibs.rt.noXtext/unbundled" failonerror="true" overwrite="true" flatten="true">
++            <fileset dir="${easy.bundles.dir}">
++                <include name="org.eclipse.equinox.common_3.6.200.jar" />
++                <include name="org.eclipse.equinox.preferences_3.5.100.jar" />
++            </fileset>
++        </copy>
++        
++        <!-- copy generated bundles to command line tool before compilation -->
++        <copy todir="EASyCommandLine/lib" failonerror="true" overwrite="true" flatten="true">
++            <fileset dir="${basedir}/build/generatedLibs.rt.noXtext/unbundled">
++                <include name="**/*.jar" />
++            </fileset>
++            <fileset dir="${home.easyLoader.dir}/libs/">
++                <include name="org.eclipse.osgi*.jar" />
++            </fileset>
++        </copy>
++        <dist target="build/generatedLibs.rt.noXtext" />
++        <!-- cannot be bundled due to various conflicts, rans anyway in own process -->
++        <withMaven target="build/generatedLibs.rt.noXtext"/>
++    </target>
++	
++    <!-- a runtime library version - however containing full EASy :o -->
++    <target name="createLibs.runtime">
++        <mkdir dir="build/generatedLibs.rt"/>
++        <!-- Lib generation with Patrik's ANT plugin for automated EASy-Bundle generation -->
++        <taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"/>
++        <!-- pluginPath="${easy.bundles.dir}" -->
++        <!-- pluginPath="${easyPlugins}" -->
++        <antgenerator forced="yes" pluginPath="${easy.bundles.dir}" target="${basedir}/build/generatedLibs.rt"
++            basedir="${basedir}" eclipsepath="${eclipse.plugins.dir}" classesPath="${home.easyLoader.dir}/build/classes"
++            libsPath="${home.easyLoader.dir}/libs">
++            
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.runtime_feature"/>
++            <!-- is this one really required, as no_eclipse indirectly requires full EASy -->
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.core.no_eclipse_feature"/>
++            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.java.feature"/>
++            <addfeature path="${projects.features.dir}"/>
++        </antgenerator>
++        
++        <!-- Fix me -->
++        <copy todir="${basedir}/build/generatedLibs.rt/unbundled" failonerror="true" overwrite="true" flatten="true">
++            <fileset dir="${easy.bundles.dir}">
++                <include name="org.eclipse.equinox.common_3.6.200.jar" />
++                <include name="org.eclipse.equinox.preferences_3.5.100.jar" />
++            </fileset>
++        </copy>
++        
++        <!-- copy generated bundles to command line tool before compilation -->
++        <copy todir="EASyCommandLine/lib" failonerror="true" overwrite="true" flatten="true">
++			<fileset dir="${basedir}/build/generatedLibs.rt/unbundled">
++				<include name="**/*.jar" />
++			</fileset>
++            <fileset dir="${home.easyLoader.dir}/libs/">
++				<include name="org.eclipse.osgi*.jar" />
++			</fileset>
++		</copy>
++		<dist target="build/generatedLibs.rt"/>
++		<!-- cannot be bundled due to various conflicts, rans anyway in own process -->
++        <withMaven target="build/generatedLibs.rt"/>
++    </target>
++    	
++	<target name="compile">	
++        <echo>#######################################</echo>
++        <echo>###  CommandLine Tool (@Standalone) ###</echo>
++        <echo>#######################################</echo>
++        <ant dir="EASyCommandLine" antfile="${build.script.name}" />
++        
++        <echo>########################################</echo>
++        <echo>###  CommandLine Tests (@Standalone) ###</echo>
++        <echo>########################################</echo>
++        <ant dir="EASyCommandLineTest" antfile="${build.script.name}" />
++        
++        <!--
++        Create Distribution for standard EASyCommandLine
++        (correct libs are already included, since they are gathered for compiling)
++        -->
++        <mkdir dir="build/generatedLibs/dist"/>
++        <dist target="build/generatedLibs"/>
++        
++        <!-- The same game for runtime... -->
++    </target>
++    
++    <target name="zip">
++        <copy todir="build/zip/Plugins" failonerror="true" overwrite="true" flatten="true">
++			<fileset dir="${easy.bundles.dir}">
++				<include name="**/*.jar" />
++			</fileset>
++		</copy>
++        <copy todir="build/zip/Features" failonerror="true" overwrite="true" flatten="false">
++			<fileset dir="${projects.features.dir}">
++				<include name="**/*.xml" />
++			</fileset>
++		</copy>
++        <zip destfile="build/zip/BundleSources.zip" basedir="build/zip"/>
++    </target>
++	
++	<!--target name="all" depends="init, gather.easy.plugins, createLibs, compile"/-->
++	<target name="all" depends="init, createLibs, compile, zip, createLibs.ex, createLibs.runtime, createLibs.runtimeNoXtext"/>
++	<target name="all.runtime" depends="init, createLibs, compile, zip, createLibs.ex, createLibs.runtime, createLibs.runtimeNoXtext"/>
++</project>
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/pom.xml b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/pom.xml
+new file mode 100644
+index 0000000..0e4f429
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/pom.xml
+@@ -0,0 +1,63 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>net.ssehub.easy.producer</groupId>
++  <artifactId>Standalone</artifactId>
++  <version>1.2.0-SNAPSHOT</version>
++  <packaging>jar</packaging>
++  
++  <build>
++      <sourceDirectory>${basedir}/src</sourceDirectory>
++        <plugins>
++      <plugin>
++        <artifactId>maven-resources-plugin</artifactId>
++        <executions>
++          <execution>
++            <id>copy-resources</id>
++            <phase>compile</phase>
++            <goals>
++              <goal>copy-resources</goal>
++            </goals>
++            <configuration>
++              <outputDirectory>${basedir}/target/classes</outputDirectory>
++              <resources>          
++                <resource>
++                  <directory>${basedir}/resources</directory>
++                  <filtering>true</filtering>
++                </resource>
++              </resources>              
++            </configuration>            
++          </execution>
++        </executions>
++      </plugin>        
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>
++            </plugin>
++        </plugins>
++  </build>
++    
++  <repositories>       
++    <repository>
++      <id>sse</id>
++      <name>sse</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++      <layout>default</layout>
++    </repository>
++  </repositories> 
++  
++  <!-- Dependency Management -->  
++ 
++ <dependencies>
++	 <dependency>
++	   <groupId>de.uni_hildesheim.sse.easyProducer.runtime</groupId>
++	   <artifactId>EASy</artifactId>
++	   <version>1.2.0-SNAPSHOT</version>
++	 </dependency>
++ </dependencies>
++  
++  </project>
+\ No newline at end of file
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/standalone.macros.xml b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/standalone.macros.xml
+new file mode 100644
+index 0000000..eb4b52c
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/standalone.macros.xml
+@@ -0,0 +1,77 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<project name="Standalone.Macros">
++
++    <!-- use path with
++      taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"
++     -->
++    <path id="easyTaskDef.lib" >
++        <fileset dir="${home.base.dir}/${projects.standalone.dir}/antLibs">
++            <include name="**/*.jar" />
++        </fileset>
++    </path>
++    
++    <!-- Prepare distribution in target directory -->
++    <macrodef name="dist">
++        <attribute name="target" default="NOT_SET" />
++        <attribute name="exclude" default="" />
++        <sequential>
++          <mkdir dir="@{target}/dist"/>
++          <copy todir="@{target}/dist">
++            <fileset dir="@{target}/unbundled">
++                <include name="**/*.jar" />
++                <exclude name="@{exclude}" />
++            </fileset>
++            <fileset dir="${home.standalone.executer.dir}/lib">
++                <include name="drools-*.jar" />
++                <exclude name="@{exclude}" />
++            </fileset>            
++            <fileset dir="${home.standalone.executer.dir}/lib">
++                <include name="org.eclipse.osgi*.jar" />
++                <exclude name="@{exclude}" />
++            </fileset>            
++            <fileset dir="${home.standalone.executer.dir}/build/jar">
++                <include name="*.jar" />
++                <exclude name="@{exclude}" />
++            </fileset>            
++          </copy>
++        </sequential>
++    </macrodef>
++    
++    <!-- cannot be bundled due to various conflicts, rans anyway in own process; use maven integration
++         standalone, copy libs, ... -->
++    <macrodef name="withMaven">
++        <attribute name="target" default="NOT_SET" />
++        <sequential>
++        <!-- <copy todir="@{target}/dist">
++            <fileset dir="${home.instantiator.maven.dir}/${build.jar.dir}">
++                <include name="de.uni_hildesheim.sse.easy.instantiator.maven-standalone.jar" />
++            </fileset>
++        </copy>-->
++        <copy todir="@{target}/dist/lib">
++            <fileset dir="${home.instantiator.maven.dir}/lib">
++                <include name="**/*.*" />
++            </fileset>
++        </copy>
++        <!-- <unzip src="@{target}/dist/easy-headless.jar" dest="@{target}/dist">
++            <patternset>
++                <include name=".easyStartup"/>
++            </patternset>
++        </unzip>
++<local name="easyStartup.before"/>
++<loadfile property="easyStartup.before" srcFile="@{target}/dist/.easyStartup"/>
++<echo message="${easyStartup.before}"/>
++        <concat append="yes" destfile="@{target}/dist/.easyStartup">ACTIVATOR:de.uni_hildesheim.sse.easy.maven.Activator
++DS:de.uni_hildesheim.sse.easy.maven.Registration</concat>
++<local name="easyStartup.after"/>
++<loadfile property="easyStartup.after" srcFile="@{target}/dist/.easyStartup"/>
++<echo message="${easyStartup.after}"/>
++        <jar update="true" destfile="@{target}/dist/easy-headless.jar">
++            <fileset dir="@{target}/dist">
++                <include name=".easyStartup" />
++            </fileset>
++        </jar>
++        <delete file="@{target}/dist/.easyStartup"/>-->
++      </sequential>
++    </macrodef>
++    
++</project>
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/AllTests.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/AllTests.class
+new file mode 100644
+index 0000000..f35bb80
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/AllTests.class
+Binary files differ
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/StandaloneTests.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/StandaloneTests.class
+new file mode 100644
+index 0000000..8da1957
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/StandaloneTests.class
+Binary files differ
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/Test.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/Test.class
+new file mode 100644
+index 0000000..a07c222
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/Test.class
+Binary files differ
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/TestFailedException.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/TestFailedException.class
+new file mode 100644
+index 0000000..e8b3394
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/TestFailedException.class
+Binary files differ
+diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/package-info.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/package-info.class
+new file mode 100644
+index 0000000..875c999
+--- /dev/null
++++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/package-info.class
+Binary files differ
+diff --git a/EASy-Standalone/EASyCommandLine/.gitignore b/EASy-Standalone/EASyCommandLine/.gitignore
+index ae3c172..92145bc 100644
+--- a/EASy-Standalone/EASyCommandLine/.gitignore
++++ b/EASy-Standalone/EASyCommandLine/.gitignore
+@@ -1 +1,2 @@
+ /bin/
++/target/
+\ No newline at end of file
+diff --git a/EASy-Standalone/target/classes/standaloneTest/Test.class b/EASy-Standalone/target/classes/standaloneTest/Test.class
+new file mode 100644
+index 0000000..09ec325
+--- /dev/null
++++ b/EASy-Standalone/target/classes/standaloneTest/Test.class
+Binary files differ
+diff --git a/EASy-Standalone/target/classes/standaloneTest/package-info.class b/EASy-Standalone/target/classes/standaloneTest/package-info.class
+new file mode 100644
+index 0000000..ddce694
+--- /dev/null
++++ b/EASy-Standalone/target/classes/standaloneTest/package-info.class
+Binary files differ
+diff --git a/EASyBuildProperties/global-build.properties b/EASyBuildProperties/global-build.properties
+index d98639f..9a79ab0 100644
+--- a/EASyBuildProperties/global-build.properties
++++ b/EASyBuildProperties/global-build.properties
+@@ -1,4 +1,5 @@
+ # Local settings
++benchmarks.home=${user.home}/benchmarks
+ eclipse.home=${user.home}/Eclipse/EclipseCompile_SSE400
+ eclipse.launcher=${eclipse.home}/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
+ eclipse.product.launcher=${user.home}/Eclipse/ProductBuildEclipse/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
+@@ -29,6 +30,8 @@
+ test.eclipse.os=linux
+ test.eclipse.ws=gtk
+ test.eclipse.arch=x86_64
++# For performance measurements
++home.scalelog=${home.base.dir}/ScaleLog/workspace
+ 
+ # Jubula GUI Test
+ jubula.dir=/usr/local/jubula_7.1.00055
+diff --git a/Plugins/EASy-Producer/ScenariosTest/META-INF/MANIFEST.MF b/Plugins/EASy-Producer/ScenariosTest/META-INF/MANIFEST.MF
+index 24a6f36..3814373 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/META-INF/MANIFEST.MF
++++ b/Plugins/EASy-Producer/ScenariosTest/META-INF/MANIFEST.MF
+@@ -19,6 +19,10 @@
+  net.ssehub.easy.instantiation.maven;bundle-version="3.2.3",
+  net.ssehub.easy.reasoning.core,
+  net.ssehub.easy.reasoning.sseReasoner,
+- net.ssehub.easy.producer.core
++ net.ssehub.easy.producer.core,
++ de.uni_hildesheim.sse.ivml.tests,
++ net.ssehub.easy.instantiation.velocity,
++ net.ssehub.easy.reasoning.sseReasoner.tests,
++ net.ssehub.easy.reasoning.core.tests 
+ Bundle-ClassPath: .
+ Export-Package: net.ssehub.easy.producer.scenario_tests
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractEasyScenarioTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractEasyScenarioTest.java
+new file mode 100644
+index 0000000..6345ac7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractEasyScenarioTest.java
+@@ -0,0 +1,30 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.producer.scenario_tests;
++
++/**
++ * Common properties for scenario tests in this project.
++ * 
++ * @author Holger Eichelberger
++ */
++abstract class AbstractEasyScenarioTest extends AbstractScenarioTest {
++    
++    @Override
++    protected String getMeasurementFileName() {
++        return "measurements-scenarios.tsv";
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractRealTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractRealTests.java
+new file mode 100644
+index 0000000..2f0649a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractRealTests.java
+@@ -0,0 +1,114 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.producer.scenario_tests;
++
++import java.util.HashSet;
++import java.util.Set;
++
++import org.junit.Assert;
++
++import net.ssehub.easy.basics.progress.ProgressObserver;
++import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.Configuration;
++import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.Message;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.model.AbstractVariable;
++import net.ssehub.easy.varModel.model.ModelQuery;
++import net.ssehub.easy.varModel.model.ModelQueryException;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
++
++/**
++ * Test infrastructure class for real tests.
++ * 
++ * @author Holger Eichelberger
++ */
++public abstract class AbstractRealTests extends AbstractEasyScenarioTest {
++
++    protected boolean enableRealTimeAsserts;
++
++    // a simple runtime variability test, at least that runtime reasoning seems to be working
++    @Override
++    protected Configuration assertConfiguration(net.ssehub.easy.varModel.model.Project prj, Mode mode) {
++        Configuration result = super.assertConfiguration(prj, mode);
++        if (enableRealTimeAsserts && "QM".equals(prj.getName())) {
++            net.ssehub.easy.varModel.confModel.Configuration cfg = result.getConfiguration();
++            try {
++                AbstractVariable ppfe2 = ModelQuery.findVariable(prj, "PriorityPip_FamilyElement2", null);
++                if (null != ppfe2) {
++                    IDecisionVariable cVar = cfg.getDecision(ppfe2);
++                    IDecisionVariable eVar = cVar.getNestedElement("capacity");
++                    // set to extreme high capacity, shall lead to failure
++                    eVar.setValue(ValueFactory.createValue(eVar.getDeclaration().getType(), 1.0), 
++                        AssignmentState.ASSIGNED);
++                    System.out.println("Performing runtime reasoning/propagation...");
++                    ReasonerConfiguration rCfg = new ReasonerConfiguration();
++                    rCfg.setRuntimeMode(true);
++                    for (int r = 1; r <= AbstractTest.NUM_INCREMENTAL_REASONING; r++) {
++                        String id = mode.doMeasure() ? MeasurementCollector.start(cfg, "SCENARIO-INC", r) : null;
++                        ReasoningResult res = ReasonerFrontend.getInstance().propagate(prj, 
++                            cfg, rCfg, ProgressObserver.NO_OBSERVER);
++                        if (null != id) {
++                            MeasurementCollector.endAuto(id);
++                            net.ssehub.easy.reasoning.core.reasoner.AbstractTest.transferReasoningMeasures(
++                                MeasurementCollector.getInstance(), id, getMeasurements(), res);
++                            MeasurementCollector.end(id);
++                        }
++                        res.logInformation(prj, rCfg);
++                        Assert.assertTrue("Runtime configuration must have conflict", res.hasConflict());
++                        assertFailureMessage(res, ppfe2);
++                    }
++                }
++            } catch (ModelQueryException e) {
++                e.printStackTrace();
++            } catch (ValueDoesNotMatchTypeException e) {
++                e.printStackTrace();
++            } catch (ConfigurationException e) {
++                e.printStackTrace();
++            }
++        }
++        return result;
++    }
++
++    /**
++     * Asserts failure messages for each <code>vars</code>.
++     * 
++     * @param res the reasoning result
++     * @param vars the variables that must cause conflicts
++     */
++    private static void assertFailureMessage(ReasoningResult res, AbstractVariable... vars) {
++        Set<AbstractVariable> check = new HashSet<AbstractVariable>();
++        for (AbstractVariable v : vars) {
++            check.add(v);
++        }
++        for (int m = 0; m < res.getMessageCount(); m++) {
++            Message msg = res.getMessage(m);
++            for (Set<AbstractVariable> s : msg.getConstraintVariables()) {
++                for (AbstractVariable v : s) {
++                    check.remove(v);
++                }
++            }
++        }
++        Assert.assertTrue("No runtime failure found for " + check, check.isEmpty());
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractScenarioTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractScenarioTest.java
+index daed96a..e077207 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractScenarioTest.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractScenarioTest.java
+@@ -28,11 +28,23 @@
+ import net.ssehub.easy.instantiation.java.Registration;
+ import net.ssehub.easy.producer.core.persistence.PersistenceUtils;
+ import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.GeneralMeasures;
++import net.ssehub.easy.reasoning.core.reasoner.IMeasurementKey;
++import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
++import net.ssehub.easy.reasoning.sseReasoner.Measures;
+ import net.ssehub.easy.reasoning.sseReasoner.Reasoner;
+ import net.ssehub.easy.varModel.management.VarModel;
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
++import net.ssehub.easy.varModel.varModel.testSupport.TSVMeasurementCollector;
+ import test.de.uni_hildesheim.sse.vil.buildlang.AbstractTest;
+ import test.de.uni_hildesheim.sse.vil.buildlang.BuildLangTestConfigurer;
+ import test.de.uni_hildesheim.sse.vil.buildlang.ITestConfigurer;
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++import static net.ssehub.easy.reasoning.core.reasoner.AbstractTest.NUM_FULL_REASONING;
+ 
+ /**
+  * Abstract functionality for scenario tests.
+@@ -42,7 +54,78 @@
+ public abstract class AbstractScenarioTest extends AbstractTest<Script> {
+ 
+     protected static boolean debug = false;
++    // enable/switch of instantiation by default, helpful for reasoning performance experiments
++    protected static boolean instantiate = Boolean.valueOf(System.getProperty("easy.scenario.instantiate", "true"));
+ 
++    /**
++     * Test execution modes.
++     * 
++     * @author Holger Eichelberger
++     */
++    protected enum Mode {
++        
++        LOAD(false, false, true),
++        REASON(true, false, true),
++        REASON_NO_MEASURE(true, false, false),
++        INSTANTIATE(false, true, true),
++        REASON_INSTANTIATE(true, true, true);
++        
++        private boolean doReason;
++        private boolean doInstantiate;
++        private boolean doMeasure;
++        
++        /**
++         * Creates a mode.
++         * 
++         * @param doReason do reasoning
++         * @param doInstantiate do instantiation
++         * @param doMeasure do measure
++         */
++        private Mode(boolean doReason, boolean doInstantiate, boolean doMeasure) {
++            this.doReason = doReason;
++            this.doInstantiate = doInstantiate;
++            this.doMeasure = doMeasure;
++        }
++        
++        /**
++         * Returns whether reasoning shall be done.
++         * 
++         * @return <code>true</code> for reasoning, <code>false</code> else
++         */
++        protected boolean doReason() {
++            return doReason;
++        }
++        
++        /**
++         * Returns whether instantiation shall be done.
++         * 
++         * @return <code>true</code> for instantiation, <code>false</code> else
++         */
++        protected boolean doInstantiate() {
++            return doInstantiate;
++        }
++
++        /**
++         * Returns whether measurements shall be done and collected.
++         * 
++         * @return <code>true</code> for measurements, <code>false</code> else
++         */
++        protected boolean doMeasure() {
++            return doMeasure;
++        }
++
++        /**
++         * Returns the run count for this mode.
++         * 
++         * @param runCount the maximum desired run count if measurement is enabled
++         * @return {@code runCount} if {@link #doMeasure}, 1 else
++         */
++        protected int runCount(int runCount) {
++            return doMeasure ? runCount : 1;
++        }
++       
++    }
++    
+     /**
+      * Defines the default model paths (IVML, VIL, VTL).
+      */
+@@ -53,11 +136,35 @@
+      */
+     protected static String[] modelPaths = DEFAULT_MODEL_PATHS;
+     
+-    @Override
+-    protected void furtherInitialization() {
++    protected static final IMeasurementKey[] MEASUREMENTS = AbstractTestDescriptor.concat(
++        Measures.values(), GeneralMeasures.values()); 
++
++    /**
++     * Initializes the reasoner.
++     */
++    static void initializeReasoner() {
+         Reasoner reasoner = new Reasoner();
+         ReasonerFrontend.getInstance().getRegistry().register(reasoner);
+         ReasonerFrontend.getInstance().setReasonerHint(reasoner.getDescriptor());
++        // common measurements
++        AbstractTestDescriptor.registerMeasurementMappings();
++        // SSE reasoner measurements
++        TestDescriptor.registerMeasurementMappings();
++        // see also MEASUREMENTS!
++    }
++    
++    /**
++     * Returns a reasoner instance.
++     * 
++     * @return the instance
++     */
++    protected IReasoner createReasoner() {
++        return new Reasoner();
++    }
++    
++    @Override
++    protected void furtherInitialization() {
++        initializeReasoner();
+         Registration.register();
+         net.ssehub.easy.instantiation.ant.Registration.register();
+         net.ssehub.easy.instantiation.aspectj.Registration.register();
+@@ -78,26 +185,6 @@
+      */
+     protected void configureExecution(String projectName, Map<String, Object> args) {
+     }
+-
+-    /**
+-     * Executes a "real-world" case.
+-     * 
+-     * @param projectName the name of the project
+-     * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
+-     * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
+-     *   corresponds to name) is located in
+-     * @param makeExecutable those files (in relative paths) within the temporary copy of the project to be 
+-     *   made executable
+-     * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
+-     * @return the base directory of the instantiated project
+-     * @throws IOException in case of I/O problems
+-     */
+-    protected File executeCase(String projectName, String[] versions, String caseFolder, 
+-        String sourceProjectName, String... makeExecutable) throws IOException {
+-        String[] names = new String[1];
+-        names[0] = projectName;
+-        return executeCase(names, versions, caseFolder, sourceProjectName, makeExecutable);
+-    }
+     
+     /**
+      * Projects the specified version from <code>versions</code>.
+@@ -110,6 +197,108 @@
+         return null == versions ? null : versions[index];
+     }
+     
++    // checkstyle: stop parameter number check
++
++    /**
++     * Executes a "real-world" case.
++     * 
++     * @param projectName the name of the project
++     * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
++     * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
++     *   corresponds to name) is located in
++     * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
++     * @param mode the testing mode
++     * @return the base directory of the instantiated project
++     * @throws IOException in case of I/O problems
++     */
++    protected File executeCase(String projectName, String[] versions, String caseFolder, 
++        String sourceProjectName, Mode mode) throws IOException {
++        return executeCase(projectName, versions, caseFolder, sourceProjectName, mode, null);
++    }
++    
++    /**
++     * Executes a "real-world" case.
++     * 
++     * @param projectName the name of the project
++     * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
++     * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
++     *   corresponds to name) is located in
++     * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
++     * @param mode the testing mode
++     * @param modifier test modifier instance (may be <b>null</b>)
++     * @return the base directory of the instantiated project
++     * @throws IOException in case of I/O problems
++     */
++    protected File executeCase(String projectName, String[] versions, String caseFolder, 
++        String sourceProjectName, Mode mode, ITestModifier modifier) throws IOException {
++        String[] names = new String[1];
++        names[0] = projectName;
++        return executeCase(names, versions, caseFolder, sourceProjectName, mode, modifier);
++    }
++
++    /**
++     * An instance that may modify certain behavior of a real-world test case on-the-fly.
++     * 
++     * @author Holger Eichelberger
++     */
++    protected interface ITestModifier {
++
++        /**
++         * Called after copying files from a base test template to the actual test folder.
++         * 
++         * @param target the actual test folder
++         */
++        public void postCopy(File target);
++        
++        /**
++         * Returns the (modified) temp folder name (last segment).
++         * 
++         * @param projectName the project name usually used as temp folder name.
++         * @return the temp folder name (last segment)
++         */
++        public String getTempFolderName(String projectName);
++        
++    }
++
++    /**
++     * A Test modifier that makes given files executable.
++     * 
++     * @author Holger Eichelberger
++     */
++    public static class MakeExecutableTestModifier implements ITestModifier {
++        
++        private String[] makeExecutable;
++
++        /**
++         * Creates a modifier with a set of files to be made executable.
++         * 
++         * @param makeExecutable those files (in relative paths) within the temporary copy of the project to be 
++         *   made executable
++         */
++        public MakeExecutableTestModifier(String... makeExecutable) {
++            this.makeExecutable = makeExecutable;
++        }
++        
++        @Override
++        public void postCopy(File target) {
++            if (null != makeExecutable) {
++                for (String fName : makeExecutable) {
++                    File file = new File(target, fName);
++                    if (file.exists()) {
++                        file.setExecutable(true); // don't care for owner as this is intended to run on a temporary copy
++                    }
++                }
++            }
++        }
++
++        @Override
++        public String getTempFolderName(String projectName) {
++            return projectName; // ok
++        }
++        
++    }
++
++    
+     /**
+      * Executes a "real-world" case.
+      * 
+@@ -118,20 +307,37 @@
+      * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
+      * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
+      *   corresponds to name) is located in
+-     * @param makeExecutable those files (in relative paths) within the temporary copy of the project to be 
+-     *   made executable
+      * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
+-     * @return the base directory of the instantiated project
++     * @param mode the testing mode
++     * @return the base directory of the instantiated project (<b>null</b> for no instantiation, i.e., do not assert)
++     * @throws IOException in case of I/O problems
++     */
++    protected File executeCase(String[] names, String[] versions, String caseFolder, String sourceProjectName, 
++        Mode mode) throws IOException {
++        return executeCase(names, versions, caseFolder, sourceProjectName, mode, null);
++    }
++    
++    /**
++     * Executes a "real-world" case.
++     * 
++     * @param names the name of the project, if only one entry the project folder / model name, else project folder 
++     * name, (optional) IVML/VIL model name, (optional) VIL model name
++     * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
++     * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
++     *   corresponds to name) is located in
++     * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
++     * @param mode the testing mode
++     * @param modifier test modifier instance (may be <b>null</b>)
++     * @return the base directory of the instantiated project (<b>null</b> for no instantiation, i.e., do not assert)
+      * @throws IOException in case of I/O problems
+      */
+     protected File executeCase(String[] names, String[] versions, String caseFolder, 
+-        String sourceProjectName, String... makeExecutable) throws IOException {
+-        ProgressObserver observer = ProgressObserver.NO_OBSERVER;
++        String sourceProjectName, Mode mode, ITestModifier modifier) throws IOException {
+         ArtifactFactory.clear();
+         String projectName = names[0];
+         String iModelName = names.length > 1 ? names[1] : projectName;
+         String vModelName = names.length > 2 ? names[2] : iModelName;
+-        File temp = createTempDir(projectName);
++        File temp = createTempDir(null != modifier ? modifier.getTempFolderName(projectName) : projectName);
+         File base = new File(getTestFolder(), caseFolder + projectName);
+         FileUtils.copyDirectory(base, temp);
+         File sourceProjectFolder = null;
+@@ -140,59 +346,137 @@
+             File sBase = new File(getTestFolder(), caseFolder + sourceProjectName);
+             FileUtils.copyDirectory(sBase, sourceProjectFolder);
+         }
+-        makeExecutable(temp, makeExecutable);
++        if (null != modifier) {
++            modifier.postCopy(temp);
++        }
+         File ivmlFolder = getIvmlFolderIn(temp);
+         File vilFolder = getVilFolderIn(temp);
+         File vtlFolder = getVtlFolderIn(temp);
+         activateBuildProperties(vilFolder);
++        System.out.println("Registering model location...");
++        doLocations(ivmlFolder, vilFolder, vtlFolder, true);
++        System.out.println("Loading IVML...");
++        net.ssehub.easy.varModel.model.Project iModel = obtainIvmlModel(iModelName, project(versions, 0), ivmlFolder);
++        Configuration config = assertConfiguration(iModel, mode);
++        File targetFile = null;
++        if (instantiate && mode.doInstantiate()) {
++            File sourceFile = temp.getAbsoluteFile();
++            Project source = createProjectInstance(sourceFile);
++            targetFile = sourceFile;
++            Project target = source; // adjust base below if changed
++            if (null != sourceProjectFolder) {
++                source = createProjectInstance(sourceProjectFolder.getAbsoluteFile());
++            }
++            Map<String, Object> param = new HashMap<String, Object>();
++            Project[] tmp = new Project[1]; // the EASy way to call it
++            tmp[0] = source;
++            param.put(Executor.PARAM_SOURCE, tmp);
++            param.put(Executor.PARAM_TARGET, target);
++            param.put(Executor.PARAM_CONFIG, config);
++            configureExecution(projectName, param);
++            System.out.println("Executing VIL...");
++            TracerFactory current = TracerFactory.getInstance();
++            TracerFactory tFactory = getTracerFactory();
++            TracerFactory.setDefaultInstance(tFactory);
++            Script script = obtainVilModel(vModelName, project(versions, 1), vilFolder);
++            Executor executor = new Executor(script, param);
++            executor.addBase(targetFile);
++            try {
++                executor.execute();
++            } catch (VilException e) {
++                System.out.println(tFactory);
++                e.printStackTrace(System.out);
++                Assert.fail("VIL execution issue " + e);
++            }
++            println(tFactory, debug);
++            TracerFactory.setDefaultInstance(current);
++        }
++        doLocations(ivmlFolder, vilFolder, vtlFolder, false);
++        return targetFile;
++    }
++    
++    /**
++     * Operate on the locations.
++     * 
++     * @param ivmlFolder the IVML folder
++     * @param vilFolder the VIL folder
++     * @param vtlFolder the VTL folder
++     * @param add <code>true</code> for adding as locations, <code>false</code> for removing
++     */
++    private void doLocations(File ivmlFolder, File vilFolder, File vtlFolder, boolean add) {
+         try {
+-            VarModel.INSTANCE.locations().addLocation(ivmlFolder, observer);
+             // those loaders shall already be registered through subclassing AbstractTest
+-            BuildModel.INSTANCE.locations().addLocation(vilFolder, observer);
+-            TemplateModel.INSTANCE.locations().addLocation(vtlFolder, observer);
++            if (add) {
++                VarModel.INSTANCE.locations().addLocation(ivmlFolder, ProgressObserver.NO_OBSERVER);
++                BuildModel.INSTANCE.locations().addLocation(vilFolder, ProgressObserver.NO_OBSERVER);
++                TemplateModel.INSTANCE.locations().addLocation(vtlFolder, ProgressObserver.NO_OBSERVER);
++            } else {
++                VarModel.INSTANCE.locations().removeLocation(ivmlFolder, ProgressObserver.NO_OBSERVER);
++                BuildModel.INSTANCE.locations().removeLocation(vilFolder, ProgressObserver.NO_OBSERVER);
++                TemplateModel.INSTANCE.locations().removeLocation(vtlFolder, ProgressObserver.NO_OBSERVER);
++            }
+         } catch (ModelManagementException e) {
+             Assert.fail("unexpected exception (VIL/VTL): " + e.getMessage());
+         }
+-        net.ssehub.easy.varModel.model.Project iModel = obtainIvmlModel(iModelName, project(versions, 0), ivmlFolder);
+-        Configuration config = new Configuration(new net.ssehub.easy.varModel.confModel.Configuration(iModel));
+-        File sourceFile = temp.getAbsoluteFile();
+-        Project source = createProjectInstance(sourceFile);
+-        File targetFile = sourceFile;
+-        Project target = source; // adjust base below if changed
+-        if (null != sourceProjectFolder) {
+-            source = createProjectInstance(sourceProjectFolder.getAbsoluteFile());
++    }
++
++    // checkstyle: resume parameter number check
++
++    /**
++     * Creates and asserts a VIL configuration and checks the reasoning/propagation result for no conflicts.
++     * 
++     * @param prj the project to create the configuration for
++     * @param mode the testing mode
++     * @return the VIL configuration
++     */
++    protected Configuration assertConfiguration(net.ssehub.easy.varModel.model.Project prj, Mode mode) {
++        System.out.println("Creating VIL configuration...");
++        Configuration config = new Configuration(new net.ssehub.easy.varModel.confModel.Configuration(prj));
++        Assert.assertNotNull("VIL configuration must not be null", config);
++        if (mode.doReason()) {
++            System.out.println("Performing reasoning/propagation...");
++            ReasonerConfiguration rCfg = new ReasonerConfiguration();
++            rCfg.setTimeout(5000); // to be on the safe side
++            TSVMeasurementCollector.ensureCollector(new File(getTestDataDir(), "temp/" + getMeasurementFileName()));
++            ReasoningResult result = null;
++            net.ssehub.easy.varModel.confModel.Configuration cfg = config.getConfiguration();
++            for (int r = 1, n = mode.runCount(NUM_FULL_REASONING); r <= n; r++) {
++                String id = mode.doMeasure() ? MeasurementCollector.start(cfg, "SCENARIO", r) : null;
++                ReasoningResult res = ReasonerFrontend.getInstance().propagate(prj, 
++                    cfg.getConfiguration(), rCfg, ProgressObserver.NO_OBSERVER);
++                if (null != id) {
++                    MeasurementCollector.endAuto(id);
++                    net.ssehub.easy.reasoning.core.reasoner.AbstractTest.transferReasoningMeasures(
++                        MeasurementCollector.getInstance(), id, getMeasurements(), res);
++                    MeasurementCollector.end(id);
++                }
++                if (n > 1) {
++                    // we want to cause multiple reasoner calls, not re-reasoning on the same configuration here
++                    cfg = new net.ssehub.easy.varModel.confModel.Configuration(prj);
++                }
++                result = null == result ? res : result;
++            }
++            result.logInformation(prj, rCfg);
++            Assert.assertFalse("Reasoning must not have a conflict", result.hasConflict());
+         }
+-        Map<String, Object> param = new HashMap<String, Object>();
+-        Project[] tmp = new Project[1]; // the EASy way to call it
+-        tmp[0] = source;
+-        param.put(Executor.PARAM_SOURCE, tmp);
+-        param.put(Executor.PARAM_TARGET, target);
+-        param.put(Executor.PARAM_CONFIG, config);
+-        configureExecution(projectName, param);
+-        
+-        TracerFactory current = TracerFactory.getInstance();
+-        TracerFactory tFactory = getTracerFactory();
+-        TracerFactory.setDefaultInstance(tFactory);
+-        Script script = obtainVilModel(vModelName, project(versions, 1), vilFolder);
+-        Executor executor = new Executor(script, param);
+-        executor.addBase(targetFile);
+-        try {
+-            executor.execute();
+-        } catch (VilException e) {
+-            System.out.println(tFactory);
+-            e.printStackTrace(System.out);
+-            Assert.fail("VIL execution issue " + e);
+-        }
+-        println(tFactory, debug);
+-        TracerFactory.setDefaultInstance(current);
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(ivmlFolder, observer);
+-            BuildModel.INSTANCE.locations().removeLocation(vilFolder, observer);
+-            TemplateModel.INSTANCE.locations().removeLocation(vtlFolder, observer);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("unexpected exception: " + e.getMessage());
+-        }
+-        return targetFile;
++        return config;
++    }
++    
++    /**
++     * Returns the name of the measurement file.
++     * 
++     * @return the name of the measurement file
++     */
++    protected abstract String getMeasurementFileName();
++
++    /**
++     * Returns the measurements to be collected for the measurement collector.
++     * Requires registration of measurement keys!
++     * 
++     * @return the measurements
++     */
++    protected IMeasurementKey[] getMeasurements() {
++        return MEASUREMENTS;
+     }
+ 
+     /**
+@@ -338,23 +622,6 @@
+             Assert.fail("unexpected exeption: " + e);
+         }
+         return result;
+-    }
+-    
+-    /**
+-     * Make the given files (relative to <code>base</code>) executable.
+-     * 
+-     * @param base the base directory
+-     * @param makeExecutable a set of relative files (may be <b>null</b>)
+-     */
+-    private static void makeExecutable(File base, String[] makeExecutable) {
+-        if (null != makeExecutable) {
+-            for (String fName : makeExecutable) {
+-                File file = new File(base, fName);
+-                if (file.exists()) {
+-                    file.setExecutable(true); // don't care for owner as this is intended to run on a temporary copy
+-                }
+-            }
+-        }
+     }
+     
+     /**
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AllTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AllTests.java
+index 45348a3..abeaea1 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AllTests.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AllTests.java
+@@ -9,6 +9,12 @@
+  * @author Holger Eichelberger
+  */
+ @RunWith(Suite.class)
+-@Suite.SuiteClasses({ RealTests.class, DynamicFreezeTest.class, ConceptsTests.class, ExperimentsTests.class })
++@Suite.SuiteClasses({ 
++    ScenarioRampUpTest.class, // must be first
++    RealTests.class, 
++    DynamicFreezeTest.class, 
++    ConceptsTests.class, 
++    ExperimentsTests.class, 
++    ExperimentsControlTests.class})
+ public class AllTests {
+ }
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ConceptsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ConceptsTests.java
+index ac42363..a351008 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ConceptsTests.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ConceptsTests.java
+@@ -48,7 +48,7 @@
+  * 
+  * @author Holger Eichelberger
+  */
+-public class ConceptsTests extends AbstractScenarioTest {
++public class ConceptsTests extends AbstractEasyScenarioTest {
+ 
+     @Override
+     protected File getTestFolder() {
+@@ -270,6 +270,7 @@
+             rf.getRegistry().register(new net.ssehub.easy.reasoning.sseReasoner.Reasoner());
+         }
+         ReasoningResult res = rf.propagate(ivmlModel, config, rCfg, ProgressObserver.NO_OBSERVER);
++        res.logInformation(ivmlModel, rCfg);
+         if (success) { 
+             Assert.assertFalse("The configuration for " + modelName + " shall be free of conflicts", res.hasConflict());
+         } else {
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/DynamicFreezeTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/DynamicFreezeTest.java
+index dce734a..3a765b2 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/DynamicFreezeTest.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/DynamicFreezeTest.java
+@@ -69,7 +69,7 @@
+  * @author El-Sharkawy
+  *
+  */
+-public class DynamicFreezeTest extends AbstractScenarioTest {
++public class DynamicFreezeTest extends AbstractEasyScenarioTest {
+ 
+     /**
+      * This modifier is used to freeze all relevant declarations inside the CFG projects of Qualimaster.
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsControlTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsControlTests.java
+new file mode 100644
+index 0000000..1fe8da9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsControlTests.java
+@@ -0,0 +1,418 @@
++package net.ssehub.easy.producer.scenario_tests;
++
++import java.io.File;
++import java.io.IOException;
++import java.util.List;
++
++import org.junit.AfterClass;
++import org.junit.Assert;
++import org.junit.BeforeClass;
++import org.junit.Ignore;
++import org.junit.Test;
++
++import net.ssehub.easy.basics.progress.ProgressObserver;
++import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
++import net.ssehub.easy.reasoning.core.reasoner.Message;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.model.AbstractVariable;
++import net.ssehub.easy.varModel.model.IvmlException;
++import net.ssehub.easy.varModel.model.ModelQuery;
++import net.ssehub.easy.varModel.model.ModelQueryException;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.datatypes.IResolutionScope;
++import net.ssehub.easy.varModel.model.values.CompoundValue;
++import net.ssehub.easy.varModel.model.values.ContainerValue;
++import net.ssehub.easy.varModel.model.values.IntValue;
++import net.ssehub.easy.varModel.model.values.NullValue;
++import net.ssehub.easy.varModel.model.values.Value;
++import net.ssehub.easy.varModel.persistency.IVMLWriter;
++import test.de.uni_hildesheim.sse.AbstractTest;
++
++/**
++ * A test class for blackbox testing parser and type resolution of 
++ * IVML files contributed from "external" sources. These are basically IVML tests, which 
++ * cannot be executed in IVML.tests as the reasoner dependency is not available there. 
++ * 
++ * @author Holger Eichelberger
++ */
++public class ExperimentsControlTests extends AbstractTest {
++
++    /**
++     * Creates a file in {@link #getTestDataDir()}.
++     * 
++     * @param name
++     *            the name of the file (excluding ".ivml")
++     * @return the file
++     */
++    private static final File createFile(String name) {
++        return new File(getTestDataDir(), "experiments/control/" + name + ".ivml");
++    }
++    
++    /**
++     * Initializes the test.
++     */
++    @BeforeClass
++    public static void startUp() {
++        setTestDataDir("easy_producer.scenarios.testdata.home");
++        AbstractTest.startUp();
++        AbstractScenarioTest.initializeReasoner();
++        IVMLWriter.setUseIvmlWhitespace(true);
++    }
++
++    /**
++     * Shuts down the test.
++     */
++    @AfterClass
++    public static void shutDown() {
++        AbstractTest.shutDown();
++        setTestDataDir(TESTDATA_SYSTEM_PROPERTY);
++    }
++
++    /**
++     * Creates a file name, obtains the the project, asserts equality, creates a configuration and returns
++     * the configuration.
++     * 
++     * @param name the name of the project
++     * @return the configuration
++     * @throws IOException in case that loading fails
++     */
++    private Configuration createAndAssertEqual(String name) throws IOException {
++        List<Project> prj = assertEqual(createFile(name), null, null);
++        Assert.assertTrue(null != prj && 1 == prj.size());
++        Project project = prj.get(0);
++        Assert.assertNotNull(project);
++        return new Configuration(project);
++    }
++    
++    /**
++     * Asserts and returns a decision variable.
++     * 
++     * @param config the configuration to read from
++     * @param name the name of the variable
++     * @return the variable if it exists
++     * @throws ModelQueryException if finding the variable fails
++     */
++    private IDecisionVariable assertDecisionVariable(Configuration config, String name) throws ModelQueryException {
++        AbstractVariable decl = ModelQuery.findVariable(config.getProject(), name, null);
++        Assert.assertNotNull(decl);
++        IDecisionVariable var = config.getDecision(decl);
++        Assert.assertNotNull(var);
++        return var;
++    }
++
++    /**
++     * Asserts an enumeration value.
++     * 
++     * @param scope the scope to search the expected value within
++     * @param expected the (qualified) expected value as a string (may be <b>null</b>, requiring that 
++     *     <code>value</code> is also <b>null</b>)
++     * @param value the actual value
++     * @throws ModelQueryException if querying the model for <code>expected</code> failed
++     * @throws IvmlException if creating the value for <code>expected</code> failed
++     */
++    private static void assertEnumValue(IResolutionScope scope, String expected, Value value) 
++        throws ModelQueryException, IvmlException {
++        if (null == expected) {
++            Assert.assertTrue(value == null || NullValue.INSTANCE == value);
++        } else {
++            Value enumVal = ModelQuery.enumLiteralAsValue(scope, expected);
++            Assert.assertEquals(enumVal, value);
++        }
++    }
++
++    /**
++     * Asserts an enumeration value.
++     * 
++     * @param config the configuration to take the value/scope from
++     * @param expected the (qualified) expected value as a string (may be <b>null</b>, requiring that 
++     *     the value of <code>slot</code> is also <b>null</b>)
++     * @param value the actual compound value
++     * @param slot the slot within <code>value</code> to test for
++     * @throws ModelQueryException if querying the model for <code>expected</code> failed
++     * @throws IvmlException if creating the value for <code>expected</code> failed
++     */
++    private static void assertEnumValue(Configuration config, String expected, CompoundValue value, String slot) 
++        throws ModelQueryException, IvmlException {
++        assertEnumValue(config.getProject(), expected, value.getNestedValue(slot));
++    }
++
++    /**
++     * Asserts an integer value.
++     * 
++     * @param config the configuration to take the value/scope from
++     * @param expected the (qualified) expected value (may be <b>null</b>, requiring that 
++     *     the value of <code>slot</code> is also <b>null</b>)
++     * @param value the actual compound value
++     * @param slot the slot within <code>value</code> to test for
++     */
++    private static void assertIntValue(Configuration config, Integer expected, CompoundValue value, String slot) {
++        Value val = value.getNestedValue(slot);
++        if (null == expected) {
++            Assert.assertNull(val);
++        } else {
++            Assert.assertTrue(val instanceof IntValue);
++            Assert.assertEquals(expected, ((IntValue) val).getValue()); 
++        }
++    }
++
++    /**
++     * Tests variant models with same variables/expected results like "defaults1".
++     * 
++     * @param name the name of the model/file
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    private void testDefaults(String name) throws IOException, ModelQueryException, IvmlException {
++        Configuration config = createAndAssertEqual(name);
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
++        ReasoningResult res = doReasoning(config, rConfig);
++        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
++        //Configuration.printConfig(System.out, config);
++
++        IDecisionVariable da1 = assertDecisionVariable(config, "a1");
++        IDecisionVariable da2 = assertDecisionVariable(config, "a2");
++        CompoundValue v1 = (CompoundValue) da1.getValue();
++        CompoundValue v2 = (CompoundValue) da2.getValue();
++
++        assertEnumValue(config, "Kind.kind1", v1, "produces");
++        assertEnumValue(config, null, v1, "consumes");
++        assertIntValue(config, null, v1, "count");
++        assertEnumValue(config, null, v2, "produces");
++        assertEnumValue(config, "Kind.kind2", v2, "consumes");
++        assertIntValue(config, null, v2, "count");
++
++        IDecisionVariable dr1 = assertDecisionVariable(config, "r1");
++        IDecisionVariable dw1 = assertDecisionVariable(config, "w1");
++        CompoundValue w1 = (CompoundValue) dw1.getValue();
++        CompoundValue r1 = (CompoundValue) dr1.getValue();
++
++        assertEnumValue(config, "Kind.kind1", r1, "produces");
++        assertEnumValue(config, null, r1, "consumes");
++        assertIntValue(config, 5, r1, "count");
++        assertEnumValue(config, null, w1, "produces");
++        assertEnumValue(config, "Kind.kind2", w1, "consumes");
++        assertIntValue(config, 10, w1, "count");
++        
++        IDecisionVariable dseq = assertDecisionVariable(config, "seq");
++        ContainerValue seq = (ContainerValue) dseq.getValue();
++        Assert.assertEquals(2, seq.getElementSize());
++        CompoundValue s1 = (CompoundValue) seq.getElement(0);
++        CompoundValue s2 = (CompoundValue) seq.getElement(1);
++
++        assertEnumValue(config, "Kind.kind1", s1, "produces");
++        assertEnumValue(config, null, s1, "consumes");
++        assertIntValue(config, 6, s1, "count");
++        assertEnumValue(config, null, s2, "produces");
++        assertEnumValue(config, "Kind.kind2", s2, "consumes");
++        assertIntValue(config, 7, s2, "count");
++    }
++    
++    /**
++     * Tests "defaults1". Uses simple constraints.
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void testControlDefaults1() throws IOException, ModelQueryException, IvmlException {
++        testDefaults("defaults1");
++    }
++
++    /**
++     * Tests "defaults2". Uses shadowed slots.
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void testControlDefaults2() throws IOException, ModelQueryException, IvmlException {
++        testDefaults("defaults2");
++    }
++
++    /**
++     * Tests "defaults3". This has not completely the same semantics as "defaults1" as slots
++     * are not uninitialized (Java <b>null</b>) rather than containing the {@link NullValue#INSTANCE IVML null}.
++     * Uses assigning dynamic-dispatch user-defined operations.
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void testControlDefaults3() throws IOException, ModelQueryException, IvmlException {
++        testDefaults("defaults3");
++    }
++
++    /**
++     * Tests "defaults4". Uses assigning dynamic-dispatch user-defined operations.
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void testControlDefaults4() throws IOException, ModelQueryException, IvmlException {
++        testDefaults("defaults4");
++    }
++
++    /**
++     * Tests inherited sub-constraints enabled/disabled through default values (from QM).
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Test
++    public void testSub() throws IOException, ModelQueryException, IvmlException {
++        Configuration config = createAndAssertEqual("configSub");
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
++        ReasoningResult res = doReasoning(config, rConfig);
++        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
++    }
++    
++    /**
++     * A simple control file test (contributed by M. Keunecke).
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Test
++    public void simpleTest() throws IOException, ModelQueryException, IvmlException {
++        Configuration config = createAndAssertEqual("simple/Einfache_Steuerdatei_0");
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
++        ReasoningResult res = doReasoning(config, rConfig);
++        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
++    }
++
++    /**
++     * A test for an existence quantor in a user defined operation utilized by an all quantor (contributed by 
++     * M. Keunecke).
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Test
++    public void existsTest() throws IOException, ModelQueryException, IvmlException {
++        Configuration config = createAndAssertEqual("exists/BaseSD_0");
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
++        ReasoningResult res = doReasoning(config, rConfig);
++        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
++    }
++
++    /**
++     * A test for an asymmetric quantor relation (contributed by M. Keunecke).
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void asymmetricTest() throws IOException, ModelQueryException, IvmlException {
++        Configuration config = createAndAssertEqual("assymetric/ActivityGraph2Configuration_0");
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
++        ReasoningResult res = doReasoning(config, rConfig);
++        // dependenciesAntisymmetry does not fit configuration!
++        Assert.assertTrue("there should be reasoning conflicts", res.hasConflict());
++        Assert.assertEquals(1, res.getMessageCount());
++        Message msg = res.getMessage(0);
++        boolean found = false;
++        for (IDecisionVariable v : msg.getNamedConstraintVariables()) {
++            found |= v.getDeclaration().getName().equals("dependenciesAntisymmetry");
++        }
++        Assert.assertTrue("Constraint dependenciesAntisymmetry shall fail", found);
++    }
++
++    /**
++     * A test for a failing activity graph configuration (contributed by M. Keunecke, J. Hagedorn).
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void activityTestFail() throws IOException, ModelQueryException, IvmlException {
++        Configuration config = createAndAssertEqual("activity/ActivityGraphConfiguration_0");
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
++        ReasoningResult res = doReasoning(config, rConfig);
++        // checkSheetAfterReadSheets does not fit configuration!
++        for (int m = 0; m < res.getMessageCount(); m++) {
++            System.out.println(res.getMessage(m));
++        }
++        Assert.assertTrue("there should be reasoning conflicts", res.hasConflict());
++    }
++
++    /**
++     * A test for a succeeding activity graph configuration (contributed by M. Keunecke, J. Hagedorn).
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     * @throws IvmlException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void activityTest() throws IOException, ModelQueryException, IvmlException {
++        Configuration config = createAndAssertEqual("activity/ActivityGraphConfiguration_1");
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
++        ReasoningResult res = doReasoning(config, rConfig);
++        // dependenciesAntisymmetry does not fit configuration!
++        for (int m = 0; m < res.getMessageCount(); m++) {
++            System.out.println(res.getMessage(m));
++        }
++        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
++    }
++    
++    /**
++     * Performs the reasoning.
++     * 
++     * @param cfg the configuration
++     * @param rConfig the reasoner configuration
++     * @return the reasoning result
++     */
++    private ReasoningResult doReasoning(Configuration cfg, ReasonerConfiguration rConfig) {
++        ReasoningResult res = ReasonerFrontend.getInstance().propagate(cfg.getProject(), cfg, rConfig, 
++            ProgressObserver.NO_OBSERVER);
++        res.logInformation(cfg.getProject(), rConfig);
++        return res;
++    }
++
++    @Override
++    protected boolean checkWriteback(File file) {
++        return false;
++    }
++
++    /**
++     * Tests a quantified type expression (contributed by M. Keunecke, J. Hagedorn).
++     * 
++     * @throws IOException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void typeTest() throws IOException {
++        Configuration config = createAndAssertEqual("types/Testprodukt_0");
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        ReasoningResult res = doReasoning(config, rConfig);
++        Assert.assertTrue("there should be reasoning conflicts", res.hasConflict());
++    }
++    
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsTests.java
+index 3306ee5..1c75891 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsTests.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsTests.java
+@@ -28,7 +28,7 @@
+  * 
+  * @author Holger Eichelberger
+  */
+-public class ExperimentsTests extends AbstractScenarioTest {
++public class ExperimentsTests extends AbstractEasyScenarioTest {
+ 
+     private static ExperimentsTests tests;
+     
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalConceptsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalConceptsTests.java
+index 5aca03d..a786383 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalConceptsTests.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalConceptsTests.java
+@@ -19,9 +19,13 @@
+ 
+ import org.junit.After;
+ import org.junit.Before;
++import org.junit.Ignore;
+ import org.junit.Test;
+ 
+ import net.ssehub.easy.basics.modelManagement.ModelManagementException;
++import net.ssehub.easy.basics.progress.ProgressObserver;
++import net.ssehub.easy.producer.core.persistence.PersistenceUtils;
++import net.ssehub.easy.producer.core.persistence.standard.Persistencer;
+ 
+ /**
+  * Tests that cannot be executed on Jenkins by now.
+@@ -38,6 +42,7 @@
+     @Before
+     public void startup() throws ModelManagementException {
+         super.startup();
++        PersistenceUtils.loadDefaultModels(Persistencer.class.getClassLoader(), ProgressObserver.NO_OBSERVER, null);
+     }
+ 
+     /**
+@@ -54,6 +59,7 @@
+      * Tests availability of IVML default library. Basically the same test as for EASy core
+      * but here without initializing the full EASy core.
+      */
++    @Ignore("IVML")
+     @Test
+     public void testDefaultLib() {
+         HashMap<String, Object> expected = new HashMap<String, Object>();
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalExperimentsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalExperimentsTests.java
+index 32e4218..3ab0529 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalExperimentsTests.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalExperimentsTests.java
+@@ -349,44 +349,47 @@
+         TimeTracerFactory factory = new TimeTracerFactory();
+         TracerFactory.setInstance(factory);
+         //TracerFactory.setInstance(new ConsoleTracerFactory(true));
+-        File tmp = executeCase("xmlExperiments", null, "", null);
+-        File expected = new File(tmp, "GenTopoHardwareCorrelationFinancialPom.xml");
+-        TextTestUtils.assertFileEquality(new File(tmp, "hwAlg.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "hwAlg1.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "hwAlg2.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "hwAlg3.xml"), expected);
++        // no reasoning: we just need specific structures/values
++        File tmp = executeCase("xmlExperiments", null, "", null, Mode.INSTANTIATE);
++        if (null != tmp) {
++            File expected = new File(tmp, "GenTopoHardwareCorrelationFinancialPom.xml");
++            TextTestUtils.assertFileEquality(new File(tmp, "hwAlg.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "hwAlg1.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "hwAlg2.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "hwAlg3.xml"), expected);
++    
++            expected = new File(tmp, "InterfacesPom.xml");
++            TextTestUtils.assertFileEquality(new File(tmp, "ifPom.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "ifPom1.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "ifPom2.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "ifPom3.xml"), expected);
++    
++            expected = new File(tmp, "pipelinePom.xml");
++            TextTestUtils.assertFileEquality(new File(tmp, "pip.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "pip1.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "pip2.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "pip3.xml"), expected);
++            
++            expected = new File(tmp, "pipelines.xml");
++            TextTestUtils.assertFileEquality(new File(tmp, "pips.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "pips1.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "pips2.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "pips3.xml"), expected);
++            
++            expected = new File(tmp, "ModelGenPom.xml");
++            TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom1.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom2.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom3.xml"), expected);
++    
++            expected = new File(tmp, "pipSettings.xml");
++            TextTestUtils.assertFileEquality(new File(tmp, "set.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "set1.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "set2.xml"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "set3.xml"), expected);
+ 
+-        expected = new File(tmp, "InterfacesPom.xml");
+-        TextTestUtils.assertFileEquality(new File(tmp, "ifPom.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "ifPom1.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "ifPom2.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "ifPom3.xml"), expected);
+-
+-        expected = new File(tmp, "pipelinePom.xml");
+-        TextTestUtils.assertFileEquality(new File(tmp, "pip.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "pip1.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "pip2.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "pip3.xml"), expected);
+-        
+-        expected = new File(tmp, "pipelines.xml");
+-        TextTestUtils.assertFileEquality(new File(tmp, "pips.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "pips1.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "pips2.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "pips3.xml"), expected);
+-        
+-        expected = new File(tmp, "ModelGenPom.xml");
+-        TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom1.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom2.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom3.xml"), expected);
+-
+-        expected = new File(tmp, "pipSettings.xml");
+-        TextTestUtils.assertFileEquality(new File(tmp, "set.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "set1.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "set2.xml"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "set3.xml"), expected);
+-        
+-        factory.printResults();
++            factory.printResults();
++        }
+     }
+ 
+     /**
+@@ -396,72 +399,74 @@
+      */
+     @Test
+     public void testJava() throws IOException {
+-        File tmp = executeCase("javaExperiments", null, "", null);
+-
+-        File expected = new File(tmp, "FCorrelationFinancial.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "fcFam.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "fcFam0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "fcFam1.java"), expected);
+-
+-        expected = new File(tmp, "IFCorrelationFinancial.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "fcFamI.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "fcFamI0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "fcFamI1.java"), expected);
+-
+-        expected = new File(tmp, "IPriorityDataSink.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnk.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnk0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnk1.java"), expected);
+-
+-        expected = new File(tmp, "PriorityDataSink.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnkI.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnkI0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnkI1.java"), expected);
+-
+-        expected = new File(tmp, "PriorityDataSinkProfiling.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP1.java"), expected);
+-        
+-        expected = new File(tmp, "ISpringFinancialData.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrc.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrc0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrc1.java"), expected);
+-        
+-        expected = new File(tmp, "SpringFinancialData.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrcI.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrcI0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrcI1.java"), expected);
+-        
+-        expected = new File(tmp, "SpringFinancialDataProfiling.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP1.java"), expected);
+-
+-        expected = new File(tmp, "SpringFinancialDataProfilingImpl.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI1.java"), expected);
+-
+-        expected = new File(tmp, "SerializationRegistry.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "serReg.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "serReg0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "serReg1.java"), expected);
+-
+-        expected = new File(tmp, "FCorrelationFinancialSerializers.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor1.java"), expected);
+-        
+-        expected = new File(tmp, "GenTopoHardwareFinancialCorrReceiver.cpp");
+-        TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver.cpp"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver0.cpp"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver1.cpp"), expected);
+-
+-        expected = new File(tmp, "GenTopoHardwareFinancialCorrSender.cpp");
+-        TextTestUtils.assertFileEquality(new File(tmp, "FCorSender.cpp"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "FCorSender0.cpp"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "FCorSender1.cpp"), expected);
++        // no reasoning: we just need specific structures/values
++        File tmp = executeCase("javaExperiments", null, "", null, Mode.INSTANTIATE); 
++        if (null != tmp) {
++            File expected = new File(tmp, "FCorrelationFinancial.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "fcFam.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "fcFam0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "fcFam1.java"), expected);
++    
++            expected = new File(tmp, "IFCorrelationFinancial.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "fcFamI.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "fcFamI0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "fcFamI1.java"), expected);
++    
++            expected = new File(tmp, "IPriorityDataSink.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnk.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnk0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnk1.java"), expected);
++    
++            expected = new File(tmp, "PriorityDataSink.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnkI.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnkI0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnkI1.java"), expected);
++    
++            expected = new File(tmp, "PriorityDataSinkProfiling.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP1.java"), expected);
++            
++            expected = new File(tmp, "ISpringFinancialData.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrc.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrc0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrc1.java"), expected);
++            
++            expected = new File(tmp, "SpringFinancialData.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrcI.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrcI0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrcI1.java"), expected);
++            
++            expected = new File(tmp, "SpringFinancialDataProfiling.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP1.java"), expected);
++    
++            expected = new File(tmp, "SpringFinancialDataProfilingImpl.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI1.java"), expected);
++    
++            expected = new File(tmp, "SerializationRegistry.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "serReg.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "serReg0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "serReg1.java"), expected);
++    
++            expected = new File(tmp, "FCorrelationFinancialSerializers.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor1.java"), expected);
++            
++            expected = new File(tmp, "GenTopoHardwareFinancialCorrReceiver.cpp");
++            TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver.cpp"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver0.cpp"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver1.cpp"), expected);
++    
++            expected = new File(tmp, "GenTopoHardwareFinancialCorrSender.cpp");
++            TextTestUtils.assertFileEquality(new File(tmp, "FCorSender.cpp"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "FCorSender0.cpp"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "FCorSender1.cpp"), expected);
++        }
+     }
+ 
+     /**
+@@ -479,11 +484,14 @@
+         names[1] = "javaExperiments";
+         names[2] = "javaExperimentsDebug";
+ 
+-        File tmp = executeCase(names, null, "", null);
+-        File expected = new File(tmp, "PriorityPip_DataManagementElement0DataManagementElement.java");
+-        TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME0.java"), expected);
+-        TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME1.java"), expected);
++        // no reasoning: we just need specific structures/values
++        File tmp = executeCase(names, null, "", null, Mode.INSTANTIATE); 
++        if (null != tmp) {
++            File expected = new File(tmp, "PriorityPip_DataManagementElement0DataManagementElement.java");
++            TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME0.java"), expected);
++            TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME1.java"), expected);
++        }
+     }
+ 
+ }
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalRealTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalRealTests.java
+index 00cf8a2..88c1b19 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalRealTests.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalRealTests.java
+@@ -31,30 +31,31 @@
+         
+         String projectName = "PL_WMS_Platform";
+         File base = executeIndenicaCase(projectName, "0", "0");
+-        Assert.assertNotNull(projectName + " execution failed, thus no base file available", base);
+-
++        if (null != base) {
++            Assert.assertNotNull(projectName + " execution failed, thus no base file available", base);
++    
++            /*
++            String springConfigName = "Web.config";
++            String springConfigInstance = "WMSsolutionProduct/StorageBinSearchService/" + springConfigName;
++            assertFileEquality(new File(base, springConfigInstance),
++                new File(base, "expected_results/" + springConfigName));
++            
++            String dbCreationName = "1CreateDatabaseAndTables.sql";
++            String dbCreationInstance = "WMSsolutionProduct/Config_Resources/" + dbCreationName;
++            assertFileEquality(new File(base, dbCreationInstance),new File(base, "expected_results/" + dbCreationName));
++            
++            String dbDataName = "2InsertExampleData.sql";
++            String dbDataInstance = "WMSsolutionProduct/Config_Resources/" + dbDataName;
++            assertFileEquality(new File(base, dbDataInstance), new File(base, "expected_results/" + dbDataName));
++            
++            String orMapperName = "mapperfragment.xml";
++            String orMapperInstance = "WMSsolutionProduct/Config_Resources/" + orMapperName;
++            assertFileEquality(new File(base, orMapperInstance), new File(base, "expected_results/" + orMapperName));
++            
++            FileUtils.deleteQuietly(base);
++            */
++        }
+         debug = false; // remove if working
+-
+-        /*
+-        String springConfigName = "Web.config";
+-        String springConfigInstance = "WMSsolutionProduct/StorageBinSearchService/" + springConfigName;
+-        assertFileEquality(new File(base, springConfigInstance),
+-            new File(base, "expected_results/" + springConfigName));
+-        
+-        String dbCreationName = "1CreateDatabaseAndTables.sql";
+-        String dbCreationInstance = "WMSsolutionProduct/Config_Resources/" + dbCreationName;
+-        assertFileEquality(new File(base, dbCreationInstance), new File(base, "expected_results/" + dbCreationName));
+-        
+-        String dbDataName = "2InsertExampleData.sql";
+-        String dbDataInstance = "WMSsolutionProduct/Config_Resources/" + dbDataName;
+-        assertFileEquality(new File(base, dbDataInstance), new File(base, "expected_results/" + dbDataName));
+-        
+-        String orMapperName = "mapperfragment.xml";
+-        String orMapperInstance = "WMSsolutionProduct/Config_Resources/" + orMapperName;
+-        assertFileEquality(new File(base, orMapperInstance), new File(base, "expected_results/" + orMapperName));
+-        
+-        FileUtils.deleteQuietly(base);
+-        */
+     }
+ 
+     /**
+@@ -65,8 +66,10 @@
+     @Test
+     public void testQualiMasterApril14() throws IOException {
+         String[] versions = {"0", "0"};
+-        File base = executeCase("april14", versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        File base = executeCase("april14", versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+     
+     /**
+@@ -77,7 +80,7 @@
+      */
+     @Test
+     public void testQualiMasterFeb17() throws IOException {
+-        testQualiMasterFeb17Impl();
++        testQualiMasterFeb17Impl(Mode.REASON_INSTANTIATE);
+     }
+     
+     /**
+@@ -88,7 +91,7 @@
+      */
+     @Test
+     public void testQualiMasterSep17() throws IOException {
+-        testQualiMasterFeb17Impl();
++        testQualiMasterSep17Impl(Mode.REASON_INSTANTIATE);
+     }
+-
++    
+ }
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalTests.java
+index 7e541e1..1c93275 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalTests.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalTests.java
+@@ -10,7 +10,12 @@
+  * @author Holger Eichelberger
+  */
+ @RunWith(Suite.class)
+-@Suite.SuiteClasses({LocalRealTests.class, DynamicFreezeTest.class, LocalConceptsTests.class, 
+-    LocalExperimentsTests.class })
++@Suite.SuiteClasses({
++    ScenarioRampUpTest.class, // must be first
++    LocalRealTests.class, 
++    DynamicFreezeTest.class, 
++    LocalConceptsTests.class, 
++    LocalExperimentsTests.class, 
++    ExperimentsControlTests.class})
+ public class LocalTests {
+ }
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/MeasurementTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/MeasurementTests.java
+new file mode 100644
+index 0000000..bf24b42
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/MeasurementTests.java
+@@ -0,0 +1,16 @@
++package net.ssehub.easy.producer.scenario_tests;
++
++import org.junit.runner.RunWith;
++import org.junit.runners.Suite;
++
++/**
++ * Test Suite, which starts all measurement test cases including local ones. 
++ * 
++ * @author Holger Eichelberger
++ */
++@RunWith(Suite.class)
++@Suite.SuiteClasses({
++    ScenarioRampUpTest.class, // must be first
++    RealMeasurementsTests.class})
++public class MeasurementTests {
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RampUpTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RampUpTest.java
+new file mode 100644
+index 0000000..2dfcdac
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RampUpTest.java
+@@ -0,0 +1,65 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.producer.scenario_tests;
++
++import java.io.File;
++import java.io.IOException;
++
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.basics.progress.ProgressObserver;
++import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.cst.CSTSemanticException;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++
++/**
++ * A Scenario ramp-up test.
++ * 
++ * @author Holger Eichelberger
++ */
++public class RampUpTest extends AbstractEasyScenarioTest {
++
++    @Override
++    protected File getTestFolder() {
++        return null;
++    }
++
++    /**
++     * Performs the ram-up test.
++     * 
++     * @throws ConfigurationException if setting an expression as default value fails
++     * @throws ValueDoesNotMatchTypeException if a value does not match a type
++     * @throws CSTSemanticException if a constraint is erroneously composed
++     * @throws IOException if loading a model fails
++     */
++    @Test
++    public void rampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
++        CSTSemanticException, IOException {
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        Configuration cfg = net.ssehub.easy.reasoning.core.reasoner.RampUpTest.createRampUpTest();
++        IReasoner reasoner = createReasoner();
++        // NO MEASUREMENT!!!
++        ReasoningResult rResult = reasoner.propagate(cfg.getProject(), cfg, rConfig, ProgressObserver.NO_OBSERVER);
++        rResult.logInformation(cfg.getProject(), rConfig);
++        Assert.assertFalse(rResult.hasConflict());
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealMeasurementsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealMeasurementsTests.java
+new file mode 100644
+index 0000000..98a29f0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealMeasurementsTests.java
+@@ -0,0 +1,163 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.producer.scenario_tests;
++
++import java.io.File;
++import java.io.IOException;
++
++import org.apache.commons.io.FileUtils;
++import org.junit.AfterClass;
++import org.junit.BeforeClass;
++import org.junit.Test;
++
++/**
++ * Tests for experiments only. Can be forced to run in an own JVM.
++ */
++public class RealMeasurementsTests extends AbstractRealTests {
++
++    private static RealMeasurementsTests tests;
++
++    /**
++     * Starts up the test.
++     */
++    @BeforeClass
++    public static void startUp() {
++        tests = new RealMeasurementsTests();
++        tests.cleanTemp();
++    }
++
++    /**
++     * Tears down the test.
++     */
++    @AfterClass
++    public static void shutDown() {
++        if (!debug && null != tests) {
++            tests.cleanTemp();
++            tests = null;
++        }
++    }
++    
++    @Override
++    protected String getMeasurementFileName() {
++        return "measurements-scenarioVariants.tsv";
++    }
++    
++    @Override
++    protected File getTestFolder() {
++        return new File(getTestDataDir(), "real");
++    }
++
++    
++    /**
++     * Modifies a QM test by enabling a specified variant of the pipelines configuration file.
++     * 
++     * @author Holger Eichelberger
++     */
++    private static class QMTestModifier implements ITestModifier {
++
++        private int variantNr;
++        private File target;
++        
++        @Override
++        public void postCopy(File target) {
++            this.target = target;
++            copy(new File(target, "variants/PipelinesCfg_" + variantNr + ".ivml"), 
++                new File(target, "EASy/pipelines/PipelinesCfg.ivml"));
++            copy(new File(target, "variants/InfrastructureCfg_" + variantNr + ".ivml"), 
++                new File(target, "EASy/infrastructure/InfrastructureCfg.ivml"));
++            copy(new File(target, "variants/AlgorithmsCfg_" + variantNr + ".ivml"), 
++                new File(target, "EASy/infrastructure/AlgorithmsCfg.ivml"));
++            copy(new File(target, "variants/FamiliesCfg_" + variantNr + ".ivml"), 
++                new File(target, "EASy/infrastructure/FamiliesCfg.ivml"));
++            copy(new File(target, "variants/DataManagementCfg_" + variantNr + ".ivml"), 
++                new File(target, "EASy/infrastructure/DataManagementCfg.ivml"));
++            try {
++                FileUtils.deleteDirectory(new File(target, "variants"));
++            } catch (IOException e) {
++                System.out.println("ERROR: Cannot delete variants folder, " + e.getMessage());
++            }
++        }
++        
++        /**
++         * Copies a file if it exists to a target location. Ignores non existing sources files
++         * 
++         * @param src the source file
++         * @param tgt the target location
++         */
++        private void copy(File src, File tgt) {
++            if (src.exists()) {
++                System.out.println("Copying " + src.getName());
++                try {
++                    FileUtils.copyFile(src, tgt);
++                } catch (IOException e) {
++                    System.out.println(e.getMessage());
++                }
++            }
++        }
++        
++        /**
++         * Changes the variant to activate.
++         * 
++         * @param variantNr the variant nr
++         */
++        private void setVariantNr(int variantNr) {
++            this.variantNr = variantNr;
++        }
++
++        /**
++         * Cleans up if not already done.
++         */
++        private void cleanUp() {
++            if (null != target) {
++                FileUtils.deleteQuietly(target);
++                target = null;
++            }
++        }
++
++        @Override
++        public String getTempFolderName(String projectName) {
++            return String.format("%02d_sv_%s", variantNr, projectName);
++        }
++
++    }
++
++    /**
++     * Tests the QualiMaster model / derivation (February 2017, experimentally modified, without rt-VIL). This is a 
++     * series of modified models by leaving out certain pipelines. No VIL instantiations are executed on the 
++     * variants, only reasoning.
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void testQualiMasterSep17Variants() throws IOException {
++        QMTestModifier modifier = new QMTestModifier();
++        
++        String[] versions = {"0", "0"};
++        String[] names = {"sep17", "QM"};
++        enableRealTimeAsserts = true;
++        int[] tests = {0, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // more seems to cause problems with file system on windows
++        for (int i : tests) {
++            System.out.println(">> Start Variant " + i);
++            modifier.setVariantNr(i);
++            executeCase(names, versions, "QualiMaster/", null, Mode.REASON, modifier);
++            modifier.cleanUp();
++            System.out.println("<< End Variant " + i);
++        }
++        enableRealTimeAsserts = false;
++    }
++
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealTests.java
+index 453b897..a436118 100644
+--- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealTests.java
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealTests.java
+@@ -23,6 +23,7 @@
+ 
+ import net.ssehub.easy.instantiation.core.model.buildlangModel.Script;
+ import net.ssehub.easy.instantiation.maven.Registration;
++import net.ssehub.easy.instantiation.velocity.VelocityInstantiator;
+ 
+ /**
+  * Real use case tests. Although Maven is available, we run the tests without Maven in order to
+@@ -31,10 +32,9 @@
+  * @author Holger Eichelberger
+  * @author El-Sharkawy
+  */
+-public class RealTests extends AbstractScenarioTest {
++public class RealTests extends AbstractRealTests {
+ 
+     protected static final String[] RELATIVE_CURL_EXECUTABLES = {"curl/curl.bat", "curl/curl.sh"};
+-    
+     
+     private static RealTests tests;
+     
+@@ -50,6 +50,7 @@
+         tests = new RealTests();
+         tests.cleanTemp();
+         Registration.register();
++        VelocityInstantiator.register();
+     }
+ 
+     /**
+@@ -169,13 +170,14 @@
+      * @param vilVersion the version of the VIL build file (may be <b>null</b>)
+      * @param makeExecutable those files (in relative paths) within the temporary copy of the project to be 
+      *   made executable
+-     * @return the base directory of the instantiated project
++     * @return the base directory of the instantiated project (<b>null</b> for no assert)
+      * @throws IOException in case of I/O problems
+      */
+     protected File executeIndenicaCase(String projectName, String ivmlVersion, String vilVersion, 
+         String... makeExecutable) throws IOException {
+         String[] versions = {ivmlVersion, vilVersion};
+-        return executeCase(projectName, versions, "INDENICA/", null, makeExecutable);
++        return executeCase(projectName, versions, "INDENICA/", null, Mode.REASON_INSTANTIATE, 
++            new MakeExecutableTestModifier(makeExecutable));
+     }
+     
+     /**
+@@ -186,11 +188,15 @@
+     @Test
+     public void testIndenicaPlRmsPlatform2() throws IOException {
+         File base = executeIndenicaCase("PL_RMS_Platform2", "0", "0", RELATIVE_CURL_EXECUTABLES);
+-        assertCurlOut(base);
+-        FileUtils.deleteQuietly(base);
++        if (null != base) {
++            assertCurlOut(base);
++            FileUtils.deleteQuietly(base);
++        }
+         base = executeIndenicaCase("PL_RMS_Platform2", "0", "1", RELATIVE_CURL_EXECUTABLES);
+-        assertCurlOut(base);
+-        cleanTempFolder(base);
++        if (null != base) {
++            assertCurlOut(base);
++            cleanTempFolder(base);
++        }
+     }
+     
+     /**
+@@ -204,16 +210,17 @@
+ 
+         // Original files
+         File base = executeIndenicaCase(projectName, "0", "0", RELATIVE_CURL_EXECUTABLES);
+-        
+-        // Generated files
+-        File resources = new File(base, "src/main/resources/");
+-
+-        assertCurlOut(base);
+-        String fileName = projectName + ".var";
+-        assertFileEquality(new File(base, "curl/" + fileName), new File(resources, fileName));
+-        fileName = "resolution.res";
+-        assertFileEquality(new File(base, "curl/" + fileName), new File(resources, fileName));
+-        cleanTempFolder(base);
++        if (null != base) {
++            // Generated files
++            File resources = new File(base, "src/main/resources/");
++    
++            assertCurlOut(base);
++            String fileName = projectName + ".var";
++            assertFileEquality(new File(base, "curl/" + fileName), new File(resources, fileName));
++            fileName = "resolution.res";
++            assertFileEquality(new File(base, "curl/" + fileName), new File(resources, fileName));
++            cleanTempFolder(base);
++        }
+     }
+ 
+     /**
+@@ -245,26 +252,28 @@
+     @Test
+     public void testElevator() throws IOException {
+         String[] versions = {"0", "0"};
+-        File base = executeCase("New_Product", versions, "elevator/", "PL_SimElevator");
+-        
+-        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+-        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
+-        List<File> files = new ArrayList<File>();
+-        enumerateJavaFiles(new File(base, "src"), files);
+-        List<String> options = new ArrayList<String>();
+-        options.add("-d");
+-        options.add(new File(base, "bin").getAbsolutePath());
+-        Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(files);
+-        StringWriter writer = new StringWriter();
+-        boolean success = compiler.getTask(writer, fileManager, null, options, null, compilationUnits).call();
+-        try {
+-            fileManager.close(); 
+-        } catch (IOException e) {
+-            Assert.fail("unexpected exception: " + e.getMessage());
++        File base = executeCase("New_Product", versions, "elevator/", "PL_SimElevator", Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
++            Assert.assertNotNull("No JDK compiler, are you running JRE?", compiler);
++            StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
++            List<File> files = new ArrayList<File>();
++            enumerateJavaFiles(new File(base, "src"), files);
++            List<String> options = new ArrayList<String>();
++            options.add("-d");
++            options.add(new File(base, "bin").getAbsolutePath());
++            Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(files);
++            StringWriter writer = new StringWriter();
++            boolean success = compiler.getTask(writer, fileManager, null, options, null, compilationUnits).call();
++            try {
++                fileManager.close(); 
++            } catch (IOException e) {
++                Assert.fail("unexpected exception: " + e.getMessage());
++            }
++            Assert.assertTrue("compile problems: " + writer.toString(), success);
++    
++            cleanTempFolder(base);
+         }
+-        Assert.assertTrue("compile problems: " + writer.toString(), success);
+-
+-        cleanTempFolder(base);
+     }
+ 
+     /**
+@@ -294,14 +303,17 @@
+      */
+     @Test
+     public void testInstantiateNumericCSVInstantiation() throws IOException {
+-        File base = executeCase("NumericCSVInstantiationTest", new String[] {"0", "0"}, "", null);
+-        File expectedFile = new File(base, "NumericCSVInstantiationTest.csv");
+-        File producedFile = new File(base, "expected/NumericCSVInstantiationTest.csv");
+-        assertExists(expectedFile);
+-        assertExists(producedFile);
+-        String expectedContent = file2String(expectedFile).replace("\r", "");
+-        String actualContent = file2String(producedFile).replace("\r", "");
+-        Assert.assertEquals(expectedContent, actualContent);
++        File base = executeCase("NumericCSVInstantiationTest", new String[] {"0", "0"}, "", null, 
++            Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            File expectedFile = new File(base, "NumericCSVInstantiationTest.csv");
++            File producedFile = new File(base, "expected/NumericCSVInstantiationTest.csv");
++            assertExists(expectedFile);
++            assertExists(producedFile);
++            String expectedContent = file2String(expectedFile).replace("\r", "");
++            String actualContent = file2String(producedFile).replace("\r", "");
++            Assert.assertEquals(expectedContent, actualContent);
++        }
+     }
+     
+     /**
+@@ -311,10 +323,15 @@
+      */
+     @Test
+     public void testSvncontrol() throws IOException {
+-        String[] versions = {"0", "0"};
+-        testSvncontrol(versions);
+-        versions[1] = "0.1";
+-        testSvncontrol(versions);
++        String msg = net.ssehub.easy.instantiation.aspectj.Registration.checkEnvironment();
++        if (null != msg) {
++            System.out.println("Warning: " + msg);
++        } else {
++            String[] versions = {"0", "0"};
++            testSvncontrol(versions);
++            versions[1] = "0.1";
++            testSvncontrol(versions);
++        }
+     }
+ 
+     /**
+@@ -324,13 +341,15 @@
+      * @throws IOException shall not occur
+      */
+     private void testSvncontrol(String[] versions) throws IOException {
+-        File base = executeCase("svncontrol", versions, "", null);
+-        assertExists(base, "variability/StaticConfiguration", ".java");
+-        assertExists(base, "variability/StartupConfiguration", ".java");
+-        assertExists(base, "variability/RuntimeConfiguration", ".java");
+-        assertExists(base, "gui/HooksTabAspect", ".aj");
+-        assertExists(base, "gui/ScheduleTabAspect", ".aj");
+-        assertExists(new File(base, "bin/client.jar"));
++        File base = executeCase("svncontrol", versions, "", null, Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            assertExists(base, "variability/StaticConfiguration", ".java");
++            assertExists(base, "variability/StartupConfiguration", ".java");
++            assertExists(base, "variability/RuntimeConfiguration", ".java");
++            assertExists(base, "gui/HooksTabAspect", ".aj");
++            assertExists(base, "gui/ScheduleTabAspect", ".aj");
++            assertExists(new File(base, "bin/client.jar"));
++        }
+     }
+     
+     /**
+@@ -362,8 +381,10 @@
+     @Test
+     public void testQualiMasterApril14() throws IOException {
+         String[] versions = {"0", "0"};
+-        File base = executeCase("april14", versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        File base = executeCase("april14", versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+ 
+     /**
+@@ -374,8 +395,10 @@
+     @Test
+     public void testQualiMasterMay14() throws IOException {
+         String[] versions = {"0", "0"};
+-        File base = executeCase("may14", versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        File base = executeCase("may14", versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+ 
+     /**
+@@ -387,8 +410,10 @@
+     public void testQualiMasterFeb15() throws IOException {
+         String[] versions = {"0", "0"};
+         String[] names = {"feb15", "QM"};
+-        File base = executeCase(names, versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        File base = executeCase(names, versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+ 
+     /**
+@@ -400,8 +425,12 @@
+     public void testQualiMasterFeb16() throws IOException {
+         String[] versions = {"0", "0"};
+         String[] names = {"feb16", "QM"};
+-        File base = executeCase(names, versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        enableRealTimeAsserts = true;
++        File base = executeCase(names, versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
++        enableRealTimeAsserts = false;
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+ 
+     /**
+@@ -413,8 +442,10 @@
+     public void testQualiMasterMar15() throws IOException {
+         String[] versions = {"0", "0"};
+         String[] names = {"mar15", "QM"};
+-        File base = executeCase(names, versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        File base = executeCase(names, versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+ 
+     /**
+@@ -426,21 +457,28 @@
+     public void testQualiMasterJun15() throws IOException {
+         String[] versions = {"0", "0"};
+         String[] names = {"jun15", "QM"};
+-        File base = executeCase(names, versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        File base = executeCase(names, versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+ 
+     /**
+      * Tests the QualiMaster model / derivation (February 2017, without rt-VIL). Seems to fail on Jenkins.
+      * This is a slightly modified version to ensure creation of artifacts in repeatable sequence.
+      * 
++     * @param mode the test execution mode
+      * @throws IOException shall not occur
+      */
+-    protected void testQualiMasterFeb17Impl() throws IOException {
++    protected void testQualiMasterFeb17Impl(Mode mode) throws IOException {
+         String[] versions = {"0", "0"};
+         String[] names = {"feb17", "QM"};
+-        File base = executeCase(names, versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        enableRealTimeAsserts = true;
++        File base = executeCase(names, versions, "QualiMaster/", null, mode);
++        enableRealTimeAsserts = false;
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+     
+     /**
+@@ -452,20 +490,25 @@
+     @Ignore
+     @Test
+     public void testQualiMasterFeb17() throws IOException {
+-        testQualiMasterFeb17Impl();
++        testQualiMasterFeb17Impl(Mode.REASON_INSTANTIATE);
+     }
+     
+     /**
+      * Tests the QualiMaster model / derivation (February 2017, experimentally modified, without rt-VIL). Seems to 
+      * fail on Jenkins. This is a modified version for evaluating VIL/VTL.
+      * 
++     * @param mode the test execution mode
+      * @throws IOException shall not occur
+      */
+-    protected void testQualiMasterSep17Impl() throws IOException {
++    protected void testQualiMasterSep17Impl(Mode mode) throws IOException {
+         String[] versions = {"0", "0"};
+         String[] names = {"sep17", "QM"};
+-        File base = executeCase(names, versions, "QualiMaster/", null);
+-        assertFileEqualityRec(new File(base, "expected"), base);
++        enableRealTimeAsserts = true;
++        File base = executeCase(names, versions, "QualiMaster/", null, mode);
++        enableRealTimeAsserts = false;
++        if (null != base) {
++            assertFileEqualityRec(new File(base, "expected"), base);
++        }
+     }
+     
+     /**
+@@ -477,7 +520,7 @@
+     @Ignore
+     @Test
+     public void testQualiMasterSep17() throws IOException {
+-        testQualiMasterFeb17Impl();
++        testQualiMasterFeb17Impl(Mode.REASON_INSTANTIATE);
+     }
+     
+ }
+diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ScenarioRampUpTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ScenarioRampUpTest.java
+new file mode 100644
+index 0000000..725dc63
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ScenarioRampUpTest.java
+@@ -0,0 +1,49 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.producer.scenario_tests;
++
++import java.io.IOException;
++
++import org.junit.Test;
++
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.cst.CSTSemanticException;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++
++/**
++ * A Scenario ramp-up test including a QualiMaster model.
++ * 
++ * @author Holger Eichelberger
++ */
++public class ScenarioRampUpTest extends RampUpTest {
++
++    /**
++     * Performs the ram-up test.
++     * 
++     * @throws ConfigurationException if setting an expression as default value fails
++     * @throws ValueDoesNotMatchTypeException if a value does not match a type
++     * @throws CSTSemanticException if a constraint is erroneously composed
++     * @throws IOException if loading a model fails
++     */
++    @Test
++    public void rampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
++        CSTSemanticException, IOException {
++        super.rampUpTest();
++        RealTests t = new RealTests();
++        t.testQualiMasterFeb17Impl(Mode.REASON_NO_MEASURE);
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_0.ivml
+new file mode 100644
+index 0000000..76146a1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_0.ivml
+@@ -0,0 +1,34 @@
++project ActivityGraphConfiguration {
++
++    version v0;
++    import PL_ActivityGraph with PL_ActivityGraph.version == v0;
++    ReadSheets readSheets = {};
++    Start start = {};
++    End end = {};
++
++    Dependency start_start = {source = start, target = start};
++    Dependency start_readSheets = {source = start, target = readSheets};
++    Dependency start_end = {source = start, target = end};
++    Dependency readSheets_readSheets = {source = readSheets, target = readSheets};
++    Dependency readSheets_end = {source = readSheets, target = end};
++    Dependency end_end = {source = end, target = end};
++
++    Input input = {position = start_readSheets};
++    Document document = {position = readSheets_end};
++
++    Transformation inputToDocument = {predecessor = input, sucessor = document};
++
++    ActivityGraph activityGraph = {
++        activities = {start, readSheets, end},
++        objects = {input, document},
++        transformations = {inputToDocument},
++        dependencies = {
++            start_start,
++            start_readSheets,
++            start_end,
++            readSheets_readSheets,
++            readSheets_end,
++            end_end
++        }
++    };
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_1.ivml
+new file mode 100644
+index 0000000..49d80c6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_1.ivml
+@@ -0,0 +1,34 @@
++project ActivityGraphConfiguration1 {
++
++    version v0;
++    import PL_ActivityGraph with PL_ActivityGraph.version == v0;
++    ReadSheets readSheets = {};
++    Start start = {};
++    End end = {};
++
++    Dependency start_start = {source = start, target = start};
++    Dependency start_readSheets = {source = start, target = readSheets};
++    Dependency start_end = {source = start, target = end};
++    Dependency readSheets_readSheets = {source = readSheets, target = readSheets};
++    Dependency readSheets_end = {source = readSheets, target = end};
++    Dependency end_end = {source = end, target = end};
++
++    Input input = {position = start_readSheets};
++    Output output = {position = end_end};
++
++    Transformation inputToDocument = {predecessor = input, sucessor = output};
++
++    ActivityGraph activityGraph = {
++        activities = {start, readSheets, end},
++        objects = {input, output},
++        transformations = {inputToDocument},
++        dependencies = {
++            start_start,
++            start_readSheets,
++            start_end,
++            readSheets_readSheets,
++            readSheets_end,
++            end_end
++        }
++    };
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/PL_ActivityGraph_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/PL_ActivityGraph_0.ivml
+new file mode 100644
+index 0000000..82b1781
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/PL_ActivityGraph_0.ivml
+@@ -0,0 +1,75 @@
++project PL_ActivityGraph {
++
++	version v0;
++
++	compound ActivityGraph {
++		setOf(Activity) activities;
++		setOf(Dependency) dependencies;
++		setOf(Object) objects;
++		setOf(Transformation) transformations;
++
++		Constraint checkSheetAfterReadSheets = self.objects->forAll(Object o|isTypeOf(o.position.source, refTo(ReadSheets)) implies isTypeOf(o, Sheet));
++		Constraint checkDocumentAfterRecognizeDocuments = self.objects->forAll(Object o|isTypeOf(o.position.source, refTo(RecognizeDocuments)) implies isTypeOf(o, refTo(Document)));
++		Constraint checkSheetAfterResolveMailings = self.objects->forAll(o|o.position.source.isTypeOf(refTo(ResolveMailings)) implies o.isTypeOf(refTo(Sheet)));
++		Constraint checkSheetBeforeRecognizeDocuments = self.objects->forAll(o|o.position.target.isTypeOf(refTo(RecognizeDocuments)) implies o.isTypeOf(refTo(Sheet)));
++		Constraint checkDocumentBeforeResolveMailings = self.objects->forAll(o|o.position.target.isTypeOf(refTo(ResolveMailings)) implies o.isTypeOf(refTo(Document)));
++		Constraint checkSheetBeforeWriteSheets = self.objects->forAll(o|o.position.target.isTypeOf(refTo(WriteSheets)) implies o.isTypeOf(refTo(Sheet)));
++
++		Constraint dependenciesReflexivity = self.activities->forAll(a|dependsOn(a, a, self.dependencies));
++		Constraint dependenciesAntisymmetry = self.activities->forAll(a|self.activities->forAll(b|dependsOn(a, b, self.dependencies) and dependsOn(b, a, self.dependencies) implies a == b));
++		Constraint dependenciesTransitivity = self.activities->forAll(a|self.activities->forAll(b|self.activities->forAll(c|dependsOn(a, b, self.dependencies) and dependsOn(b, c, self.dependencies) implies dependsOn(a, c, self.dependencies))));
++		Constraint transformationAntisymmetry = self.objects->forAll(o|self.objects->forAll(p|transformedIn(o, p, self.transformations) and transformedIn(p, o, self.transformations) implies o == p));
++		Constraint transformedInDependOn = self.transformations->forAll(t|dependsOn(t.sucessor.position.target, t.predecessor.position.source, self.dependencies));
++	}
++
++	def Boolean dependsOn(Activity sucessor, Activity predecessor, setOf(Dependency) dependencies) = dependencies->exists(d|d.source == predecessor and d.target == sucessor);
++	def Boolean transformedIn(Object predecessor, Object sucessor, setOf(Transformation) transformations) = transformations->exists(t|t.predecessor == predecessor and t.sucessor == sucessor);
++
++	abstract compound Activity {
++	}
++
++	abstract compound Object {
++		refTo(Dependency) position;
++	}
++
++	compound Dependency {
++		refTo(Activity) source;
++		refTo(Activity) target;
++	}
++
++	compound Transformation {
++		refTo(Object) predecessor;
++		refTo(Object) sucessor;
++	}
++
++    compound Start refines Activity {
++    }
++
++    compound End refines Activity {
++    }
++
++	compound ReadSheets refines Activity {
++	}
++
++	compound RecognizeDocuments refines Activity {
++	}
++
++	compound ResolveMailings refines Activity {
++	}
++
++	compound WriteSheets refines Activity {
++	}
++
++	compound Sheet refines Object {
++	}
++
++	compound Document refines Object {
++	}
++
++	compound Input refines Object {
++	}
++
++	compound Output refines Object {
++	}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/ActivityGraph2Configuration_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/ActivityGraph2Configuration_0.ivml
+new file mode 100644
+index 0000000..741e6e9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/ActivityGraph2Configuration_0.ivml
+@@ -0,0 +1,13 @@
++project ActivityGraph2Configuration {
++
++    version v0;
++    import PL_ActivityGraph with PL_ActivityGraph.version == v0;
++    ReadSheets readSheets = {};
++    RecognizeDocuments recognizeDocuments = {};
++    WriteSheets writeSheets = {};
++    Dependency readSheets_readSheets = {source = readSheets, target = readSheets};
++    Dependency recognizeDocuments_recognizeDocuments = {source = recognizeDocuments, target = recognizeDocuments};
++    Dependency recognizeDocuments_readSheets = {source = recognizeDocuments, target = readSheets};
++    Dependency readSheets_recognizeDocuments = {source = readSheets, target = recognizeDocuments};
++    controlFile = {activities = {readSheets, recognizeDocuments}, dependencies = {readSheets_readSheets, recognizeDocuments_recognizeDocuments, readSheets_recognizeDocuments, recognizeDocuments_readSheets}};
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/PL_ActivityGraph_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/PL_ActivityGraph_0.ivml
+new file mode 100644
+index 0000000..bffc010
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/PL_ActivityGraph_0.ivml
+@@ -0,0 +1,69 @@
++project PL_ActivityGraph {
++
++	version v0;
++	ControlFile controlFile = {};
++	enum ActivityType {ReadSheetsType, RecognizeDocumentsType, ResolveMailingsType, WriteSheetsType};
++	enum ObjectType {SheetType, DocumentType};
++	compound ControlFile {
++		setOf(Activity) activities;
++		setOf(Dependency) dependencies;
++		setOf(Object) objects;
++		setOf(Transformation) transformations;
++		Constraint checkSheetAfterReadSheets = self.objects->forAll(o|o.position.source.type == ActivityType.ReadSheetsType implies o.type == ObjectType.SheetType);
++		Constraint checkDocumentAfterRecognizeDocuments = self.objects->forAll(o|o.position.source.type == ActivityType.RecognizeDocumentsType implies o.type == ObjectType.DocumentType);
++		Constraint checkSheetAfterResolveMailings = self.objects->forAll(o|o.position.source.type == ActivityType.ResolveMailingsType implies o.type == ObjectType.SheetType);
++		Constraint checkSheetBeforeRecognizeDocuments = self.objects->forAll(o|o.position.target.type == ActivityType.RecognizeDocumentsType implies o.type == ObjectType.SheetType);
++		Constraint checkDocumentBeforeResolveMailings = self.objects->forAll(o|o.position.target.type == ActivityType.ResolveMailingsType implies o.type == ObjectType.DocumentType);
++		Constraint checkSheetBeforeWriteSheets = self.objects->forAll(o|o.position.target.type == ActivityType.WriteSheetsType implies o.type == ObjectType.SheetType);
++		Constraint dependenciesReflexivity = self.activities->forAll(a|dependsOn(a, a, self.dependencies));
++		Constraint dependenciesAntisymmetry = self.activities->forAll(a|self.activities->forAll(b|dependsOn(a, b, self.dependencies) and dependsOn(b, a, self.dependencies) implies a == b));
++		Constraint dependenciesTransitivity = self.activities->forAll(a|self.activities->forAll(b|self.activities->forAll(c|dependsOn(a, b, self.dependencies) and dependsOn(b, c, self.dependencies) implies dependsOn(a, c, self.dependencies))));
++	}
++
++	def Boolean dependsOn(Activity predecessor, Activity sucessor, setOf(Dependency) dependencies) = dependencies->exists(d|d.source == predecessor and d.target == sucessor);
++	def Boolean transformedIn(Object predecessor, Object sucessor, setOf(Transformation) transformations) = transformations->exists(t|t.predecessor == predecessor and t.sucessor == sucessor);
++	abstract compound Activity {
++		ActivityType type;
++	}
++
++	abstract compound Object {
++		ObjectType type;
++		refTo(Dependency) position;
++	}
++
++	compound Dependency {
++		refTo(Activity) source;
++		refTo(Activity) target;
++	}
++
++	compound Transformation {
++		refTo(Object) predecessor;
++		refTo(Object) sucessor;
++	}
++
++	compound ReadSheets refines Activity {
++		type = ActivityType.ReadSheetsType;
++	}
++
++	compound RecognizeDocuments refines Activity {
++		type = ActivityType.RecognizeDocumentsType;
++	}
++
++	compound ResolveMailings refines Activity {
++		type = ActivityType.ResolveMailingsType;
++	}
++
++	compound WriteSheets refines Activity {
++		type = ActivityType.WriteSheetsType;
++	}
++
++	compound Sheet refines Object {
++		type = ObjectType.SheetType;
++	}
++
++	compound Document refines Object {
++		type = ObjectType.DocumentType;
++	}
++
++	controlFile = {};
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/configSub.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/configSub.ivml
+new file mode 100644
+index 0000000..40798f6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/configSub.ivml
+@@ -0,0 +1,7 @@
++project ConfigSub {
++
++    import MetaSub;
++    Structure s = {name = "s", next = {1, 2}};
++    SubStructure u1 = {name = "u1", next = {1, 2}};
++    SubStructure u2 = {name = "u2", next = {}};
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults1.ivml
+new file mode 100644
+index 0000000..82bdd8d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults1.ivml
+@@ -0,0 +1,23 @@
++project defaults1 {
++
++    enum Kind {kind1, kind2, kind3};
++    abstract compound Activity {
++        Kind produces;
++        Kind consumes;
++        Integer count;
++    }
++
++    compound ReaderActivity refines Activity {
++        produces = Kind.kind1;
++    }
++
++    compound WriterActivity refines Activity {
++        consumes = Kind.kind2;
++    }
++
++    Activity a1 = ReaderActivity {};
++    Activity a2 = WriterActivity {};
++    ReaderActivity r1 = {count = 5};
++    WriterActivity w1 = {count = 10};
++    sequenceOf(Activity) seq = {ReaderActivity {count = 6}, WriterActivity {count = 7}};
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults2.ivml
+new file mode 100644
+index 0000000..1867d7e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults2.ivml
+@@ -0,0 +1,23 @@
++project defaults2 {
++
++    enum Kind {kind1, kind2, kind3};
++    abstract compound Activity {
++        Kind produces;
++        Kind consumes;
++        Integer count;
++    }
++
++    compound ReaderActivity refines Activity {
++        Kind produces = Kind.kind1;
++    }
++
++    compound WriterActivity refines Activity {
++        Kind consumes = Kind.kind2;
++    }
++
++    Activity a1 = ReaderActivity {};
++    Activity a2 = WriterActivity {};
++    ReaderActivity r1 = {count = 5};
++    WriterActivity w1 = {count = 10};
++    sequenceOf(Activity) seq = {ReaderActivity {count = 6}, WriterActivity {count = 7}};
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults3.ivml
+new file mode 100644
+index 0000000..a69109c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults3.ivml
+@@ -0,0 +1,25 @@
++project defaults3 {
++
++    enum Kind {kind1, kind2, kind3};
++    abstract compound Activity {
++        Kind produces = initProduces(self);
++        Kind consumes = initConsumes(self);
++        Integer count;
++    }
++
++    def Kind initProduces(Activity act) = null;
++    def Kind initConsumes(Activity act) = null;
++    compound ReaderActivity refines Activity {
++    }
++
++    def Kind initProduces(ReaderActivity act) = Kind.kind1;
++    compound WriterActivity refines Activity {
++    }
++
++    def Kind initConsumes(WriterActivity act) = Kind.kind2;
++    Activity a1 = ReaderActivity {};
++    Activity a2 = WriterActivity {};
++    ReaderActivity r1 = {count = 5};
++    WriterActivity w1 = {count = 10};
++    sequenceOf(Activity) seq = {ReaderActivity {count = 6}, WriterActivity {count = 7}};
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults4.ivml
+new file mode 100644
+index 0000000..ceae135
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults4.ivml
+@@ -0,0 +1,27 @@
++project defaults3 {
++
++    enum Kind {kind1, kind2, kind3};
++    abstract compound Activity {
++        Kind produces;
++        Kind consumes;
++        Integer count;
++        initProduces(self);
++        initConsumes(self);
++    }
++
++    def Boolean initProduces(Activity act) = true;
++    def Boolean initConsumes(Activity act) = true;
++    compound ReaderActivity refines Activity {
++    }
++
++    def Boolean initProduces(ReaderActivity act) = act.produces = Kind.kind1;
++    compound WriterActivity refines Activity {
++    }
++
++    def Boolean initConsumes(WriterActivity act) = act.consumes = Kind.kind2;
++    Activity a1 = ReaderActivity {};
++    Activity a2 = WriterActivity {};
++    ReaderActivity r1 = {count = 5};
++    WriterActivity w1 = {count = 10};
++    sequenceOf(Activity) seq = {ReaderActivity {count = 6}, WriterActivity {count = 7}};
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/BaseSD_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/BaseSD_0.ivml
+new file mode 100644
+index 0000000..d98cbe6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/BaseSD_0.ivml
+@@ -0,0 +1,8 @@
++project BaseSD {
++
++    version v0;
++    import PL_Base with PL_Base.version == v0;
++    ReadSheets readSheets = {};
++    Dependency readSheets_readSheets = {source = readSheets, target = readSheets};
++    controlFile = {activities = {readSheets}, dependencies = {readSheets_readSheets}};
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/PL_Base_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/PL_Base_0.ivml
+new file mode 100644
+index 0000000..e09a1c6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/PL_Base_0.ivml
+@@ -0,0 +1,37 @@
++project PL_Base {
++
++	version v0;
++
++    ControlFile controlFile = {};
++
++    enum ActivityType {ReadSheetsType, RecognizeDocumentsType, ResolveMailingsType, WriteSheetsType};
++
++    compound ControlFile {
++        setOf(Activity) activities;
++        setOf(Dependency) dependencies;
++
++        Constraint dependenciesReflexivity = self.activities->forAll(a|dependsOn(a, a, self.dependencies));
++//        Constraint dependenciesAntisymmetry = self.activities->forAll(a|self.activities->forAll(b|dependsOn(a, b, self.dependencies) and dependsOn(b, a, self.dependencies) implies a == b));
++//        Constraint dependenciesTransitivity = self.activities->forAll(a|self.activities->forAll(b|self.activities->forAll(c|dependsOn(a, b, self.dependencies) and dependsOn(b, c, self.dependencies) implies dependsOn(a, c, self.dependencies))));
++//        Constraint dependsOn = self.dependencies->forAll(d|dependsOn(d.target, d.source, self.dependencies));
++
++
++    }
++
++    def Boolean dependsOn(Activity predecessor, Activity sucessor, setOf(Dependency) dependencies) =
++        dependencies->exists(d|d.source == predecessor and d.target == sucessor);
++
++    abstract compound Activity {
++        ActivityType type;
++    }
++
++    compound Dependency {
++        refTo(Activity) source;
++        refTo(Activity) target;
++    }
++
++    compound ReadSheets refines Activity {
++        type = ActivityType.ReadSheetsType;
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/metaSub.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/metaSub.ivml
+new file mode 100644
+index 0000000..5e4220f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/metaSub.ivml
+@@ -0,0 +1,16 @@
++project MetaSub {
++
++    compound Structure {
++        String name;
++        setOf(Integer) next;
++        Boolean isSub = false;
++        Constraint nextCount = if isSub == false then next.size() > 0 else true endif;
++        Constraint nextCount1 = isSub == false implies next.size() > 0;
++        Constraint nextCheck = isDefined(next);
++    }
++    
++    compound SubStructure refines Structure {
++        isSub = true;
++    }
++    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/Einfache_Steuerdatei_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/Einfache_Steuerdatei_0.ivml
+new file mode 100644
+index 0000000..33c7e9d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/Einfache_Steuerdatei_0.ivml
+@@ -0,0 +1,8 @@
++project Einfache_Steuerdatei {
++
++    version v0;
++    import PL_Steuerkarten with PL_Steuerkarten.version == v0;
++    ReadSheetsActivity readSheets = {paperTray = PaperTray {trayID = "1", sheetRef = "A4"}, id = "Blaetter_Einlesen", produces = NameFuerBlattSeiteDokument.blatt, consumes = NameFuerBlattSeiteDokument.nichts, readMode = FormatMode.Linemode};
++    WriteSheetsActivity writeSheets = {id = "Blaetter_Ausgeben", produces = NameFuerBlattSeiteDokument.nichts, consumes = NameFuerBlattSeiteDokument.blatt, writeMode = FormatMode.Linemode, inputActivity = refBy(readSheets)};
++    controlFile = {activities = {readSheets, writeSheets}};
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/PL_Steuerkarten_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/PL_Steuerkarten_0.ivml
+new file mode 100644
+index 0000000..158245f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/PL_Steuerkarten_0.ivml
+@@ -0,0 +1,86 @@
++project PL_Steuerkarten {
++
++	version v0;
++	ControlFile controlFile = {};
++
++	def Boolean hasActivityWithId(String id, setOf(Activity) activities) = activities->exists(a|a.id == id);
++
++    def Activity getActivityById(String id, setOf(Activity) activities) = activities->any(a|a.id == id);
++
++    def setOf(Activity) getActivitiesWithInput(setOf(Activity) activities) = activities->select(a|a.inputActivity.isDefined());
++
++    enum NameFuerBlattSeiteDokument {nichts, blatt, seite, dokument};
++
++    enum FormatMode {Linemode, PDF, AFP};
++
++	compound ControlFile {
++		setOf(Activity) activities;
++
++		getActivitiesWithInput(self.activities)->forAll(a|hasActivityWithId(a.inputActivity.id, self.activities));
++		getActivitiesWithInput(self.activities)->forAll(a|getActivityById(a.inputActivity.id, self.activities).produces == a.consumes);
++
++        getActivitiesWithWriteMode(self.activities).notEmpty() implies allModesContained(getActivitiesWithReadMode(self.activities)->collect(Activity a|a.readMode), getActivitiesWithWriteMode(self.activities)->collect(Activity a|a.writeMode));
++        //getActivitiesWithWriteMode(self.activities)->collect(Activity a|a.writeMode).includes(getActivitiesWithReadMode(self.activities)->collect(Activity a|a.readMode));
++	}
++
++	def Boolean allModesContained(setOf(FormatMode) readModes, setOf(FormatMode) writeModes) = writeModes->forAll(FormatMode m|readModes.includes(m));
++	//readModes->intersection(writeModes).size() == writeModes.size(); includeAll
++
++	def setOf(Activity) getActivitiesWithReadMode(setOf(Activity) activities) = activities->select(a|a.readMode.isDefined());
++    def setOf(Activity) getActivitiesWithWriteMode(setOf(Activity) activities) = activities->select(a|a.writeMode.isDefined());
++
++	abstract compound Activity {
++		String id;
++		NameFuerBlattSeiteDokument produces;
++        NameFuerBlattSeiteDokument consumes;
++        FormatMode readMode;
++        FormatMode writeMode;
++        refTo(Activity) inputActivity;
++
++        self.id <> "";
++        self.readMode.isDefined() implies not self.writeMode.isDefined();
++        self.writeMode.isDefined() implies not self.readMode.isDefined();
++	}
++
++	abstract compound PrintReader {
++	    FormatMode mode;
++	}
++
++	abstract compound PrintWriter {
++	    FormatMode mode;
++	}
++
++	abstract compound StaticOrDynamicFileOrDD {
++	}
++
++	compound LinemodeReader refines PrintReader {
++	    mode = FormatMode.Linemode;
++	}
++
++	compound LinemodeWriter refines PrintWriter {
++	    mode = FormatMode.Linemode;
++		StaticOrDynamicFileOrDD target;
++	}
++
++	compound DD refines StaticOrDynamicFileOrDD {
++		String name;
++	}
++
++	compound ReadSheetsActivity refines Activity {
++		produces = NameFuerBlattSeiteDokument.blatt;
++		PaperTray paperTray;
++		StaticOrDynamicFileOrDD source;
++		PrintReader reader;
++	}
++
++	compound WriteSheetsActivity refines Activity {
++	    PrintWriter writer;
++		consumes = NameFuerBlattSeiteDokument.blatt;
++	}
++
++	compound PaperTray {
++		String trayID;
++		String sheetRef;
++	}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/types/Testprodukt_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/types/Testprodukt_0.ivml
+new file mode 100644
+index 0000000..29e1f8a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/types/Testprodukt_0.ivml
+@@ -0,0 +1,40 @@
++project Testprodukt {
++
++    version v0;
++    compound ActivityGraph {
++        setOf(Activity) activities;
++        setOf(Dependency) dependencies;
++        setOf(Object) objects;
++    }
++
++    abstract compound Activity {
++    }
++
++    abstract compound Object {
++        refTo(Dependency) position;
++    }
++
++    compound Dependency {
++        refTo(Activity) source;
++        refTo(Activity) target;
++    }
++
++    compound ReadSheets refines Activity {
++    }
++
++    compound Sheet refines Object {
++    }
++
++    compound Document refines Object {
++    }
++
++    compound WriteSheets refines Activity {
++    }
++
++    ReadSheets readSheets = {};
++    WriteSheets writeSheets = {};
++    Document document = {position = dep};
++    Dependency dep = {source = readSheets, target = writeSheets};
++    ActivityGraph actGraph = {activities = {readSheets, writeSheets}, objects = {document}, dependencies = {dep}};
++    actGraph.objects->forAll(Object o|isTypeOf(o.position.source, refTo(ReadSheets)) implies isTypeOf(o, Sheet));
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/.EASyConfig b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/.EASyConfig
+new file mode 100644
+index 0000000..f9eaf10
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/.EASyConfig
+@@ -0,0 +1,15 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<ProductLineProject id="ca74a592-912a-4a0c-ac61-aa6aa3026a51" name="QM" version="0" location="QM2.devel">
++	<predecessors>
++	</predecessors>
++	<successors>
++	</successors>
++	<settings>
++		<entity debug="false" />
++	</settings>
++	<reasoners>
++		<entity timeout="0" />
++	</reasoners>
++	<instantiators>
++	</instantiators>
++</ProductLineProject>
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.ivml
+new file mode 100644
+index 0000000..e76699a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.ivml
+@@ -0,0 +1,15 @@
++project QM {
++
++	version v0;
++	import HardwareCfg;
++	import ReconfigurableHardwareCfg;
++	import DataManagementCfg;     
++	import ObservablesCfg;
++	import AdaptivityCfg;
++	import StrategiesTacticsCfg;
++	import AlgorithmsCfg;
++	import FamiliesCfg; 
++	import PipelinesCfg;
++	import InfrastructureCfg;
++	import CloudResourceCfg;
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.vil b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.vil
+new file mode 100644
+index 0000000..fcacd28
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.vil
+@@ -0,0 +1,848 @@
++@advice(QM)
++vilScript QM (Project source, Configuration config, Project target, String pipelineName) {
++
++    version v0;
++    Path targetPath = "$target/";
++    Path pipelines = "$target/pipelines/eu/qualimaster";
++	Path pipelinesXml = "$target/pipelines.xml";
++    Path ifGen = "$target/if-gen";
++    Path modelPom = "$target/pom.xml";
++    Path serializers = "$target/serializers";
++    Path hwAlgorithms = "$target/hardwareAlgorithms";
++    Path hwGen = "$target/hw-gen";
++    Path modelGen = "$target/model-gen";
++    
++    Boolean newSwitch = false; //enable the switch related code
++    Boolean looseSub = false; //enable the integration of loosing sub-pipeline
++	
++	Integer port = 11000;//60010
++	mapOf(String, Integer) algToPort = {};
++	
++    mapOf(String, setOf(DecisionVariable)) lastElementMap = {}; //map<eltVarname, lastElements>
++    mapOf(Tuple,Tuple) inputToOutputMap = {};
++    mapOf(Tuple,String) nameToOutputMap = {}; //obtain the interface name of the output tuples. map<outputTuple, familyInterfaceName>
++    mapOf(String, mapOf(Tuple,sequenceOf(Tuple))) globalMap = {}; //map<eltVarname, map<inputTuple, outputTuple>>
++    mapOf(String, setOf(DecisionVariable)) familiesInPipeline = {};  
++    mapOf(String, DecisionVariable) subPipToLastElement = {}; //store the last element per sub-pipeline, shall not clean up (TODO:consider multiple ending nodes in the sub-topology)  
++	
++	setOf(HardwareAlgorithm) hardwareAlgorithms = {}; //store hardware algorithms
++	setOf(Sink) sinks = {}; //store sinks per pipeline.
++	mapOf(String, String) settingPaths = {}; //store application xml paths from pipelines
++	setOf(Parameter) permissibleParas ={}; //collect permissible parameters
++	sequenceOf(DecisionVariable) subPipelines = {}; //collect the generated sub-pipelines
++	mapOf(String, sequenceOf(String)) nextConsumingNode = {}; //collect the next consuming node for the subpipeline algorithm <subPipelineName, <PipName, nodeName>>
++	mapOf(String, DecisionVariable) subPipInFamilyElement = {};//collect the family element node (varname) for the subpipeline algorithm <subPipelineName, FamilyElementVarName> 
++	setOf(SubPipelineAlgorithm) subPipelineAlgorithms = {}; //collect the sub-pipeline algorithms in the generated pipelines
++	setOf(DecisionVariable) visitedNodes = {}; //mark already-visited nodes
++	setOf(FamilyElement) hwFamilyElements = {}; //collect the family elements using hardware algorithms.
++	
++	String interfaceArtifact;
++    String repositoryURL;
++	String modelArtifact;
++		
++    cleanup(Project target) = : {
++		pipelines.delete(); 
++		pipelinesXml.delete();
++		//modelPom.delete();   
++		serializers.delete();
++		hwAlgorithms.delete();  
++		hwGen.delete(); 
++		modelGen.delete();
++    }
++    
++    // this needs to be done separately, please do not clear the interfaces in cleanup
++    cleanupInterfaces(Project target) = : {
++        ifGen.delete();
++    }      
++    
++    /**
++	 * Maps input/output tuple types, one input tuple only maps to one output types.
++	 */
++    mapSequence(Tuples input, Tuples output, mapOf(Tuple, Tuple) result) = : {
++		Integer inputSize = input.size();
++		Integer outputSize = output.size();
++		Integer s1 = 0;
++		Integer s2 = 0;
++		if(inputSize > 0 and outputSize > 0) {
++			for(Tuple t : input) {
++				Fields fSet1 = t.fields;
++				Integer fs1 =fSet1.size();
++				for(Tuple e : output) {
++					Fields fSet2 = e.fields;
++					Integer fs2 =fSet2.size();
++					if(fs1 == fs2){
++						Integer m = 0;
++						for(Field f1 : fSet1) {
++							for(Field f2 : fSet2) {
++								if(f1.name == f2.name and f1.type == f2.type) {
++									//matched!!
++									m = m + 1;
++								}
++							};
++						};
++						if(m == fs1) {
++							result.add(t, e);
++						}						
++					}
++					
++				};
++			};
++		}
++	}
++	
++	/**
++	 * Maps input/output tuple types, one input tuple can map to multiple output types.
++	 */
++	mapSequenceMulti(Tuples input, Tuples output, mapOf(Tuple, sequenceOf(Tuple)) result) = : {
++		sequenceOf(Tuple) tmp = {};
++		Integer inputSize = input.size();
++		Integer outputSize = output.size();
++		Integer s1 = 0;
++		Integer s2 = 0;
++		if(inputSize > 0 and outputSize > 0) {
++			for(Tuple t : input) {
++				Fields fSet1 = t.fields;
++				Integer fs1 =fSet1.size();
++				for(Tuple e : output) {
++					Fields fSet2 = e.fields;
++					Integer fs2 =fSet2.size();
++					if(fs1 == fs2){
++						Integer m = 0;
++						for(Field f1 : fSet1) {
++							for(Field f2 : fSet2) {
++								if(f1.name == f2.name and f1.type == f2.type) {
++									//matched!!
++									m = m + 1;
++								}
++							};
++						};
++						if(m == fs1) {
++							sequenceOf(Tuple) matchedTuples = {};
++							if(result.containsKey(t)) {
++								tmp = result.get(t);
++								for(Tuple tuple : tmp) {
++									matchedTuples.add(tuple);
++								}
++							}
++							matchedTuples.add(e);
++							result.add(t, matchedTuples);
++						}						
++					}
++					
++				};
++			};
++		}
++	}
++	
++	protected assignPorts(Family family) = : {
++		for(Algorithm alg : family.members) {
++			String algName = alg.name.firstToUpperCase().toIdentifier();
++			algToPort.add(algName, port);
++			port = port + 1;
++		};
++	}
++	
++    protected processElement(sequenceOf(DecisionVariable) output, DecisionVariable prevar, Configuration config, String topoName, Family subPipelineFamily, String algName, Boolean debug) = : {     	
++        for(Flow v=output) {
++        	DecisionVariable elt = v.destination;
++        	if(!visitedNodes.includes(elt)) { //check whether the destination node is already generated, if true, skip
++	            visitedNodes.add(elt);//collect the generated destination node
++	            String eltName = elt.varName().firstToUpperCase();            
++	            String name = elt.varName().firstToUpperCase() + elt.type(); 
++	            //collect permissible parameters
++	            for(Parameter p : elt.byName("permissibleParameters")) {
++	            	permissibleParas.add(p);
++	            }
++	            if(newSwitch) {
++	            	if(elt.type() == "FamilyElement") {
++						DecisionVariable fmVar = elt.byName("family");
++						Family family = fmVar;
++						assignPorts(family); //assign the ports
++		            	if(fmVar.byName("members").variables().size() > 1) {
++		            		for(Algorithm alg : fmVar.byName("members")) {
++		            			if(isSubTopologyBasedAlgorithm(alg) and !looseSub) {
++		            			vilTemplateProcessor("stormIntermediarySpout", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(alg.name))}Intermediary.java", topoName=topoName, topLevelPip=null, fmElt=elt, algorithm=alg, globalMap=globalMap, lastElementMap=lastElementMap, nameToOutputMap=nameToOutputMap, algNameToPort=algToPort);
++		            			vilTemplateProcessor("stormEndBolt", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(alg.name))}EndBolt.java", topoName=topoName, topLevelPip=topoName, fmElt=elt, algorithm=alg, nextNode=null);
++		            			}
++		            		};
++		            		
++		            	}
++	               }
++	            }
++	            if(elt.type() == "FamilyElement") { //pass the algToPort
++	            	mapOf(Tuple, Grouping) tupleToGrouping = {};
++	            	if(!subPipelineFamily.isNull()) {//subPipelineFamily indicates that it is in the sub-pipeline
++	            		mappingTupleAndGrouping(output, tupleToGrouping);//map the tuple with the grouping type
++	            		subPipToLastElement.add(topoName, elt);//record the last element from the sub-pipeline
++	            	}
++	            	if(looseSub) {
++		            	//check whether the underlying family has sub-pipeline, if so, generate the sub-pipeline
++		            	FamilyElement fe = elt;
++		            	Family fm = fe.family;
++		            	Flow flow = elt.byName("output").variables().first(); //TODO: take the first flow, may need to consider multiple flows
++		            	DecisionVariable nextNode = flow.destination;
++		            	for(alg : fm.members) {	//collect the next consuming node in the main pipeline for the sub-pipeline algorithms
++			            	if(alg.type() == "SubPipelineAlgorithm") {
++			    				SubPipelineAlgorithm subAlg = alg;
++			    				SubPipeline subPipeline = subAlg.subPipeline;
++			    				String profilingArtifact = subAlg.artifact;		    				
++			    				subPipelineAlgorithms.add(subAlg);
++				    			sequenceOf(String) nodeInfo = {}; //<pipName, nodeName>
++			            		nodeInfo.add(topoName);
++			            		nodeInfo.add(nextNode.varName());
++			            		nextConsumingNode.add(subPipeline.name, nodeInfo);
++			            		subPipInFamilyElement.add(subPipeline.name, fe);
++			            	}            	
++		            	}
++	            	}
++	            	vilTemplateProcessor("storm" + elt.type(), config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", preElt = prevar, elt=elt, topoName=topoName, nameToOutputMap=nameToOutputMap, globalMap=globalMap, lastElementMap=lastElementMap, algToPort=algToPort, subPipelineFamily=subPipelineFamily, tupleToGrouping=tupleToGrouping, subAlgName=algName, debug=debug, connector=false);
++	            } else {
++	            	String type;
++	            	if(elt.type() == "ReplaySink") {//if it's ReplaySink, execute the stormSink template
++	            		type = "Sink";
++	            	} else {
++	            		type = elt.type();
++	            	}
++	            	vilTemplateProcessor("storm" + type, config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", preElt = prevar, elt=elt, topoName=topoName, nameToOutputMap=nameToOutputMap, globalMap=globalMap, lastElementMap=lastElementMap, debug=debug);
++	            }
++	            //collect sinks in the pipeline.
++	            if(elt.type() == "Sink" or elt.type() == "ReplaySink") {
++	            	Sink sink = elt;
++	            	sinks.add(sink);
++	            }
++	            processElement(elt.byName("output").variables(), elt, config, topoName, subPipelineFamily, algName, debug);
++        	}
++        }; 
++    }
++    
++    Boolean isSubTopologyBasedAlgorithm(Algorithm alg) = : {
++    	Boolean result = false;
++    	if((alg.type() == "SubPipelineAlgorithm") or (alg.type() == "HardwareAlgorithm")) {
++    		result = true;
++    	} 
++    	if(alg.type() == "SoftwareAlgorithm") {
++    		SoftwareAlgorithm a = alg;
++    		if(!a.algTopologyClass.isNull() and a.algTopologyClass.isConfigured()) {
++    			result = true;
++    		}
++    	} 
++		result;
++    }
++    
++    protected mappingTupleAndGrouping(sequenceOf(DecisionVariable) output, mapOf(Tuple, Grouping) tupleToGrouping) = : {
++    	for(Flow f : output) {
++			tupleToGrouping.add(f.tupleType, f.grouping);
++		}
++    }
++    
++    // entry point for interface generation - do not change the name / signature
++    interfaces(Project source, Configuration config, Project target) = : cleanupInterfaces(target) {
++    	QM topLevel = config;
++    	
++        // generate data source interfaces
++		sequenceOf(DataSource) sources = topLevel.dataSources->select(s|!s.profilingSource);
++	    for(DataSource dataSrc : sources) {
++            String srcName = dataSrc.name.firstToUpperCase(); 
++	    	vilTemplateProcessor("dataSourceInterface", config, "$ifGen/eu/qualimaster/data/inf/I${toIdentifier(srcName)}.java", elt=dataSrc, pkg="eu.qualimaster.data"); //generate the data source interface
++            vilTemplateProcessor("dataSourceImplementation", config, "$ifGen/eu/qualimaster/data/imp/${toIdentifier(srcName)}.java", elt=dataSrc, pkg="eu.qualimaster.data", profiling=false);
++	    	createProtosFor(dataSrc, srcName, config, target);
++	    	String prefixImpPath = "$ifGen/eu/qualimaster/data/imp/${toIdentifier(srcName)}";
++	    	String pkg = "eu.qualimaster.data";
++	    	vilTemplateProcessor("tupleSerialization", config, "${prefixImpPath}Serializers.java", elt=dataSrc, pkg=pkg); 
++	    };
++	    //generate data sink interfaces
++		sequenceOf(DataSink) sinks = topLevel.dataSinks;
++	    for(DataSink dataSnk : sinks) {
++            String snkName = dataSnk.name.firstToUpperCase();
++	    	vilTemplateProcessor("dataSinkInterface", config, "$ifGen/eu/qualimaster/data/inf/I${toIdentifier(snkName)}.java", elt=dataSnk); //generate the data sink interface
++            vilTemplateProcessor("dataSinkImplementation", config, "$ifGen/eu/qualimaster/data/imp/${toIdentifier(snkName)}.java", elt=dataSnk, profiling=false);	
++	    	createProtosFor(dataSnk, snkName, config, target);
++	    	String prefixImpPath = "$ifGen/eu/qualimaster/data/imp/${toIdentifier(snkName)}";
++	    	String pkg = "eu.qualimaster.data";
++	    	vilTemplateProcessor("tupleSerialization", config, "${prefixImpPath}Serializers.java", elt=dataSnk, pkg=pkg);
++	    };
++	    
++		for(DecisionVariable f=topLevel.families) {
++			Family family = f;
++			String ifName = "I" + family.name.firstToUpperCase(); 
++			String fName = family.name.firstToUpperCase();			
++
++			//generate the family interfaces and implementations
++			createInterfacesFor(f, ifName, config, target);			
++			createProtosFor(f, fName, config, target);
++			createImpFor(f, fName, config, target);		
++		};
++		vilTemplateProcessor("serializationRegistry", config, "$ifGen/eu/qualimaster/families/imp/SerializationRegistry.java", families=topLevel.families);
++	}  
++ 
++    /**
++     * Obtain the globalMap.
++     */
++    protected obtainGlobalMapForTuples(Pipeline pip, setOf(DecisionVariable) families) = : {//globalMap --> <elementName, mapOf(inputTuple, outputTuple)>
++    	Boolean isSubPipeline = false; //consider the subPipeline
++    	setOf(DecisionVariable) flows = {};//mark the visited flows
++    	if(pip.type() == "SubPipeline") {
++    		isSubPipeline = true;
++    	}
++		for(DecisionVariable v = pip.sources){
++            //add <name,outputTuple> from sources for both main- and sub-pipeline
++        	Source src = v;
++            DataSource dataSrc = src.source;
++            String srcName = dataSrc.name;
++        	Tuples outputTuples = dataSrc.input;
++        	String name = "I" + srcName.firstToUpperCase().toIdentifier();
++            obtainNameToOutputMap(outputTuples, name, true);
++            
++            if(!isSubPipeline) {//main pipeline            	
++            	processForGlobalMap(v.byName("output").variables(), v, families, pip.name, flows);  
++            }  		
++		};
++    	if(isSubPipeline) {//subPipeline
++    		SubPipeline subPip = pip;
++    		processForGlobalMap(subPip.connectors, subPip.subPipelineFamily, families, subPip.name, flows); 
++    	}
++    }        
++   
++	protected checkedLastElementForOutputTuples(setOf(DecisionVariable) lastElementSet, sequenceOf(Tuple) outputTuples) = : {
++	    //Collect all output tuples from last elements	   	
++		for(DecisionVariable lastElt : lastElementSet){
++			sequenceOf(Tuple) tmpTuples = {};
++	    	if(lastElt.type() == "Source") {
++	    	   Source src = lastElt;
++	    	   DataSource dataSrc = src.source;
++	    	   tmpTuples = dataSrc.input;
++	    	} else if(lastElt.type() == "FamilyElement") {
++	     	   Family lastEltFamily = lastElt.byName("family");
++	   	       tmpTuples = lastEltFamily.output;
++	    	} else if(lastElt.type() == "DataManagementElement"){
++	    	   String name = lastElt.varName().firstToUpperCase();
++	    	   setOf(DecisionVariable) preLastEltSet = lastElementMap.get(name);
++	    	   checkedLastElementForOutputTuples(preLastEltSet, outputTuples);
++	    	}	   	    	 	 
++	        for(Tuple t = tmpTuples){
++	            if(outputTuples.excludes(t)) {
++	    	        outputTuples.add(t); 
++	    	    }
++	        }
++	    }
++	}
++	
++	/**
++	 * @param flows the set of already-visited flows
++	 */
++    protected processForGlobalMap(sequenceOf(DecisionVariable)output, DecisionVariable lastVar, setOf(DecisionVariable) families, String topoName, setOf(DecisionVariable) flows) = : {//globalMap --> <elementName, mapOf(inputTuple, outputTuple)>
++    	setOf(DecisionVariable) lastElementSet = {};
++    	sequenceOf(Tuple) inputTuples = {};    	
++    	sequenceOf(Tuple) outputTuples = {};
++    	for(Flow f = output){    		
++    		if(flows.excludes(f)) {//check whether the flow is already visited
++				flows.add(f);				
++				DecisionVariable elt = f.destination;	
++	    	    String eltName = elt.varName().firstToUpperCase();
++	    	    //check current element (FamilyElement, DataManagement or Sink)
++	    	    if(elt.type() != "DataManagementElement") {
++	                mapOf(Tuple, sequenceOf(Tuple)) tempMap = {};
++		    	    if(elt.type() == "FamilyElement"){
++		    	    	 DecisionVariable eltFamilyVar = elt.byName("family"); 
++		    	    	 Family eltFamily = elt.byName("family"); 
++		    	    	 String fName = eltFamily.name; 	    	     	    	 
++		    	    	 obtainNameToOutputMap(eltFamily.output, "II"+ fName.firstToUpperCase(), true); //obtain <currentElementName, outputTuple>
++		    	         inputTuples = eltFamily.input;
++		    	         //collect families
++		    	         families.add(eltFamily);  
++		    	         //collect the family element using the hardware algorithm
++		    	         if(hasHardwareAlgorithm(eltFamily)) {
++		    	         	hwFamilyElements.add(elt);
++		    	         } 	         
++		    	    } else if(elt.type() == "Sink" or elt.type() == "ReplaySink"){
++		    	    	 Sink snk = elt;
++		    	    	 DataSink dataSnk = snk.sink;
++		    	    	 inputTuples = dataSnk.output;
++		    	    }    	    
++		    	    //check last elements linked to the current elt in order to obtain the output Tuples from last element(lastElement only can be Source or Family)
++		    	    lastElementSet = lastElementMap.get(eltName);
++		    	    checkedLastElementForOutputTuples(lastElementSet, outputTuples); //get all output tuples from last elements	    
++		    	    //tempMap = inputTuples.mapAny(outputTuples); //the old mapSequence checking all fields in the tuple.
++		    	    mapSequenceMulti(inputTuples, outputTuples, tempMap);
++		    	    globalMap.add(eltName, tempMap);
++		    	    processForGlobalMap(elt.byName("output").variables(), elt, families, topoName, flows); 
++	    	    } else { // if elt is DataManagementElement, just pass to next bolt
++	    	    	processForGlobalMap(elt.byName("output").variables(), elt, families, topoName, flows); 
++	    	    } 
++	    	    if(looseSub) {//collect nodes information of sub-pipelines
++	    	    	subPipToLastElement.add(topoName, elt); //record the last element name of the sub-pipeline   
++	    	    }					
++			}				    	           	       	    
++    	};
++    }
++    
++    //used for sub-pipeline case
++    protected processForGlobalMap(setOf(FamilyElement) connectors, Family subPipelineFamily, setOf(DecisionVariable) families, String topoName, setOf(DecisionVariable) flows) = : {//globalMap --> <elementName, mapOf(inputTuple, outputTuple)>
++    	sequenceOf(Tuple) inputTuples = {};
++    	sequenceOf(Tuple) outputTuples = {};    	
++    	setOf(DecisionVariable) lastElementSet = {};
++
++    	obtainNameToOutputMap(subPipelineFamily.input, "II" + subPipelineFamily.name.firstToUpperCase(), false);//the connector in the subpipeline receives the input of the family
++    	for(DecisionVariable elt = connectors){
++            mapOf(Tuple, sequenceOf(Tuple)) tempMap = {};
++    		if(looseSub) {//collect nodes information of sub-pipelines
++    			subPipToLastElement.add(topoName, elt); //record the last element name of the sub-pipeline
++    		}
++    	    String eltName = elt.varName().firstToUpperCase();
++    	    //connectors will be only FamilyElement
++	    	DecisionVariable eltFamilyVar = elt.byName("family"); 
++	    	Family eltFamily = elt.byName("family"); 
++//	    	String fName = eltFamilyVar.varName(); 	
++			String fName = eltFamily.name;     	     	    	 
++	    	obtainNameToOutputMap(eltFamily.output, "II"+ fName.firstToUpperCase(), true); //obtain <currentElementName, outputTuple>
++	        inputTuples = eltFamily.input;
++	    	//collect families
++	    	families.add(eltFamily);   	         
++	    	
++	    	//check last elements linked to the current elt in order to obtain the output Tuples from last element(lastElement only can be Source or Family)
++	    	if(lastElementMap.containsKey(eltName)) {//basically only if there is source as the last element
++	    		lastElementSet = lastElementMap.get(eltName);
++	    		checkedLastElementForOutputTuples(lastElementSet, outputTuples); //get all output tuples from last elements	 
++	    	}
++	    	for(Tuple t = subPipelineFamily.input) { //the connector has also the input from the up-level family
++	    		outputTuples.add(t);
++	    	}           	    	    	       
++	    	//tempMap = inputTuples.mapAny(outputTuples); //the old mapSequence checking all fields in the tuple.
++	    	mapSequenceMulti(inputTuples, outputTuples, tempMap);
++	    	globalMap.add(eltName, tempMap);
++	    	processForGlobalMap(elt.byName("output").variables(), elt, families, topoName, flows); 
++    	};
++    }
++    
++    /**
++     * Obtain nameToOutputMap.
++     */
++    protected obtainNameToOutputMap(Tuples tuples,  String elementName, Boolean output) = : {//nameToOutputMap --> <elementName, outputTuple>
++    	String eName = "";
++    	String ending;
++    	if(output) {
++    		ending = "Output";
++    	} else {
++    		ending = "Input";
++    	}
++        for(Tuple t = tuples) {
++			eName = t.name;
++            String name = elementName + firstToUpperCase(eName) + ending;
++            nameToOutputMap.add(t,name);    
++        };
++    }
++    
++    protected obtainLastElementMap(Pipeline pip) = : {//lastElementMap --> <elementName, setOf(lastElement)>
++       	Boolean isSubPipeline = false; //consider the subPipeline
++    	if(pip.type() == "SubPipeline") {
++    		isSubPipeline = true;
++    	}
++       	setOf(String) flows = {};
++       	if(!isSubPipeline) {
++       		for(DecisionVariable v = pip.sources){
++       			setOf(DecisionVariable) lasts = {};
++       			lasts.add(v);
++            	processForLastElementMap(v.byName("output").variables(), lasts, flows);    		
++    		};
++       	} else {//for sub-topology
++       		SubPipeline subPip = pip; 
++       		for(DecisionVariable d = subPip.connectors) {//connectors 
++       			setOf(DecisionVariable) lasts = {};
++       			lasts.add(d);
++       			processForLastElementMap(d.byName("output").variables(), lasts, flows);
++       		};
++       		for(DecisionVariable v = pip.sources) {//sources
++       			setOf(DecisionVariable) lasts = {};
++       			lasts.add(v);
++       			processForLastElementMap(v.byName("output").variables(), lasts, flows);
++       		}
++       	}
++    } 
++  
++    protected processForLastElementMap(sequenceOf(DecisionVariable)output, setOf(DecisionVariable) lastVars, setOf(String) flows) = : { //lastElementMap --> <elementName, setOf(lastElement)>  		
++  		String flowName;
++  		for(Flow f = output){
++  			flowName = f.name;
++  			if(flows.excludes(flowName)) {
++				flows.add(flowName);  				
++	    	    DecisionVariable elt = f.destination;
++	    	    String eltName = elt.varName().firstToUpperCase();
++	    	    setOf(DecisionVariable) tempSet = {};
++	    	    
++		    	if(lastElementMap.containsKey(eltName)) { 
++		    	    tempSet = lastElementMap.get(eltName);
++			    	setOf(DecisionVariable) t = {}; 
++			    	for(DecisionVariable v : tempSet){
++			    	    t.add(v);
++			    	};
++					for(DecisionVariable dv : lastVars) {//multiple last elements
++	    	    	   if(t.excludes(dv)) {//if the element is already included, skip this   	    	
++		    	    	 t.add(dv); 
++		    	       }
++	    	    	}
++	    	    	tempSet = t;
++		    	} else {
++		    	   	for(DecisionVariable dv : lastVars) {//multiple last elements
++		    	    	tempSet.add(dv);
++		    	    } 
++		    	}  	       	    
++		    	lastElementMap.add(eltName, tempSet);
++		       
++		       //collect the last elements
++		       setOf(DecisionVariable) lastElts = {};   
++	    	   if(elt.type() == "FamilyElement") {//check whether the family element is configured to a sub-pipeline algorithm.
++    	    	  Family fm = elt.byName("family");
++    	    	  for(Algorithm alg : fm.members) {
++    	    		if(alg.type() == "SubPipelineAlgorithm") {
++    	    			SubPipelineAlgorithm subAlg = alg;
++						Pipeline pip = subAlg.subPipeline;
++						String pipName = pip.name;
++						if(subPipToLastElement.containsKey(pipName)) {
++							lastElts.add(subPipToLastElement.get(pipName));//add the last element of the sub-pipeline additionally
++    	    			}
++    	    	    } 
++    	    	    lastElts.add(elt);    	    	    
++    	          }
++	    	    } else {
++	    	    	lastElts.add(elt);
++	    	    }
++	    	    
++	    	    if(elt.byName("output").variables().size() > 0){
++	    	    	processForLastElementMap(elt.byName("output").variables(), lastElts, flows);
++	    	    }   
++    	    } 	    
++    	};
++    } 
++	
++	protected includesVariable(setOf(DecisionVariable) variables, DecisionVariable var, Boolean result) =: {
++		for(DecisionVariable dVar = variables) {
++			if(dVar.varName() == var.varName()) {
++				result = true;
++			}
++		}
++	}
++	
++	protected lastTupleTypes(DecisionVariable elt, sequenceOf(Tuple) inputTuples, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, Tuple)) globalMap, setOf(String) lastTypes) =: {
++	    //get the inputToOutputMapping of this family element
++		String eltName = elt.varName().firstToUpperCase();
++		mapOf(Tuple, Tuple) inputToOutputMapping = {};
++		if(globalMap.containsKey(eltName)){
++			inputToOutputMapping = globalMap.get(eltName);
++		}
++		String tupleName;
++		String outputInfName;
++	    for(Tuple t : inputTuples) {
++			tupleName = t.name;
++			//get output interface name	
++			if(inputToOutputMapping.containsKey(t))	{
++			  Tuple output = inputToOutputMapping.get(t);
++			  outputInfName = nameToOutputMap.get(output);
++			  lastTypes.add(outputInfName);				
++			} 
++	    };
++	}
++	
++    protected createImpFor(Family family, String fName, Configuration config, Project target) = : {
++    	String prefixImpPath = "$ifGen/eu/qualimaster/families/imp/${toIdentifier(fName)}";
++    	String pkg = "eu.qualimaster.families";
++    	vilTemplateProcessor("familyImplementationJava", config, "$prefixImpPath.java", family=family);
++    	vilTemplateProcessor("tupleSerialization", config, "${prefixImpPath}Serializers.java", elt=family, pkg=pkg);
++    }
++    
++    protected createInterfacesFor(Family family, String ifName, Configuration config, Project target) = : {
++        String prefixPath = "$ifGen/eu/qualimaster/families/inf/${toIdentifier(ifName)}";
++    	vilTemplateProcessor("familyInterfaceJava", config, "$prefixPath.java", family=family, ifName=ifName);
++    	//vilTemplateProcessor("familyInterfaceC", config, "$prefixPath.c", family=family, ifName=ifName);
++    	
++    }
++    
++	protected createProtosFor(Family family, String name, Configuration config, Project target) = : {
++        String prefixPath = "$ifGen/protobuf/${toIdentifier(name)}";
++        String pkg = "eu.qualimaster.families";
++    	vilTemplateProcessor("protoFiles", config, "$prefixPath.proto", elt=family, pkg=pkg);    	
++    }
++    
++    protected createProtosFor(DataSource dataSrc, String name, Configuration config, Project target) = : {
++        String prefixPath = "$ifGen/protobuf/${toIdentifier(name)}";
++        String pkg = "eu.qualimaster.data";
++    	vilTemplateProcessor("protoFiles", config, "$prefixPath.proto", elt=dataSrc, pkg=pkg);    	
++    }
++    
++    protected createProtosFor(DataSink dataSnk, String name, Configuration config, Project target) = : {
++        String prefixPath = "$ifGen/protobuf/${toIdentifier(name)}";
++        String pkg = "eu.qualimaster.data";
++    	vilTemplateProcessor("protoFiles", config, "$prefixPath.proto", elt=dataSnk, pkg=pkg);    	
++    }
++    
++    protected createHardwareAlgorithms(FamilyElement fmElt, String pipelineName, Configuration config, Project target) = : {
++    	Family family = fmElt.family;
++    	for(Algorithm alg : family.members) {
++    		String algName = alg.name;
++    		if(alg.type() == "HardwareAlgorithm") {
++    			HardwareAlgorithm hwAlg = alg;
++    			hardwareAlgorithms.add(hwAlg);
++    			String prefixPath = "$hwAlgorithms/eu/qualimaster/algorithms/${firstToUpperCase(toIdentifier(algName))}";    			
++    			vilTemplateProcessor("stormHardwareAlgorithmSubTopology", config, "$prefixPath/${firstToUpperCase(toIdentifier(algName))}SubTopology.java", family=family, algorithm=hwAlg, pipelineName=pipelineName, algName=algName);
++    			vilTemplateProcessor("stormHardwareConnectionBolt", config, "$prefixPath/HardwareConnectionBolt.java", family=family, algorithm=hwAlg);
++    			vilTemplateProcessor("stormHardwareConnectionSpout", config, "$prefixPath/HardwareConnectionSpout.java", family=family, algorithm=hwAlg, topoName=pipelineName);
++    			vilTemplateProcessor("hardwareAlgorithmPom", config, "$prefixPath/pom.tmp", algName=algName);
++    			//generate a mapping xml 
++				vilTemplateProcessor("hardwareAlgorithmMapping", config, "$prefixPath/mapping.tmp", algorithm=hwAlg, pipName=pipelineName); 
++    			vilTemplateProcessor("profileCtl", config, "$prefixPath/profiling/profile.ctl", artifact=hwAlg.artifact);
++    			if(looseSub) {//generate the intermediary nodes for loose integration --TODO: take care of the pipeline name (container)
++    				vilTemplateProcessor("stormIntermediarySpout", config, "$prefixPath/${firstToUpperCase(toIdentifier(algName))}Intermediary.java", topoName=alg.name,fmElt=fmElt, algorithm=alg, globalMap=globalMap, lastElementMap=lastElementMap, nameToOutputMap=nameToOutputMap, algNameToPort=algToPort);
++    				vilTemplateProcessor("stormEndBolt", config, "$prefixPath/${firstToUpperCase(toIdentifier(algName))}EndBolt.java", topoName=alg.name, topLevelPip=alg.name, fmElt=fmElt, algorithm = alg, nextNode=null);
++    				//vilTemplateProcessor("stormPipeline", config, "$prefixPath/Topology.java", pipeline=subPip, familiesInPipeline=familiesInPipeline, lastElementMap=lastElementMap); TODO:generate the Topology class
++    			}
++    			//maven("$prefixPath");
++    			vilTemplateProcessor("hardwareSender", config, "$hwGen/${firstToUpperCase(toIdentifier(algName))}/sender.cpp", family=family);
++    			vilTemplateProcessor("hardwareReceiver", config, "$hwGen/${firstToUpperCase(toIdentifier(algName))}/receiver.cpp", family=family);
++    		}
++    	};
++    } 
++    
++    protected createPipelines(Pipeline pip, DecisionVariable alg, String profilingArtifact) = : {//inputTuples is the input of the algorithm    	      	
++        	String algName;
++        	if(alg != null) {
++        		algName = alg.byName("name"); 
++        	}
++        	//clean up mappings
++        	if(!looseSub) {//for loose integration the map information collected in the sub-pipeline is needed
++	        	lastElementMap = {}; 
++	    		inputToOutputMap = {};
++	    		nameToOutputMap = {}; 
++	    		globalMap = {}; 
++    		}
++    		familiesInPipeline = {}; 
++    
++        	String name;
++        	String topoName = pip.name;
++        	Boolean debug = pip.debug;
++        	Boolean isSubPipeline = false; //consider the subPipeline
++        	Family subPipelineFamily;
++	    	if(pip.type() == "SubPipeline") {
++	    		isSubPipeline = true;
++	    	}  
++        	sinks = {};//reset the sink collection.
++        	permissibleParas ={};//reset the permissible parameter set.          
++        	setOf(DecisionVariable) families = {}; //collect the families of the pipeline in order to manage the imports for the topology class
++        	//test for map
++        	obtainLastElementMap(pip);
++        	obtainGlobalMapForTuples(pip, families); //carrying the input information of the subPipeline algorithm
++        	
++        	//generate the hardware algorithms
++        	//for(Family family : families) {
++        	for(FamilyElement fElt : hwFamilyElements->toSequence()->sortedBy(e|e.name)) {
++        		createHardwareAlgorithms(fElt, topoName, config, target);
++        	};
++        	
++        	familiesInPipeline.add(topoName, families);
++//        	vilTemplateProcessor("pipelineMap", config, "$pipelines/${toIdentifier(topoName)}/pipelineMap.java",nameToOutputMap=nameToOutputMap, globalMap=globalMap, lastElementMap=lastElementMap);             
++        	if(!isSubPipeline) {        		                  	      	
++            	vilTemplateProcessor("mappingXml", config, "$pipelines/${toIdentifier(topoName)}/mapping.tmp", pipeline=pip, families=families, subAlgName=null); 
++            	vilTemplateProcessor("stormPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/Topology.java", pipeline=pip, algName=null, familiesInPipeline=familiesInPipeline, lastElementMap=lastElementMap);
++				
++				for(DecisionVariable v=pip.sources) {
++            		Source src = v;
++					DataSource dataSrc = src.source;
++					//collect permissible parameters
++					for(Parameter p : src.permissibleParameters) {
++						permissibleParas.add(p);
++					}
++            	    if (dataSrc.profilingSource) {
++                        String srcName = dataSrc.name.firstToUpperCase(); 
++          	    	    vilTemplateProcessor("dataSourceInterface", config, "$pipelines/${toIdentifier(topoName)}/topology/inf/I${toIdentifier(srcName)}.java", elt=dataSrc, pkg="eu.qualimaster.${toIdentifier(topoName)}.topology"); //generate the data source interface
++                        vilTemplateProcessor("dataSourceImplementation", config, "$pipelines/${toIdentifier(topoName)}/topology/imp/${toIdentifier(srcName)}.java", elt=dataSrc, pkg="eu.qualimaster.${toIdentifier(topoName)}.topology", profiling=true);
++                        vilTemplateProcessor("dataSourceProfilingImplementation", config, "$pipelines/${toIdentifier(topoName)}/topology/imp/${toIdentifier(srcName)}Profiling.java", elt=dataSrc, pkg="eu.qualimaster.${toIdentifier(topoName)}.topology", pip=pip, src=src);
++            	    }
++					
++					name = v.varName().firstToUpperCase() + v.type();
++					vilTemplateProcessor("storm" + v.type(), config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", elt=v, topoName=topoName, debug=debug);
++					processElement(v.byName("output").variables(), v, config, topoName, subPipelineFamily, algName, debug);
++				};
++				//generate a pom xml
++				setOf(String) subPipNames = {};
++				for(SubPipeline subPip : subPipelines) {
++					subPipNames.add(subPip.name);
++				}
++        		vilTemplateProcessor("pipelinePom", config, "$pipelines/${toIdentifier(topoName)}/pom.tmp", pipeline=pip, repoURL=repositoryURL, interfaceArtifact=interfaceArtifact, profiling=false, subPipNames=subPipNames);
++				vilTemplateProcessor("settingsXml", config, "$pipelines/${toIdentifier(topoName)}/settings.tmp", sinks=sinks, permissibleParameters=permissibleParas, lastElementMap=lastElementMap, topoName=topoName);
++				settingPaths.add(topoName, "$pipelines/${toIdentifier(topoName)}/settings.xml");
++            } else {
++            	SubPipeline subPip = pip;
++            	subPipelineFamily = subPip.subPipelineFamily;
++            	vilTemplateProcessor("profileCtl", config, "$pipelines/${toIdentifier(topoName)}/profiling/profile.ctl", artifact=profilingArtifact);
++				//generate a pom xml
++        		vilTemplateProcessor("pipelinePom", config, "$pipelines/${toIdentifier(topoName)}/pom.tmp", pipeline=pip, repoURL=repositoryURL, interfaceArtifact=interfaceArtifact, profiling=true, subPipNames={}); 								
++				//generate a mapping xml
++				vilTemplateProcessor("mappingXml", config, "$pipelines/${toIdentifier(topoName)}/mapping.tmp", pipeline=pip, families={}, subAlgName=algName); 
++				//equip an intermediary spout and an ending bolt for the sub-pipeline
++    			if(looseSub) {    			
++    				sequenceOf(String) nodeInfo = {};
++    				if(nextConsumingNode.containsKey(subPip.name)) {
++    					nodeInfo = nextConsumingNode.get(subPip.name);
++    				}
++    				String topLevelPip = nodeInfo[0];
++    				String nextNode = nodeInfo[1];
++    				DecisionVariable fmElt;
++    				//obtain the family element name using the subpipeline as an algorithm
++    				if(subPipInFamilyElement.containsKey(subPip.name)) {
++    					fmElt = subPipInFamilyElement.get(subPip.name);
++    				}
++    				if(newSwitch) {//use the switch nodes
++    					vilTemplateProcessor("stormIntermediarySpout", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(algName))}Intermediary.java", topoName=topoName,topLevelPip = topLevelPip, fmElt=fmElt, algorithm=alg, globalMap=globalMap, lastElementMap=lastElementMap, nameToOutputMap=nameToOutputMap, algNameToPort=algToPort);
++    					vilTemplateProcessor("stormEndBolt", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(algName))}EndBolt.java", topoName=topoName, topLevelPip = topLevelPip, fmElt=fmElt, algorithm = alg, nextNode = nextNode);
++    				} else {
++    					vilTemplateProcessor("stormIntermediarySpoutSubPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(algName))}Intermediary.java", topoName=topoName, algorithm = alg);
++    					vilTemplateProcessor("stormEndBoltSubPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(algName))}EndBolt.java", topoName=topoName, topLevelPip = topLevelPip, nextNode = nextNode, algorithm = alg);
++    				}
++    			}
++               
++				for(DecisionVariable v=subPip.connectors) { //connectors are FamilyElement
++					name = v.varName().firstToUpperCase() + v.type();
++					mapOf(Tuple, Grouping) tupleToGrouping = {};
++	            	if(!subPipelineFamily.isNull()) {
++	            		mappingTupleAndGrouping(v.byName("output").variables(), tupleToGrouping);
++	            		subPipToLastElement.add(topoName, v);//record the last element from the sub-pipeline
++	            	}
++					vilTemplateProcessor("storm" + v.type(), config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", preElt = v, elt=v, topoName=topoName, nameToOutputMap=nameToOutputMap, globalMap=globalMap, lastElementMap=lastElementMap, subPipelineFamily = subPipelineFamily, tupleToGrouping=tupleToGrouping, subAlgName=algName, debug=debug, connector=true);
++					processElement(v.byName("output").variables(), v, config, topoName, subPipelineFamily, algName, debug);
++				};
++				for(DecisionVariable v=pip.sources) { //sources
++					name = v.varName().firstToUpperCase() + v.type();
++					vilTemplateProcessor("storm" + v.type(), config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", elt=v, topoName=topoName, debug=debug);
++				}
++				vilTemplateProcessor("stormSubPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(topoName))}SubTopology.java", pipeline=subPip, family=subPipelineFamily, algName=topoName);
++				if(looseSub) { //generate Topology for sub-pipeline
++					vilTemplateProcessor("stormPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/Topology.java", pipeline=subPip, algName=algName, familiesInPipeline=familiesInPipeline, lastElementMap=lastElementMap);
++				}
++			}
++                      
++           package(topoName);                
++    }
++    
++    package(String topoName) = : {
++    	//jar("${target.getPath()}/bin", "${target.getPath()}/bin/**/*.class", "${target.getPath()}/Lib.jar");
++    	//maven("$pipelines/${toIdentifier(topoName)}",true);
++    }  
++    
++    /**
++	 * Has hardware algorithm among family members.
++	 */
++	Boolean hasHardwareAlgorithm(Family fm) = : {
++		Boolean result = false;
++		for(Algorithm alg : fm.members) {
++			if(alg.type() == "HardwareAlgorithm") {
++				result = true;
++			}
++		}
++		result;
++	}
++    
++    main(Project source, Configuration config, Project target) = : cleanup(target) {  
++    	//Project level config
++    	QM cfg = config;
++    	    	              
++        interfaces(source, config, target);       
++	    	    
++	    sequenceOf(DecisionVariable) activePipelines = cfg.activePipelines.variables();
++		interfaceArtifact = cfg.interfaceArtifact;
++		repositoryURL = cfg.repositoryURL;
++		modelArtifact = cfg.modelArtifact;
++		
++		setOf(Algorithm) algorithms = cfg.algorithms;
++		
++		setOf(FieldType) types = cfg.types;
++		
++	    //generate the interface pom
++	    vilTemplateProcessor("interfacesPom", config, "$ifGen/pom.tmp", interfaceArtifact=interfaceArtifact, types=types);
++	    //package interfaces --- should use maven install 
++	    //maven("$ifGen"); 
++	    //generate the pom for the model artifact
++	    vilTemplateProcessor("modelArtifactPom", config, "$modelGen/pom.tmp", modelArtifact=modelArtifact); 
++	    
++	    //generate the pipelines ANT mapping
++        sequenceOf(DecisionVariable) pipelines = {};
++        
++        for(DecisionVariable p : activePipelines) {
++        	pipelines.add(p);
++        }
++	    vilTemplateProcessor("pipelinesXml", config, "$target/pipelines.tmp", pipelines=pipelines, interfaceArtifact=interfaceArtifact, modelArtifact=modelArtifact, hardwareAlgorithms=hardwareAlgorithms);
++	    
++	    //generate the subPipeline algorithms
++	    for(Algorithm alg : algorithms) {
++	    	if(alg.type() == "SubPipelineAlgorithm") {
++	    		SubPipelineAlgorithm subAlg = alg;
++	    		SubPipeline subPipeline = subAlg.subPipeline;
++	    		//collect all configured sub-pipelines
++	    		subPipelines.add(subPipeline);
++	    		
++	    		String profilingArtifact = subAlg.artifact;
++	    		if(!looseSub) {
++	    			createPipelines(subPipeline, subAlg, profilingArtifact);
++	    		} else {//collect sub-pipeline information
++	    			obtainLastElementMap(subPipeline);
++	    			setOf(DecisionVariable) families = {};
++    				obtainGlobalMapForTuples(subPipeline, families); //carrying the input information of the subPipeline algorithm
++	    		}
++	    	}
++	    }
++
++	   	//add all sub-pipelines
++	   	for(DecisionVariable p : subPipelines) {
++        	pipelines.add(p);
++        }
++        
++        for(DecisionVariable vPip : activePipelines) {
++			Pipeline pip = vPip;
++			createPipelines(pip, null, "");  
++		};  
++		
++		if(looseSub) { //generate sub-pipeline after the main pipeline for the loose integration
++            sequenceOf(SubPipelineAlgorithm) subSeq = subPipelineAlgorithms->toSequence()->sortedBy(SubPipelineAlgorithm a|a.name);
++            for(SubPipelineAlgorithm subAlg : subSeq) {
++				SubPipeline subPipeline = subAlg.subPipeline;
++				String profilingArtifact = subAlg.artifact;
++				createPipelines(subPipeline, subAlg, profilingArtifact);
++			}
++		}
++		
++		//copy model files and package them
++		Path p = "$source/EASy/**/*.*";
++	    Path pt = "$modelGen/EASy";
++	    pt.mkdir();
++	    copy(p, pt); 
++	    
++	    //create folder for collecting setting xml files
++	    Path settingXmls = "$modelGen/settings";
++	   	settingXmls.mkdir();
++	   	setOf(String) pipNames = settingPaths.getKeys();
++	   	for(String s : pipNames) {
++	   		Path from = settingPaths.get(s);
++	   		Path to = "$settingXmls/${s}Settings.xml";
++	   		copy(from, to);
++	   	}
++	    
++	    //maven("$modelGen");
++	    
++	    //clear the initial pipelines xml file   
++	    pipelinesXml.delete(); 
++	    //regenerate the deployment xml file                       
++        vilTemplateProcessor("pipelinesXml", config, "$target/pipelines.tmp", pipelines=pipelines, interfaceArtifact=interfaceArtifact, modelArtifact=modelArtifact, hardwareAlgorithms=hardwareAlgorithms);             
++    }
++
++	// entry point for single pipeline generation - do not change the name / signature
++    pipeline(Project source, Configuration config, Project target, String pipelineName) = : cleanup(target) {
++    	QM cfg = config;
++
++        interfaceArtifact = cfg.interfaceArtifact;
++        repositoryURL = cfg.repositoryURL;
++        modelArtifact = cfg.modelArtifact;
++    	
++	    setOf(Pipeline) activePipelines = cfg.activePipelines->select(p|p.name == pipelineName);
++        for(Pipeline p : activePipelines->toSequence()->sortedBy(p|p.name)) {
++			createPipelines(p, null, "");  
++		};
++	}
++
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/AdaptivityCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/AdaptivityCfg.ivml
+new file mode 100644
+index 0000000..298e24c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/AdaptivityCfg.ivml
+@@ -0,0 +1,68 @@
++project AdaptivityCfg {
++ 
++	import Adaptivity;
++	import ObservablesCfg;
++
++	pipelineImportance = {
++		{parameter=refBy(qualityParameters[0]), weight = -1},
++		{parameter=refBy(qualityParameters[1]), weight = 1},
++		{parameter=refBy(qualityParameters[2]), weight = 1},
++		{parameter=refBy(qualityParameters[3]), weight = -1},
++		{parameter=refBy(qualityParameters[4]), weight = -1},
++		{parameter=refBy(qualityParameters[5]), weight = -1},
++		{parameter=refBy(qualityParameters[6]), weight = -1},
++		{parameter=refBy(qualityParameters[7]), weight = -1},
++		{parameter=refBy(qualityParameters[8]), weight = -1},
++		{parameter=refBy(qualityParameters[9]), weight = -1},
++		{parameter=refBy(qualityParameters[10]), weight = 1},
++		{parameter=refBy(qualityParameters[11]), weight = 1},
++		{parameter=refBy(qualityParameters[12]), weight = 1},
++		{parameter=refBy(qualityParameters[13]), weight = 1},
++		{parameter=refBy(qualityParameters[14]), weight = 1},
++		{parameter=refBy(qualityParameters[15]), weight = 1},
++		{parameter=refBy(qualityParameters[16]), weight = 1},
++		{parameter=refBy(qualityParameters[17]), weight = 1},
++		{parameter=refBy(qualityParameters[18]), weight = 1},
++		{parameter=refBy(qualityParameters[19]), weight = -1},
++		{parameter=refBy(qualityParameters[20]), weight = 1},
++        {parameter=refBy(qualityParameters[21]), weight = 1},
++        {parameter=refBy(qualityParameters[22]), weight = 0},
++        {parameter=refBy(qualityParameters[23]), weight = 0},
++        {parameter=refBy(qualityParameters[24]), weight = 0},
++        {parameter=refBy(qualityParameters[25]), weight = 0}
++	};
++
++	crossPipelineTradeoffs = {
++		{parameter=refBy(qualityParameters[0]), weight = -1},
++		{parameter=refBy(qualityParameters[1]), weight = 1},
++		{parameter=refBy(qualityParameters[2]), weight = 1},
++		{parameter=refBy(qualityParameters[3]), weight = -1},
++		{parameter=refBy(qualityParameters[4]), weight = -1},
++		{parameter=refBy(qualityParameters[5]), weight = -1},
++		{parameter=refBy(qualityParameters[6]), weight = -1},
++		{parameter=refBy(qualityParameters[7]), weight = -1},
++		{parameter=refBy(qualityParameters[8]), weight = -1},
++		{parameter=refBy(qualityParameters[9]), weight = -1},
++		{parameter=refBy(qualityParameters[10]), weight = 1},
++		{parameter=refBy(qualityParameters[11]), weight = 1},
++		{parameter=refBy(qualityParameters[12]), weight = 1},
++		{parameter=refBy(qualityParameters[13]), weight = 1},
++		{parameter=refBy(qualityParameters[14]), weight = 1},
++		{parameter=refBy(qualityParameters[15]), weight = 1},
++		{parameter=refBy(qualityParameters[16]), weight = 1},
++		{parameter=refBy(qualityParameters[17]), weight = 1},
++		{parameter=refBy(qualityParameters[18]), weight = 1},
++		{parameter=refBy(qualityParameters[19]), weight = -1},
++		{parameter=refBy(qualityParameters[20]), weight = 1},
++        {parameter=refBy(qualityParameters[21]), weight = 1},
++        {parameter=refBy(qualityParameters[22]), weight = 0},
++        {parameter=refBy(qualityParameters[23]), weight = 0},
++        {parameter=refBy(qualityParameters[24]), weight = 0},
++        {parameter=refBy(qualityParameters[25]), weight = 0}
++	};
++
++	freeze {
++		pipelineImportance;
++		crossPipelineTradeoffs;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/ObservablesCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/ObservablesCfg.ivml
+new file mode 100644
+index 0000000..40a8290
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/ObservablesCfg.ivml
+@@ -0,0 +1,9 @@
++project ObservablesCfg {
++
++	import Observables;
++	
++	freeze {
++		configuredParameters;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++	
++}  
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/StrategiesTacticsCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/StrategiesTacticsCfg.ivml
+new file mode 100644
+index 0000000..2c35ba2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/StrategiesTacticsCfg.ivml
+@@ -0,0 +1,6 @@
++project StrategiesTacticsCfg {
++
++	import StrategiesTactics;
++
++	
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonPomMethods.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonPomMethods.vtl
+new file mode 100644
+index 0000000..a5bf07a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonPomMethods.vtl
+@@ -0,0 +1,24 @@
++@advice(QM)
++template commonPomMethods(Configuration config, FileArtifact target) {
++	
++	def appendDependencyManagement(Text text) {
++		text.append("<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>\n");
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonVTLMethods.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonVTLMethods.vtl
+new file mode 100644
+index 0000000..12c2147
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonVTLMethods.vtl
+@@ -0,0 +1,1017 @@
++@advice(QM)
++template commonVTLMethods(Configuration config, FileArtifact target) { 
++	
++	Boolean genInstance = true;
++	Boolean genMultiOutputs = true;     // generate specific code for multiple output of one algorithm
++	Boolean genMonitoringProbes = true; // generate monitoring probes (false for experiments)
++	Boolean genMultiTupleTypes = true; // generate specific code for considering multiple tuple types in the algorithm output as well as 
++									   // adjusting the stream id to "EltVarName+TupleName/AlgName"
++	Boolean newSwitch = false;//enable the switch mode
++	Boolean newSwitchLog = false;//enable the switch-related logs
++	Boolean hwlog = false; //enable the hardware algorithm-related logs
++	Boolean fastQueueOperation = true; //faster operation on searching and deleting items from the queue (used LinkedList)
++	Boolean emitThread = true;//enable the separate thread for emitting the tuples in the hardware Spout
++	Boolean ackThread = true;//enable the separate thread for acknowledging the tuples in the hardware Bolt
++	Boolean ackEarlier = true;//acknowledge earlier in the hardware Bolt
++	Boolean batchData = false; //enable hardware Spout to receive data in the batch manner
++	Boolean newHWReceive = true; //switch between different receive method
++	Boolean initByAdaptation = true; // waiting for the adaptation layer to determine about the initial algorithms, autoRegister = true in main VIL
++	Boolean safeCast = true;//enable the safe cast while creating algorithm instance
++	Boolean receiveByField = false; //field-based receive statement 
++	Boolean multiHWThread = false; //enable multiple hardware threads within one spout
++	Boolean multiHWSpout = false; //enable multiple hardware spout
++	Boolean looseSub = false; //enable changes for loosing sub-pipeline integration	
++	Boolean dynamicHWUpload = true;//enable dynamic uploading of hardware algorithm
++	Boolean separateSourceThread = false;//use a separate thread to emit data
++	Boolean logData = false;//log the source input rate
++	
++	String GenAlgVersion = "0.0.1-SNAPSHOT"; //specify the version for generated algorithm
++	
++	def String parameterTypeName(DecisionVariable var) {
++    	switch(var.type()) {
++    		"IntegerParameter" : "int",
++    		"BooleanParameter" : "boolean",
++    		"RealParameter" : "double",
++    		"StringParameter" : "String",
++    		"LongParameter" : "long" 		
++    	}
++    }
++    
++    def Boolean formatException(String type) {
++    	switch(type) {
++    		"String" : false,
++    		default : true
++    	}
++    }
++    
++    def String parameterHwProtocol(DecisionVariable var) {
++    	switch(var.type()) {
++    		"IntegerParameter" : "a",
++    		"BooleanParameter" : "b",
++    		"RealParameter" : "c",
++    		"StringParameter" : "e",
++    		"LongParameter" : "f" 
++    	}
++    }
++    
++    def String parameterProto(DecisionVariable var) {
++    	switch(var.type()) {
++    		"IntegerParameter" : "SIntegerParameter",
++    		"BooleanParameter" : "SBooleanParameter",
++    		"RealParameter" : "SRealParameter",
++    		"StringParameter" : "SStringParameter",
++    		"LongParameter" : "SLongParameter" 
++    	}
++    }
++    
++    def obtainDefaultValue(FieldType type) {
++    	switch(type.class) {
++    		"int" : 0,
++    		"String" : "\"\"",
++    		"boolean" : false,
++    		"long" : 0, 
++    		"float" : 0.0,
++    		"double" : 0.0,
++    		"Object" : null,
++    		default : null
++    	}
++    }	
++
++    def String basicTypeForProto(FieldType type) {
++    	switch(type.class) {
++    		"int" : "int32",
++    		"String" : "string",
++    		"boolean" : "bool",
++    		"long" : "int64", 
++    		"float" : "float",
++    		"double" : "double",
++    		default : ""
++    	}
++    }	
++    
++    def String basicTypeForProto(String type) {
++    	switch(type) {
++    		"int" : "int32",
++    		"String" : "string",
++    		"boolean" : "bool",
++    		"long" : "int64", 
++    		"float" : "float",
++    		"double" : "double",
++    		default : ""
++    	}
++    }
++    
++    def Boolean isBasicType(FieldType type) {
++    	switch(type.class) {
++    		"int" : true,
++    		"String" : true,
++    		"boolean" : true,
++    		"long" : true, 
++    		"float" : true,
++    		"double" : true,
++    		default : false
++    	}
++    }
++    
++    def Boolean hasDirectGrouping(setOf(Flow) flows) {
++    	Boolean result = false;
++    	for(Flow f : flows) {
++    		if(f.grouping == Grouping.directGrouping) {
++    			result = true;
++    		}
++    	}
++    	result;
++    } 
++    
++    /*collect the destinations using direct emit and all grouping */
++    def directEmitDestination(setOf(Flow) flows, setOf(String) destinations) {
++    	for(Flow f : flows) {
++    		if(f.grouping == Grouping.directGrouping or f.grouping == Grouping.allGrouping) {
++    			PipelineNode dest = f.destination;
++    			if(!isStringExisted(dest.name, destinations)) {
++    				destinations.add(dest.name);
++    			}
++    		}
++    	}
++    }
++    
++    def String directEmitDestinationEltName(setOf(Flow) flows, String name) {
++        String result = "";
++        for(Flow f : flows) {
++            if(f.grouping == Grouping.directGrouping or f.grouping == Grouping.allGrouping) {
++                PipelineNode dest = f.destination;
++                if (dest.name == name) {
++                    result = dest.varName();
++                }
++            }
++        }
++        result;
++    }
++    
++    def Boolean isDirectGroupping(setOf(Flow) flows, Tuple tuple) {
++    	Boolean result = false;
++    	for(Flow f : flows) {
++    		if(f.tupleType == tuple) {
++    			if(f.grouping == Grouping.directGrouping) {
++    				result = true;
++    			}
++    		}
++    		
++    	}
++    	result;
++    }      
++    
++    def Boolean isAllGroupping(setOf(Flow) flows, Tuple tuple) {
++    	Boolean result = false;
++    	for(Flow f : flows) {
++    		if(f.tupleType == tuple) {
++    			if(f.grouping == Grouping.allGrouping) {
++    				result = true;
++    			}
++    		}
++    		
++    	}
++    	result;
++    } 
++    
++    /*Gets the name of the destination using all grouping based on given tuple */
++    def String allGroupingDestName(setOf(Flow) flows, Tuple tuple) {
++    	String result;
++    	for(Flow f : flows) {
++    		if(f.tupleType == tuple) {
++    			if(f.grouping == Grouping.allGrouping) {
++    				result = f.destination.name;
++    			}
++    		}
++    	}
++    	result;
++    }
++    
++    def Boolean isListType(FieldType type) {
++    	String class = type.class;
++    	if(class.matches("java.util.List.*")) {
++    		true;
++    	} else {
++    		false;
++    	}
++    }
++    
++    /**
++     * Obtain the inner type of the list.
++     */
++    def String obtainInnerType(String class) {
++    	String result;
++    	Integer len = class.length();
++    	result = class.substring(15, len - 1);
++    	result;
++    }
++    
++    def String fieldTypeName(DecisionVariable f) {
++		DecisionVariable type = f.byName("type");
++		String typeName = type.byName("class");
++		typeName;
++	}
++	
++	def String stripTemplates(String typeName) {
++		typeName = typeName.substitute("<.*>", "");
++		switch(typeName) {
++			"java.util.List" : "java.util.ArrayList",
++			default: typeName
++		}
++	}
++	
++	def Boolean isStringExisted(String name, setOf(String) checkSet) {
++    	Boolean exist = false;
++    	for(String n : checkSet) {
++    		if(name == n) {
++    			exist = true;   			
++    		}
++    	}
++    	exist;
++    }
++	
++	/**
++	 * Has generated sub-pipeline algorithm among family members.
++	 */
++	def Boolean hasGenAlgorithm(Family fm) {
++		Boolean result = false;
++		if(hasHardwareAlgorithm(fm) or hasSubPipelineAlgorithm(fm)) {
++			result = true;
++		}
++		result;
++	}
++	
++	/**
++	 * Has distributed algorithm among family members, including manually-implemented algorithm.
++	 */
++	def Boolean hasDistAlgorithm(Family fm) {
++		Boolean result = false;
++		for(Algorithm alg : fm.members) {
++			if(isDistAlgorithm(alg)) {
++				result = true;
++			}
++		}
++		result;
++	}
++	
++	/**
++	 * Has hardware algorithm among family members.
++	 */
++	def Boolean hasHardwareAlgorithm(Family fm) {
++		Boolean result = false;
++		for(Algorithm alg : fm.members) {
++			if(isHardwareAlgorithm(alg)) {
++				result = true;
++			}
++		}
++		result;
++	}
++	
++	/**
++	 * Has sub-pipeline-based (gen) algorithm among family members.
++	 */
++	def Boolean hasSubPipelineAlgorithm(Family family) {
++		Boolean result = false;
++		for(Algorithm alg : family.members) {
++			if(isGenSubtopology(alg)) {
++				result = true;
++			}
++		}
++		result;
++	}
++	
++	/**
++	 * is it a hardware algorithm(gen)?
++	 */
++	def Boolean isHardwareAlgorithm(Algorithm alg) {
++		Boolean result = false;
++		if(alg.type() == "HardwareAlgorithm") {
++			result = true;
++		}
++		result;
++	}
++	
++	/**
++	 * is it the manually implemented sub-topology algorithm?
++	 */
++	def Boolean isManualSubtopology(Algorithm algorithm) {//isSubtopology
++		Boolean result = false;
++		if(algorithm.type() == "SoftwareAlgorithm") {
++			SoftwareAlgorithm alg = algorithm;
++			if(!alg.algTopologyClass.isNull() and alg.algTopologyClass.isConfigured() and alg.algTopologyClass.length()>0) {
++				result = true;
++			}
++		}
++		result;
++	}
++	
++	/**
++	 * //is it the auto-generated sub-topology algorithm (SubPipelineAlgorithm type)?
++	 */
++	def Boolean isGenSubtopology(Algorithm algorithm) {//isSubPipelineAlgorithm
++		Boolean result = false;
++		if(algorithm.type() == "SubPipelineAlgorithm") {
++			result = true;
++		}
++		result;
++	}
++	
++	/**
++	 * Is it the distributed(sub-topology-based) algorithm (subpipeline, hardware or manually implemented algorithm)?
++	 */
++	def Boolean isDistAlgorithm(Algorithm alg) {
++		Boolean result = false;
++    	if(isManualSubtopology(alg) or isGenSubtopology(alg) or isHardwareAlgorithm(alg)) {
++    		result = true;
++    	}     	
++		result;
++	}
++	
++	def String formulateString(String s) {
++		String result = s.firstToUpperCase().toIdentifier();
++		result;
++	}
++	
++	def Boolean isActiveAlgorithm(Family fm, Algorithm currentAlg) { //assume that the first algorithm is the active one.
++		Boolean result = false;
++		Algorithm alg = fm.members.toSequence().get(0);
++		if(alg == currentAlg) {
++			result = true;
++		}
++		result;
++	}
++	
++    def String composePOptionsInit(String confName, String paramName, String type, Any value) {
++		String result;
++		if (confName.length() > 0) {
++			result = "PipelineOptions.getExecutor${type}Argument($confName, getName(), \"${paramName}\", $value)";
++		} else {
++			result = "$value";
++		}
++		result;
++	}
++		
++	def Boolean composeUndefPOptionsInit(Boolean undef, String confName, String paraName, String type, String neutral, String call, int indent) {
++   		Boolean u = (undef and confName.length() > 0);
++	    if (u) {
++            'if (PipelineOptions.hasExecutorArgument($confName, getName(), \"${paraName}\")) {' | indent;
++				'$call(PipelineOptions.getExecutor${type}Argument($confName, getName(), \"${paraName}\", $neutral));' | indent + 4;
++			'}' | indent;
++		}
++		!u;
++	}
++	
++	
++	def setDefaultParameterValue(sequenceOf(Parameter) parameters, String confName, String algName, int indent) {
++		for(Parameter p : parameters) {	
++			String paraName = p.name;
++			String call = "$algName.setParameter${paraName.firstToUpperCase()}";
++			String ty = p.type();
++			if(ty == "IntegerParameter") { 
++				IntegerParameter para = p;
++				String type = "Int";
++				Any defaultValue = para.defaultValue;
++				if(!isConfigured(para.defaultValue)) {
++					defaultValue = "0";
++				}
++				if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "0", call, indent)) {
++    				String tmp = composePOptionsInit(confName, paraName, type, defaultValue);
++    				'$call($tmp);' | indent;
++				}
++			} else if(ty == "BooleanParameter") { 
++				BooleanParameter para = p;
++                String type = "Boolean";
++                Any defaultValue = para.defaultValue;
++				if(!isConfigured(para.defaultValue)) {
++					defaultValue = "false";
++				}
++                if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "false", call, indent)) {
++                    String tmp = composePOptionsInit(confName, paraName, type, defaultValue);
++                    '$call($tmp);' | indent;
++                }
++			} else if(ty == "StringParameter") { 
++				StringParameter para = p;
++                String type = "String";
++                String defaultValue = para.defaultValue;
++				if(!isConfigured(para.defaultValue)) {
++					defaultValue = "\"\"";
++				}
++                if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "\"\"", call, indent)) {
++                    String tmp = composePOptionsInit(confName, paraName, type, "\"$defaultValue\"");
++                    '$call($tmp);' | indent;
++                }
++			} else if(ty == "RealParameter") { 
++				RealParameter para = p;
++                String type = "Double";
++                String defaultValue = para.defaultValue;
++				if(!isConfigured(para.defaultValue)) {
++					defaultValue = "0.0";
++				}
++                if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "0.0", call, indent)) {
++                    String tmp = composePOptionsInit(confName, paraName, type, defaultValue);
++                    '$call($tmp);' | indent;
++                }
++			} else if(ty == "LongParameter") { 
++				LongParameter para = p;
++                String type = "Long";
++                String defaultValue = para.defaultValue;
++				if(!isConfigured(para.defaultValue)) {
++					defaultValue = "0L";
++				}
++                if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "0L", call, indent)) {
++                    String tmp = composePOptionsInit(confName, paraName, type, defaultValue);
++                    '$call($tmp);' | indent;
++                }
++			}		
++		}
++	}
++	
++	def produceTypesRegistration(Tuples tuples, String fName, Boolean output, Integer indent) {
++		String tupleName;
++		String end;
++		if(output) {
++			end = "Output";
++		} else {
++			end = "Input";
++		}
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			String infName = 'I' + fName + "${firstToUpperCase(tupleName)}$end";
++			'new $infName();' | indent;
++		}
++	}
++	
++	def produceFieldsForLog(Fields fields, String object, Boolean sender, Boolean file, Integer indent) {
++		for (Field f : fields) {
++    			String fname = toIdentifier("${f.name}");
++    			String mname = firstToUpperCase(fname);
++    			if(file) {
++    				if(sender) {
++    					'out.println(Calendar.getInstance().getTimeInMillis() + " ,Sending data to hardware: " + $object.get${mname}());' | indent;
++	    				'out.flush();' | indent;
++	    			} else {
++	    				'out.println(Calendar.getInstance().getTimeInMillis() + " ,Received data from hardware: " + $object.get${mname}());' | indent;
++	    				'out.flush();' | indent;
++	    			}
++    			} else {
++	    			if(sender) {
++	    				'logger.info("Sending data to hardware: " + $object.get${mname}());' | indent;
++	    			} else {
++	    				'logger.info("Received data from hardware: " + $object.get${mname}());' | indent;
++	    			}
++    			}
++    		}
++	}
++	
++	def mapOf(String, setOf(String)) produceTuplesForHardwareVariables(Tuples tuples, String fName, Boolean output, int indent) {
++		mapOf(String, setOf(String)) serializers = {};
++		setOf(String) tmp;
++		String type;
++    	String tupleName;
++    	String ifName = "I" + fName;
++    	Boolean flag = true;
++		for (Tuple t : tuples) {
++			tmp = {};
++	    	tupleName = t.name;
++	    	   if(flag and output) { //for output in the sender
++	    	       type = "S${ifName}${firstToUpperCase(tupleName)}Output";
++	    	       'eu::qualimaster::families::protobuf::$type ${tupleName}Output;' | indent;
++	    	       flag = false; //assume that there is only one output type from the family
++	    	   }
++	    	   if(!output) { //for input considering the multiple case
++	    	       type = "S${ifName}${tupleName}Input";
++	    	       Boolean once1 = true;
++	    	       Boolean once2 = true;
++	    	       for (Field f : t.fields) {
++    	   		       FieldType ftype = f.type;
++    	   		       String fieldName = toIdentifier("${f.name}");  
++    			       String ptype = basicTypeForProto(ftype);
++    			       if(ptype != "" and once1) {
++    				       'eu::qualimaster::families::protobuf::$type ${tupleName}Input;' | indent;
++    				       tmp.add("${tupleName}Input");
++    				       once1 = false;
++    			       } else if(isListType(ftype) and once2) {
++    			       	   'eu::qualimaster::base::protos::SStringList stringList;' | indent;
++    			       	   tmp.add("stringList");
++    			       	   once2 = false;
++    			       } else if(ptype == "" and !isListType(ftype)){//algorithm-specific protobuf TODO: the actual path
++    			       	   'eu::qualimaster::families::protobuf::S${fieldName} ${fieldName};'
++    			       	   tmp.add("${fieldName}");
++    			       }			
++    		       }
++	        }
++	        serializers.add(tupleName, tmp);	    
++      	}
++      	serializers;		
++	}	
++	
++	def className(DecisionVariable elt) {
++    	elt.varName().firstToUpperCase() + elt.type(); 
++    }		
++	
++	def produceImportsFromLastElements(setOf(DecisionVariable) lastElt, mapOf(String, setOf(DecisionVariable)) lastElementMap, String topoName) {
++	    for(DecisionVariable v : lastElt) {
++    		if(v.type() == "Source"){
++    		  Source src = v;
++    	      DataSource dataSrc = src.source;
++    	      String srcName = dataSrc.name;
++		      String srcInfName = "I" + srcName.firstToUpperCase();
++		      if (dataSrc.profilingSource) {
++    	         'import eu.qualimaster.${topoName}.topology.inf.${toIdentifier(srcInfName)}.*;'	
++		      } else {
++    	         'import eu.qualimaster.data.inf.${toIdentifier(srcInfName)}.*;'	
++		      }
++    		}
++    		if(v.type() == "FamilyElement") {
++    			//the name is the varName!!
++    			FamilyElement fe = v;
++    			Family fm = fe.family;
++    			String familyName = fm.name;
++                String ifName = "I" + familyName.firstToUpperCase();
++    			'import eu.qualimaster.families.inf.${toIdentifier(ifName)}.*;'
++    		} else if(v.type() == "DataManagementElement") {
++    			String dmVarName = v.varName().firstToUpperCase();
++    			setOf(DecisionVariable) lastElt = lastElementMap.get(dmVarName);
++    			produceImportsFromLastElements(lastElt, lastElementMap, topoName);
++    		}
++    	}
++	}
++	
++	/**
++	 *  Produces the output-related variables for variable declaration.
++	 */
++	def produceOutputVariable(sequenceOf(Tuple) tuples, mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping, mapOf(Tuple,String) nameToOutputMap, String fName) {
++		String ifName = "I" + fName;
++		String ifInputName = "I" + ifName;
++		String outputInfName; //output interface name		
++		String tupleName;	
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			//get output interface name	
++			if(inputToOutputMapping.containsKey(t))	{
++			  sequenceOf(Tuple) outputs = inputToOutputMapping.get(t);
++			  String number;
++			  Integer size = outputs.size();
++			  Integer count = 0;
++			  
++			  for(Tuple tuple : outputs) {
++			  	  count = count + 1;
++			  	  outputInfName = nameToOutputMap.get(tuple);
++			  	  if(size > 1) {
++				      number = "$count";
++				  } else {
++				  	  number = "";
++				  }
++			  	  '    transient $outputInfName iTuple${firstToUpperCase(tupleName)}$number = null;'
++			  }
++			  				
++			} 
++								
++	    }
++	}
++	
++	def produceInputVariable(sequenceOf(Tuple) tuples, Boolean variable, String fName) {
++		String ifName = "I" + fName;
++		String ifInputName = "I" + ifName;
++		String tupleName;
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			String inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
++			String fImpInputName = 	ifName + "${firstToUpperCase(tupleName)}Input";
++			if(variable) {
++				'    transient $inputInfName input${firstToUpperCase(tupleName)} = null;'
++			} else {
++				'        input${firstToUpperCase(tupleName)} = new $fName.$fImpInputName();'
++			}
++		}
++	}
++	
++	def setOf(String) coreTupleTypes (String fmName, Algorithm algorithm, Boolean input) {
++		setOf(String) listTupleTypes = {};
++		String tupleName = null;
++		sequenceOf(Tuple) tuples = algorithm.input;
++		if(!input) {
++			tuples = algorithm.output;
++		}
++		for(Tuple t : tuples) { //TODO: multiple tuples!!
++			tupleName = t.name;
++			tupleName = tupleName.firstToUpperCase().toIdentifier();
++			if(input) {
++				listTupleTypes.add("${fmName}${tupleName}Input");
++			} else {
++				listTupleTypes.add("${fmName}${tupleName}Output");
++			}
++		}
++		listTupleTypes;
++	}
++	
++	/*
++ 	 * Produces the calculate methods for the family interface or implementation.
++ 	 */
++    def produceForCalculate(Family family, Boolean interface) {   	 
++    	 String inputTupleName;
++    	 String outputTupleName;
++   	   	 Tuples inputTuples = family.input;
++   	   	 Tuples outputTuples = family.output;
++   	   	 String ifName = "I" + family.name.firstToUpperCase();
++   	   	 setOf(String) outTypes = {};
++   	   	 
++   	   	 //input tuples loop	  
++    	 for(Tuple t : inputTuples){ 
++			inputTupleName = t.name;      	        	      	 	
++    	 	String inTypeName = "I${ifName}${firstToUpperCase(inputTupleName)}Input";
++    	 	
++				//output tuples loop
++	    	 	for(Tuple p : outputTuples){  
++				    outputTupleName = p.name;
++	    	 	    String outTypeName = "I${ifName}${firstToUpperCase(outputTupleName)}Output"; 
++	    	 	    //collect the output types 	 
++	    			outTypes.add(outTypeName + " " + outputTupleName + "Result");
++	    			if(!genMultiTupleTypes) {  	
++				    	'    /**'
++				    	'     * Calculates the actual <code>result</code> for <code>input</code>.'
++				    	'     *'
++				    	'     * @param input the algorithm input taken from the input stream'
++				    	'     * @param result the result calculated by the algorithm'
++				    	'     */'
++				    	if(interface) {
++				        '    public void calculate(${inTypeName} input, ${outTypeName} result);'
++				        } else {
++				        '    public void calculate(${inTypeName} input, ${outTypeName} result) {'
++				        '    }'	
++				        }
++				        ''
++					}
++           }
++           if(genMultiTupleTypes) {
++    	       '    /**'
++		    	'     * Calculates the actual <code>result</code> for <code>input</code>.'
++		    	'     *'
++		    	'     * @param input the algorithm input taken from the input stream'
++		    	'     * @param result the result calculated by the algorithm'
++		    	'     */'
++		    	String outTypeString = "";
++		    	for(String outType : outTypes) {
++		    		outTypeString = outTypeString + ", " + outType;		    		
++		    	}
++		    	if(interface) {
++		        '    public void calculate(${inTypeName} input$outTypeString);'
++		        } else {
++		        '    public void calculate(${inTypeName} input$outTypeString) {'
++		        '    }'		 	
++		        }
++		    }
++    	}     
++    }
++    
++    def String produceNumTasks(DecisionVariable elt) {
++	    String result;
++    	DecisionVariable tasksVar = elt.byName("numtasks"); 
++		if (isConfigured(tasksVar)) {
++			Integer tasks = tasksVar;
++			result = ".setNumTasks(" + tasks + ")";
++		} else {
++    	    result = "";
++		}
++		result;
++    }
++
++    /**
++     * Produces code for deserialization via the IDataInput interface. t is the tuple to produce the serialization 
++     * method for, infType the (interface) type of the data to serialize, type the actual data type to serialize, 
++     * indent the formatting indent.
++     * Requires eu.qualimaster.dataManagement.serialization.* as import.
++     */
++    def produceDataInputDeserialization(Tuple t, String infType, String type, Integer indent) {
++        '@Override' | indent + 4;
++        'public $infType deserializeFrom(IDataInput in) throws IOException {' | indent + 4;
++            '$type result = new $type();' | indent + 8;
++            for (Field f : t.fields) {
++                String fname = toIdentifier("${f.name}");
++                String mname = firstToUpperCase(fname);                     
++                if(isBasicType(f.type)) {
++                    String tname = firstToUpperCase(fieldTypeName(f));
++                    'result.set${mname}(in.next${tname}());' | indent + 8;                  
++                } else {
++                    if(!isListType(f.type)){
++                        'result.set${mname}(SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).deserializeFrom(in));' | indent + 8;
++                    } else {
++                        String innertype = obtainInnerType(f.type.class);
++                        'result.set${mname}(SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).deserializeFrom(in));' | indent + 8;
++                    }
++                }
++            }
++        'return result;' | indent + 8;          
++        '}' | indent + 4;
++        ''
++    }
++    
++    /**
++     * Produces code for serialization via the IDataOutput interface. t is the tuple to produce the serialization 
++     * method for, infType the (interface) type of the data to serialize, indent the formatting indent.
++     * Requires eu.qualimaster.dataManagement.serialization.* as import.
++     */
++    def produceDataInputSerialization(Tuple t, String infType, Integer indent) {
++        '@Override' | indent + 4;
++        'public void serializeTo($infType object, IDataOutput out) throws IOException {' | indent + 4;
++            for (Field f : t.fields) {  
++                String fname = toIdentifier("${f.name}");
++                String mname = firstToUpperCase(fname);                     
++                if(isBasicType(f.type)) {
++                    String tname = firstToUpperCase(fieldTypeName(f));
++                    'out.write${tname}(object.get${mname}());' | indent + 8;
++                } else {
++                    if(!isListType(f.type)){
++                        'SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).serializeTo(object.get${mname}(), out);' | indent + 8;
++                    } else {
++                        String innertype = obtainInnerType(f.type.class);
++                        'SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).serializeTo(object.get${mname}(), out);' | indent + 8;
++                    }
++                }
++            }
++        '}' | indent + 4;
++        ''   
++    }
++    
++    /**
++     * Produces the algorithm-related imports. For the generated sub-topology-based algorithm imports shall also be generated, 
++     * other algorithm imports are taken from the configuration.
++     */
++     def produceAlgorithmImports(Family family) {
++     	for(Algorithm alg : family.members) {
++			if(isGenSubtopology(alg)) {//generated sub-topology
++		    	SubPipelineAlgorithm subAlg = alg;
++		    	String pName = subAlg.subPipeline.name;
++		    	String algClsName = pName.firstToUpperCase().toIdentifier() + "SubTopology";
++		    	String cls = "eu.qualimaster." + pName.toIdentifier() + ".topology." + algClsName;
++		    	'import $cls;'
++		    } else if (isHardwareAlgorithm(alg)) {//generated hardware algorithm
++		    	String algName = formulateString(alg.name);
++		    	String cls = "eu.qualimaster.algorithms." + algName + "." + algName + "SubTopology";
++		    	'import $cls;'
++			} else {
++				SoftwareAlgorithm a = alg;
++				if (!a.class.isNull()) {
++					'import ${a.class};'
++				}
++            }
++		}
++     }
++     
++     /**
++      * Produces the algorithm implementation name.
++      */
++      def String algImplName(Algorithm alg) {
++      	String name;
++		if(isGenSubtopology(alg)) {//generated sub-topology
++	    	SubPipelineAlgorithm subAlg = alg;
++	    	String pName = subAlg.subPipeline.name;
++	    	name = pName.firstToUpperCase().toIdentifier() + "SubTopology";
++	    } else if (isHardwareAlgorithm(alg)) {//generated hardware algorithm
++	    	String algName = formulateString(alg.name);
++	    	name = algName + "SubTopology";
++		} else {
++			SoftwareAlgorithm a = alg;
++	    	String algNamePath = a.class;
++			JavaPath algPath = algNamePath;	
++			name = algPath.getName();
++        }
++		name;
++      }
++      
++      /**
++       * Returns the algorithm qualified class name.
++       */
++      def String algQualifiedClsName(Algorithm alg) {
++      	String cls;
++      	if(isGenSubtopology(alg)) {//generated sub-topology
++	    	SubPipelineAlgorithm subAlg = alg;
++	    	String pName = formulateString(subAlg.subPipeline.name);
++		    cls = "eu.qualimaster." + pName + ".topology." + pName + "SubTopology";
++	    } else if (isHardwareAlgorithm(alg)) {//generated hardware algorithm
++	    	String algName = formulateString(alg.name);
++	    	cls = "eu.qualimaster.algorithms." + algName + "."+ algName + "SubTopology";
++		} else {
++			SoftwareAlgorithm a = alg;
++	    	cls = a.class;
++        }
++        cls;
++      }
++      
++     /**
++      * Produces the declaration of the stream id.
++      */
++      def produceStreamIdDeclaration(DecisionVariable elt, Boolean subAlg, Integer indent) {
++      	String nameVar = elt.varName();
++      	Tuples tuples;
++      	String confName;
++      	setOf(String) subAlgNames = {};
++      	if(elt.type() == "Source") {
++      		Source src = elt;
++      		DataSource dataSrc = src.source;
++      		tuples = dataSrc.input;
++      		confName = src.name;
++      	} else if (elt.type() == "FamilyElement") {
++      		FamilyElement fe = elt;
++      		Family fm = fe.family;
++      		tuples = fm.output;
++      		confName = fe.name;
++      		for(Algorithm alg : fm.members) {// check the subtopology out
++      			if(isDistAlgorithm(alg)) {
++      				subAlgNames.add(formulateString(alg.name));
++      			} 
++      		}
++      	} else if (elt.type() == "Sink" or elt.type() == "ReplaySink") {
++      		Sink snk = elt;
++      		DataSink dataSnk = snk.sink;
++      		tuples = dataSnk.output;
++      		confName = snk.name;
++      	} 
++      	//produces the stream id declaration.
++      	String streamId;
++      	for(Tuple t : tuples) {//for simple java algorithm: eltName + tupleName
++      		String fields = "";
++      		if(subAlg) {
++      			streamId = formulateString(confName) + formulateString(t.name);
++      		} else {
++      			streamId = formulateString(nameVar) + formulateString(t.name);
++      		}
++      		if(subAlg and receiveByField) {
++      			Boolean first = true;
++      			for(Field f : t.fields) {
++      				if(first) {
++      					first = false;
++      				} else {
++      					fields = fields + ",";
++      				}
++      				fields = fields + "\"${formulateString(f.name)}\"";
++      			}
++      		} else {
++      			fields = "\"${streamId}Fields\"";
++      		}
++      		'declarer.declareStream("${streamId}", new Fields($fields));' | indent;
++      	}	
++      	for(String name : subAlgNames) {//for sub-topology algorithm: eltName + algName
++      		if(subAlg) {
++      			streamId = formulateString(confName) + name;
++      		} else {
++  				streamId = formulateString(nameVar) + name;
++  			}
++  			'declarer.declareStream("${streamId}", new Fields("${streamId}Fields"));' | indent;	
++  		}
++      }  
++      
++      /**
++       * Gets the configured name.
++       */
++      def String eltName(DecisionVariable elt) {
++    	if(elt.type() == "DataSource") {
++    		DataSource dataSrc = elt;
++    		dataSrc.name;
++    	} else if (elt.type() == "Family") {
++    		Family fm = elt;
++    		fm.name;
++    	} else if (elt.type() == "DataSink") {
++    		DataSink dataSnk = elt;
++    		dataSnk.name;
++    	}
++    } 
++    
++    /**
++	 * Returns the serializer class. If it is not configured, return an empty string.
++	 */		
++	def serializerClass(Field field, mapOf(String, String) specificTypes) {
++		FieldType type = field.type;
++		if(type.serializer.isConfigured() and type.serializer.length() > 0) {
++			specificTypes.add(type.name, type.serializer);
++		}
++	}
++	
++	/**
++	 * Registers the specific types from the collected specific types (see "serializerClass" method)
++	 */
++	def registerSpecificTypes(mapOf(String, String) specificTypes, Integer indent) {
++		setOf(String) types = specificTypes.getKeys();
++		for(String tName : types) {
++			String tCls = specificTypes.get(tName);
++			'SerializerRegistry.register("${tName}", ${tCls}.class);' | indent;
++		}
++	}
++	
++	/**
++	 * Registers all serializers.
++	 * @param fserializer the name of the serializer class
++	 * @param type the retrieve name
++	 * @param secificTypes a map of type name and respective name of the serializer class
++	 */
++	def registerSerializer(String fserializer, String type, mapOf(String, String) specificTypes, Integer indent) {
++		'static {' | indent + 4;    			
++    		'SerializerRegistry.register("$type", $fserializer.${type}Serializer.class);' | indent + 8;
++			//register specific types
++			registerSpecificTypes(specificTypes, indent+8);
++		'}' | indent + 4;
++	}
++	
++	/**
++	 * Returns the code for creating/obtaining a data management strategy instance. Requires "import eu.qualimaster.dataManagement.strategies.*;".
++	 * 
++	 * @param dataElement the data element to produce the strategy from
++	 * @return the code for obtaining the data management strategy, may be "null"
++	 */
++	def String obtainManagementStrategyInstance(DataElement dataElement) {
++		String strategyStr = "null"; // just to produce valid code in any case
++		DataManagementStrategy strategy = dataElement.strategy;	
++		if(strategy == DataManagementStrategy.None){
++			strategyStr = "NoStorageStrategyDescriptor.INSTANCE";
++		} else if(strategy == DataManagementStrategy.FirstInFirstOut){
++			strategyStr = "FirstInFirstOutStorageStrategyDescriptor.INSTANCE";
++		} else if(strategy == DataManagementStrategy.LeastFrequentlyUsed){
++			Integer cutoffCapacity = dataElement.cutoffCapacity;
++			strategyStr = "new LeastFrequentlyUsedStorageStrategyDescriptor($cutoffCapacity)";			
++		} else if(strategy == DataManagementStrategy.LeastFrequentlyRecentlyUsed){
++			Integer timeLine = dataElement.timeLine;
++			Integer cutoffCapacity = dataElement.cutoffCapacity;
++			strategyStr = "new LeastFrequentlyRecentlyUsedStorageStrategyDescriptor($cutoffCapacity, $timeLine)";
++		} else if(strategy == DataManagementStrategy.LeastRecentlyUsed){
++			Integer timeLine = dataElement.timeLine;
++			strategyStr = "new LeastRecentlyUsedStorageStrategyDescriptor($timeLine)";			
++		}
++		strategyStr;
++	}
++	
++	/**
++	 * Returns key of the field.
++	 */
++	def Boolean key(Field f) {
++		Boolean key = false;
++		if(f.keyPart.isConfigured()) {
++			key = f.keyPart;
++		} 
++		key;
++	}
++	
++	def produceDynamicPortObtainment() {
++		'String localhost = "localhost";' | 8;
++		'try {' | 8;
++			'localhost = InetAddress.getLocalHost().getCanonicalHostName();' | 12;
++		'} catch (UnknownHostException e1) {' | 8;
++			'e1.printStackTrace();' | 12;
++		'}' | 8;
++		'PortAssignmentRequest portRequest = new PortAssignmentRequest(getPipeline(), getName(), 0, localhost, null);' | 8;
++		'PortManager portManager = getPortManager();' | 8;
++		'try {' | 8;
++			'PortAssignment assignment = portManager.registerPortAssignment(portRequest);' | 12;
++			'port = assignment.getPort();' | 12;
++			if(newSwitchLog) {
++			'logger.info("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
++			'if(out != null) {' | 12;
++				'out.println("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 16;
++				'out.flush();' | 16;
++			'}' | 12;
++			}
++			'} catch (SignalException e) {' | 8;
++				'e.printStackTrace();' | 12;
++		'}' | 8;
++	}
++	
++	def produceInitMonitor(Boolean prepare, int indent) {
++		String ending = "Prepare";
++		if(!prepare) {
++			ending = "Open";
++		}
++		'@Override' | indent;
++    	'protected boolean initMonitorDuring${ending}() {' | indent;
++        'return false;' | indent+4;
++    	'}' | indent;
++	}
++	
++	def appendIntermediaryComponent(String pName, String container, Boolean node, Boolean useThrift, Text text) {
++		String InImplName = pName.firstToUpperCase().toIdentifier() + "Intermediary";
++		String EndImplName = pName.firstToUpperCase().toIdentifier() + "EndBolt";
++		//TODO: task set to 1
++		if(node) {
++			text.append('      <node name="$InImplName" type="source">\n');
++		}
++		text.append('              <component name="$InImplName" container="${container}" class="eu.qualimaster.$pName.topology.$InImplName" receiver="true" thrift="${useThrift}" tasks="1"/>\n');
++		if(node) {
++		    text.append('      </node>\n');
++		}
++		if(node) {
++			text.append('      <node name="$EndImplName" type="sink">\n');
++		}
++		text.append('              <component name="$EndImplName" container="${container}" class="eu.qualimaster.$pName.topology.$EndImplName" receiver="true" thrift="${useThrift}" tasks="1"/>\n');
++		if(node) {
++		    text.append('      </node>\n');
++		}
++	}	
++	
++	def catchThrowable(Integer indent) {
++		'} catch (Throwable e) {' | indent;
++        	'if (e instanceof DefaultModeException) {' | indent+4;
++        		'logger.error("Throwable caught - turning to default mode");' | indent+8;
++            	'e.printStackTrace();' | indent+8;
++            	'sendDefaultModeMonitoringEvent((DefaultModeException) e);' | indent+8;
++            '}' | indent+4;          	
++        '}' | indent;
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkImplementation.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkImplementation.vtl
+new file mode 100644
+index 0000000..d45e50f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkImplementation.vtl
+@@ -0,0 +1,158 @@
++import commonVTLMethods;
++@advice(QM)
++template dataSinkImplementation(Configuration config, FileArtifact target, DataSink elt, Boolean profiling) {  		
++	mapOf(String, String) specificTypes = {};
++	/*
++	 * Produces the tuple type classes.
++	 */
++	def produceForTuples(sequenceOf(Tuple) tuples, String snkName, Boolean output, Integer indent) {
++		String type;
++		String typeName;		
++    	String tupleName;
++    	
++    	for (Tuple t : tuples) { 
++    		//get the tuple name
++    		tupleName = t.name;     
++	    	if (output) {
++	    		type = "${toIdentifier(snkName)}${firstToUpperCase(tupleName)}Output";
++	    		typeName = "output";
++    	    } else {
++	    		type = "${toIdentifier(snkName)}${firstToUpperCase(tupleName)}Input";
++	    		typeName = "input";   		
++	    	}
++		    '/**' | indent;
++		    '* Define the source data input interface.' | indent;
++		    '**/' | 4;
++		    'public static class $type implements I${type} {' | indent;		        
++		   // 'private static final long serialVersionUID = 1L;' | indent + 4;
++		    //produce the variable instances.	
++		     for (Field f : t.fields) {
++	    	    String fname = toIdentifier("${f.name}");
++	    		String ftype = fieldTypeName(f);	  //previous type management 		
++	    		'private ${ftype} ${fname};' | indent + 4;
++    		 }
++    		   //generate the Getters and Setters. 		
++    			for (Field f : t.fields) {
++    				String fname = toIdentifier("${f.name}");
++    				String mname = firstToUpperCase(fname);
++    				String ftype = fieldTypeName(f);
++    				//collect the specific types for registering serialization class.
++    				serializerClass(f, specificTypes);
++    				'/**' | indent + 4;
++					'* Returns the input value for tuple field "${f.name}".' | indent + 4;
++					'* @return the tuple value' | indent + 4;
++					'*/' | indent + 4;
++    				'@Override' | indent + 4;
++		    		'public ${ftype} get${mname}() {' | indent + 4;
++		    			'return ${fname};' | indent + 8;
++		    		'}' | indent + 4;
++    				''
++    				'/**' | indent + 4;
++					'* Sets the output value for tuple field "${f.name}".' | indent + 4;
++					'* @param ${fname} the field value' | indent + 4;
++					'*/' | indent + 4;
++					'@Override' | indent + 4;
++		    		'public void set${mname}(${ftype} ${fname}) {' | indent + 4;
++		    			   'this.${fname} = ${fname};' | indent + 8;
++		    		'}' | indent + 4;
++    			}
++    			if(!profiling) {
++	    			//register the seriliazers.
++	    			String fserializer = formulateString(snkName) + "Serializers";
++	    			registerSerializer(fserializer, type, specificTypes, indent);
++    			}
++    			'}' | indent;
++    		}
++    		
++    		''   	
++	}
++	
++	def main(Configuration config, FileArtifact target, DataSink dataSnk, Boolean profiling){
++		String snkName =dataSnk.name;
++		snkName = snkName.firstToUpperCase();
++		String inputName = "I" + snkName;
++		'package eu.qualimaster.data.imp;'
++		''
++		//'import java.io.Serializable;'
++		'import eu.qualimaster.data.inf.I${toIdentifier(snkName)};'
++		'import eu.qualimaster.data.inf.I${toIdentifier(snkName)}.*;'
++		'import eu.qualimaster.dataManagement.strategies.*;'
++		'import eu.qualimaster.observables.*;'
++		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
++		''
++		'/**'
++		'* Define the data source class(GEN).'
++		'**/'
++		'public class ${toIdentifier(snkName)} implements I${toIdentifier(snkName)}{'
++		''
++		//generate the tuple type classes.
++		 produceForTuples(dataSnk.output, snkName, false, 4);		
++		''
++		String tupleName;
++		for(Tuple t : dataSnk.output){
++			//get the tuple name
++			tupleName = t.name;
++			for(Field f : t.fields) {
++			    String fname = toIdentifier("${f.name}");
++    		    String mname = firstToUpperCase(fname);	
++			}
++			
++		'/**' | 4;
++		'* Posts a specific type of data sink.' | 4;
++		'* @param data the sink data ${toIdentifier(snkName)}${firstToUpperCase(tupleName)}Input' | 4;
++		'**/' | 4;
++		'@Override' | 4;
++	    'public void postData${firstToUpperCase(tupleName)}(${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input data) {' | 4;
++	    
++	    '}' | 4;
++	    ''
++	    '/**' | 4;
++		'* Emits tuple along with a ticket.' | 4;
++		'* @param ticket the ticket to identify the responses for application' | 4;
++		'* @param tuple the tuple ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input to be emitted ' | 4;
++		'**/' | 4;
++   	    'public void emit(int ticket, ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input tuple) {' | 4;
++   	    '}' | 4;
++   	    ''
++		}
++		
++        if (dataSnk.parameters.size()>0) {
++	        '    // data sink parameters'
++	        ''
++	        for (Parameter p : dataSnk.parameters) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++    			String type = parameterTypeName(p);
++	        	'    /**'
++	        	'     * Sets the data sink parameter "${paramName}".'
++	        	'     *'
++	        	'     * @param value the new value of the data sink parameter'
++	        	'     */'
++	        	
++	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
++	        	'    }'
++	        	''
++	    	}
++    	}
++    	
++    	'@Override' | 4;
++    	'public void connect() {}' | 4;
++		''
++		'@Override' | 4;
++		'public void disconnect(){}' | 4;
++ 		''
++ 		'@Override' | 4;
++ 		'public void setStrategy(IStorageStrategyDescriptor strategy) {}' | 4;
++ 		''
++ 		'@Override' | 4;
++ 		'public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}' | 4;
++ 		''
++ 		'@Override' | 4;
++ 		'public Double getMeasurement(IObservable observable) { return null;}'	| 4;
++ 				
++		'}' 
++		}
++		
++		
++ 
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkInterface.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkInterface.vtl
+new file mode 100644
+index 0000000..b507ecb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkInterface.vtl
+@@ -0,0 +1,98 @@
++import commonVTLMethods;
++@advice(QM)
++template dataSinkInterface(Configuration config, FileArtifact target, DataSink elt) {
++
++    /*
++     * Produces the tuple type interfaces.
++     */	
++	def produceForTuples(sequenceOf(Tuple) tuples, String snkName, Integer indent) {
++		Integer tuplesSize = tuples.size();
++		String inputName = "I" + snkName.firstToUpperCase();
++    	String tupleName;
++
++    		for (Tuple t : tuples) {      
++				//get the tuple name
++				tupleName = t.name;
++		        '/**' | 4;
++		        '* Define the sink data input interface.' | 4;
++		        '**/' | 4;
++		        'public static interface ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input extends Serializable {' | 4;	    		
++    			for (Field f : t.fields) {
++    				String fname = toIdentifier("${f.name}");
++    				String mname = firstToUpperCase(fname);
++    				String ftype = fieldTypeName(f);
++    				'/**' | indent + 4;
++					'* Returns the input value for tuple field "${f.name}".' | indent + 5;
++					'* @return the tuple value' | indent + 5;
++					'*/' | indent + 5;
++    				'public ${ftype} get${mname}();' | indent + 4;
++    				''
++    				'/**' | indent + 4;
++					'* Sets the output value for tuple field "${f.name}".' | indent + 5;
++					'* @param ${fname} the field value' | indent + 5;
++					'*/' | indent + 5;
++					'public void set${mname}(${ftype} ${fname});' | indent + 4;
++    			}
++    			'}' | 4;
++    		}   		
++    		''   	
++	}
++	
++	def main(Configuration config, FileArtifact target, DataSink dataSnk){
++		String snkName =dataSnk.name;
++		snkName = snkName.firstToUpperCase();
++		String inputName = "I" + snkName;
++		'package eu.qualimaster.data.inf;'
++		''
++		'import java.io.Serializable;'
++		'import eu.qualimaster.dataManagement.sinks.IDataSink;'
++		''
++		'/**'
++		'* Define the data sink interface(GEN).'
++		'**/'
++		'public interface I${toIdentifier(snkName)} extends IDataSink {'
++		''
++		//generate the tuple type interfaces.
++		 produceForTuples(dataSnk.output, snkName, 4);		
++		''
++		String tupleName;
++		for(Tuple t : dataSnk.output){
++			tupleName = t.name;
++ 
++			'/**' | 4;
++			'* Posts a specific type of data sink.' | 4;
++			'* @param data the sink data ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input ' | 4;
++			'**/' | 4;
++	   	    'public void postData${firstToUpperCase(tupleName)}(${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input data);' | 4;
++	   	    ''
++
++	   	    '/**' | 4;
++			'* Emits tuple along with a ticket.' | 4;
++			'* @param ticket the ticket to identify the responses for application' | 4;
++			'* @param tuple the tuple ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input to be emitted ' | 4;
++			'**/' | 4;
++	   	    'public void emit(int ticket, ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input tuple);' | 4;
++	   	    ''
++		}
++		
++        if (dataSnk.parameters.size()>0) {
++	        '    // data sink parameters'
++	        ''
++	        for (Parameter p : dataSnk.parameters) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++    			String type = parameterTypeName(p);
++	        	'    /**'
++	        	'     * Sets the data sink parameter "${paramName}".'
++	        	'     *'
++	        	'     * @param value the new value of the data sink parameter'
++	        	'     */'
++	        	
++	        	'    public void setParameter${mname}(${parameterTypeName(p)} value);'
++	        	''
++	    	}
++    	}		
++		'}' 
++		}
++
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceImplementation.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceImplementation.vtl
+new file mode 100644
+index 0000000..c1c52d3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceImplementation.vtl
+@@ -0,0 +1,180 @@
++import commonVTLMethods;
++@advice(QM)
++template dataSourceImplementation(Configuration config, FileArtifact target, DataSource elt, String pkg, Boolean profiling) {
++	mapOf(String, String) specificTypes = {};
++	/**
++	 * Produces the tuple type classes.
++	 */
++	def produceForTuples(sequenceOf(Tuple) tuples, String srcName, Boolean output, Integer indent) {
++		String type;
++		String typeName;			
++    	String tupleName;
++    		for (Tuple t : tuples) {      
++				//get the tuple name.
++				tupleName = t.name;
++	    		if (output) {
++	    		    type = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output";
++	    		    typeName = "output";
++    	        } else {
++	    		    type = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Input";
++	    		    typeName = "input";   		
++	    	    }
++		        '/**' | indent;
++		        '* Define the source data input interface.' | indent;
++		        '**/' | 4;
++		        'public static class $type implements I${type} {' | indent;
++		        
++		     //   'private static final long serialVersionUID = 1L;' | indent + 4;
++		        //produce the variable instances.	
++		        for (Field f : t.fields) {
++	    			String fname = toIdentifier("${f.name}");
++	    			String ftype = fieldTypeName(f);
++	    			'private ${ftype} ${fname};' | indent + 4;
++    		    }
++    		    //generate the Getters and Setters.		
++    			for (Field f : t.fields) {
++    				String fname = toIdentifier("${f.name}");
++    				String mname = firstToUpperCase(fname);
++    				String ftype = fieldTypeName(f);
++    				//collect the specific types for registering serialization class.
++    				serializerClass(f, specificTypes);
++    				
++    				'/**' | indent + 4;
++					'* Returns the input value for tuple field "${f.name}".' | indent + 4;
++					'* @return the tuple value' | indent + 4;
++					'*/' | indent + 4;
++    				'@Override' | indent + 4;
++		    		'public ${ftype} get${mname}(){' | indent + 4;
++		    			'return ${fname};' | indent + 8;
++		    		'}' | indent + 4;
++    				''
++    				'/**' | indent + 4;
++					'* Sets the output value for tuple field "${f.name}".' | indent + 4;
++					'* @param ${fname} the field value' | indent + 4;
++					'*/' | indent + 4;
++					'@Override' | indent + 4;
++		    		'public void set${mname}(${ftype} ${fname}){' | indent + 4;
++		    			   'this.${fname} = ${fname};' | indent + 8;
++		    		'}' | indent + 4;
++    			}
++    			//register the seriliazers.
++    			if(!profiling) {
++	    			String fserializer = formulateString(srcName) + "Serializers";
++	    			registerSerializer(fserializer, type, specificTypes, indent);
++    			}
++    			'}' | indent;
++    		}
++    		
++    		''   	
++	}
++	
++	def main(Configuration config, FileArtifact target, DataSource dataSrc, String pkg, Boolean profiling){
++		String srcName =dataSrc.name;
++		srcName = srcName.firstToUpperCase();
++	
++		'package ${pkg}.imp;'
++		''
++		//'import java.io.Serializable;'
++		'import java.util.Map;'
++		'import ${pkg}.inf.I${toIdentifier(srcName)};'
++		'import ${pkg}.inf.I${toIdentifier(srcName)}.*;'
++		'import eu.qualimaster.dataManagement.strategies.*;'
++		'import eu.qualimaster.observables.*;'
++		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
++		'import eu.qualimaster.dataManagement.sources.*;'
++		''
++		'/**'
++		'* Define the data source class(GEN).'
++		'**/'
++		'public class ${toIdentifier(srcName)} implements I${toIdentifier(srcName)}{'
++		''
++		//generate tuple type classes.
++		 produceForTuples(dataSrc.input, srcName, true, 4);		
++		''
++		String tupleName;
++		for(Tuple t : dataSrc.input){
++			//get the tuple name
++			tupleName = t.name;
++			for(Field f : t.fields) {
++			    String fname = toIdentifier("${f.name}");
++    		    String mname = firstToUpperCase(fname);	
++			}
++			
++		'/**' | 4;
++		'* Returns a specific type of data source.' | 4;
++		'* @return ${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output the source data' | 4;
++		'**/' | 4;
++		'@Override' | 4;
++	    'public ${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output get${firstToUpperCase(tupleName)}() {' | 4;
++	    'return null;' | 8;
++	    '}' | 4;
++	    ''
++	    String inputName = "I" + srcName;
++	    '/**' | 4;
++	    '* Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.' | 4;
++	    '* @return an aggregation key' | 4;
++	    '**/' | 4;
++	    '@Override' | 4;
++	    'public String getAggregationKey(${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output tuple) {' | 4;
++	    'return null;' | 8;
++	    '}' | 4;
++		}
++		
++        if (dataSrc.parameters.size()>0) {
++	        '    // data source parameters'
++	        ''
++	        for (Parameter p : dataSrc.parameters) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++    			String type = parameterTypeName(p);
++	        	'    /**'
++	        	'     * Sets the data source parameter "${paramName}".'
++	        	'     *'
++	        	'     * @param value the new value of the data source parameter'
++	        	'     */'
++	        	'@Override' | 4;
++	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
++	        	'    }'
++	        	''
++	    	}
++    	}
++        if (dataSrc.profilingSource) {
++        '@Override' | 4;
++        'public void forceAutoconnect() {}' | 4;
++        }   
++    	'@Override' | 4;
++    	'public void connect() {}' | 4;
++		''
++		'@Override' | 4;
++		'public void disconnect(){}' | 4;
++ 		''
++ 		'@Override' | 4;
++ 		'public void setStrategy(IStorageStrategyDescriptor strategy) {}' | 4;
++ 		''
++ 		'@Override' | 4;
++ 		'public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}' | 4;
++ 		''
++ 		'@Override' | 4;
++ 		'public Double getMeasurement(IObservable observable) { return null;}' | 4;	
++ 		''
++		'@Override' | 4;
++    	'public IHistoricalDataProvider getHistoricalDataProvider() {' | 4;
++        	'return null;' | 8;
++    	'}' | 4;
++        ''
++        '@Override' | 4;
++        'public Map<String, String> getIdsNamesMap() {' | 4;
++        'return null;' | 8;
++        '}' | 4;
++        ''
++        '@Override' | 4;
++        'public void setDataSourceListener(IDataSourceListener listener) {' | 4;
++        '// no mapping, no listener needed' | 8;
++        '}' | 4;
++        ''
++		'}' 
++		}
++		
++		
++ 
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceInterface.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceInterface.vtl
+new file mode 100644
+index 0000000..798cd63
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceInterface.vtl
+@@ -0,0 +1,109 @@
++import commonVTLMethods;
++@advice(QM)
++template dataSourceInterface(Configuration config, FileArtifact target, DataSource elt, String pkg) {
++
++	/**
++	 * Produces the tuple type classes.
++	 */
++	def produceForTuples(sequenceOf(Tuple) tuples, String srcName, Integer indent) {
++		String inputName = "I" + srcName.firstToUpperCase();
++    	String tupleName;
++    		for (Tuple t : tuples) {      
++				//get the tuple name
++				tupleName = t.name;
++		        '/**' | 4;
++		        '* Define the source data input interface.' | 4;
++		        '**/' | 4;
++		        'public static interface ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output extends Serializable{' | 4;	
++		        //generate the Getters and Setters    		
++    			for (Field f : t.fields) {
++    				String fname = toIdentifier("${f.name}");
++    				String mname = firstToUpperCase(fname);
++    				String ftype = fieldTypeName(f);
++    				'/**' | indent + 4;
++					'* Returns the input value for tuple field "${f.name}".' | indent + 5;
++					'* @return the tuple value' | indent + 5;
++					'*/' | indent + 5;
++    				'public ${ftype} get${mname}();' | indent + 4;
++    				''
++    				'/**' | indent + 4;
++					'* Sets the output value for tuple field "${f.name}".' | indent + 5;
++					'* @param ${fname} the field value' | indent + 5;
++					'*/' | indent + 5;
++					'public void set${mname}(${ftype} ${fname});' | indent + 4;
++    			}
++    			'}' | 4;
++    		}
++    		
++    		''   	
++	}
++	
++	def main(Configuration config, FileArtifact target, DataSource dataSrc, String pkg){
++		String srcName =dataSrc.name;
++		srcName = srcName.firstToUpperCase();
++		String inputName = "I" + srcName;
++		'package ${pkg}.inf;'
++		''
++		'import java.io.Serializable;'
++		'import eu.qualimaster.dataManagement.sources.IDataSource;'
++		''
++		'/**'
++		'* Define the data source interface(GEN).'
++		'**/'
++		'public interface I${toIdentifier(srcName)} extends IDataSource {'
++		''
++        if (dataSrc.profilingSource) {
++        '/**' | 4;
++        '* Enforce the source to autoconnect mode and prevent self-connects (profiling).' | 4;
++        '**/' | 4;
++        'public void forceAutoconnect();' | 4;
++        }
++		''
++		//generate the tuple type interfaces
++		 produceForTuples(dataSrc.input, srcName, 4);		
++		''
++		String tupleName;
++		for(Tuple t : dataSrc.input){
++			//get the tuple name
++			tupleName = t.name;
++			for(Field f : t.fields) {
++			    String fname = toIdentifier("${f.name}");
++    		    String mname = firstToUpperCase(fname);	
++			}
++			
++		'/**' | 4;
++		'* Returns a specific type of data source.' | 4;
++		'* @return ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output the source data' | 4;
++		'**/' | 4;
++	    'public ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output get${firstToUpperCase(tupleName)}();' | 4;
++	    ''
++	    '/**' | 4;
++	    '* Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.' | 4;
++	    '* @return an aggregation key' | 4;
++	    '**/' | 4;
++	    'public String getAggregationKey(${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output tuple);' | 4;
++		}
++		
++        if (dataSrc.parameters.size()>0) {
++	        '    // data source parameters'
++	        ''
++	        for (Parameter p : dataSrc.parameters) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++    			String type = parameterTypeName(p);
++	        	'    /**'
++	        	'     * Sets the data source parameter "${paramName}".'
++	        	'     *'
++	        	'     * @param value the new value of the data source parameter'
++	        	'     */'
++	        	
++	        	'    public void setParameter${mname}(${parameterTypeName(p)} value);'
++	        	''
++	    	}
++    	}		
++		'}' 
++		}
++		
++		
++ 
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceProfilingImplementation.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceProfilingImplementation.vtl
+new file mode 100644
+index 0000000..9ccda1d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceProfilingImplementation.vtl
+@@ -0,0 +1,254 @@
++import commonVTLMethods;
++@advice(QM)
++template dataSourceProfilingImplementation(Configuration config, FileArtifact target, DataSource elt, String pkg, Pipeline pip, Source src) {
++	
++	def Boolean isSingleStringTuple(QM config, sequenceOf(Tuple) tuples) {
++		if (tuples.size() == 1) {
++			Tuple tuple = tuples.first();
++			if (tuple.fields.size() == 1) {
++				Field field = tuple.fields.first();
++				config.StringType == field.type; 
++			} else {
++				false;
++			}
++		} else {
++			false;
++		}
++	}
++	
++	def main(Configuration config, FileArtifact target, DataSource dataSrc, String pkg, Pipeline pip, Source src) {
++		QM cfg = config;
++		String srcName = dataSrc.name;
++		srcName = srcName.firstToUpperCase();
++	
++		'package ${pkg}.imp;'
++		''
++		'import java.io.*;'
++		'import org.apache.log4j.Logger;'
++		'import java.util.ArrayDeque;'
++		'import java.util.ArrayList;'
++		'import java.util.List;'
++		'import java.util.Queue;'
++		'import javax.annotation.Generated;'
++		'import ${pkg}.inf.I${toIdentifier(srcName)};'
++		'import ${pkg}.inf.I${toIdentifier(srcName)}.*;'
++		'import eu.qualimaster.dataManagement.strategies.*;'
++		'import eu.qualimaster.dataManagement.serialization.*;'
++		'import eu.qualimaster.observables.*;'
++		'import eu.qualimaster.events.EventManager;'
++		'import eu.qualimaster.infrastructure.EndOfDataEvent;'
++		'import eu.qualimaster.dataManagement.sources.DataQueueDescriptor;'
++        'import eu.qualimaster.dataManagement.sources.GenericMultiSourceHandler;'
++		'import eu.qualimaster.dataManagement.sources.ReplayMechanism;'
++		'import eu.qualimaster.dataManagement.sources.ReplayMechanism.ProfilingQueueItem;'
++		'import eu.qualimaster.dataManagement.sources.replay.LongTimestampParser;'
++		'import eu.qualimaster.dataManagement.sources.IHistoricalDataProvider;'
++		''
++		'/**'
++		'* Implements the data source class for profiling (GEN).'
++		'**/'
++		'@Generated("by QM")'
++		'public class ${toIdentifier(srcName)}Profiling extends ${toIdentifier(srcName)} {'
++		''
++		Integer tupleCount = dataSrc.input.size();
++		'private static final Logger logger = Logger.getLogger(${toIdentifier(srcName)}Profiling.class); ' | 4;
++		'private static final int MAXIMUM_DATA_ENTRIES = 400000;' | 4;
++		'private GenericMultiSourceHandler handler = new GenericMultiSourceHandler(${tupleCount});' |4;
++		'private ReplayMechanism replay = new ReplayMechanism(LongTimestampParser.INSTANCE);' |4;
++        'private boolean eodSent = false;' | 4;
++        'private boolean isConnected = false;' | 4;
++        sequenceOf(String) dataTypes = {};
++        for(Tuple t : dataSrc.input){
++			//get the tuple name
++			String tupleName = t.name;
++			for(Field f : t.fields) {
++			    String fname = toIdentifier("${f.name}");
++    		    String mname = firstToUpperCase(fname);	
++			}
++			String resultType = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output";
++			dataTypes.add(resultType);
++			'private transient Queue<ProfilingQueueItem<${resultType}>> ${resultType}Queue = 
++				new ArrayDeque<ProfilingQueueItem<${resultType}>>();' | 4;
++		}
++		'private transient List<DataQueueDescriptor<?>> queueList = new ArrayList<DataQueueDescriptor<?>>();' | 4;
++		''
++		String tupleName;
++		// legacy - pass rest except for potential identification directly through as String data
++		Boolean singleStringCase = isSingleStringTuple(cfg, dataSrc.input);
++		for(Tuple t : dataSrc.input){
++			//get the tuple name
++			tupleName = t.name;
++			for(Field f : t.fields) {
++			    String fname = toIdentifier("${f.name}");
++    		    String mname = firstToUpperCase(fname);	
++			}
++			
++		String resultType = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output";
++
++        '/**' | 4;
++        '* Provides a serializer for the test data.' | 4;
++        '*/' | 4;
++        'public static class ${resultType}Serializer implements ISerializer<${resultType}> {' | 4;
++        ''
++        '@Override' | 8;
++        'public void serializeTo($resultType object, OutputStream out) throws IOException {' | 8;
++        '// no protobuf by now' | 12;
++        '}' |8;
++        ''
++        '@Override' | 8;
++        'public $resultType deserializeFrom(InputStream in) throws IOException {' | 8;
++        'return null; // no protobuf by now' | 12;
++        '}' |8;
++        ''
++        produceDataInputSerialization(t, resultType, 4);
++        ''
++        produceDataInputDeserialization(t, resultType, resultType, 4);
++        '}' | 4;
++        ''
++		'@Override' |4;
++	    'public ${resultType} get${firstToUpperCase(tupleName)}() {' | 4;
++		    '${resultType} result = null;' | 8;
++		    'if (isConnected) {' | 8;
++		    String checkEmpty = "";
++		    Boolean first = true;
++		    String forAnd;
++		    for (String type : dataTypes) {
++		    	if(first) {
++		    		forAnd = "";
++		    		first = false;
++		    	} else {
++		    		forAnd = " && ";
++		    	}
++		    	checkEmpty = checkEmpty + "${forAnd}${type}Queue.isEmpty()";
++		    }
++		    'if (!${resultType}Queue.isEmpty()) {' | 12;
++                'try {' | 16;
++                    'result = replay.getNextItem(${resultType}Queue);' | 20;
++                '} catch (InterruptedException e) {' | 16;
++                    'e.printStackTrace();' | 20;
++                '}' | 16;
++            '}' | 12;
++		    'if (${checkEmpty}) {' | 12;
++                'if (!eodSent) {' | 16;
++					'EventManager.send(new EndOfDataEvent("${pip.name}", "${src.name}"));' | 20;
++	            	'eodSent = true;' | 20;
++	            '}' | 16;
++            '}' | 12;
++            
++		    /* previous version
++			'if (replay.isEOD()) {' | 8;
++			'if (!eodSent) {' | 12;
++			'EventManager.send(new EndOfDataEvent("${pip.name}", "${src.name}"));' | 16;
++            'eodSent = true;' | 16;
++            '}' | 12;
++			'} else {' | 8;
++	        'String genericInput = replay.getNext();' | 12;
++	        'if (null != genericInput) {' | 12;
++	        'char separator = replay.getSeparator();' | 16;
++	        'result = handler.next("${t.name}", ${resultType}.class, genericInput, separator, ${singleStringCase});' | 16;
++	        '}' | 12;
++			'}' | 8;
++			*/
++			'}' | 8;
++			'//logger.info("get${firstToUpperCase(tupleName)} -- Returning the result: " + result);' | 8;
++			'return result;' | 8;
++	    '}' |4;
++	    
++	    '@Override' |4;
++	    'public String getAggregationKey(I${resultType} tuple) {' | 4;
++	        'return null;' | 8;
++	    '}' |4;
++		}
++		
++		if (dataSrc.parameters.size()>0) {
++	        '// data source parameters' | 4;
++	        ''
++	        for (Parameter p : dataSrc.parameters) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++    			String type = parameterTypeName(p);
++	        	'@Override' | 4;
++	        	'public void setParameter${mname}(${parameterTypeName(p)} value) {' | 4;
++				'replay.setParameter${mname}(value);' | 8;
++	        	'}' | 4;
++	        	''
++	    	}
++    	}
++    	
++    	if (dataSrc.profilingSource) {
++    	'@Override' | 4;
++        'public void forceAutoconnect() {' | 4;
++        'replay.forceAutoconnect();' | 8;
++        '}' | 4;
++        }   
++        ''
++		
++		'@Override' | 4;
++		'public void connect() {' | 4;
++		'logger.info("Connecting the source...");' | 8;
++		'SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);' | 8; // preliminary until registrations are done properly
++		for (String dataType : dataTypes) {
++		    'SerializerRegistry.register(${dataType}.class, ${dataType}Serializer.class);' | 8;
++		}
++		'replay.connect();' | 8;
++		for(Tuple t : dataSrc.input){
++			//get the tuple name
++			tupleName = t.name;
++			for(Field f : t.fields) {
++			    String fname = toIdentifier("${f.name}");
++    		    String mname = firstToUpperCase(fname);	
++			}
++			
++			String resultType = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output";
++			'queueList.add(new DataQueueDescriptor<${resultType}>("$tupleName", ${resultType}Queue, 
++            ${resultType}.class));' | 8;
++		}
++		'//read profiling data in advance' | 8;
++		'try {' | 8;
++			'replay.readProfilingData(handler, MAXIMUM_DATA_ENTRIES, queueList);' | 12;          
++	        '} catch (IOException e) {' | 8;
++	            'e.printStackTrace();' | 12;
++	        '}' | 8;
++	        for (String dataType : dataTypes) {
++	        	'logger.info("The size of the ${dataType}Queue : " + ${dataType}Queue.size());' | 8;
++	        }
++	        'isConnected = true;' | 8;
++	        'logger.info("Connected the source...");' | 8;
++		'}' |4;
++		
++		'@Override' | 4;
++        'public void disconnect() {' | 4;
++        'logger.info("Disconnecting the source...");' | 8;
++        'isConnected = false;' | 8;
++		'replay.disconnect();' | 8;
++        for (String dataType : dataTypes) {
++            'SerializerRegistry.unregister(${dataType}.class);' | 8;
++        }
++        'logger.info("Disconnected the source...");' | 8;
++		'}' | 4;
++
++		'@Override' | 4;
++        'public void setStrategy(IStorageStrategyDescriptor strategy) {' | 4;
++		'replay.setStrategy(strategy);' | 8;
++		'}' | 4;
++    
++	    '@Override' | 4;
++        'public IStorageStrategyDescriptor getStrategy() {' | 4;
++		'return replay.getStrategy();' | 8;
++		'}' | 4;
++		
++		'@Override' | 4;
++		'public Double getMeasurement(IObservable observable) {' | 4;
++		'return replay.getMeasurement(observable);' | 8;
++		'}' |4;
++    	''
++		'@Override' | 4;
++    	'public IHistoricalDataProvider getHistoricalDataProvider() {' | 4;
++        'return replay.getHistoricalDataProvider();' | 8;
++        '}' |4;
++    	
++		
++		'}'
++    }
++ 
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyImplementationJava.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyImplementationJava.vtl
+new file mode 100644
+index 0000000..8ca4672
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyImplementationJava.vtl
+@@ -0,0 +1,146 @@
++import commonVTLMethods;
++@advice(QM)
++template familyImplementationJava(Configuration config, FileArtifact target, Family family) {   
++	String fName = family.name.firstToUpperCase();
++	mapOf(String) specificTypes = {};
++	 
++    def produceForTuples(Tuples tuples, Boolean output, Boolean implementation, String fName, Integer indent) {
++	    String type;
++	    String typeName;
++    	String tupleName; 	    	   	   	
++    	for (Tuple t : tuples) {
++    		tupleName = t.name;
++    		tupleName = firstToUpperCase(tupleName);
++	        if (output) {
++    		    type = "${fName}${tupleName}Output";
++    		    typeName = "output";
++    	    } else {
++    		    type = "${fName}${tupleName}Input";
++    		    typeName = "input";   		
++    	    }
++    	    		  	    	   		   
++		    '/**' | indent;
++            '* Provides a default implementation of the data ${typeName} for the {@link ${type}} algorithm.' | indent + 1;
++            '* Actual execution system code may also directly wrap the respective tuple concept.' | indent + 1; 
++		    '*/' | indent + 1;
++		    String parents = "implements I${type}";
++		    if (genMultiOutputs and output) {
++		    	parents = "extends eu.qualimaster.base.algorithm.AbstractOutputItem<I${type}> $parents";
++		    }
++    	    'public static class $type $parents {' | indent;    	
++    	    ''	
++    	    //'private static final long serialVersionUID = 1L;' | indent + 4;
++    	    if (genMultiOutputs and output) {
++    	        '/**' | indent + 4;
++                '* Creates the item.' | indent + 5;
++                '*/' | indent + 5;
++                'public ${type}() {' | indent + 4;
++                'this(true);' | indent + 8;
++                '}' | indent + 4;
++                ''
++                '/**' | indent + 4;
++                '* Creates a sub-item.' | indent + 5;
++                '*' | indent + 5;
++                '* @param topLevel whether it is a top-level item' | indent + 5;
++                '*/' | indent + 5;
++                'private ${type}(boolean topLevel) {' | indent + 4;
++                'super(topLevel);' | indent + 8;
++                'setParent(this);' | indent + 8;
++                '}' | indent + 4;
++                ''
++                '@Override' | indent + 4;
++                'public ${type} createItem() {' | indent + 4;
++                    'return new ${type}(false);' | indent + 8;
++                '}' | indent + 4;
++                
++                '@Override' | indent + 4;
++                'public void setTaskId(int taskId) {' | indent + 4;
++                	'this.taskId = taskId;' | indent + 8;
++                '}' | indent + 4;
++                
++                '@Override' | indent + 4;
++                'public int getTaskId() {' | indent + 4;
++                	'return taskId;' | indent + 8;
++                '}' | indent + 4;
++                'private transient int taskId;' | indent + 4;
++    	    }   
++    		for (Field f : t.fields) {
++    			String fname = toIdentifier("${f.name}");
++    			String ftype = fieldTypeName(f);
++    			//collect the specific types for registering serialization class.
++    			serializerClass(f, specificTypes);
++    			
++    			'private ${ftype} ${fname};' | indent + 4;
++    		}
++    		''
++    		
++    		for (Field f : t.fields) {
++    			String fname = toIdentifier("${f.name}");
++    			String mname = firstToUpperCase(fname);
++    			String ftype = fieldTypeName(f);
++				'@Override' | indent + 4;
++	    		'public ${ftype} get${mname}(){' | indent + 4;
++	    			'return ${fname};' | indent + 8;
++	    		'}' | indent + 4;	    			
++	    		''
++	    		
++				'@Override' | indent + 4;
++	    		'public void set${mname}(${ftype} ${fname}){' | indent + 4;
++	    			   'this.${fname} = ${fname};' | indent + 8;
++	    		'}' | indent + 4;
++    		}
++    		//register the seriliazers.
++    		String fserializer = fName.substring(1, fName.length()) + "Serializers";
++    		registerSerializer(fserializer, type, specificTypes, indent);
++    	'}' | indent;
++    	''	   	       	
++      }
++    }    
++		
++    def main(Configuration config, FileArtifact target, Family family) {
++    	'package eu.qualimaster.families.imp;'
++    	''
++    	//'import java.io.Serializable;'
++    	'import eu.qualimaster.families.inf.*;'
++    	'import eu.qualimaster.observables.IObservable;'
++    	'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
++    	''
++    	String ifName = "I" + fName;
++    	'/**'
++    	' * The implementation for the algorithm family "${ifName}" (GEN).'
++    	' */'
++    	'public class $fName implements $ifName {'
++    	''
++    	produceForTuples(family.input, false, true, ifName, 4);
++    	produceForTuples(family.output, true, true, ifName, 4);
++    	
++    	//produce the calculate method based on multiple input and output string
++        produceForCalculate(family, false); 
++             	
++        if (family.byName("parameters").variables().size()>0) {
++	        ''
++	        for (Parameter p : family.byName("parameters")) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++	        	'    /**'
++	        	'     * Sets the algorithm parameter "${paramName}".'
++	        	'     *'
++	        	'     * @param value the new value of the algorithm parameter'
++	        	'     */'
++	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
++	        	'    }'
++	        	''      	
++	    	}
++    	}
++				'    @Override'
++				'    public void switchState(State arg0) {'					
++				'    }'
++				''
++				'    @Override'
++				'    public Double getMeasurement(IObservable arg0) {'
++				'	    return null;'
++				'    }'     	
++    '}'
++    }
++    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceC.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceC.vtl
+new file mode 100644
+index 0000000..12a3938
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceC.vtl
+@@ -0,0 +1,14 @@
++template familyInterfaceC(Configuration config, FileArtifact target, DecisionVariable family, String ifName) {
++
++    def main(Configuration config, FileArtifact target, DecisionVariable family, String ifName) {
++    	'class $ifName {'
++    	''
++    	'    public:'
++    	''
++        '    void calculate(/* put in "stream" here, may need a specific parameter interface */);'
++        ''
++        '    // put in methods for the parameters in here'
++    	'};'
++    }
++    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceJava.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceJava.vtl
+new file mode 100644
+index 0000000..49d18cb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceJava.vtl
+@@ -0,0 +1,98 @@
++import commonVTLMethods;
++@advice(QM)
++template familyInterfaceJava(Configuration config, FileArtifact target, Family family, String ifName) {
++
++    /*
++     * Produces the tuple type classes.
++     */
++    def produceForTuples(Tuples tuples, Boolean output, String fName, Integer indent) {
++	    String type;
++	    String typeName;
++    	String tupleName;  	
++  					    
++	    for (Tuple t : tuples){
++    		tupleName = t.name;	
++	   		if (output) {
++    			type = "${fName}${firstToUpperCase(tupleName)}Output";
++    			typeName = "output";
++    		} else {
++    			type = "${fName}${firstToUpperCase(tupleName)}Input";
++    			typeName = "input";   		
++    		}   	
++    		type = "I" + type;
++    		'/**' | indent;
++    		'* Defines the data ${typeName} interface for the {@link ${type}} algorithm (over all defined ${typeName} tuples).' | indent + 1;
++			'*/' | indent + 1;
++			String baseInterface = "Serializable";
++			if (genMultiOutputs and output) {
++				baseInterface = "Serializable, eu.qualimaster.base.algorithm.IOutputItem<$type>, IDirectGroupingInfo";
++			}
++    		'public static interface $type extends $baseInterface {' | indent;
++    		''
++    		for (Field f : t.fields) {
++    			String fname = toIdentifier("${f.name}");
++    			String mname = firstToUpperCase(fname);
++    			String ftype = fieldTypeName(f);
++    			'/**' | indent + 4;
++				'* Returns the input value for tuple field "${f.name}".' | indent + 5;
++				'* @return the tuple value' | indent + 5;
++				'*/' | indent + 5;
++    			'public ${ftype} get${mname}();' | indent + 4;
++    			''
++    			'/**' | indent + 4;
++				'* Changes the output value for tuple field "${f.name}".' | indent + 5;
++				'* @param ${fname} the field value' | indent + 5;
++				'*/' | indent + 5;
++    			'public void set${mname}(${ftype} ${fname});' | indent + 4;
++    		}
++    	
++    	'}' | indent;
++    	''	    		    	
++	    }
++    } 	 		
++
++    def main(Configuration config, FileArtifact target, Family family, String ifName) {
++    	/* think about the family interface name is better from varName or name field
++    	Family fm = family;
++    	String familyName = fm.name;
++    	familyName = "I" + familyName.firstToUpperCase();
++    	* 
++    	*/
++    	'package eu.qualimaster.families.inf;'
++    	''
++    	'import java.io.Serializable;'
++    	'import eu.qualimaster.base.algorithm.IFamily;'
++    	'import eu.qualimaster.base.algorithm.IDirectGroupingInfo;'
++    	''
++    	'/**'
++    	' * Defines the interface for the algorithm family "${ifName}" (GEN).'
++    	' */'
++    	'public interface ${toIdentifier(ifName)} extends IFamily{'
++    	''
++    	 produceForTuples(family.input, false, ifName, 4);
++    	 produceForTuples(family.output, true, ifName, 4);
++    	 
++    	 //produce the calculate method based on multiple input and output string
++         produceForCalculate(family, true);        
++        
++        if (family.byName("parameters").variables().size()>0) {
++	        ''
++	        for (Parameter p : family.byName("parameters")) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++    			String type = parameterTypeName(p);
++    		
++	        	'    /**'
++	        	'     * Sets the algorithm parameter "${paramName}".'
++	        	'     *'
++	        	'     * @param value the new value of the algorithm parameter'
++	        	'     */'
++	        	
++	        	'    public void setParameter${mname}(${parameterTypeName(p)} value);'
++	        	''
++	    	}
++    	}
++    	'}'
++    }
++    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmMapping.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmMapping.vtl
+new file mode 100644
+index 0000000..5a42b81
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmMapping.vtl
+@@ -0,0 +1,45 @@
++import commonVTLMethods;
++@advice(QM)
++template hardwareAlgorithmMapping(Configuration config, FileArtifact target, HardwareAlgorithm algorithm, String pipName) {
++	Boolean useThrift;
++    def main(Configuration config, FileArtifact target, HardwareAlgorithm algorithm, String pipName) {
++    	useThrift = not(genMonitoringProbes);
++    	Text text = target.getText();
++    		
++    	text.append("<mapping>\n");
++    	
++    	String algName = algorithm.name;
++    	String topologyClsName = "eu.qualimaster.algorithms.$algName.";
++    	String container;
++    	if(looseSub) {
++    		container = algName;
++    	} else {
++    		container = pipName;
++    	}
++    	Integer senderParallelism = algorithm.senderParallelism;
++		Integer receiverParallelism = algorithm.receiverParallelism;
++    	if(looseSub) {
++    		topologyClsName = topologyClsName + "Topology";
++    	} else {
++    		topologyClsName = topologyClsName + "${algName}SubTopology";
++    	}
++    	text.append('  <pipeline name="${algName}" class="$topologyClsName">\n');
++    	
++    	text.append('      <node name="${algName}HardwareConnectionBolt" type="family">\n');
++    	text.append("             <component name=\"${algName}HardwareConnectionBolt\" container=\"$container\" class=\"eu.qualimaster.algorithms.$algName.HardwareConnectionBolt\" receiver=\"true\" thrift=\"${useThrift}\" tasks=\"${senderParallelism}\" type=\"HARDWARE\"/>\n");
++    	text.append('      </node>\n');
++    	text.append('      <node name="${algName}HardwareConnectionSpout" type="source">\n');
++		text.append("             <component name=\"${algName}HardwareConnectionSpout\" container=\"$container\" class=\"eu.qualimaster.algorithms.$algName.HardwareConnectionSpout\" receiver=\"true\" thrift=\"${useThrift}\" tasks=\"${receiverParallelism}\" type=\"HARDWARE\"/>\n");    	
++    	text.append('      </node>\n');
++    	if(looseSub) {
++	    	appendIntermediaryComponent(algName, container, true, useThrift, text);
++    	}
++    	text.append('  </pipeline>\n');
++		text.append('\n');				        			
++
++		text.append("</mapping>\n");
++		target.rename("mapping.xml");
++    	
++    }
++
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmPom.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmPom.vtl
+new file mode 100644
+index 0000000..40eb289
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmPom.vtl
+@@ -0,0 +1,98 @@
++import commonPomMethods;
++import commonVTLMethods;
++@advice(QM)
++template hardwareAlgorithmPom(Configuration config, FileArtifact target, String algName) {
++	def main(Configuration config, FileArtifact target, String algName) {
++		Text text = target.getText();
++		text.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n");		
++		text.append("  <modelVersion>4.0.0</modelVersion>\n");
++//		sequenceOf(String) artList = artifact.split(":");
++//		if(artList.size() == 3) {
++//		    text.append("  <groupId>${artList[0]}</groupId>\n");
++//			text.append("  <artifactId>${artList[1]}</artifactId>\n");
++//			text.append("  <version>${artList[2]}</version>\n");	
++//		}		
++		
++	    text.append("  <groupId>eu.qualimaster</groupId>\n");
++		text.append("  <artifactId>$algName</artifactId>\n");
++		text.append("  <version>$GenAlgVersion</version>\n");
++		
++		text.append("  <packaging>jar</packaging>\n");
++		text.append("\n");
++		text.append("  <build>\n");
++		text.append("    <sourceDirectory>"+"$"+"{basedir}/</sourceDirectory>\n");
++		text.append("    <plugins>\n");
++		appendPlugins(text);
++		text.append("    </plugins>\n");		
++		text.append("  </build>\n");
++		text.append("  <repositories>\n");		
++		appendRepositories(text);
++		text.append("  </repositories>\n");
++		text.append("\n");
++		appendDependencyManagement(text);
++		text.append("  <dependencies>\n");
++		appendDependencies(text);
++		text.append("  </dependencies>\n");		
++		text.append("</project>\n");
++		target.rename("pom.xml");
++	}
++	
++	def appendPlugins(Text text) {		
++            text.append("            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>\n");	
++            text.append("            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>\n");  
++            text.append("            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-source-plugin</artifactId>
++				<version>2.2.1</version>
++				<executions>
++					<execution>
++						<id>attach-sources</id>
++						<phase>verify</phase>
++						<goals>
++							<goal>jar</goal>
++						</goals>
++					</execution>
++				</executions>
++			</plugin>\n"); 			     	
++	}
++	def appendDependencies(Text text) {
++	   text.append("   <dependency>
++	     <groupId>org.apache.storm</groupId>
++	     <artifactId>storm-core</artifactId>
++	   </dependency>\n");
++	   		text.append("   <dependency>
++	     <groupId>eu.qualimaster</groupId>
++	     <artifactId>StormCommons</artifactId>
++	   </dependency>\n");
++   		text.append("    <dependency>
++			<groupId>eu.qualimaster</groupId>
++			<artifactId>PriorityPipelineInterfaces</artifactId>
++			<version>0.5.0-SNAPSHOT</version>
++		</dependency>\n");
++   		text.append("   <dependency>
++     	<groupId>eu.qualimaster</groupId>
++     	<artifactId>QualiMaster.Events</artifactId>
++   	</dependency>\n"); 
++	   text.append("   <dependency>
++	     <groupId>eu.qualimaster</groupId>
++	     <artifactId>DataManagementLayer</artifactId>
++	   </dependency>\n"); 
++	}
++	def appendRepositories(Text text) {
++		text.append("    <repository>\n      <id>qm.eu</id>\n      <name>qm.eu</name>\n      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>\n    </repository>\n");
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareReceiver.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareReceiver.vtl
+new file mode 100644
+index 0000000..938118e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareReceiver.vtl
+@@ -0,0 +1,254 @@
++import commonVTLMethods;
++@advice(QM)
++template hardwareReceiver(Configuration config, FileArtifact target, Family family) {
++	Integer indent = 0;
++	String fNameUpper = family.name.firstToUpperCase();
++	setOf(String) parametersByType = {};
++	sequenceOf(String) letters = {"a", "b", "c", "d", "e"}; 
++	def main(Configuration config, FileArtifact target, Family family) {
++		'#include <stdio.h>'
++		'#include <stdlib.h>'
++		'#include <strings.h>'
++		'#include <unistd.h>'
++		'#include <sys/types.h>'
++		'#include <sys/socket.h>'
++		'#include <netinet/in.h>'
++		'#include <arpa/inet.h>'
++		'#include <sys/wait.h>'
++		'#include <signal.h>'
++		'#include <string>'
++		'#include <iostream>'
++		'#include <google/protobuf/io/coded_stream.h>'
++		'#include <google/protobuf/generated_message_util.h>'
++		'#include <google/protobuf/message.h>'
++		'#include <google/protobuf/extension_set.h>'
++		'#include <google/protobuf/unknown_field_set.h>'
++		'#include <google/protobuf/io/zero_copy_stream_impl_lite.h>'
++		''
++		'#include "SerializeServerTemplateCpuCode.h"'
++		'#include "parameters.pb.h"'
++		produceTuplesForInclude(family.input); 
++		'using namespace std;'
++		''
++		'void receiver(parm *arg)'
++		'{'
++			'struct sockaddr_in server_addr;' | indent+4;
++			'int receiver_socket;' | indent+4;
++			'int true_var=1;' | indent+4;
++			'struct sockaddr_in receiver_addr;' | indent+4;
++			'socklen_t sin_size;' | indent+4;
++			''
++			'if ((receiver_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)' | indent+4;
++			'{'  | indent+4;
++				'perror("Socket");' | indent+8;
++				'exit(1);' | indent+8;
++			'}'  | indent+4;
++			''
++			'if (setsockopt(receiver_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)' | indent+4;
++			'{' | indent+4;
++				'perror("Setsockopt");' | indent+8;
++				'exit(1);' | indent+8;
++			'}' | indent+4;
++			''
++			'server_addr.sin_family = AF_INET;' | indent+4;
++			'server_addr.sin_port = htons(2400);' | indent+4;
++			'server_addr.sin_addr.s_addr = INADDR_ANY;' | indent+4;
++			'bzero(&(server_addr.sin_zero),8);' | indent+4;
++			''
++			'if (bind(receiver_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)' | indent+4;
++			'{' | indent+4;
++				'perror("Unable to bind");' | indent+8;
++				'exit(1);' | indent+8;
++			'}' | indent+4;
++			''
++			'if (listen(receiver_socket, 5) == -1)' | indent+4;
++			'{' | indent+4;
++				'perror("Listen failed");' | indent+8;
++				'exit(1);' | indent+8;
++			'}' | indent+4;
++			''
++			'printf("TCPServer Waiting for client on port 2400\\n");' | indent+4;
++			''
++			'sin_size = (socklen_t)sizeof(receiver_addr);' | indent+4;
++			'int receiver_socket_connected = accept(receiver_socket, (struct sockaddr *)&receiver_addr,&sin_size);' | indent+4;
++			'printf("Got a connection from (%s , %d)\\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port));' | indent+4;
++			'printf("Connection with Bolt\\n");' | indent+4;
++			''
++			mapOf(String, setOf(String)) serializers = produceTuplesForHardwareVariables(family.input, fNameUpper, false, indent+4);
++			produceParametersForVariables(family.parameters, indent+4);
++			''
++			'google::protobuf::uint32 size;' | indent+4;
++			'google::protobuf::io::CodedInputStream::Limit msgLimit;' | indent+4;
++			'unsigned char buffer[MAXDATASIZE];' | indent+4;
++			'unsigned char temp[10];' | indent+4;
++			'int numbytes = 0;' | indent+4;
++			'int internal_size = 0;' | indent+4;
++			'int pointer = 0;' | indent+4;
++			'int j, i;' | indent+4;
++			'bzero(buffer,0);' | indent+4;
++			''
++			'struct message_receiver_processor msg;' | indent+4;
++			'while(1)' | indent+4;
++			'{' | indent+4;
++				'numbytes = 0;' | indent+8;
++				'while(pointer < MESSAGE_HEADER)' | indent+8;
++				'{' | indent+8;
++					'numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);' | indent+12;
++					'if(numbytes > 0)' | indent+12;
++						'pointer = pointer + numbytes;' | indent+16;
++				'}' | indent+8;
++				''
++//				'google::protobuf::io::ArrayInputStream arrayIn(buffer, pointer);' | indent+8;
++				'google::protobuf::io::CodedInputStream codedIn1(&arrayIn);' | indent+8;
++				''
++				'codedIn1.ReadRaw(temp, 2); // Read the protocol Message type' | indent+8;
++				'codedIn1.ReadVarint32(&size);' | indent+8;
++				'if((size & 0x7f800000) > 0)' | indent+8;
++				'{' | indent+8;
++					'message_size = 4 + (size + 2); //size of size variable in the message + size Bytes + 2 Bytes protocol' | indent+12;
++				'}' | indent+8;
++				'else if((size & 0x7f8000) > 0)' | indent+8;
++				'{' | indent+8;
++					'message_size = 3 + (size + 2);' | indent+12;
++				'}' | indent+8;
++				'else if((size & 0x7f80) > 0)' | indent+8;
++				'{' | indent+8;
++					'message_size = 2 + (size + 2);' | indent+12;
++				'}' | indent+8;
++				'else' | indent+8;
++				'{' | indent+8;
++					'message_size = 1 + (size + 2);' | indent+12;
++				'}' | indent+8;
++				'//Read the remaining Bytes from the incoming message from TCP buffer' | indent+8;
++				'while(pointer < message_size)' | indent+8;
++				'{' | indent+8;
++					'numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);' | indent+12;
++					'if(numbytes > 0)' | indent+12;
++						'pointer = pointer + numbytes;' | indent+16;
++				'}' | indent+8;
++				'//Deserialize the complete incoming message' | indent+8;
++				'google::protobuf::io::CodedInputStream codedIn(buffer, message_size);' | indent+8;
++				''
++				'// Omit the first two Bytes (Message ID)' | indent+8;
++				'codedIn.Skip(2);' | indent+8;
++				''
++				produceTuplesForHardware(family.input, serializers, indent+12);
++				produceParametersForHardware(family.parameters, indent+12);
++				'else if(temp[0] == \'c\')' | indent+12;
++				'{' | indent+12;
++					'printf("Connection closed\\n");' | indent+16;
++					'return;' | indent+16;
++				'}' | indent+12;
++				''
++			'}' | indent+4;
++			'close(receiver_socket_connected);' | indent+4;
++		'}'
++	}
++	def produceTuplesForInclude(Tuples tuples) {
++		Boolean once1 = true;
++	    Boolean once2 = true;
++		for(Tuple t : tuples) {
++			for(Field f : t.fields) {
++				FieldType ftype = f.type;
++				String fieldName = toIdentifier("${f.name}");
++				String ptype = basicTypeForProto(ftype);
++				if(ptype != "" and once1) {
++					'#include "${fNameUpper}.pb.h"'
++					once1 = false;
++				}
++				if(isListType(ftype) and once2) {
++					'#include "stringlist.pb.h"'
++					once2 = false;
++				} else if(ptype == "" and !isListType(ftype)){
++					'#include "${fieldName}.pb.h"' //Notice that the algorithm-specific proto name is the configured field name
++				}
++			}
++		}
++	}
++	def produceParametersForVariables(sequenceOf(Parameter) parameters, Integer indent) {
++		String paraType;
++		for(Parameter p : parameters) {
++			DecisionVariable para = p;
++			paraType = para.type();
++			if(!isStringExisted(paraType, parametersByType)) {
++				'eu::qualimaster::base::protos::S$paraType $paraType;' | indent;
++				parametersByType.add(paraType);
++			}
++		}
++	}
++	def produceParametersForHardware(sequenceOf(Parameter) parameters, Integer indent) {
++		setOf(String) marker = {};
++		String protocol;
++		String paraType;
++		if(parameters.size()>0){
++			'else if(temp[0] == \'p\') { //Parameters' | indent;
++			for(Parameter p : parameters) {
++				DecisionVariable para = p;
++				paraType = para.type();
++				protocol = parameterHwProtocol(p);
++				if(!isStringExisted(protocol, marker)){
++					'if(temp[1] == \'${protocol}\')  {//${parameterTypeName(p)} Parameter' | indent+4;
++						produceHardwareSerialization(paraType, indent+8);
++						produceSizeCode(indent+8);
++					'}' | indent+4;
++					marker.add(protocol);
++				}
++			}
++			'}' | indent;
++		}
++	}
++	def produceTuplesForHardware(Tuples tuples, mapOf(String, setOf(String)) serializers, Integer indent) {		
++		String tupleName;
++		Integer counter = 0;
++		'if(temp[0] == \'d\') { //Data' | indent;
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			setOf(String) setS = serializers.get(tupleName);
++			String letter = letters.get(counter);
++			counter = counter + 1;
++				'if(temp[1] == \'${letter}\') { //${counter}st Data Type' | indent+4;
++				for(String s : setS) {
++					produceHardwareSerialization(s, indent+8);
++					produceCommonCode(s, indent+8);
++				}
++				'}' | indent+4;
++		}
++		'}' | indent;
++	}
++	def produceHardwareSerialization(String serializer, Integer indent) {
++		'codedIn.ReadVarint32(&size);' | indent;
++		'msgLimit = codedIn.PushLimit(size);' | indent;
++    	'${serializer}.ParseFromCodedStream(&codedIn);' | indent;
++    	'codedIn.PopLimit(msgLimit);' | indent;
++	}
++	def produceSizeCode(Integer indent) {
++		'if((size & 0x7f800000) > 0)' | indent;
++		'{' | indent;
++			'internal_size = internal_size + size + 4;' | indent+4;
++		'}' | indent;
++		'else if((size & 0x7f8000) > 0)' | indent;
++		'{' | indent;
++			'internal_size = internal_size + size + 3;' | indent+4;
++		'}' | indent;
++		'else if((size & 0x7f80) > 0)' | indent;
++		'{' | indent;
++			'internal_size = internal_size + size + 2;' | indent+4;
++		'}' | indent;
++		'else' | indent;
++		'{' | indent;
++			'internal_size = internal_size + size + 1;' | indent+4;
++		'}' | indent;
++	}
++	
++	def produceCommonCode(String variable, Integer indent) {
++		'// Parse the message data' | indent;
++		'msg.type = 0;' | indent;
++		'msg.data = ${variable}.randominteger();' | indent;
++		''
++		'//Push data into the lockfree structure' | indent;
++		'while(!arg->queue_receiver_processor->push(msg))' | indent;
++		'{' | indent;
++			';' | indent+4;
++		'}' | indent;
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareSender.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareSender.vtl
+new file mode 100644
+index 0000000..0585fb6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareSender.vtl
+@@ -0,0 +1,118 @@
++import commonVTLMethods;
++@advice(QM)
++template hardwareSender(Configuration config, FileArtifact target, Family family) {
++	Integer indent = 0;
++	String fNameUpper = family.name.firstToUpperCase();
++	def main(Configuration config, FileArtifact target, Family family) {
++		'#include <stdio.h>'
++		'#include <stdlib.h>'
++		'#include <strings.h>'
++		'#include <unistd.h>'
++		'#include <sys/types.h>'
++		'#include <sys/socket.h>'
++		'#include <netinet/in.h>'
++		'#include <arpa/inet.h>'
++		'#include <sys/wait.h>'
++		'#include <signal.h>'
++		'#include <string>'
++		'#include <iostream>'
++		'#include <netdb.h>'
++		'#include <netinet/in.h>'
++		'#include <string.h>'
++		'#include <google/protobuf/io/coded_stream.h>'
++		'#include <google/protobuf/generated_message_util.h>'
++		'#include <google/protobuf/message.h>'
++		'#include <google/protobuf/extension_set.h>'
++		'#include <google/protobuf/unknown_field_set.h>'
++		'#include <google/protobuf/io/zero_copy_stream_impl_lite.h>'
++		''
++		'#include "SerializeServerTemplateCpuCode.h"'
++		'#include "$fNameUpper.pb.h"'
++		''
++		'void sender(parm *arg)'
++		'{'
++			'struct sockaddr_in server_addr;' | indent+4;
++			'int transmitter_socket;' | indent+4;
++			'socklen_t sin_size;' | indent+4;
++			'int true_var=1;' | indent+4;
++			'struct sockaddr_in transmitter_addr;' | indent+4;
++			''
++			'if ((transmitter_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)' | indent+4;
++			'{' | indent+4;
++				'perror("Socket");' | indent+8;
++				'exit(1);' | indent+8;
++			'}' | indent+4;
++			''
++			'if (setsockopt(transmitter_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)' | indent+4;
++			'{' | indent+4;
++				'perror("Setsockopt");' | indent+8;
++				'exit(1);' | indent+8;
++			'}' | indent+4;
++			''
++			'server_addr.sin_family = AF_INET;' | indent+4;
++			'server_addr.sin_port = htons(2401);' | indent+4;
++			'server_addr.sin_addr.s_addr = INADDR_ANY;' | indent+4;
++			'bzero(&(server_addr.sin_zero),8);' | indent+4;
++			''
++			'if (bind(transmitter_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)' | indent+4;
++			'{' | indent+4;
++				'perror("Unable to bind");' | indent+8;
++				'exit(1);' | indent+8;
++			'}' | indent+4;
++			''
++			'if (listen(transmitter_socket, 5) == -1)' | indent+4;
++			'{' | indent+4;
++				'perror("Listen failed");' | indent+8;
++				'exit(1);' | indent+8;
++			'}' | indent+4;
++			''
++			'printf("TCPServer Waiting for client on port 2401\\n");' | indent+4;
++			''
++			'sin_size = sizeof(transmitter_addr);' | indent+4;
++			'int transmitter_socket_connected = accept(transmitter_socket, (struct sockaddr *)&transmitter_addr,&sin_size);' | indent+4;
++			'printf("Got a connection from (%s , %d)\\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));' | indent+4;
++			'printf("Connection with Spout\\n");' | indent+4;
++			''
++			String type;
++    		String tupleName;
++    		String ifName = "I" + fNameUpper;
++    		Boolean flag = true;
++			for (Tuple t : family.output) {
++	    		tupleName = t.name;
++	    		tupleName = firstToUpperCase(tupleName);
++	    		type = "S${ifName}${tupleName}Output";
++	    	    if(flag) {
++	    	    	'eu::qualimaster::families::protobuf::$type to;' | indent+4;
++	    	    	flag = false; //assume that there is only one output type from the family
++	    	    }	    
++      		}	
++			''
++			'struct message_processor_sender msg;' | indent+4;
++			'while(1)' | indent+4;
++			'{' | indent+4;
++				'while(!arg->queue_processor_sender->pop(msg))' | indent+8;
++				'{' | indent+8;
++					';' | indent+12;
++				'}' | indent+8;
++				'to.set_randominteger(msg.data);' | indent+8;
++				'//already set up a message object called serverAck' | indent+8;
++				'//make a buffer that can hold message + room for a 32bit delimiter' | indent+8;
++				'int ackSize=to.ByteSize()+ google::protobuf::io::CodedOutputStream::VarintSize32(to.ByteSize());' | indent+8;
++				'char* ackBuf=new char[ackSize];' | indent+8;
++				''
++				'//write varint delimiter to buffer' | indent+8;
++				'google::protobuf::io::ArrayOutputStream arrayOut(ackBuf, ackSize);' | indent+8;
++				'google::protobuf::io::CodedOutputStream codedOut(&arrayOut);' | indent+8;
++				''
++				'//write protobuf ack to buffer' | indent+8;
++				'codedOut.WriteVarint32(to.ByteSize());' | indent+8;
++				'to.SerializeToCodedStream(&codedOut);' | indent+8;
++				''
++				'//send buffer to client' | indent+8;
++				'send(transmitter_socket_connected, ackBuf, ackSize, 0);' | indent+8;
++				''
++				'delete(ackBuf);' | indent+8;
++			'}' | indent+4;
++		'}'
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/AlgorithmsCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/AlgorithmsCfg.ivml
+new file mode 100644
+index 0000000..b98de1b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/AlgorithmsCfg.ivml
+@@ -0,0 +1,3024 @@
++project AlgorithmsCfg {
++
++	import ReconfigurableHardware;
++	import ReconfigurableHardwareCfg;
++	import Algorithms;
++	import BasicsCfg;
++	import PipelinesCfg;
++	SoftwareAlgorithm swPreprocessor;
++	SoftwareAlgorithm SWTopoCorrelationFinancial;
++	SoftwareAlgorithm HWTopoCorrelationFinancial;
++	HardwareAlgorithm GenHWTopoCorrelationFinancial;
++	SoftwareAlgorithm HWTopoCorrelationTwitter;
++	SoftwareAlgorithm SWTopoCorrelationTwitter;
++	SoftwareAlgorithm topoSentiWord;
++	SoftwareAlgorithm topoSVM;
++	SoftwareAlgorithm mismatchedAlg;
++	SoftwareAlgorithm randomAlg1;
++	SoftwareAlgorithm randomAlg2;
++	SoftwareAlgorithm switchAlg1;
++	SoftwareAlgorithm switchAlg2;
++	HardwareAlgorithm switchAlgHw;
++	SoftwareAlgorithm preprocessorTest;
++	SoftwareAlgorithm financialCorrelationTest;
++	SoftwareAlgorithm sentimentAnalysisTest;
++	SoftwareAlgorithm twitterCorrelationTest;
++	SoftwareAlgorithm AlgorithmVar_18;
++	SoftwareAlgorithm AlgorithmVar_19;
++	SoftwareAlgorithm AlgorithmVar_20;
++	SoftwareAlgorithm AlgorithmVar_21;
++	SoftwareAlgorithm AlgorithmVar_22;
++	SoftwareAlgorithm AlgorithmVar_23;
++	SoftwareAlgorithm AlgorithmVar_24;
++	SoftwareAlgorithm recommendations;
++	SoftwareAlgorithm eventEnrichment;
++	SoftwareAlgorithm keywordAnalyzer;
++	SoftwareAlgorithm tweetClassifier;
++	SoftwareAlgorithm spamRemoval;
++	SoftwareAlgorithm spamDetection;
++	SoftwareAlgorithm twitterStreamFiltering;
++	SoftwareAlgorithm twitterCrawling;
++	SoftwareAlgorithm expertSearch;
++	SoftwareAlgorithm financialNetworkExtraction;
++	SoftwareAlgorithm AlgorithmVar_25;
++	SoftwareAlgorithm AlgorithmVar_26;
++	SoftwareAlgorithm AlgorithmVar_27;
++	HardwareAlgorithm AlgorithmVar_28;
++	SoftwareAlgorithm aMapper;
++	SoftwareAlgorithm aHayashiYoshida;
++	SubPipelineAlgorithm correlationSW;
++	SoftwareAlgorithm SoftwareAlgorithmVar_29;
++	HardwareAlgorithm HardwareAlgorithmVar_30;
++	HardwareAlgorithm HardwareAlgorithmVar_31;
++	SubPipelineAlgorithm SubPipelineAlgorithmVar_32;
++	SoftwareAlgorithm SoftwareAlgorithmVar_33;
++	SoftwareAlgorithm SoftwareAlgorithmVar_34;
++	SoftwareAlgorithm SoftwareAlgorithmVar_35;
++	SoftwareAlgorithm SoftwareAlgorithmVar_36;
++	SubPipelineAlgorithm SubPipelineAlgorithmVar_37;
++	SubPipelineAlgorithm SubPipelineAlgorithmVar_38;
++	algorithms = {
++		refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(HWTopoCorrelationFinancial), refBy(SWTopoCorrelationTwitter), refBy(HWTopoCorrelationTwitter), refBy(topoSentiWord), refBy(topoSVM), refBy(mismatchedAlg), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(switchAlgHw), refBy(preprocessorTest), refBy(financialCorrelationTest), refBy(sentimentAnalysisTest), refBy(twitterCorrelationTest), refBy(AlgorithmVar_18), refBy(AlgorithmVar_19), refBy(AlgorithmVar_20), refBy(AlgorithmVar_21), refBy(AlgorithmVar_22), refBy(AlgorithmVar_23), refBy(AlgorithmVar_24), refBy(recommendations), refBy(eventEnrichment), refBy(keywordAnalyzer), refBy(tweetClassifier), refBy(spamRemoval), refBy(spamDetection), refBy(twitterStreamFiltering), refBy(twitterCrawling), refBy(expertSearch), refBy(financialNetworkExtraction), refBy(AlgorithmVar_25), refBy(AlgorithmVar_26), refBy(AlgorithmVar_27), refBy(GenHWTopoCorrelationFinancial), refBy(AlgorithmVar_28), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(SoftwareAlgorithmVar_29), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SubPipelineAlgorithmVar_32), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36), refBy(SubPipelineAlgorithmVar_37), refBy(SubPipelineAlgorithmVar_38)
++	};
++	algorithms.bindingTime = BindingTime.compile;
++	swPreprocessor = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "Preprocessor", 
++		input = {
++			Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SWTopoCorrelationFinancial = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++		algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++		scalable = true, 
++		parallelism = 14, 
++		minParallelism = 4, 
++		minNumtasks = 1, 
++		name = "TopoSoftwareCorrelationFinancial", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType)
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items < 850
++		}, 
++		isValid = true
++	};
++	HWTopoCorrelationFinancial = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.hardwaresubtopology.TopoHardwareCorrelationFinancial", 
++		algTopologyClass = "TopoHardwareCorrelationFinancial", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TopoHardwareCorrelationFinancial", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType)
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-financial-hardware:3.1-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or (family_Items * family_Items) / (2 * pipeline_Hosts) >= 20000
++		}, 
++		isValid = true
++	};
++	GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++		hwNode = refBy(cluster2), 
++		scalable = false, 
++		senderParallelism = 1, 
++		receiverParallelism = 12, 
++		name = "GenTopoHardwareCorrelationFinancial", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType)
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items >= 850
++		}, 
++		isValid = true
++	};
++	HWTopoCorrelationTwitter = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.hardwaresubtopology.TopoHardwareCorrelationTwitter", 
++		algTopologyClass = "TopoHardwareCorrelationTwitter", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TopoHardwareCorrelationTwitter", 
++		input = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseTwitter", 
++				fields = {
++					Field {
++						name = "pairwiseCorrelationTwitter", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-twitter-hardware:3.0-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SWTopoCorrelationTwitter = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationTwitter", 
++		algTopologyClass = "TopoSoftwareCorrelationTwitter", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TopoSoftwareCorrelationTwitter", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseTwitter", 
++				fields = {
++					Field {
++						name = "pairwiseCorrelationTwitter", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-twitter-software:3.0-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	topoSentiWord = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++		algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SentimentAnaylsisSentiWordNetTopology", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 60, 
++				name = "timeSeriesGranularity"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "sentimentClass"
++			}, RealParameter {
++				defaultValue = 2.5, 
++				name = "classificationThreshold"
++			}
++		}, 
++		artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	topoSVM = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++		algTopologyClass = "SentimentAnaylsisSVMTopology", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SentimentAnaylsisSVMTopology", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 60, 
++				name = "timeSeriesGranularity"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "sentimentClass"
++			}, RealParameter {
++				defaultValue = 2.5, 
++				name = "classificationThreshold"
++			}
++		}, 
++		artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	mismatchedAlg = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.impl.MismatchedAlg", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "MismatchedAlg", 
++		input = {
++			Tuple {
++				name = "misString", 
++				fields = {
++					Field {
++						name = "symbolTuple1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "misString", 
++				fields = {
++					Field {
++						name = "streamID1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "quote", 
++						type = refBy(RealType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:MismatchedAlg:0.0.1", 
++		successor = null, 
++		isValid = true
++	};
++	randomAlg1 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.RandomProcessor1", 
++		algTopologyClass = "RandomProcessor1", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "RandomProcessor1", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 5, 
++				name = "delay"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "flag"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items < 500
++		}, 
++		isValid = true
++	};
++	randomAlg2 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.RandomProcessor2", 
++		algTopologyClass = "RandomProcessor2", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "RandomProcessor2", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 0, 
++				name = "delay"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "flag"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items >= 500
++		}, 
++		isValid = true
++	};
++	switchAlg1 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SwitchProcessor1", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 0, 
++				name = "aggregationFactor"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "delay"
++			}, BooleanParameter {
++				defaultValue = true, 
++				name = "flag"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items < 500
++		}, 
++		isValid = true
++	};
++	switchAlg2 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SwitchProcessor2", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 0, 
++				name = "aggregationFactor"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "delay"
++			}, BooleanParameter {
++				defaultValue = true, 
++				name = "flag"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items >= 500
++		}, 
++		isValid = true
++	};
++	switchAlgHw = HardwareAlgorithm {
++		hwNode = refBy(cluster1), 
++		scalable = false, 
++		senderParallelism = 1, 
++		receiverParallelism = 1, 
++		name = "HardwareAlgorithmSubTopology", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 0, 
++				name = "aggregationFactor"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "delay"
++			}, BooleanParameter {
++				defaultValue = true, 
++				name = "flag"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:SwitchProcessorHardware:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	preprocessorTest = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "PreprocessorTSI", 
++		input = {
++			Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	financialCorrelationTest = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.FinancialCorrelationTest", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "FinancialCorrelationTest", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "pairwiseCorrelationFinancial", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:FinancialCorrelationTest:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	sentimentAnalysisTest = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.SentimentAnalysisTest", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SentimentAnalysisTest", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 60, 
++				name = "timeSeriesGranularity"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "sentimentClass"
++			}, RealParameter {
++				defaultValue = 2.5, 
++				name = "classificationThreshold"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:SentimentAnalysisTest:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	twitterCorrelationTest = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.TwitterCorrelationTest", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TwitterCorrelationTest", 
++		input = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseTwitter", 
++				fields = {
++					Field {
++						name = "pairwiseCorrelationTwitter", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:TwitterCorrelationTest:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_18 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionMovingAverageAlgorithm", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TwitterEventDetectionTopologyMovingAverage", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(ObjectType)
++					}, Field {
++						name = "stocks", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 1000, 
++				name = "hardThreshold"
++			}, RealParameter {
++				defaultValue = 0.5, 
++				name = "percentageThreshold"
++			}, IntegerParameter {
++				defaultValue = 86400, 
++				name = "lengthOfTimeWindow"
++			}, IntegerParameter {
++				defaultValue = 1, 
++				name = "frequenceOfCheckForEvent"
++			}
++		}, 
++		artifact = "eu.qualimaster:EventDetectionMovingAverageAlgorithm:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_19 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.eventdetection.topology.impl.TwitterEventDetectionTopologyKleinberg", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TwitterEventDetectionTopologyKleinberg", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "symbols", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		artifact = "eu.qualimaster:EventDetectionKleinbergTopology:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_20 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.event.prediction.topology.impl.EventPredictionFuturedatementionsTopology", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "EventPredictionFuturedatementionsTopology", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "symbols", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		artifact = "eu.qualimaster:EventPredictionFuturedatementionsTopology:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_21 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.event.prediction.topology.impl.EventPredictionCalendarTopology", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "EventPredictionCalendarTopology", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "symbols", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		artifact = "eu.qualimaster:EventPredictionCalendarTopology:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_22 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "StockParser  ", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "stocks", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_23 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.simpleRecommendations.family.impl.SimpleRecommendationsAlgorithm", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SimpleRecommendations", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "recommendations", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:SimpleRecommendations:0.0.2-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_24 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "EventDetectionHardThreshold", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "stocks", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 1000, 
++				name = "hardThreshold"
++			}, RealParameter {
++				defaultValue = 0.5, 
++				name = "percentageThreshold"
++			}, IntegerParameter {
++				defaultValue = 86400, 
++				name = "lengthOfTimeWindow"
++			}, IntegerParameter {
++				defaultValue = 1, 
++				name = "frequenceOfCheckForEvent"
++			}
++		}, 
++		artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	recommendations = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "Recommendations", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "recommendationStream", 
++				fields = {
++					Field {
++						name = "recommendations", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				defaultValue = 0.5, 
++				name = "impactThreshold"
++			}, RealParameter {
++				defaultValue = 0.5, 
++				name = "stockCooccurrenceThreshold"
++			}
++		}, 
++		artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	eventEnrichment = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "EventEnrichment", 
++		description = "simply adds keywords to events", 
++		input = {
++			Tuple {
++				name = "eventStream", 
++				fields = {
++					Field {
++						name = "tweet", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}
++				}
++			}, Tuple {
++				name = "keywordStream", 
++				fields = {
++					Field {
++						name = "keywords", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "enrichedEventsStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	keywordAnalyzer = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "KeywordAnalyzer", 
++		description = "deduces typical keywords for a current event", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				defaultValue = 0.5, 
++				name = "threshold"
++			}, RealParameter {
++				defaultValue = 0.5, 
++				name = "decay"
++			}
++		}, 
++		artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	tweetClassifier = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TweetClassifier", 
++		description = "checks if tweet belongs to a certain stock", 
++		input = {
++			Tuple {
++				name = "modifiedTwitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(StatusType)
++					}
++				}
++			}, Tuple {
++				name = "keywordStream", 
++				fields = {
++					Field {
++						name = "keywords", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "modifiedTwitterStream", 
++				fields = {
++					Field {
++						name = "tweet", 
++						type = refBy(StatusType)
++					}, Field {
++						name = "stocks", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	spamRemoval = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SpamRemoval", 
++		description = "Removes Spam from twitter stream", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "spamPropability", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				defaultValue = 0.5, 
++				name = "spamThreshold"
++			}
++		}, 
++		artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	spamDetection = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SpamDetection", 
++		description = "Detects spam in tweet stream", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "spamPropability", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	twitterStreamFiltering = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TwitterStreamFiltering", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(ObjectType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(ObjectType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	twitterCrawling = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TwitterCrawling", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType), 
++						keyPart = false
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	expertSearch = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "ExpertSearch", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(StatusType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "experts", 
++						type = refBy(IFExpertListType), 
++						keyPart = false
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType), 
++						keyPart = false
++					}, Field {
++						name = "keywords", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}, Field {
++						name = "symbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	financialNetworkExtraction = SoftwareAlgorithm {
++		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "FinancialNetworkExtraction", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(StatusType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "edges", 
++						type = refBy(IFEdgeListType), 
++						keyPart = false
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_25 = SoftwareAlgorithm {
++		class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "DynamicGraphCompilation", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType)
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "edgeStream", 
++				fields = {
++					Field {
++						name = "edge", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				name = "correlationThreshold"
++			}
++		}, 
++		artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_26 = SoftwareAlgorithm {
++		class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++		algTopologyClass = "TopoDynamicHubComputation", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TopoDynamicHubComputation", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "edgeStream", 
++				fields = {
++					Field {
++						name = "edge", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "hubStream", 
++				fields = {
++					Field {
++						name = "hubList", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "hubListSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_27 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.transferentropy.hardwaresubtopology.TopoHardwareTransferEntropyFinancial", 
++		algTopologyClass = "TopoHardwareTransferEntropyFinancial", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TransferEntropy", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "pairwiseCorrelationFinancial", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:transferentropy-financial-hardware:3.0-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	AlgorithmVar_28 = HardwareAlgorithm {
++		hwNode = refBy(cluster2), 
++		scalable = false, 
++		senderParallelism = 1, 
++		receiverParallelism = 1, 
++		name = "GenTransferEntropy", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 120, 
++				name = "windowSize"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "windowAdvance"
++			}, IntegerParameter {
++				defaultValue = 32, 
++				name = "densitySize"
++			}
++		}, 
++		artifact = "eu.qualimaster:GenTransferEntropy:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	aMapper = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "Mapper", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "symbolsStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}
++				}
++			}, Tuple {
++				name = "configurationStream", 
++				fields = {
++					Field {
++						name = "pairKey", 
++						type = refBy(StringType)
++					}, Field {
++						name = "pairValue", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "resetWindowStream", 
++				fields = {
++					Field {
++						name = "windowStart", 
++						type = refBy(LongType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	aHayashiYoshida = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "HayashiYoshida", 
++		input = {
++			Tuple {
++				name = "symbolsStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}
++				}
++			}, Tuple {
++				name = "configurationStream", 
++				fields = {
++					Field {
++						name = "pairKey", 
++						type = refBy(StringType)
++					}, Field {
++						name = "pairValue", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "resetWindowStream", 
++				fields = {
++					Field {
++						name = "windowStart", 
++						type = refBy(LongType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "pairwiseCorrelationFinancial", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	correlationSW = SubPipelineAlgorithm {
++		subPipeline = refBy(SubTopology), 
++		name = "CorrelationSW", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType)
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items < 850
++		}, 
++		isValid = true
++	};
++	SoftwareAlgorithmVar_29 = SoftwareAlgorithm {
++		class = "eu.qualimaster.timegraph.TimeGraph", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SoftwareTimeGraph", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "dataStream", 
++				fields = {
++					Field {
++						name = "update", 
++						type = refBy(ObjectType)
++					}, Field {
++						name = "isAddition", 
++						type = refBy(BooleanType)
++					}
++				}
++			}, Tuple {
++				name = "snapshotQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}
++				}
++			}, Tuple {
++				name = "pathQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}, Field {
++						name = "vertexA", 
++						type = refBy(StringType)
++					}, Field {
++						name = "vertexB", 
++						type = refBy(StringType)
++					}, Field {
++						name = "type", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "snapshotStream", 
++				fields = {
++					Field {
++						name = "snapshot", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "pathStream", 
++				fields = {
++					Field {
++						name = "path", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	HardwareAlgorithmVar_30 = HardwareAlgorithm {
++		hwNode = refBy(cluster1), 
++		scalable = false, 
++		senderParallelism = 1, 
++		receiverParallelism = 1, 
++		name = "TransferEntropyHardware", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	HardwareAlgorithmVar_31 = HardwareAlgorithm {
++		hwNode = refBy(cluster1), 
++		scalable = false, 
++		senderParallelism = 1, 
++		receiverParallelism = 1, 
++		name = "MutualInformationHardware", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SubPipelineAlgorithmVar_32 = SubPipelineAlgorithm {
++		subPipeline = refBy(SubPipelineVar_11), 
++		name = "RandomSubPipelineAlgorithm1", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "delay"
++			}, BooleanParameter {
++				name = "flag"
++			}, IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TransferEntropySoftware", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 300, 
++				name = "windowSize"
++			}, IntegerParameter {
++				defaultValue = 1, 
++				name = "windowAdvance"
++			}, IntegerParameter {
++				defaultValue = 128, 
++				name = "densitySize"
++			}
++		}, 
++		artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
++		class = "eu.qualimaster.timegraph.TimeGraphMapper", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TimeGraphMapper", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "edgeStream", 
++				fields = {
++					Field {
++						name = "edge", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "dataStream", 
++				fields = {
++					Field {
++						name = "update", 
++						type = refBy(ObjectType), 
++						keyPart = false
++					}, Field {
++						name = "isAddition", 
++						type = refBy(BooleanType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
++		class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TimeGraphIndexer", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "dataStream", 
++				fields = {
++					Field {
++						name = "update", 
++						type = refBy(ObjectType), 
++						keyPart = false
++					}, Field {
++						name = "isAddition", 
++						type = refBy(BooleanType)
++					}
++				}
++			}, Tuple {
++				name = "internalRequests", 
++				fields = {
++					Field {
++						name = "internalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}, Tuple {
++				name = "unicastRequests", 
++				fields = {
++					Field {
++						name = "unicastExternalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}, Tuple {
++				name = "broadcastRequests", 
++				fields = {
++					Field {
++						name = "broadcastExternalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "externalResponses", 
++				fields = {
++					Field {
++						name = "externalResponse", 
++						type = refBy(ObjectType)
++					}
++				}
++			}, Tuple {
++				name = "internalRequests", 
++				fields = {
++					Field {
++						name = "internalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
++		class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
++		algTopologyClass = "", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "TimeGraphQueryExecutor", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "snapshotQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}
++				}
++			}, Tuple {
++				name = "pathQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}, Field {
++						name = "vertexA", 
++						type = refBy(StringType)
++					}, Field {
++						name = "vertexB", 
++						type = refBy(StringType)
++					}, Field {
++						name = "type", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "externalResponses", 
++				fields = {
++					Field {
++						name = "externalResponse", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "snapshotStream", 
++				fields = {
++					Field {
++						name = "snapshot", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "pathStream", 
++				fields = {
++					Field {
++						name = "path", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "unicastRequests", 
++				fields = {
++					Field {
++						name = "unicastExternalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}, Tuple {
++				name = "broadcastRequests", 
++				fields = {
++					Field {
++						name = "broadcastExternalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SubPipelineAlgorithmVar_37 = SubPipelineAlgorithm {
++		subPipeline = refBy(SubPipelineVar_15), 
++		name = "RandomSubPipelineAlgorithm2", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "delay"
++			}, BooleanParameter {
++				name = "flag"
++			}, IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SubPipelineAlgorithmVar_38 = SubPipelineAlgorithm {
++		subPipeline = refBy(SubPipelineVar_19), 
++		name = "CorrelationSWAlternative", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	freeze {
++		algorithms;
++		swPreprocessor;
++		SWTopoCorrelationFinancial;
++		HWTopoCorrelationFinancial;
++		GenHWTopoCorrelationFinancial;
++		HWTopoCorrelationTwitter;
++		SWTopoCorrelationTwitter;
++		topoSentiWord;
++		topoSVM;
++		mismatchedAlg;
++		randomAlg1;
++		randomAlg2;
++		switchAlg1;
++		switchAlg2;
++		switchAlgHw;
++		preprocessorTest;
++		financialCorrelationTest;
++		sentimentAnalysisTest;
++		twitterCorrelationTest;
++		AlgorithmVar_18;
++		AlgorithmVar_19;
++		AlgorithmVar_20;
++		AlgorithmVar_21;
++		AlgorithmVar_22;
++		AlgorithmVar_23;
++		AlgorithmVar_24;
++		recommendations;
++		eventEnrichment;
++		keywordAnalyzer;
++		tweetClassifier;
++		spamRemoval;
++		spamDetection;
++		twitterStreamFiltering;
++		twitterCrawling;
++		expertSearch;
++		financialNetworkExtraction;
++		AlgorithmVar_25;
++		AlgorithmVar_26;
++		AlgorithmVar_27;
++		AlgorithmVar_28;
++		aMapper;
++		aHayashiYoshida;
++		correlationSW;
++		SoftwareAlgorithmVar_29;
++		HardwareAlgorithmVar_30;
++		HardwareAlgorithmVar_31;
++		SubPipelineAlgorithmVar_32;
++		SoftwareAlgorithmVar_33;
++		SoftwareAlgorithmVar_34;
++		SoftwareAlgorithmVar_35;
++		SoftwareAlgorithmVar_36;
++		SubPipelineAlgorithmVar_37;
++		SubPipelineAlgorithmVar_38;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/BasicsCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/BasicsCfg.ivml
+new file mode 100644
+index 0000000..e5353ab
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/BasicsCfg.ivml
+@@ -0,0 +1,136 @@
++project BasicsCfg {
++
++	import Basics;
++	FieldType IntegerType;
++	FieldType LongType;
++	FieldType StringType;
++	FieldType BooleanType;
++	FieldType FloatType;
++	FieldType DoubleType;
++	FieldType RealType;
++	FieldType ObjectType;
++	FieldType StringListType;
++	FieldType IFExpertListType;
++	FieldType IFTimeIntervalType;
++	FieldType StatusType;
++	FieldType IFEdgeListType;
++	FieldType IFEventListType;
++	FieldType TimeStampType;
++	FieldType StringTimeStampType;
++	FieldType FieldTypeVar_16;
++	types = {
++		refBy(IntegerType), refBy(LongType), refBy(StringType), refBy(BooleanType), refBy(FloatType), refBy(DoubleType), refBy(RealType), refBy(ObjectType), refBy(StringListType), refBy(IFTimeIntervalType), refBy(IFExpertListType), refBy(StatusType), refBy(IFEdgeListType), refBy(IFEventListType), refBy(TimeStampType), refBy(StringTimeStampType), refBy(FieldTypeVar_16)
++	};
++	types.bindingTime = BindingTime.compile;
++	IntegerType = FieldType {
++		name = "INTEGER", 
++		class = "int"
++	};
++	LongType = FieldType {
++		name = "LONG", 
++		class = "long"
++	};
++	StringType = FieldType {
++		name = "STRING", 
++		class = "String"
++	};
++	BooleanType = FieldType {
++		name = "BOOLEAN", 
++		class = "boolean"
++	};
++	FloatType = FieldType {
++		name = "Float", 
++		class = "float"
++	};
++	DoubleType = FieldType {
++		name = "Double", 
++		class = "double"
++	};
++	RealType = FieldType {
++		name = "REAL", 
++		class = "double"
++	};
++	ObjectType = FieldType {
++		name = "OBJECT", 
++		class = "Object"
++	};
++	StringListType = FieldType {
++		name = "STRINGLIST", 
++		class = "java.util.List<String>", 
++		artifact = "", 
++		serializer = "eu.qualimaster.base.serializer.StringListSerializer", 
++		serializerArtifact = "eu.qualimaster:StormCommons:0.5.0-SNAPSHOT"
++	};
++	IFExpertListType = FieldType {
++		name = "IFEXPERTLIST", 
++		class = "java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert>", 
++		artifact = "eu.qualimaster.families:Datatypes:0.0.1-SNAPSHOT", 
++		serializer = "", 
++		serializerArtifact = ""
++	};
++	IFTimeIntervalType = FieldType {
++		name = "IFTIMEINTERVAL", 
++		class = "eu.qualimaster.families.datatypes.common.IFTimeInterval", 
++		artifact = "eu.qualimaster.families:Datatypes:0.0.1-SNAPSHOT", 
++		serializer = "", 
++		serializerArtifact = ""
++	};
++	StatusType = FieldType {
++		name = "STATUS", 
++		class = "twitter4j.Status", 
++		artifact = "org.twitter4j:twitter4j-stream:4.0.1", 
++		serializer = "", 
++		serializerArtifact = ""
++	};
++	IFEdgeListType = FieldType {
++		name = "IFEDGETYPE", 
++		class = "java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge>", 
++		artifact = "eu.qualimaster.families:Datatypes:0.0.1-SNAPSHOT", 
++		serializer = "", 
++		serializerArtifact = ""
++	};
++	IFEventListType = FieldType {
++		name = "IFEVENTLISTTYPE", 
++		class = "java.util.List<eu.qualimaster.families.datatypes.events.IFEvent>", 
++		artifact = "eu.qualimaster.families:Datatypes:0.0.1-SNAPSHOT", 
++		serializer = "", 
++		serializerArtifact = ""
++	};
++	TimeStampType = FieldType {
++		name = "TIMESTAMP", 
++		class = "long",
++		isTimestamp = true
++	};
++    StringTimeStampType = FieldType {
++        name = "STRING-TIMESTAMP", // must be in format MM/dd/yyyy,HH:mm:ss 
++        class = "String",
++        isTimestamp = true
++    };
++	FieldTypeVar_16 = FieldType {
++		name = "LABELLEDTWEET", 
++		class = "eu.qualimaster.data.stream.source.LabelledTweet", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		serializer = "", 
++		serializerArtifact = ""
++	};
++	freeze {
++		types;
++		IntegerType;
++		LongType;
++		StringType;
++		BooleanType;
++		FloatType;
++		DoubleType;
++		RealType;
++		ObjectType;
++		StringListType;
++		IFExpertListType;
++		IFTimeIntervalType;
++		StatusType;
++		IFEdgeListType;
++		IFEventListType;
++		TimeStampType;
++		StringTimeStampType;
++		FieldTypeVar_16;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/CloudResourceCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/CloudResourceCfg.ivml
+new file mode 100644
+index 0000000..daf1466
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/CloudResourceCfg.ivml
+@@ -0,0 +1,32 @@
++project CloudResourceCfg {
++	
++	import CloudResources;	
++	
++	PublicCloudEnvironment AWS;
++	
++	AWS =  {
++		maxMemory = 100000,
++		maxProcessors = 100.0,
++		maxWorkingStorage = 160000,
++		name = "AWS",
++		amiID = "ami-51dbde38",
++		pathToKeyFile = "AwsVM"
++	};
++	
++	PrivateCloudEnvironment ON;
++	
++	ON = {
++		name = "OpenNebula",
++		maxMemory = 800000,
++		maxProcessors = 1.0,
++		maxWorkingStorage = 160000
++	};
++	
++	cloudEnvironments = {refBy(ON), refBy(AWS)};
++	
++	freeze{
++		ON;
++		AWS;
++		cloudEnvironments;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/DataManagementCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/DataManagementCfg.ivml
+new file mode 100644
+index 0000000..826e3ac
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/DataManagementCfg.ivml
+@@ -0,0 +1,744 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++	DataSource spring;
++	DataSource twitter;
++	DataSource randomSource;
++	DataSink priorSnk;
++	DataSink randomSink;
++	PersistentDataElement hBaseDataManagement;
++	DataSource DataSourceVar_4;
++	DataSource DataSourceVar_5;
++	DataSink DataSinkVar_2;
++	DataSink DataSinkVar_3;
++	DataSink DataSinkVar_4;
++	DataSource DataSourceVar_6;
++	DataSource DataSourceVar_7;
++	DataSource DataSourceVar_8;
++	DataSink DataSinkVar_5;
++	DataSource DataSourceVar_9;
++	DataSink DataSinkVar_6;
++	DataSource DataSourceVar_10;
++	DataSource DataSourceVar_11;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_4), refBy(DataSourceVar_5), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_8), refBy(DataSourceVar_9), refBy(DataSourceVar_10), refBy(DataSourceVar_11)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_4), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	randomSource = DataSource {
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 0, 
++				name = "delay"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Random Source", 
++		description = "", 
++		artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++		storageLocation = "random", 
++		strategy = DataManagementStrategy.None
++	};
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	randomSink = DataSink {
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = true
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++		isValid = true, 
++		name = "Random Sink", 
++		description = "", 
++		artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++		storageLocation = "random", 
++		strategy = DataManagementStrategy.None
++	};
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++	DataSourceVar_4 = DataSource {
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(StatusType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = true, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "NewTwitterStreamDataSource", 
++		description = "", 
++		artifact = "eu.qualimaster:NewTwitterStreamDataSource:0.0.1-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	DataSourceVar_5 = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "resetWindow", 
++				fields = {
++					Field {
++						name = "windowStart", 
++						type = refBy(LongType)
++					}, Field {
++						name = "windowEnd", 
++						type = refBy(LongType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.WindowedSpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Windowed Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:windowed-spring-client:3.0-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	DataSinkVar_2 = DataSink {
++		output = {
++			Tuple {
++				name = "hubStream", 
++				fields = {
++					Field {
++						name = "hubList", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++		isValid = true, 
++		name = "DynamicGraphSink", 
++		description = "", 
++		artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	DataSinkVar_3 = DataSink {
++		output = {
++			Tuple {
++				name = "recommendationStream", 
++				fields = {
++					Field {
++						name = "recommendations", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "edgeStream", 
++				fields = {
++					Field {
++						name = "edge", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++		isValid = true, 
++		name = "FocusSink", 
++		description = "", 
++		artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	DataSinkVar_4 = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.MIDataSinkForFinancial", 
++		isValid = true, 
++		name = "MI_data_Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:mi-data-sink:1.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	DataSourceVar_6 = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "playerList"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "FocusFincancialData", 
++		description = "", 
++		artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	DataSourceVar_7 = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				defaultValue = 1.0, 
++				name = "speedFactor"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "SimulatedFinancialData", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	DataSourceVar_8 = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				defaultValue = 1.0, 
++				name = "speedFactor"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "playerList"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.focus.FocusedSpringClientSimulator", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "SimulatedFocusFinancialData", 
++		description = "", 
++		artifact = "eu.qualimaster:focused-spring-client-simulator:0.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	DataSinkVar_5 = DataSink {
++		output = {
++			Tuple {
++				name = "snapshotStream", 
++				fields = {
++					Field {
++						name = "snapshot", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "pathStream", 
++				fields = {
++					Field {
++						name = "path", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
++		isValid = true, 
++		name = "TimeTravelSink", 
++		description = "", 
++		artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	DataSourceVar_9 = DataSource {
++		input = {
++			Tuple {
++				name = "snapshotQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}
++				}
++			}, Tuple {
++				name = "pathQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}, Field {
++						name = "vertexA", 
++						type = refBy(StringType)
++					}, Field {
++						name = "vertexB", 
++						type = refBy(StringType)
++					}, Field {
++						name = "type", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				name = "snapshotQuery"
++			}, StringParameter {
++				name = "pathQuery"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "TimeGraphQueriesSource", 
++		description = "", 
++		artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++		storageLocation = "input/query", 
++		strategy = DataManagementStrategy.None
++	};
++	DataSinkVar_6 = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
++		isValid = true, 
++		name = "TransferSink", 
++		description = "", 
++		artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	DataSourceVar_10 = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithm.FixRateFinancialDataSource", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "FixedRateSimulatedFinancialData", 
++		description = "", 
++		artifact = "eu.qualimaster:DataSourceSimulator:0.0.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed
++	};
++	DataSourceVar_11 = DataSource {
++		input = {
++			Tuple {
++				name = "edgeStream", 
++				fields = {
++					Field {
++						name = "edge", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sourceCls = "eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "SimulatedGraphData", 
++		description = "", 
++		artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++		storageLocation = "input/simulatedGraphData", 
++		strategy = DataManagementStrategy.None
++	};
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++		randomSource;
++		priorSnk;
++		randomSink;
++		hBaseDataManagement;
++		DataSourceVar_4;
++		DataSourceVar_5;
++		DataSinkVar_2;
++		DataSinkVar_3;
++		DataSinkVar_4;
++		DataSourceVar_6;
++		DataSourceVar_7;
++		DataSourceVar_8;
++		DataSinkVar_5;
++		DataSourceVar_9;
++		DataSinkVar_6;
++		DataSourceVar_10;
++		DataSourceVar_11;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/FamiliesCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/FamiliesCfg.ivml
+new file mode 100644
+index 0000000..cbb50eb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/FamiliesCfg.ivml
+@@ -0,0 +1,1545 @@
++project FamiliesCfg {
++
++	import ReconfigurableHardware;
++	import Families;
++	import AlgorithmsCfg;
++	import BasicsCfg;
++	Family fPreprocessor;
++	Family fCorrelationFinancial;
++	Family fSentimentAnalysis;
++	Family fCorrelationTwitter;
++	Family fMismatchedFamily;
++	Family randomFamily;
++	Family switchFamily;
++	Family fExpertSearch;
++	Family fFinancialNetworkExtraction;
++	Family fTwitterCrawling;
++	Family fTwitterEventDetection;
++	Family fTwitterEventPrediction;
++	Family fTwitterStreamFiltering;
++	Family FamilyVar_14;
++	Family FamilyVar_15;
++	Family FamilyVar_16;
++	Family FamilyVar_17;
++	Family FamilyVar_18;
++	Family FamilyVar_19;
++	Family FamilyVar_20;
++	Family FamilyVar_21;
++	Family FamilyVar_22;
++	Family FamilyVar_23;
++	Family FamilyVar_24;
++	Family fMapper;
++	Family fHayashiYoshida;
++	Family FamilyVar_25;
++	Family FamilyVar_26;
++	Family FamilyVar_27;
++	Family FamilyVar_28;
++	families = {
++		refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(fCorrelationTwitter), refBy(fMismatchedFamily), refBy(randomFamily), refBy(switchFamily), refBy(fExpertSearch), refBy(fFinancialNetworkExtraction), refBy(fTwitterCrawling), refBy(fTwitterEventDetection), refBy(fTwitterEventPrediction), refBy(fTwitterStreamFiltering), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_16), refBy(FamilyVar_17), refBy(FamilyVar_18), refBy(FamilyVar_19), refBy(FamilyVar_20), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(fMapper), refBy(fHayashiYoshida), refBy(FamilyVar_25), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
++	};
++	families.bindingTime = BindingTime.compile;
++	fPreprocessor = Family {
++		name = "fPreprocessor", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(swPreprocessor)
++		}
++	};
++	fCorrelationFinancial = Family {
++		name = "fCorrelationFinancial", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		members = {
++			//refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++			refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SubPipelineAlgorithmVar_38)
++		}
++	};
++	fSentimentAnalysis = Family {
++		name = "fSentimentAnalysis", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}, IntegerParameter {
++				name = "sentimentClass"
++			}, RealParameter {
++				name = "classificationThreshold"
++			}
++		}, 
++		members = {
++			refBy(topoSentiWord), refBy(topoSVM)
++		}
++	};
++	fCorrelationTwitter = Family {
++		name = "fCorrelationTwitter", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseTwitter", 
++				fields = {
++					Field {
++						name = "pairwiseCorrelationTwitter", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		members = {
++			refBy(SWTopoCorrelationTwitter), refBy(HWTopoCorrelationTwitter)
++		}
++	};
++	fMismatchedFamily = Family {
++		name = "fMismatchedFamily", 
++		input = {
++			Tuple {
++				name = "misString", 
++				fields = {
++					Field {
++						name = "symbolTuple1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "misString", 
++				fields = {
++					Field {
++						name = "streamID1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "quote", 
++						type = refBy(RealType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(mismatchedAlg)
++		}
++	};
++	randomFamily = Family {
++		name = "randomFamily", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "delay"
++			}, BooleanParameter {
++				name = "flag"
++			}, IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		members = {
++			refBy(randomAlg1), refBy(randomAlg2)
++		}
++	};
++	switchFamily = Family {
++		name = "switchFamily", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(TimeStampType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "aggregationFactor"
++			}, IntegerParameter {
++				name = "delay"
++			}, BooleanParameter {
++				name = "flag"
++			}, IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		members = {
++			refBy(switchAlg1), refBy(switchAlg2)
++		}
++	};
++	fExpertSearch = Family {
++		name = "fExpertSearch", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(StatusType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "experts", 
++						type = refBy(IFExpertListType), 
++						keyPart = false
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType), 
++						keyPart = false
++					}, Field {
++						name = "keywords", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}, Field {
++						name = "symbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		members = {
++			refBy(expertSearch)
++		}
++	};
++	fFinancialNetworkExtraction = Family {
++		name = "fFinancialNetworkExtraction", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(StatusType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "edges", 
++						type = refBy(IFEdgeListType), 
++						keyPart = false
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		members = {
++			refBy(financialNetworkExtraction)
++		}
++	};
++	fTwitterCrawling = Family {
++		name = "fTwitterCrawling", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType), 
++						keyPart = false
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		members = {
++			refBy(twitterCrawling)
++		}
++	};
++	fTwitterEventDetection = Family {
++		name = "fTwitterEventDetection", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16), 
++						keyPart = false
++					}, Field {
++						name = "stocks", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 1000, 
++				name = "hardThreshold"
++			}, RealParameter {
++				defaultValue = 0.5, 
++				name = "percentageThreshold"
++			}, IntegerParameter {
++				defaultValue = 86400, 
++				name = "lengthOfTimeWindow"
++			}, IntegerParameter {
++				defaultValue = 1, 
++				name = "frequenceOfCheckForEvent"
++			}
++		}, 
++		members = {
++			refBy(AlgorithmVar_24)
++		}
++	};
++	fTwitterEventPrediction = Family {
++		name = "fTwitterEventPrediction", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType), 
++						keyPart = false
++					}, Field {
++						name = "symbols", 
++						type = refBy(IFEventListType), 
++						keyPart = false
++					}, Field {
++						name = "timeInterval", 
++						type = refBy(IFTimeIntervalType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}
++		}, 
++		members = {
++			refBy(AlgorithmVar_20), refBy(AlgorithmVar_21)
++		}
++	};
++	fTwitterStreamFiltering = Family {
++		name = "fTwitterStreamFiltering", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(ObjectType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analysis", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(ObjectType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(twitterStreamFiltering)
++		}
++	};
++	FamilyVar_14 = Family {
++		name = "fSpamDetection", 
++		description = "Detects spam in tweet stream", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "spamPropability", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(spamDetection)
++		}
++	};
++	FamilyVar_15 = Family {
++		name = "fSpamRemoval", 
++		description = "Removes Spam from twitter stream", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "spamPropability", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				defaultValue = 0.5, 
++				name = "spamThreshold"
++			}
++		}, 
++		members = {
++			refBy(spamRemoval)
++		}
++	};
++	FamilyVar_16 = Family {
++		name = "fTweetClassifier", 
++		description = "checks if tweet belongs to a certain stock", 
++		input = {
++			Tuple {
++				name = "modifiedTwitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(StatusType)
++					}
++				}
++			}, Tuple {
++				name = "keywordStream", 
++				fields = {
++					Field {
++						name = "keywords", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "modifiedTwitterStream", 
++				fields = {
++					Field {
++						name = "tweet", 
++						type = refBy(StatusType)
++					}, Field {
++						name = "stocks", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(tweetClassifier)
++		}
++	};
++	FamilyVar_17 = Family {
++		name = "fKeywordAnalyzer", 
++		description = "deduces typical keywords for a current event", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				defaultValue = 0.5, 
++				name = "threshold"
++			}, RealParameter {
++				defaultValue = 0.5, 
++				name = "decay"
++			}
++		}, 
++		members = {
++			refBy(keywordAnalyzer)
++		}
++	};
++	FamilyVar_18 = Family {
++		name = "fEventEnrichment", 
++		description = "simply adds keywords to events", 
++		input = {
++			Tuple {
++				name = "eventStream", 
++				fields = {
++					Field {
++						name = "tweet", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}
++				}
++			}, Tuple {
++				name = "keywordStream", 
++				fields = {
++					Field {
++						name = "keywords", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "enrichedEventsStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(eventEnrichment)
++		}
++	};
++	FamilyVar_19 = Family {
++		name = "fRecommendations", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "recommendationStream", 
++				fields = {
++					Field {
++						name = "recommendations", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				defaultValue = 0.5, 
++				name = "impactThreshold"
++			}, RealParameter {
++				defaultValue = 0.5, 
++				name = "stockCooccurrenceThreshold"
++			}
++		}, 
++		members = {
++			refBy(recommendations)
++		}
++	};
++	FamilyVar_20 = Family {
++		name = "fSimpleRecommendations", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "events", 
++						type = refBy(IFEventListType)
++					}, Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "recommendations", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(AlgorithmVar_23)
++		}
++	};
++	FamilyVar_21 = Family {
++		name = "fStockParser", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}, Field {
++						name = "stocks", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(AlgorithmVar_22)
++		}
++	};
++	FamilyVar_22 = Family {
++		name = "fDynamicGraphCompilation", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "edgeStream", 
++				fields = {
++					Field {
++						name = "edge", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			RealParameter {
++				name = "correlationThreshold"
++			}
++		}, 
++		members = {
++			refBy(AlgorithmVar_25)
++		}
++	};
++	FamilyVar_23 = Family {
++		name = "fDynamicHubComputation", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "edgeStream", 
++				fields = {
++					Field {
++						name = "edge", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "hubStream", 
++				fields = {
++					Field {
++						name = "hubList", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "hubListSize"
++			}
++		}, 
++		members = {
++			refBy(AlgorithmVar_26)
++		}
++	};
++	FamilyVar_24 = Family {
++		name = "fTransferEntropy", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 300, 
++				name = "windowSize"
++			}, IntegerParameter {
++				defaultValue = 1, 
++				name = "windowAdvance"
++			}, IntegerParameter {
++				defaultValue = 128, 
++				name = "densitySize"
++			}
++		}, 
++		members = {
++			refBy(SoftwareAlgorithmVar_33)
++		}
++	};
++	fMapper = Family {
++		name = "fMapper", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "symbolsStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "configurationStream", 
++				fields = {
++					Field {
++						name = "pairKey", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "pairValue", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "resetWindowStream", 
++				fields = {
++					Field {
++						name = "windowStart", 
++						type = refBy(LongType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		members = {
++			refBy(aMapper)
++		}
++	};
++	fHayashiYoshida = Family {
++		name = "fHayashiYoshida", 
++		input = {
++			Tuple {
++				name = "symbolsStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "configurationStream", 
++				fields = {
++					Field {
++						name = "pairKey", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "pairValue", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "resetWindowStream", 
++				fields = {
++					Field {
++						name = "windowStart", 
++						type = refBy(LongType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "pairwiseCorrelationFinancial", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(aHayashiYoshida)
++		}
++	};
++	FamilyVar_25 = Family {
++		name = "fTimeGraph", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "dataStream", 
++				fields = {
++					Field {
++						name = "update", 
++						type = refBy(ObjectType)
++					}, Field {
++						name = "isAddition", 
++						type = refBy(BooleanType)
++					}
++				}
++			}, Tuple {
++				name = "snapshotQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}
++				}
++			}, Tuple {
++				name = "pathQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}, Field {
++						name = "vertexA", 
++						type = refBy(StringType)
++					}, Field {
++						name = "vertexB", 
++						type = refBy(StringType)
++					}, Field {
++						name = "type", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "snapshotStream", 
++				fields = {
++					Field {
++						name = "snapshot", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "pathStream", 
++				fields = {
++					Field {
++						name = "path", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(SoftwareAlgorithmVar_29)
++		}
++	};
++	FamilyVar_26 = Family {
++		name = "fTimeGraphMapper", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "edgeStream", 
++				fields = {
++					Field {
++						name = "edge", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "dataStream", 
++				fields = {
++					Field {
++						name = "update", 
++						type = refBy(ObjectType), 
++						keyPart = false
++					}, Field {
++						name = "isAddition", 
++						type = refBy(BooleanType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(SoftwareAlgorithmVar_34)
++		}
++	};
++	FamilyVar_27 = Family {
++		name = "fTimeGraphIndexer", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "dataStream", 
++				fields = {
++					Field {
++						name = "update", 
++						type = refBy(ObjectType), 
++						keyPart = false
++					}, Field {
++						name = "isAddition", 
++						type = refBy(BooleanType)
++					}
++				}
++			}, Tuple {
++				name = "internalRequests", 
++				fields = {
++					Field {
++						name = "internalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}, Tuple {
++				name = "unicastRequests", 
++				fields = {
++					Field {
++						name = "unicastExternalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}, Tuple {
++				name = "broadcastRequests", 
++				fields = {
++					Field {
++						name = "broadcastExternalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "externalResponses", 
++				fields = {
++					Field {
++						name = "externalResponse", 
++						type = refBy(ObjectType)
++					}
++				}
++			}, Tuple {
++				name = "internalRequests", 
++				fields = {
++					Field {
++						name = "internalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(SoftwareAlgorithmVar_35)
++		}
++	};
++	FamilyVar_28 = Family {
++		name = "fTimeGraphQueryExecutor", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "snapshotQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}
++				}
++			}, Tuple {
++				name = "pathQueryStream", 
++				fields = {
++					Field {
++						name = "start", 
++						type = refBy(LongType)
++					}, Field {
++						name = "end", 
++						type = refBy(LongType)
++					}, Field {
++						name = "vertexA", 
++						type = refBy(StringType)
++					}, Field {
++						name = "vertexB", 
++						type = refBy(StringType)
++					}, Field {
++						name = "type", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "externalResponses", 
++				fields = {
++					Field {
++						name = "externalResponse", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "snapshotStream", 
++				fields = {
++					Field {
++						name = "snapshot", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "pathStream", 
++				fields = {
++					Field {
++						name = "path", 
++						type = refBy(StringType)
++					}
++				}
++			}, Tuple {
++				name = "unicastRequests", 
++				fields = {
++					Field {
++						name = "unicastExternalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}, Tuple {
++				name = "broadcastRequests", 
++				fields = {
++					Field {
++						name = "broadcastExternalRequest", 
++						type = refBy(ObjectType)
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(SoftwareAlgorithmVar_36)
++		}
++	};
++	freeze {
++		families;
++		fPreprocessor;
++		fCorrelationFinancial;
++		fSentimentAnalysis;
++		fCorrelationTwitter;
++		fMismatchedFamily;
++		randomFamily;
++		switchFamily;
++		fExpertSearch;
++		fFinancialNetworkExtraction;
++		fTwitterCrawling;
++		fTwitterEventDetection;
++		fTwitterEventPrediction;
++		fTwitterStreamFiltering;
++		FamilyVar_14;
++		FamilyVar_15;
++		FamilyVar_16;
++		FamilyVar_17;
++		FamilyVar_18;
++		FamilyVar_19;
++		FamilyVar_20;
++		FamilyVar_21;
++		FamilyVar_22;
++		FamilyVar_23;
++		FamilyVar_24;
++		fMapper;
++		fHayashiYoshida;
++		FamilyVar_25;
++		FamilyVar_26;
++		FamilyVar_27;
++		FamilyVar_28;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/HardwareCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/HardwareCfg.ivml
+new file mode 100644
+index 0000000..8d9c06f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/HardwareCfg.ivml
+@@ -0,0 +1,709 @@
++project HardwareCfg {
++
++	import Hardware;
++	Machine machine1;
++	Machine machine2;
++	Machine machine3;
++	Machine machine4;
++	Machine machine5;
++	Machine machine6;
++	Machine machine7;
++	Machine machine8;
++	Machine machine9;
++	Machine machine10;
++	Machine machine11;
++	Machine machine12;
++	Machine machine13;
++	Machine machine14;
++	Machine machine15;
++	Machine machine16;
++	Machine machine17;
++	Machine machine18;
++	Machine machine19;
++	Machine machine20;
++	Machine machine21;
++	Machine machine22;
++	Machine machine23;
++	Machine machine24;
++	Machine machine25;
++	Machine machine26;
++	Machine machine27;
++	Machine machine28;
++	Machine machine29;
++	Machine machine30;
++	Machine machine31;
++	Machine machine32;
++	Machine machine33;
++	Machine machine34;
++	Machine machine35;
++	Machine machine36;
++	Machine machine37;
++	Machine machine38;
++	Machine machine39;
++	Machine machine40;
++	Machine machine41;
++	Machine machine42;
++	Machine machine43;
++	Machine machine44;
++	Machine machine45;
++	Machine machine46;
++	Machine machine47;
++	Machine machine48;
++	Machine machine49;
++	Machine machine50;
++    Machine machine51;
++    Machine machine52;
++    Machine machine53;
++    Machine machine54;
++	machines = {
++		refBy(machine1), refBy(machine2), refBy(machine3), refBy(machine4), refBy(machine5), refBy(machine6), refBy(machine7), refBy(machine8), refBy(machine9), refBy(machine10), refBy(machine11), refBy(machine12), refBy(machine13), refBy(machine14), refBy(machine15), refBy(machine16), refBy(machine17), refBy(machine18), refBy(machine19), refBy(machine20), refBy(machine21), refBy(machine22), refBy(machine23), refBy(machine24), refBy(machine25), refBy(machine26), refBy(machine27), refBy(machine28), refBy(machine29), refBy(machine30), refBy(machine31), refBy(machine32), refBy(machine33), refBy(machine34), refBy(machine35), refBy(machine36), refBy(machine37), refBy(machine38), refBy(machine39), refBy(machine40), refBy(machine41), refBy(machine42), refBy(machine43), refBy(machine44), refBy(machine45), refBy(machine46), refBy(machine47), refBy(machine48), refBy(machine49), refBy(machine50), refBy(machine51), refBy(machine52), refBy(machine53), refBy(machine54)
++	};
++	machines.bindingTime = BindingTime.compile;
++	usedMachines.bindingTime = BindingTime.runtimeMon;
++	availableMachines.bindingTime = BindingTime.runtimeMon;
++	machine1 = Machine {
++		name = "snf-618466.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {}, 
++		role = MachineRole.Manager
++	};
++	machine2 = Machine {
++		name = "snf-618463.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine3 = Machine {
++		name = "snf-618464.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine4 = Machine {
++		name = "snf-618465.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine5 = Machine {
++		name = "snf-625826.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine6 = Machine {
++		name = "snf-625827.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine7 = Machine {
++		name = "snf-625828.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine8 = Machine {
++		name = "snf-625829.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine9 = Machine {
++		name = "snf-626254.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine10 = Machine {
++		name = "snf-618454.vm.okeanos.grnet.gr", 
++		memory = 8178512, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2100, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine11 = Machine {
++		name = "nimbus1.ssecluster.local", 
++		memory = 7918000, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 1860, 
++		ports = {}, 
++		role = MachineRole.Manager
++	};
++	machine12 = Machine {
++		name = "host4.ssecluster.local", 
++		memory = 7919000, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 1860, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine13 = Machine {
++		name = "host-11.ssecluster.local", 
++		memory = 7984000, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 2200, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine14 = Machine {
++		name = "server1.ssecluster.local", 
++		memory = 5902000, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 1860, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine15 = Machine {
++		name = "host-16.ssecluster.local", 
++		memory = 7910000, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 1862, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine16 = Machine {
++		name = "host-12.ssecluster.local", 
++		memory = 7910000, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 1862, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine17 = Machine {
++		name = "host-10.ssecluster.local", 
++		memory = 7910000, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 1862, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine18 = Machine {
++		name = "host-13.ssecluster.local", 
++		memory = 7910000, 
++		processors = 2, 
++		executors = 4, 
++		frequency = 1862, 
++		ports = {
++			6700, 6701, 6702, 6703
++		}, 
++		role = MachineRole.Worker
++	};
++	machine19 = Machine {
++		name = "clu01.softnet.tuc.gr", 
++		memory = 32900100, 
++		processors = 12, 
++		executors = 0, 
++		frequency = 2500, 
++		ports = {}, 
++		role = MachineRole.Manager
++	};
++	machine20 = Machine {
++		name = "clu02.softnet.tuc.gr", 
++		memory = 32900100, 
++		processors = 8, 
++		executors = 20, 
++		frequency = 2500, 
++		ports = {
++			6700, 6701, 6702, 6703, 6704
++		}, 
++		role = MachineRole.Worker
++	};
++	machine21 = Machine {
++		name = "clu03.softnet.tuc.gr", 
++		memory = 32900100, 
++		processors = 8, 
++		executors = 20, 
++		frequency = 2500, 
++		ports = {
++			6700, 6701, 6702, 6703, 6704
++		}, 
++		role = MachineRole.Worker
++	};
++	machine22 = Machine {
++		name = "clu04.softnet.tuc.gr", 
++		memory = 32900100, 
++		processors = 8, 
++		executors = 20, 
++		frequency = 2500, 
++		ports = {
++			6700, 6701, 6702, 6703, 6704
++		}, 
++		role = MachineRole.Worker
++	};
++	machine23 = Machine {
++		name = "clu05.softnet.tuc.gr", 
++		memory = 16423240, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700, 6701
++		}, 
++		role = MachineRole.Worker
++	};
++	machine24 = Machine {
++		name = "clu06.softnet.tuc.gr", 
++		memory = 16423240, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700, 6701
++		}, 
++		role = MachineRole.Worker
++	};
++	machine25 = Machine {
++		name = "clu07.softnet.tuc.gr", 
++		memory = 16423240, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700, 6701
++		}, 
++		role = MachineRole.Worker
++	};
++	machine26 = Machine {
++		name = "clu08.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine27 = Machine {
++		name = "clu09.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine28 = Machine {
++		name = "clu10.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine29 = Machine {
++		name = "clu14.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine30 = Machine {
++		name = "clu16.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine31 = Machine {
++		name = "clu17.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine32 = Machine {
++		name = "clu18.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine33 = Machine {
++		name = "clu19.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine34 = Machine {
++		name = "clu20.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine35 = Machine {
++		name = "clu24.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine36 = Machine {
++		name = "clu25.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine37 = Machine {
++		name = "clu26.softnet.tuc.gr", 
++		memory = 8165740, 
++		processors = 8, 
++		executors = 8, 
++		frequency = 2500, 
++		ports = {
++			6700
++		}, 
++		role = MachineRole.Worker
++	};
++	machine38 = Machine {
++        name = "node09.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine39 = Machine {
++        name = "node10.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine40 = Machine {
++        name = "node11.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine41 = Machine {
++        name = "node12.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine42 = Machine {
++        name = "node13.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine43 = Machine {
++        name = "node14.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine44 = Machine {
++        name = "node15.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine45 = Machine {
++        name = "node16.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine46 = Machine {
++        name = "node17.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine47 = Machine {
++        name = "node18.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine48 = Machine {
++        name = "node19.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine49 = Machine {
++        name = "node20.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine50 = Machine {
++        name = "node21.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine51 = Machine {
++        name = "node22.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine52 = Machine {
++        name = "node23.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine53 = Machine {
++        name = "node24.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++    machine54 = Machine {
++        name = "node25.ib", 
++        memory = 134217728, 
++        processors = 12, 
++        executors = 12, 
++        frequency = 2100, 
++        ports = {
++            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
++        }, 
++        role = MachineRole.Worker
++    };
++	freeze {
++		machines;
++		machine1;
++		machine2;
++		machine3;
++		machine4;
++		machine5;
++		machine6;
++		machine7;
++		machine8;
++		machine9;
++		machine10;
++		machine11;
++		machine12;
++		machine13;
++		machine14;
++		machine15;
++		machine16;
++		machine17;
++		machine18;
++		machine19;
++		machine20;
++		machine21;
++		machine22;
++		machine23;
++		machine24;
++		machine25;
++		machine26;
++		machine27;
++		machine28;
++		machine29;
++		machine30;
++		machine31;
++		machine32;
++		machine33;
++		machine34;
++		machine35;
++		machine36;
++		machine37;
++        machine38;
++        machine39;
++        machine40;
++        machine41;
++        machine42;
++        machine43;
++        machine44;
++        machine45;
++        machine46;
++        machine47;
++        machine48;
++        machine49;
++        machine50;
++        machine51;
++        machine52;
++        machine53;
++        machine54;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/InfrastructureCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/InfrastructureCfg.ivml
+new file mode 100644
+index 0000000..dbd7090
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/InfrastructureCfg.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10)/*, refBy(PipelineVar_12)*/, refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17), refBy(PipelineVar_18)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/ReconfigurableHardwareCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/ReconfigurableHardwareCfg.ivml
+new file mode 100644
+index 0000000..a8e4150
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/ReconfigurableHardwareCfg.ivml
+@@ -0,0 +1,35 @@
++project ReconfigurableHardwareCfg {
++
++    import ReconfigurableHardware;	
++
++    MPCCNode cluster1;
++    MPCCNode cluster2;
++    cluster1 = MPCCNode {
++        name = "olynthos1",
++        host = "147.27.39.12",
++        monitoringPort = 2402,
++        commandSendingPort = 2400,
++        commandReceivingPort = 2401,
++		numCPUs = 12,
++		numDFEs = 4
++	};
++	
++	cluster2 = MPCCNode {
++        name = "olynthos2",
++        host = "147.27.39.13",
++        monitoringPort = 2402,
++        commandSendingPort = 2400,
++        commandReceivingPort = 2401,
++		numCPUs = 12,
++		numDFEs = 4
++	};
++
++	clusters = {refBy(cluster1), refBy(cluster2)};
++		 
++	freeze {
++		cluster1;
++		cluster2;
++		clusters; 
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/interfacesPom.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/interfacesPom.vtl
+new file mode 100644
+index 0000000..d84ef0f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/interfacesPom.vtl
+@@ -0,0 +1,168 @@
++import commonPomMethods;
++@advice(QM)
++template interfacesPom(Configuration config, FileArtifact target, String interfaceArtifact, setOf(FieldType) types) {
++	
++	mapOf(String, String) artifactsMap = {};//collect the artifacts that are included as dependencies.
++	
++	def appendRepositories(Text text) {
++		text.append("    <repository>\n      <id>qm.eu</id>\n      <name>qm.eu</name>\n      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>\n    </repository>\n");
++	}
++	
++	def appendResources(Text text) {
++		text.append("        <resource>
++            <directory>"+"$"+"{basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>protobuf/*.proto</include>
++            </includes>
++        </resource>\n");        
++	}
++	
++	def appendPlugins(Text text) {		
++            text.append("            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>\n");	
++            text.append("            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>\n");
++//            text.append("            <plugin>
++//                <groupId>org.apache.maven.plugins</groupId>
++//                <artifactId>maven-jar-plugin</artifactId>
++//                <version>2.4</version>
++//                <configuration>
++//                    <useDefaultManifestFile>true</useDefaultManifestFile>
++//                </configuration>
++//            </plugin>\n");  
++            text.append("            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-source-plugin</artifactId>
++				<version>2.2.1</version>
++				<executions>
++					<execution>
++						<id>attach-sources</id>
++						<phase>verify</phase>
++						<goals>
++							<goal>jar</goal>
++						</goals>
++					</execution>
++				</executions>
++			</plugin>\n"); 
++			text.append("            <plugin>
++    			<groupId>com.github.os72</groupId>
++    			<artifactId>protoc-jar-maven-plugin</artifactId>
++    			<version>3.0.0-a3</version>
++    			<executions>
++        			<execution>
++            			<phase>generate-sources</phase>
++			            <goals>
++			                <goal>run</goal>
++			            </goals>
++			            <configuration>
++			                <protocVersion>2.6.1</protocVersion> <!-- 2.4.1, 2.5.0, 2.6.1, 3.0.0 -->
++			                <includeDirectories>
++			                    <include>"+"$"+"{basedir}/protobuf</include>
++			                </includeDirectories>
++			                <inputDirectories>
++			                    <include>"+"$"+"{basedir}/protobuf</include>
++			                </inputDirectories>
++			            </configuration>
++			        </execution>
++			    </executions>
++			</plugin>\n");       	
++	}
++
++	def appendDependencies(Text text) {
++		
++   text.append("   <dependency>
++     <groupId>org.apache.storm</groupId>
++     <artifactId>storm-core</artifactId>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>com.esotericsoftware.kryo</groupId>
++     <artifactId>kryo</artifactId>
++   </dependency>\n");
++   text.append("    <dependency>
++    <groupId>com.google.protobuf</groupId>
++    <artifactId>protobuf-java</artifactId>
++    <version>2.6.1</version>
++</dependency>\n");
++   		text.append("   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>\n");
++   		artifactsMap.add("eu.qualimaster:StormCommons", "eu.qualimaster:StormCommons:0.0.5-SNAPSHOT");
++   		text.append("   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>\n"); 
++   		artifactsMap.add("eu.qualimaster:QualiMaster.Events", "eu.qualimaster:QualiMaster.Events:0.0.5-SNAPSHOT");
++   text.append("   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>\n"); 
++     artifactsMap.add("eu.qualimaster:DataManagementLayer", "eu.qualimaster:DataManagementLayer:0.0.5-SNAPSHOT");		
++	}
++	
++	def appendTypeDependencies(Text text, setOf(FieldType) types) {
++		for(FieldType type : types) {
++			String artifact = type.artifact;
++			sequenceOf(String) artList = artifact.split(":");
++			if(artList.size() == 3) {
++				String artKey = artList[0]+":"+artList[1];
++				if(artifact.length()>0 and !artifactsMap.containsKey(artKey)) {							
++					text.append("    <dependency>\n");
++				    text.append("        <groupId>${artList[0]}</groupId>\n");
++					text.append("        <artifactId>${artList[1]}</artifactId>\n");
++					text.append("        <version>${artList[2]}</version>\n");	
++					text.append("    </dependency>\n");
++					artifactsMap.add(artKey, artifact);
++				}	
++			}		
++		}
++	}
++	
++	def main(Configuration config, FileArtifact target, String interfaceArtifact, setOf(FieldType) types) {
++		Text text = target.getText();
++		text.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n");		
++		text.append("  <modelVersion>4.0.0</modelVersion>\n");
++		sequenceOf(String) artList = interfaceArtifact.split(":");
++		if(artList.size() == 3) {
++		    text.append("  <groupId>${artList[0]}</groupId>\n");
++			text.append("  <artifactId>${artList[1]}</artifactId>\n");
++			text.append("  <version>${artList[2]}</version>\n");	
++		}		
++		text.append("  <packaging>jar</packaging>\n");
++		text.append("\n");
++		text.append("  <build>\n");
++		text.append("    <sourceDirectory>"+"$"+"{basedir}/</sourceDirectory>\n");
++		text.append("    <plugins>\n");
++		appendPlugins(text);
++		text.append("    </plugins>\n");
++		text.append("    <resources>\n");
++		appendResources(text);
++		text.append("    </resources>\n");
++		text.append("  </build>\n");
++		text.append("  <repositories>\n");
++		
++		appendRepositories(text);
++		text.append("  </repositories>\n");
++		text.append("\n");
++		appendDependencyManagement(text);
++		text.append("  <dependencies>\n");
++		appendDependencies(text);
++		appendTypeDependencies(text, types);
++		text.append("  </dependencies>\n");		
++		text.append("</project>\n");
++		target.rename("pom.xml");
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/mappingXml.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/mappingXml.vtl
+new file mode 100644
+index 0000000..fb67be4
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/mappingXml.vtl
+@@ -0,0 +1,396 @@
++import commonVTLMethods;
++@advice(QM)
++template mappingXml(Configuration config, FileArtifact target, Pipeline pipeline, setOf(DecisionVariable) families, String subAlgName) {
++	setOf(String, String) parameterToNode = {};
++	mapOf(String, setOf(String)) componentsInSubtopology = {};
++	setOf(Source) sources = {};
++	setOf(Sink) sinks = {};
++	Boolean useThrift;
++	Boolean forSubPip = false;
++	
++    def collectParametersXml(sequenceOf(Parameter) parameters, String fName, String nodeName, String prefix) { //consider the prefix for the receiver (the actual receiver name at runtime)
++    	String paraString = "";
++    	String decNodeName = prefix.firstToUpperCase() + nodeName.firstToUpperCase();
++    	for(Parameter p : parameters) {
++    		paraString = "parameter=\"${p.name}\" name=\"$fName\" receiver=\"$decNodeName\"";
++    		parameterToNode.add(paraString);
++    	}
++    }
++   
++   def collectParametersXml(sequenceOf(Parameter) parameters, String fName, String receiver) { //the receiver here is referred to the name of the family element
++    	String paraString = "";
++    	for(Parameter p : parameters) {
++    		paraString = "parameter=\"${p.name}\" name=\"$fName\" receiver=\"$receiver\"";
++    		parameterToNode.add(paraString);
++    	}
++    }
++    
++    def collectComponentsInSubtopology(String nodeName, String nodeClsName, FamilyElement fe, String subPipName) {
++    	String componentName = formulateString(subPipName) + formulateString(nodeName);
++    	String algs = "";
++	    int pos = 0;
++    	String pipName = pipeline.name;
++    	Integer parallelism = fe.parallelism;
++    	for(Algorithm alg : fe.family.members) {
++            String algName = algName(alg);
++            if (algs.length() > 0) {
++                algs = algs + " ";
++            }
++            algs = algs + 'alternative${pos} = "${algName}"';
++            pos = pos + 1;
++        }
++        if (algs.length() > 0) {
++            algs = " " + algs;
++        }
++        setOf(String) tmp = {};
++        Boolean receiver = fe.family.parameters.size() > 0;
++        //SET IT ALWAYS TO TRUE
++        receiver = true;
++    	String component = "<component name=\"$componentName\" container=\"$subPipName\" class=\"eu.qualimaster.$subPipName.topology.$nodeClsName\" receiver=\"$receiver\" thrift=\"${useThrift}\" tasks=\"$parallelism\"/>\n";
++    	if(componentsInSubtopology.containsKey(subPipName)) {
++    		tmp = componentsInSubtopology.get(subPipName);
++    	} 
++    	if(tmp.excludes(component)) {
++    		tmp.add(component);
++    	}
++    	componentsInSubtopology.add(subPipName, tmp);//used the sub-pipeline name as the key!
++    }
++    
++    def collectComponentsInHWAlgorithm(HardwareAlgorithm algorithm, String pipName) { 
++    	String algName = algorithm.name;  
++		Integer senderParallelism = algorithm.senderParallelism;
++		Integer receiverParallelism = algorithm.receiverParallelism;
++        setOf(String) tmp = {};
++    	String comBolt = "<component name=\"${algName}HardwareConnectionBolt\" container=\"$algName\" class=\"eu.qualimaster.algorithms.$algName.HardwareConnectionBolt\" receiver=\"true\" thrift=\"${useThrift}\" tasks=\"${senderParallelism}\" type=\"HARDWARE\"/>\n";
++    	tmp.add(comBolt);
++    	String comSpout = "<component name=\"${algName}HardwareConnectionSpout\" container=\"$algName\" class=\"eu.qualimaster.algorithms.$algName.HardwareConnectionSpout\" receiver=\"true\" thrift=\"${useThrift}\" tasks=\"${receiverParallelism}\" type=\"HARDWARE\"/>\n";
++    	tmp.add(comSpout);
++    	componentsInSubtopology.add(algName, tmp);
++    }
++    
++    def subTopologyMapping(SubPipelineAlgorithm alg, String fName, setOf(Algorithm) algorithms, Text text) {
++    	setOf(String) subNodes = {};
++        String pipName = pipeline.name;
++    	for(DecisionVariable v : alg.subPipeline.connectors) {
++    		subNodes.add(v.varName());
++		    appendForNode(v, subNodes, algorithms, pipName, alg.subPipeline.name, fName, true, null, text);
++		    processElement(v.byName("output").variables(), text, subNodes, algorithms, pipName, alg.subPipeline.name, fName, null, true);
++	    }
++    }
++    
++    def processElement(sequenceOf(DecisionVariable) output, Text text, setOf(String) nodes, setOf(Algorithm) algorithms, String pipName, String subPipName, String subPipelineFamilyName, Boolean isSubPipeline, String currentAlg) {     	
++        for(Flow v : output) { 
++            DecisionVariable elt = v.destination;
++            String nodeName = elt.varName();
++            if(!isStringExisted(nodeName, nodes)) {
++            	nodes.add(nodeName);
++				appendForNode(elt, nodes, algorithms, pipName, subPipName, subPipelineFamilyName, isSubPipeline, currentAlg, text); 
++            	processElement(elt.byName("output").variables(), text, nodes, algorithms, pipName, subPipName, subPipelineFamilyName, isSubPipeline, currentAlg);
++            }
++        } 
++    }
++    
++    def appendForNode(DecisionVariable elt, setOf(String) nodes, setOf(Algorithm) algorithms, String pipName, String subPipName, String subPipelineFamilyName, Boolean isSubPipeline, String currentAlg, Text text) {
++    	String nodeName = elt.varName();
++    	String nodeClsName = elt.varName().firstToUpperCase() + elt.type();
++    	String space="";
++    	if(elt.type() == "Source") {  
++	    	Source src =elt;
++	        DataSource dataSrc = src.source;
++	        String srcName = src.name; 
++	        if(subPipName != null) {
++    			nodeName = formulateString(currentAlg) + formulateString(srcName);
++    			space = "    ";
++    		} 
++	        //if(subPipelineFamilyName != null) {//only for collecting parameters
++    			collectParametersXml(dataSrc.parameters, srcName, nodeName);
++    		//} else {
++    			Boolean receiver = dataSrc.parameters.size() > 0; 
++    			//SET IT ALWAYS TO TRUE!
++    			receiver = true;
++    			if(!isSubPipeline) {
++		        	text.append('      ${space}<node name="${srcName}" type="source">\n');
++		        }
++		        text.append('          ${space}<component name="$nodeName" container="${pipName}" class="eu.qualimaster.$pipName.topology.$nodeClsName" receiver="$receiver" thrift="${useThrift}" tasks="${src.parallelism}"/>\n');                    
++		        if(!isSubPipeline) {
++		        	text.append('      ${space}</node>\n');
++		        }
++	        //}
++	    }
++    	if(elt.type() == "Sink" or elt.type() == "ReplaySink") {
++    		//collect sinks
++    		sinks.add(elt);
++    		String sinkType;
++    		if(elt.type() == "Sink") {
++    			sinkType = "sink";
++    		} else {
++    			sinkType = "replaySink";
++    		}
++            Sink snk = elt;
++            DataSink dataSnk = snk.sink;
++            String snkName = snk.name;
++            if(subPipName != null) {
++    			nodeName = formulateString(currentAlg) + formulateString(snkName);
++    			space = "    ";
++    		}
++           // if(subPipelineFamilyName != null) {
++            	collectParametersXml(dataSnk.parameters, snkName, nodeName);
++           // } else {
++            	Boolean receiver = dataSnk.parameters.size() > 0; 
++            	//SET IT ALWAYS TO TRUE!
++    			receiver = true;
++            	if(elt.type() == "ReplaySink") {
++            		receiver = true;//receiver is always true for the replay sink
++            	}
++            	if(!isSubPipeline) {
++	            	text.append('      ${space}<node name="${snkName}" type="$sinkType">\n');
++	            }
++	            text.append('          ${space}<component name="$nodeName" container="${pipName}" class="eu.qualimaster.$pipName.topology.$nodeClsName" receiver="$receiver" thrift="${useThrift}" tasks="${snk.parallelism}"/>\n'); 
++	            if(!isSubPipeline) {
++	            	text.append('      ${space}</node>\n');
++	            } 
++            //}
++        }         
++        if(elt.type() == "FamilyElement") {
++            FamilyElement fe = elt;
++            Family fm = fe.family;
++            String fmName = fe.name;
++            String topPipName = pipName;
++            if(subPipName != null) {
++            	if(looseSub) {
++            		nodeName = formulateString(currentAlg) + formulateString(fmName);//[subPipName+fmName] for loose sub-pipelines
++            	} else {
++    				nodeName = currentAlg + formulateString(fmName); //[algName+fmName] for tight sub-pipelines
++    				topPipName = pipeline.name;//use the top-level(main) pipeline name for tight case
++    			}
++    			if(!forSubPip) {
++    				space = "    ";
++    			}
++    		}
++            //if(subPipelineFamilyName != null) {
++            	collectParametersXml(fm.parameters, fmName, nodeName);
++//            	collectComponentsInSubtopology(fmName, nodeClsName, fe, subPipName);
++            //} else {
++	            String algs = "";
++	            int pos = 0;
++	            for(Algorithm alg : fm.members) {
++	                String algName = algName(alg);
++	                algorithms.add(alg);
++	                if (algs.length() > 0) {
++	                    algs = algs + " ";
++	                }
++	                algs = algs + 'alternative${pos} = "${algName}"';
++	                pos = pos + 1;
++	            }
++	            if (algs.length() > 0) {
++	                algs = " " + algs;
++	            }
++
++				Boolean receiver = fm.parameters.size() > 0;
++				//SET IT ALWAYS TO TRUE!
++    			receiver = true;
++				if(!isSubPipeline or forSubPip) { 										
++	            	text.append('      ${space}<node name="${fmName}" type="family">\n');
++	            }
++	            text.append('          ${space}<component name="$nodeName" container="${topPipName}" class="eu.qualimaster.$pipName.topology.$nodeClsName" receiver="$receiver" thrift="${useThrift}" tasks="${fe.parallelism}"$algs/>\n'); 
++	            
++	            
++	            if(hasSubPipelineAlgorithm(fm) or hasHardwareAlgorithm(fm)) { //appending the components under this family -- DO NOT NEEDED!
++	            	for(Algorithm alg : fm.members) {
++	            		/* 
++	            		if(isGenSubtopology(alg)) {
++		                	SubPipelineAlgorithm subAlg = alg;
++		                	//collect the components in the sub-topology
++		                	Pipeline subPipeline = subAlg.subPipeline;
++		                	subTopologyMapping(subAlg, fe.name, algorithms, text);
++	                	} else */if (isHardwareAlgorithm(alg)) {
++	                		HardwareAlgorithm hwAlg = alg;
++	                		collectComponentsInHWAlgorithm(hwAlg, pipName);
++	                	}
++	            	}
++	            }
++	            
++	            if(!isSubPipeline or forSubPip) {
++	            	text.append('      ${space}</node>\n'); 
++	            }	            
++           // }
++        }
++        if(elt.type() == "DataManagementElement") {
++            DataManagementElement fe = elt;
++            String fmName = fe.name;
++            
++            //if(subPipelineFamilyName != null) {
++            //} else { 
++            	Boolean receiver = true;//always to true
++	            text.append('      <node name="${fmName}" type="data_mgt">\n');
++	            text.append('          <component name="$nodeName" container="${pipName}" class="eu.qualimaster.$pipName.topology.$nodeClsName" receiver="$receiver" thrift="${useThrift}"/>\n'); 
++	            text.append('      </node>\n'); 
++            //}
++        }   		
++    }
++    
++	def main(Configuration config, FileArtifact target, Pipeline pipeline, setOf(DecisionVariable) families, String subAlgName) {		
++		useThrift = not(genMonitoringProbes);		
++		Text text = target.getText();	
++		if(families.size() == 0)	{
++			forSubPip = true;
++		}		
++		
++		text.append("<mapping>\n");
++
++		String pipName = pipeline.name;
++		String topologyClsName = "eu.qualimaster.$pipName.topology.Topology";
++        setOf(String) nodes = {};
++        setOf(Algorithm) algorithms = {};
++		text.append('  <pipeline name="${pipName}" class="$topologyClsName">\n');
++		//add the entries for sub-pipelines
++		if(looseSub) {
++		for(Family fm : families) {
++			for(Algorithm alg : fm.members) {				
++				if(isHardwareAlgorithm(alg) or isGenSubtopology(alg)) {
++					String name;
++					if(isGenSubtopology(alg)) {//generated sub-algorithm
++						SubPipelineAlgorithm subAlg = alg;
++						SubPipeline subPip = subAlg.subPipeline;
++						name = subPip.name;
++					} else {//hardware algorithm
++						name = alg.name;
++					}					
++					text.append('      <pipeline name="${name}" algorithm="${alg.name}"/>\n');
++				}
++			}
++		}
++		}
++		
++		processPipeline(pipeline, subAlgName, nodes, algorithms, text);
++		
++		//add intermediary nodes for the loosely integrated pipelines
++		if(forSubPip and looseSub) {
++	        appendIntermediaryComponent(subAlgName, pipName, true, useThrift, text);
++	    }
++	    //add intermediary nodes for the tightly integrated pipeline with manual algorithms in the switch case
++	    if(newSwitch) {
++		    for(Algorithm alg : algorithms) {
++		    	if(isManualSubtopology(alg)) {
++		    		appendIntermediaryComponent(algName(alg), pipName, true, useThrift, text);	
++		    	}
++		    } 
++	    }  
++	         
++        for(Algorithm alg : algorithms) {
++	        String algName = algName(alg);
++            String cls;
++            String implName;
++            if(isGenSubtopology(alg)) {//generated subtopology
++            	SubPipelineAlgorithm subAlg = alg;
++			    String pName = subAlg.subPipeline.name;
++			    implName = pName.firstToUpperCase().toIdentifier() + "SubTopology";
++			    cls = "eu.qualimaster." + pName.toIdentifier() + ".topology." + implName;
++			    text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}">\n');
++			    setOf(String) nodes = {};
++        		setOf(Algorithm) algorithms = {};
++			    processPipeline(subAlg.subPipeline, algName, nodes, algorithms, text);
++			    //append intermediary nodes		    
++			    if(looseSub) {
++			    	appendIntermediaryComponent(algName, pName, false, useThrift, text);
++			    }				
++			    text.append('      </algorithm>\n');
++            } else if (isHardwareAlgorithm(alg)) { //generated hardware algorithm
++            	implName = formulateString(alg.name) + "SubTopology";
++            	cls = "eu.qualimaster.algorithms." + formulateString(alg.name) + "." + implName;
++            	text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}">\n');
++        		if(componentsInSubtopology.containsKey(algName)) {
++			    	setOf(String) coms = componentsInSubtopology.get(algName);
++			    	for(String com : coms) {
++			    		text.append('          $com');
++			    	}
++			    }
++			    text.append('      </algorithm>\n');
++           	} else {
++           		SoftwareAlgorithm a = alg;
++            	cls = a.class;
++            	JavaPath algPath = cls;
++            	implName = algPath.getName();           	
++            	text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}"/>\n');
++            }
++        }
++        //append source algorithms
++        for(Source source : sources) {
++        	DataSource dataSrc = source.source;
++        	String algName = dataSrc.name;
++        	String cls = dataSrc.sourceCls;
++        	JavaPath algPath = cls;
++            String implName = algPath.getName();
++        	text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}"/>\n');
++        }
++        //apend sink algorithms
++        for(Sink sink : sinks) {
++        	DataSink dataSnk = sink.sink;
++        	String algName = dataSnk.name;
++        	String cls = dataSnk.sinkCls;
++        	JavaPath algPath = cls;
++            String implName = algPath.getName();
++        	text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}"/>\n');
++        }
++    	for(String para : parameterToNode) {
++    		text.append('      <parameter $para/> \n');
++    	}
++        	
++		text.append('  </pipeline>\n');
++		text.append('\n');				        			
++
++		text.append("</mapping>\n");
++		target.rename("mapping.xml");
++	}
++	
++	def String algName(Algorithm alg) {
++	    // old mapping
++        //String n = alg.class;
++        //JavaPath algPath = n;
++	    //algPath.getName();
++	    // new mapping, this is the name as defined in the configuration!
++	    alg.name;
++	}
++	
++	/**
++	 * @param pipeline pipeline to be traversed
++	 * @param currentAlg the current algorithm name to be used in the algorithm information as part of the component name for tight sub-pipelines
++	 * @param nodes already-visited nodes
++	 * @param algorithms the algorithms used in the (sub-)pipeline
++	 */
++	def processPipeline(Pipeline pipeline, String currentAlg, setOf(String) nodes, setOf(Algorithm) algorithms, Text text) {
++		String pipName = pipeline.name;
++		Boolean isSub = isSubPipeline(pipeline);		
++		for(DecisionVariable v : pipeline.sources) {
++				//collect sources
++				sources.add(v);
++				String nodeName = v.varName();
++	            String nodeClsName = v.varName().firstToUpperCase() + v.type();	
++	            if(!isStringExisted(nodeName, nodes)) {
++	            	nodes.add(nodeName);
++		            appendForNode(v, nodes, algorithms, pipName, null, null, isSub, currentAlg, text);  
++		            processElement(v.byName("output").variables(), text, nodes, algorithms, pipName, null, null, isSub, currentAlg);
++	            }
++	        }
++	    if(pipeline.type() == "SubPipeline") {
++	    	SubPipeline subPip = pipeline;
++	        for(DecisionVariable v : subPip.connectors) {//considering the connectors from subpipeline
++		        String nodeName = v.varName();
++		        if(!isStringExisted(nodeName, nodes)) {
++	            	nodes.add(nodeName);
++			    	appendForNode(v, nodes, algorithms, pipName, pipName, null, isSub, currentAlg, text);
++			    	processElement(v.byName("output").variables(), text, nodes, algorithms, pipName, pipName, null, isSub, currentAlg);
++		    	}
++	    	}
++    	}
++	}
++	
++	def Boolean isSubPipeline(Pipeline pipeline) {
++		Boolean isSub = false;
++		if(pipeline.type() == "SubPipeline") {
++			isSub = true;
++		}
++		isSub;
++	}
++    	
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxHost.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxHost.vtl
+new file mode 100644
+index 0000000..b7ada17
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxHost.vtl
+@@ -0,0 +1,68 @@
++import commonVTLMethods;
++@advice(QM)
++template maxHost(Configuration config, FileArtifact target, Pipeline pipeline) {  
++
++    def main(Configuration config, FileArtifact target, Pipeline pip) {  
++        '#include "Maxfiles.h"'
++        '#include <MaxSLiCInterface.h>'
++        ''
++        'int main(void)'
++        '{'
++        '    while(true) {'
++        '        int32_ *inData;'
++        '        int count = readDataFromNetwork(inData); // simplification, we need a loop or so'
++        '        int32_ *outData;' 
++        '        outData = malloc(count); // just for now'
++        String param = "";
++    	for (DecisionVariable r : pip.sources) { 
++    		param = param + processElement(r, "");
++    	}
++    	if (param.length() > 0) {
++    		param = param + ",";
++    	} 
++        '' 
++        '        Pipeline($param inData, outData);'
++        '        writeToNetwork(outData);'
++        '    }'
++        '}'  
++    }  
++       
++    def String processElement(DecisionVariable elt, String param) {
++		param; // force return
++    }
++ 
++    def String processElement(FamilyElement elt, String param) {
++	    Family family = elt.family;
++	    for (Algorithm alg : family.members) {
++	    	if(isHardwareAlgorithm(alg)) {
++	    		HardwareAlgorithm hwAlg = alg;
++	    		if (hwAlg.hwNode.type() == ReconfigurableHardware::MPCCNode) {
++            	String familyName = elt.varName();
++            	String enabledSwitch = "${familyName}Enabled";
++            	'int $enabledSwitch = readIntFromNetwork(); // just for now' | 8;
++                if (param.length() > 0) {
++            	    param = param + ", ";
++                }
++                param = param + enabledSwitch;
++            	}
++	    	}
++        }    		
++		for (Flow flow : elt.output) {
++			param = processElement(flow.destination, param);
++		}
++		param;
++    }
++    
++    def String processElement(Source elt, String param) {
++		for (Flow flow : elt.output) {
++			param = processElement(flow.destination, param);
++		}
++		param;
++    }
++    
++   def String processElement(Sink elt, String param) {
++	    // simplifying assumption - only family elements are suitable for hw
++		param;
++   }
++   
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxKernel.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxKernel.vtl
+new file mode 100644
+index 0000000..6461675
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxKernel.vtl
+@@ -0,0 +1,66 @@
++import commonVTLMethods;
++@advice(QM)
++template maxKernel(Configuration config, FileArtifact target, Pipeline pipeline) {  
++
++    String streamInType = "dfeInt(32)";  // fixed for now
++    String streamOutType = "dfeInt(32)"; // fixed for now
++
++    def main(Configuration config, FileArtifact target, Pipeline pip) { 
++    	String name = pip.name;
++
++    	'package qm;'
++    	''
++    	'import com.maxeler.maxcompiler.v2.kernelcompiler.Kernel;'
++		'import com.maxeler.maxcompiler.v2.kernelcompiler.KernelParameters;'
++		'import com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.memory.Memory;'
++		'import com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEVar;'
++		''
++		'class PipelineKernel extends Kernel {'
++        '    PipelineKernel(KernelParameters parameters) {'
++		'        super(parameters);'
++		'        DFEVar inData = io.input("inData", $streamInType);'
++    	for (DecisionVariable r : pip.sources) {
++    		processElement(r, "inData");
++    	}
++		'    }' 
++		'}'   
++    } 
++       
++    def processElement(DecisionVariable elt, String lastName) {
++    }
++    
++    def processElement(FamilyElement elt, String lastName) {
++	    Family family = elt.family;
++	    for (Algorithm alg : family.members) {
++	    	if(isHardwareAlgorithm(alg)) {
++	    		HardwareAlgorithm hwAlg = alg;
++	            if (hwAlg.hwNode.type() == ReconfigurableHardware::MPCCNode) {
++	            	String familyName = elt.varName();
++	            	String enabledSwitch = "${familyName}Enabled";
++	            	String resultName = "${familyName}Result";
++			        'DFEVar $enabledSwitch = io.scalarInput("$familyName", dfeInt(32));' | 8;
++			        'DFEVar $resultName;' | 8;
++			        '$resultName = ($enabledSwitch != 0 ? ${hwAlg.artifact}($lastName) : $lastName);' | 8;
++			        lastName = resultName;
++	            }
++            }
++        }
++		for (Flow flow : elt.output) {
++			processElement(flow.destination, lastName);
++		}
++    }
++
++    def processElement(Source elt, String lastName) {
++		// simplifying assumption - only family elements are suitable for hw
++		for (Flow flow : elt.output) {
++			processElement(flow.destination, lastName);
++		}
++    }
++
++    def processElement(Sink elt, String lastName) {
++		// simplifying assumption - only family elements are suitable for hw
++		// simplifying assumption - exactly one output stream :o
++		'io.output("outData", $lastName, $streamInType);' | 8;
++    }
++        
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxManager.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxManager.vtl
+new file mode 100644
+index 0000000..6f0b26b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxManager.vtl
+@@ -0,0 +1,25 @@
++template maxManager(Configuration config, FileArtifact target, DecisionVariable pipeline) {
++
++    def main(Configuration config, FileArtifact target, DecisionVariable pipeline) {
++    	'package qm;'
++        ''
++        'import com.maxeler.maxcompiler.v2.build.EngineParameters;'
++        'import com.maxeler.maxcompiler.v2.kernelcompiler.Kernel;'
++        'import com.maxeler.maxcompiler.v2.managers.standard.Manager;'
++        'import com.maxeler.maxcompiler.v2.managers.standard.Manager.IOType;'
++        ''
++		'class PipelineManager {'
++		''
++		'    public static void main(String[] args) {'
++		'        Manager manager = new Manager(new EngineParameters(args));'
++		'        Kernel kernel = new PipelineKernel(manager.makeKernelParameters());'
++		'        // sorry, I have to ask MAX how to link Kernels'
++		'        manager.setKernel(kernel);'
++		'        manager.setIO(IOType.ALL_CPU);'
++		'        manager.createSLiCinterface();'
++		'        manager.build();'
++	    '    }'
++        '}'
++    }
++    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.ivml
+new file mode 100644
+index 0000000..f56fcc0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.ivml
+@@ -0,0 +1,34 @@
++project Adaptivity {
++
++	import Basics;
++	import Observables;
++
++	annotate BindingTime bindingTime = BindingTime.compile to Adaptivity;
++
++	// relative importance of the quality dimensions as well as the tradeoffs to be considered for cross-pipeline adaptation
++	compound QualityParameterWeighting {
++		refTo(QualityParameter) parameter;
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++		   Real weight;
++		}
++	}
++
++	assign(bindingTime = BindingTime.runtimeMon) to {
++		Integer updateFrequency = 1000; // in milliseconds
++		Constraint updateFrequencyLimit = updateFrequency == 0 or updateFrequency > 500;
++		Percentage capacityLowWatermark = 0.1;
++		Percentage capacityHighWatermark = 0.6; // for testing, was 0.8
++		Constraint capacityHighLowWatermark = capacityHighWatermark > capacityLowWatermark;
++		Percentage capacityPipelineSheddingWatermark = 0.85;
++		Constraint capacityPipelineSheddingWatermarkMin = capacityPipelineSheddingWatermark > 0.5;
++		Percentage capacityAveragePipelineOverload = 0.8;
++		Constraint capacityAveragePipelineOverloadMin = capacityAveragePipelineOverload > 0.5;
++		Boolean supportsTaskReallocation = true;
++		Percentage maxClusterAllocation = 0.9;
++	}
++
++	sequenceOf(QualityParameterWeighting) pipelineImportance = null;
++	Constraint pipelineImportanceTypes = size(asSet(pipelineImportance->collect(p|p.parameter))) == size(pipelineImportance);
++	sequenceOf(QualityParameterWeighting) crossPipelineTradeoffs = null;
++	Constraint crossPipelineTradeoffsTypes = size(asSet(crossPipelineTradeoffs->collect(p|p.parameter))) == size(crossPipelineTradeoffs);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.text
+new file mode 100644
+index 0000000..ddcd8aa
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.text
+@@ -0,0 +1,16 @@
++Adaptivity::updateFrequency = Adaptation frequency (ms)|Longest distance between two adaptation runs in milliseconds.
++Adaptivity::updateFrequencyLimit = Update Frequency must be 0 or more than 500
++Adaptivity::capacityLowWatermark = Pipeline node low load (%)|The lower load (percentage) boundary causing resource re-allocation for scale-in
++Adaptivity::capacityHighWatermark = Pipeline node high load (%)|The upper load (percentage) boundary causing resource re-allocation for scale-out
++Adaptivity::capacityHighLowWatermark = Pipeline node low load watermark must be smaller than high watermark
++Adaptivity::capacityPipelineSheddingWatermark = Pipeline shedding load (%)|The boundary causing load shedding for extreme overload cases.
++Adaptivity::capacityPipelineSheddingWatermarkMin = Pipeline shedding load must be larger than 0.5 (recommended 0.8 or higher)
++Adaptivity::capacityAveragePipelineOverload = Pipeline overload (%)|Average boundary enabling overload adaptation
++Adaptivity::capacityAveragePipelineOverloadMin = Pipeline overload load must be larger than 0.5 (recommended 0.8 or higher)
++Adaptivity::pipelineImportance = Pipeline observable weights|Weights to prioritize the importance of individual observables in single-pipeline adaptation.
++Adaptivity::crossPipelineTradeoffs = Cross-pipeline observable weights|Weights to prioritize the importance of individual observables in cross-pipeline adaptation.
++Adaptivity::supportsTaskReallocation = support task reallocation|Does the installed platform support task reallocation - set by monitoring.
++Adaptivity::maxClusterAllocation = maximum cluster allocation|The maximum rate the cluster shall be allocated, the rest shall be residual.
++Adaptivity::QualityParameterWeighting = Defines the weighting for a quality parameter.
++Adaptivity::QualityParameterWeighting::parameter = quality parameter|The quality parameter to define a weight for.
++Adaptivity::QualityParameterWeighting::weight = weight|The weight to indicate tradeoffs between quality parameters. Negative values cause an inversion by the actual maximum and a weighting by the absolute value.
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.ivml
+new file mode 100644
+index 0000000..01f863d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.ivml
+@@ -0,0 +1,93 @@
++project Algorithms {
++
++	import Basics;
++	import Observables;
++	import ReconfigurableHardware;
++	annotate BindingTime bindingTime = BindingTime.compile to Algorithms;
++
++	abstract compound Algorithm {
++		NonEmptyString name; 
++		Description description;
++		Tuples input;	
++		Tuples output;
++		Parameters parameters;
++		ArtifactString artifact;
++		refTo(Algorithm) successor = null;
++		setOf(Constraint) constraints;
++
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			Latency latency;
++			Throughput_Items throughputItems;
++			Throughput_Volume throughputVolume;
++			Used_Memory usedMemory;
++			Accuracy_Confidence accuracyConfidence;
++			Accuracy_Error_Rate accuracyErrorRate;
++			Believability believability;
++			Relevancy relevancy;
++			Completeness completeness;
++			Volume volume;
++			Velocity velocity;
++			Variety variety;
++			Hosts pipeline_Hosts;
++			Items items;
++			Items family_Items; // == propagate from pipeline node?
++			Items family_PredecessorItems; // == propagate from pipeline node?
++			Items family_PredictedItemsThreshold;
++			Boolean isValid = true;
++		} 
++		Constraint inputGivenCheck = isDefined(input);
++		Constraint outputGivenCheck = isDefined(output); 
++	} 
++	
++	compound SoftwareAlgorithm refines Algorithm {
++		ClassString class;
++
++        // should go into a "programmed sub-topology algorithm"
++		OptionalClassString algTopologyClass = null;
++        Boolean scalable = false;             // allow for pipeline scaling on startup? do not move into Algorithm
++        PositiveInteger parallelism = 1;      // configured executors
++        OptionalPositiveInteger numtasks;     // configured tasks
++        PositiveInteger minParallelism = 1;
++        PositiveInteger minNumtasks = 1;
++        OptionalPositiveInteger maxParallelism;
++        OptionalPositiveInteger maxNumtasks;
++        Constraint minParallel = minParallelism <= parallelism;
++        Constraint minTasks = minNumtasks <= numtasks;
++        Constraint maxParallel = parallelism <= maxParallelism;
++        Constraint maxTasks = numtasks <= maxNumtasks;
++        Constraint stormInvariant = parallelism <= numtasks;
++        assign(bindingTime = BindingTime.runtimeEnact) to {
++            Tasks tasks = numtasks;
++            Executors executors = parallelism;
++            Executors initialExecutors = parallelism;
++        }
++        algTopologyClass == null implies parallelism == 1;
++        algTopologyClass == null implies numtasks == 1;
++        algTopologyClass == null implies scalable == false;
++	} 
++	
++	compound HardwareAlgorithm refines Algorithm {
++		refTo(HwNode) hwNode;
++        Boolean scalable = false;         // allow for pipeline scaling on startup? do not move into Algorithm!
++		PositiveInteger senderParallelism;
++		PositiveInteger receiverParallelism;
++		OptionalPositiveInteger senderNumTasks;
++		OptionalPositiveInteger receiverNumTasks;
++        Constraint stormInvariantSender = senderNumTasks <= senderParallelism;
++        Constraint stormInvariantReceiver = receiverNumTasks <= receiverParallelism;
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			refTo(HwNode) actualHwNode;
++		}
++        assign(bindingTime = BindingTime.runtimeEnact) to { // pip startup!
++            PositiveInteger actualSenderParallelism = senderParallelism;
++            PositiveInteger actualReceiverParallelism = receiverParallelism;
++            PositiveInteger initialSenderParallelism = senderParallelism;
++            PositiveInteger initialReceiverParallelism = receiverParallelism;
++            OptionalPositiveInteger actualSenderNumTasks = senderNumTasks;
++            OptionalPositiveInteger actualReceiverNumTasks = receiverNumTasks;
++        }
++	}
++	
++	setOf(refTo(Algorithm)) algorithms;
++	Constraint algNamesUnique = size(algorithms->collect(a|substitutes(a.name, " ", ""))) == size(algorithms); 
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.text
+new file mode 100644
+index 0000000..dbda977
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.text
+@@ -0,0 +1,56 @@
++Algorithms::Algorithm::name = name|The logical name of this algorithm as it is used in further parts of the model.
++Algorithms::Algorithm::artifact = implementing artifact|The Maven artifact implementing this algorithm.
++Algorithms::Algorithm::description = description|Free text description for documentation purposes.
++Algorithms::Algorithm::input = input fields|The input data fields accepted by this algorithm. Must match the input fields of the family.
++Algorithms::Algorithm::output = output fields|The output data fields provided by this family. Must match the output fields of the family.
++Algorithms::Algorithm::parameters = adaptable parameters|Parameters of the algorithm that can be changed at runtime (can be a subset of the family).
++Algorithms::SoftwareAlgorithm::class = implementing class|The (qualified) name of the Java class implementing this algorithm.
++Algorithms::SoftwareAlgorithm::algTopologyClass = algTopologyClass|Experimental - do not touch.
++Algorithms::SoftwareAlgorithm::scalable = scalable|Shall the algorithm be scalable during pipeline startup (only for sub-topology algorithms).
++Algorithms::SoftwareAlgorithm::stormInvariant = The intended parallelism must not exceed the number of tasks.
++Algorithms::SoftwareAlgorithm::parallelism = intended parallelism|The intended parallelism of this node in terms of (Storm) executors (at least 1 must be given, sub-topologies only).
++Algorithms::SoftwareAlgorithm::numtasks = intended tasks|The number of (potentially sequential or parallel Storm) tasks of this algorithms (same as parallelism if not given, sub-topologies only).
++Algorithms::SoftwareAlgorithm::minParallelism = minimum parallelism|The minimum parallelism of this node in terms of (Storm) executors (at least 1 must be given, sub-topologies only).
++Algorithms::SoftwareAlgorithm::minNumtasks = minimum tasks|The minimum number of (potentially sequential or parallel Storm) tasks of this algorithms (same as parallelism if not given, sub-topologies only).
++Algorithms::SoftwareAlgorithm::maxParallelism = maximum parallelism|The maximum parallelism of this node in terms of (Storm) executors (sub-topologies only).
++Algorithms::SoftwareAlgorithm::maxNumtasks = maximum tasks|The maximum number of (potentially sequential or parallel Storm) tasks of this algorithms (sub-topologies only).
++Algorithms::SoftwareAlgorithm::minParallel = Intended parallelism is smaller than minimum parallelism.
++Algorithms::SoftwareAlgorithm::minTasks = Intended number of tasks is smaller than minimum tasks.
++Algorithms::SoftwareAlgorithm::maxParallel = Intended parallelism is larger than maximum parallelism.
++Algorithms::SoftwareAlgorithm::maxTasks = Intended number of tasks is larger than maximum tasks.
++Algorithms::SoftwareAlgorithm::executors = actual parallelism|The actual parallelism of this node in terms of (Storm) executors (sub-topologies only).
++Algorithms::SoftwareAlgorithm::tasks = actual tasks|The actual number of (potentially sequential or parallel Storm) tasks of this algorithms (sub-topologies only).
++Algorithms::HardwareAlgorithm::hwNode = hardware node|The hardware node to run the algorithm on.
++Algorithms::HardwareAlgorithm::actualHwNode = actual hardware node|The actual hardware node running the algorithm on.
++Algorithms::HardwareAlgorithm::scalable = scalable|Shall the algorithm be scalable during pipeline startup.
++Algorithms::HardwareAlgorithm::senderParallelism = intended sender parallelism|The intended parallelism of the node sending data to the hardware in terms of (Storm) executors.
++Algorithms::HardwareAlgorithm::receiverParallelism = intended receiver parallelism|The intended parallelism of the node receiving data from the hardware in terms of (Storm) executors.
++Algorithms::HardwareAlgorithm::senderNumTasks = intended sender tasks | The number of (potentially sequential or parallel Storm) tasks used for sending data to the hardware (same as parallelism if not given).
++Algorithms::HardwareAlgorithm::receiverNumTasks = intended receiver tasks | The number of (potentially sequential or parallel Storm) tasks used for receiving data from the hardware (same as parallelism if not given).
++Algorithms::HardwareAlgorithm::actualSenderParallelism = actual sender parallelism|The actual parallelism of the node sending data to the hardware in terms of (Storm) executors.
++Algorithms::HardwareAlgorithm::actualReceiverParallelism = actual receiver parallelism|The actual parallelism of the node receiving data from the hardware in terms of (Storm) executors.
++Algorithms::HardwareAlgorithm::actualSenderNumTasks = actual sender tasks | The actual number of (potentially sequential or parallel Storm) tasks used for sending data to the hardware (same as parallelism if not given).
++Algorithms::HardwareAlgorithm::actualReceiverNumTasks = actual receiver parallelism|The actual parallelism of the node receiving data from the hardware in terms of (Storm) executors.
++Algorithms::HardwareAlgorithm::stormInvariantSender = The intended parallelism for the sender must not exceed its number of tasks.
++Algorithms::HardwareAlgorithm::stormInvariantReceiver = The intended parallelism for the receiver must not exceed its number of tasks.
++Algorithms::Algorithm::successor = successor|Successor algorithm bound to this algorithm as part of a hardware library.
++Algorithms::Algorithm::inputGivenCheck = Input must be assigned
++Algorithms::Algorithm::outputGivenCheck = Output must be assigned
++Algorithms::algorithms = configured algorithms
++Algorithms::Algorithm::latency = processing latency (runtime)|algorithm processing latency in milliseconds
++Algorithms::Algorithm::throughputItems = throughput in items (runtime)|algorithm throughput in items per second
++Algorithms::Algorithm::throughputVolume = throughput in bytes (runtime)|algorithm throughput in bytes per second
++Algorithms::Algorithm::usedMemory = memory use (runtime)|algorithm memory use in bytes
++Algorithms::Algorithm::accuracyConfidence = accuracy confidence (runtime)|accuracy in terms of confidence
++Algorithms::Algorithm::accuracyErrorRate = accuracy error rate (runtime)|accuracy in terms of error rate
++Algorithms::Algorithm::believability = believability (runtime)|believability
++Algorithms::Algorithm::relevancy = relevancy (runtime)|relevancy
++Algorithms::Algorithm::completeness = completeness (runtime)|completeness
++Algorithms::Algorithm::volume = data stream volume (runtime)|processed data stream volume in bytes
++Algorithms::Algorithm::velocity = data stream velocity (runtime)|processed stream velocity in items per second
++Algorithms::Algorithm::variety = data stream variety (runtime)|processed stream variety
++Algorithms::Algorithm::items = output items (runtime)|output items/s
++Algorithms::Algorithm::family_Items = family output items (runtime)|output items/s of the family
++Algorithms::Algorithm::family_PredecessorItems = family input items (runtime)|input items/s of the family
++Algorithms::Algorithm::family_PredictedItemsThreshold = family predicted output items threshold (runtime)|predicted threshold for output items/s
++Algorithms::algNamesUnique = All algorithm names must be unique
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.ivml
+new file mode 100644
+index 0000000..30a0c8f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.ivml
+@@ -0,0 +1,105 @@
++project Basics {
++
++	// common type definitions
++
++	typedef NaturalNumber Integer with (NaturalNumber >= 0 and isDefined(NaturalNumber));
++	typedef PositiveInteger Integer with (PositiveInteger > 0 and isDefined(PositiveInteger));
++	typedef OptionalNaturalNumber Integer with (OptionalNaturalNumber >= 0);
++	typedef OptionalPositiveInteger Integer with (OptionalPositiveInteger > 0);
++	typedef NonEmptyString String with (size(NonEmptyString) > 0 and isDefined(NonEmptyString));
++	typedef PortInteger Integer with (PortInteger > 0 and PortInteger < 65536 and isDefined(PortInteger));
++	typedef NonNegativeReal Real with (NonNegativeReal >= 0 and isDefined(NonNegativeReal));
++	typedef OptionalNonNegativeReal Real with (OptionalNonNegativeReal >= 0);
++	typedef ArtifactString String with (size(ArtifactString) > 0 and matches(ArtifactString, ".+:.+:.+") and isDefined(ArtifactString)); 
++	typedef OptionalArtifactString String with (size(OptionalArtifactString) > 0 implies matches(OptionalArtifactString, ".+:.+:.+")); 
++	typedef OptionalClassString String;
++	typedef ClassString OptionalClassString with (size(ClassString) > 0 and isDefined(ClassString));
++	typedef Description String;
++	typedef OptionalUrlString String with (size(OptionalUrlString) > 0);
++	typedef UrlString OptionalUrlString with (isDefined(UrlString));
++	typedef MemorySize PositiveInteger;
++	typedef Frequency PositiveInteger;
++	typedef OptionalMemorySize OptionalPositiveInteger;
++	typedef OptionalFrequency OptionalPositiveInteger;
++	typedef Percentage Real with (Percentage >=0 and Percentage <=1);
++	enum BindingTime {compile = 0, startup = 1, runtimeMon = 2, runtimeEnact = 3};
++	annotate BindingTime bindingTime = BindingTime.compile to Basics;
++
++	compound FieldType {
++		NonEmptyString name;
++		ClassString class;
++		OptionalArtifactString artifact; // optional
++		OptionalClassString serializer; // optional
++		OptionalArtifactString serializerArtifact; // optional
++		Boolean isTimestamp = false;
++		// currently unclear: own compounds for inherited types, generic types
++	}
++
++	setOf(refTo(FieldType)) types = {};
++	Constraint typeNamesUnique = size(types->collect(t|t.name)) == size(types);
++
++	compound Field { // in order to fit the data structure in the Storm
++		NonEmptyString name;
++		refTo(FieldType) type;
++		Boolean keyPart = false; //TODO: need to add constraint if the keypart is used in the instantiation
++		Constraint typeCheck = isDefined(type);
++	}
++	typedef Fields sequenceOf(Field) with (Fields->collect(f|f.name).hasDuplicates() == false/* and isDefined(Fields)*/);
++
++	// for the moment we assume that we will not have nested Tuples
++	compound Tuple { // this conception is based on how the Storm describes the stream
++		NonEmptyString name;
++		Fields fields;
++		Constraint fieldsCheck = size(fields) > 0; 
++	} 
++	typedef Tuples sequenceOf(Tuple) /*with (isDefined(Tuples))*/;
++	
++	
++	// parameters are different than fields as they may have a configured default value for startup
++	
++	compound Parameter {
++		NonEmptyString name;
++	}
++	typedef Parameters sequenceOf(Parameter) with (Parameters->collect(p|p.name).size() == Parameters.size()/*  and isDefined(Parameters)*/);
++
++	compound IntegerParameter refines Parameter {
++		Integer defaultValue;
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			Integer value; // this may get a "default/startup" value from the configuration
++		}
++		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
++	}
++	
++	compound StringParameter refines Parameter {
++		String defaultValue;
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			String value; // this may get a "default/startup" value from the configuration
++		}
++		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
++	}
++
++	compound RealParameter refines Parameter {
++		Real defaultValue;
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			Real value; // this may get a "default/startup" value from the configuration
++		}
++		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
++	}
++
++	compound BooleanParameter refines Parameter {
++		Boolean defaultValue;
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			Boolean value; // this may get a "default/startup" value from the configuration
++		}
++		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
++	}
++	
++	compound LongParameter refines Parameter {
++		Real defaultValue;
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			Real value; // this may get a "default/startup" value from the configuration
++		}
++		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
++	}
++
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.text
+new file mode 100644
+index 0000000..723df32
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.text
+@@ -0,0 +1,22 @@
++Basics::Tuple::fields = data fields
++Basics::Tuple::fieldsCheck = There must be at least one field configured
++Basics::Field::name = name
++Basics::Field::type = type
++Basics::Field::typeCheck = type must be given
++Basics::Parameter::name = name
++Basics::IntegerParameter::name = value
++Basics::IntegerParameter::defaultValueCheck = value must be given
++Basics::StringParameter::name = value
++Basics::StringParameter::defaultValueCheck = value must be given
++Basics::RealParameter::name = value
++Basics::RealParameter::defaultValueCheck = value must be given
++Basics::BooleanParameter::name = value
++Basics::BooleanParameter::defaultValueCheck = value must be given
++Basics::FieldType::name = type name|The name of the type to be configured as it will appear in sources, algorithms, etc.
++Basics::FieldType::class = realizing class|The class realizing the type in the implementation language. This may be a primitive or a (qualified) class name.
++Basics::FieldType::artifact = implementing artifact|The Maven artifact implementing the type. Not required in case of types from the Java library.
++Basics::FieldType::serializer = Kryo serializer class|The Kryo serializer responsible for efficiently serializing the configured type. Java serialization is used if no serializer is given.
++Basics::FieldType::serializerArtifact = serializer artifact|The Maven artifact containing the Kryo serializer. This may be a the same artifact used for defining the type.
++Basics::FieldType::isTimestamp = timestamp?|Whether this type represents a time stamp.
++Basics::types = configured types
++Basics::typeNamesUnique = All type names must be unique
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.ivml
+new file mode 100644
+index 0000000..55a38df
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.ivml
+@@ -0,0 +1,50 @@
++project CloudResources {
++	
++	import Basics;
++	import Observables;	
++	
++	annotate BindingTime bindingTime = BindingTime.compile to CloudResources;
++	
++	abstract compound CloudResource{
++		
++		MemorySize maxMemory;
++		NonNegativeReal maxProcessors;
++		MemorySize maxWorkingStorage;
++	
++		NonEmptyString name;
++		
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			
++			UsedHarddiscMem usedHarddiscMem;
++			UsedProcessors usedProcessors;
++			UsedWorkingStorage usedWorkingStorage;
++		
++			Ping ping;
++			Bandwidth bandwidth;
++		
++		}
++		Constraint nameCheck = isDefined(name);
++		Constraint maxWorkingStorageCheck = isDefined(maxWorkingStorage);
++		Constraint maxProcessorsCheck = isDefined(maxProcessors);
++		Constraint maxMemoryCheck = isDefined(maxMemory);
++		Constraint returnToCluster = ping < 300.0;
++	}
++	
++	compound PublicCloudEnvironment refines CloudResource{
++		NonEmptyString amiID;
++		NonEmptyString pathToKeyFile;
++	
++		
++		Constraint amiIDCheck = isDefined(amiID);
++		Constraint pathToKeyFileCheck = isDefined(pathToKeyFile);
++		
++				
++	}
++	
++	compound PrivateCloudEnvironment refines CloudResource{		
++		NonEmptyString pathToTemplate;	
++					
++	}
++	
++	setOf(refTo(CloudResource)) cloudEnvironments;
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.text
+new file mode 100644
+index 0000000..0b5ca2c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.text
+@@ -0,0 +1,6 @@
++CloudResources::CloudResource::nameCheck = name must be defined
++CloudResources::CloudResource::maxWorkingStorageCheck = max working storage must be defined
++CloudResources::CloudResource::maxProcessorsCheck = max processors must be defined
++CloudResources::CloudResource::maxMemoryCheck = max memory must be defined
++CloudResources::PublicCloudEnvironment::amiIDCheck = ami id must be defined
++CloudResources::PublicCloudEnvironment::pathToKeyFileCheck = path to key file must be defined
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.ivml
+new file mode 100644
+index 0000000..301735e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.ivml
+@@ -0,0 +1,72 @@
++project DataManagement {
++
++	import Basics;
++	import Observables;
++
++	annotate BindingTime bindingTime = BindingTime.compile to DataManagement;
++	annotate Boolean userVisible = true to DataManagement;
++
++	enum DataManagementStrategy {None, FirstInFirstOut, LeastFrequentlyUsed, LeastRecentlyUsed, LeastFrequentlyRecentlyUsed};
++
++	compound DataElement {
++		NonEmptyString name;
++		Description description;
++		ArtifactString artifact;
++		NonEmptyString storageLocation;
++		DataManagementStrategy strategy;
++		OptionalNaturalNumber timeLine;
++		OptionalNaturalNumber cutoffCapacity;
++
++		Constraint strategyAssigned = isDefined(strategy); 
++		Constraint strategyC1 = strategy == DataManagementStrategy.LeastFrequentlyUsed or strategy == DataManagementStrategy.LeastFrequentlyRecentlyUsed implies cutoffCapacity > 0;
++		Constraint strategyC2 = strategy == DataManagementStrategy.LeastRecentlyUsed or strategy == DataManagementStrategy.LeastFrequentlyRecentlyUsed implies timeLine > 0;
++		Constraint strategyC3 = strategy == DataManagementStrategy.None or strategy == DataManagementStrategy.FirstInFirstOut implies timeLine == 0 and cutoffCapacity == 0;
++	}
++	
++	compound DataSource refines DataElement {
++		Tuples input;
++		Parameters parameters;
++		ClassString sourceCls;
++		setOf(Constraint) constraints;
++		Integer aggregationFrequency = 60000;
++		Constraint aggregationFrequencyConstraint = 500 <= aggregationFrequency and aggregationFrequency < 1800000; 
++		assign(userVisible = false) to {
++			Boolean profilingSource = false;
++		}
++		// runtime observables
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			Velocity velocity;
++			Volume volume;
++			Volatility volatility;
++			Accuracy_Confidence accuracyConfidence;
++			Completeness completeness;
++			Integer aggregationFreq = aggregationFrequency;
++			
++			Boolean isValid = true;
++		} 
++	}
++	
++	sequenceOf(refTo(DataSource)) dataSources;
++	Constraint sourceNamesUnique = not (hasDuplicates(dataSources->collect(s|s.name)));
++	compound DataSink refines DataElement {		
++		Tuples output;
++		Parameters parameters;
++		ClassString sinkCls;
++		setOf(Constraint) constraints;
++		// runtime observables
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			Velocity velocity;
++			Volume volume;
++			Accuracy_Confidence accuracyConfidence;
++			//MPVolatility mpVolatility;
++			Boolean isValid = true;
++		} 
++	}	
++ 
++	sequenceOf(refTo(DataSink)) dataSinks;
++	Constraint sinkNamesUnique = not (hasDuplicates(dataSinks->collect(s|s.name)));
++	compound PersistentDataElement refines DataElement{
++	}
++	
++	sequenceOf(refTo(PersistentDataElement)) persistentDataElements;
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.text
+new file mode 100644
+index 0000000..dfe64e1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.text
+@@ -0,0 +1,34 @@
++DataManagement::DataElement::name = name|The logical name of this source, sink, data element.
++DataManagement::DataElement::storageLocation = storage name|The name of the container used for storing the related data according to the storage strategy.
++DataManagement::DataElement::strategy = storage strategy|Strategy for saving data, in particular how to handle mass data over time.
++DataManagement::DataElement::timeLine = time line|Time in milliseconds after the data element has been stored - for time-based storage strategies.
++DataManagement::DataElement::cutoffCapacity = cutoff capacity|Capacity in bytes when to start throwing away data - for capacity-based storage strategies.
++DataManagement::DataElement::description = description|Freetext description for documentation purposes.
++DataManagement::DataElement::artifact = artifact|The implementing Maven artifact.
++DataManagement::DataElement::strategyAssigned = Strategy must be assigned
++DataManagement::DataElement::strategyC1 = Capacity-based strategies require a positive cutoff capacity
++DataManagement::DataElement::strategyC2 = Time-based strategies require a positive time line
++DataManagement::DataElement::strategyC3 = For the current strategy, time line and cutoff capacitiy must be 0.
++DataManagement::DataSource::input = data fields|The data fields provided by this data source.
++DataManagement::DataSource::constraints = SLA constraints|Runtime constraints to be considered by the adaptation.
++DataManagement::DataSource::parameters = adaptable parameters|Parameters of the data source that can be changed at runtime.
++DataManagement::DataSource::sourceCls = class|The implementing Java class as qualified class name.
++DataManagement::DataSource::velocity = data stream velocity (runtime)|Data stream velocity
++DataManagement::DataSource::volume = data stream volume (runtime)|Data stream volumes
++DataManagement::DataSource::volatility = data stream volatility (runtime)|Data stream volatility
++DataManagement::DataSource::confidence = data confidence (runtime)|Data stream confidence
++DataManagement::DataSource::completeness = data completeness (runtime)|Data completeness
++DataManagement::DataSource::profilingSource = profiling|internal use - shall not be visible - do not set to true
++DataManagement::DataSource::aggregationFrequency = volume aggregation frequency|How often shall the volume aggregation be executed (valid values in ms are between 500 and 1800000).
++DataManagement::DataSource::aggregationFrequencyConstraint = Volume aggregation frequency is not within 500 and 1800000 ms. 
++DataManagement::dataSources = configured data sources
++DataManagement::sourceNamesUnique = All source names must be unique
++DataManagement::DataSink::output = data fields|The data fields accepted by this data sink.
++DataManagement::DataSink::parameters = parameters|Configuration parameters of the data sink that can be changed at runtime.
++DataManagement::DataSink::constraints = SLA constraints|Runtime constraints to be considered by the adaptation.
++DataManagement::DataSink::sinkCls = class|The implementing Java class as qualified class name.
++DataManagement::DataSink::velocity = data stream velocity (runtime)|Data stream velocity
++DataManagement::DataSink::volume = data stream volume (runtime)|Data stream volume
++DataManagement::DataSink::confidence = data confidence (runtime)|Data stream confidence
++DataManagement::dataSinks = configured data sinks
++DataManagement::sinkNamesUnique = All sink names must be unique
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.ivml
+new file mode 100644
+index 0000000..111162b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.ivml
+@@ -0,0 +1,35 @@
++project Families {
++	
++	import Basics;
++	import Algorithms;
++	
++	annotate BindingTime bindingTime = BindingTime.compile to Families;
++	
++	compound Family {
++		NonEmptyString name;
++		Description description;
++		Tuples input;
++		Tuples output;
++		Parameters parameters;
++		setOf(refTo(Algorithm)) members; 
++
++		// we go now for names + types as required by the pipeline		
++//		Constraint inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input);
++//		Constraint outputCheck = members->forAll(refTo(Algorithm) algorithm | output == algorithm.output);
++		Constraint inputCheck = members->forAll(refTo(Algorithm) algorithm | fieldCheck(input, algorithm.input));
++		Constraint outputCheck = members->forAll(refTo(Algorithm) algorithm | fieldCheck(output, algorithm.output));
++		Constraint parameterCheck = members->forAll(refTo(Algorithm) algorithm | contains(parameters, algorithm.parameters));
++		Constraint memberCheck = size(members) > 0 and isDefined(members);
++		Constraint inputGivenCheck = isDefined(input); //untested
++		Constraint outputGivenCheck = isDefined(output); //untested		
++	}
++
++	def static Boolean contains(Parameters parameters1, Parameters parameters2) = parameters2->forAll(p2 | parameters1->exists(p1 | p1.name == p2.name and typeOf(p1) == typeOf(p2)));
++
++	setOf(refTo(Family)) families;
++	Constraint familyNameUnqiue = size(families->collect(f|f.name)) == size(families);
++	def static sequenceOf(sequenceOf(NonEmptyString)) collectFieldNames(Tuples tuples) = tuples->collect(Tuple tuple|append(tuple.fields->collect(Field field|field.name), tuple.name)); // boldly add the tuple name for checking
++	def static sequenceOf(sequenceOf(refTo(FieldType))) collectFieldTypes(Tuples tuples) = tuples->collect(Tuple tuple|tuple.fields->collect(Field field | field.type));
++	def static Boolean fieldOverlapCheck(Tuples fTuples, Tuples aTuples) = overlaps(collectFieldNames(fTuples), collectFieldNames(aTuples)) and overlaps(collectFieldTypes(fTuples), collectFieldTypes(aTuples));
++	def static Boolean fieldCheck(Tuples fTuples, Tuples aTuples) = (collectFieldNames(fTuples) ==  collectFieldNames(aTuples)) and (collectFieldTypes(fTuples) == collectFieldTypes(aTuples));
++} 
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.text
+new file mode 100644
+index 0000000..4ffc2dc
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.text
+@@ -0,0 +1,28 @@
++Families::Family::name = name|The logical name of the algorithm family as it is used in pipelines.
++Families::Family::input = input fields|The input data fields accepted by this family (and its members).
++Families::Family::output = output fields|The output data fields provided by this family (and its members).
++Families::Family::members = family members|The actual members of the family serving as a pool for runtime selection.
++Families::Family::description = description|Freetext description for documentation purposes.
++Families::Family::parameters = adaptable parameters|Parameters of the family that can be changed at runtime.
++Families::Family::members = members|The actual algorithm members of this family.
++Families::Family::memberCheck = member must be configured
++Families::Family::inputCheck = Input of at least one algorithm in the Family does not match the input of the Family
++Families::Family::outputCheck = Output of at least one algorithm in the Family does not match the output of the Family
++Families::Family::parameterCheck = Algorithm parameters must be declared in Family
++Families::Family::memberCount = There should be at least 1 member
++Families::Family::inputGivenCheck = Input should be assigned
++Families::Family::outputGivenCheck = Output should be assigned
++Families::Family::latency = processing latency (runtime)|algorithm processing latency in milliseconds
++Families::Family::throughputItems = throughput in items (runtime)|algorithm throughput in items per second
++Families::Family::throughputVolume = throughput in bytes (runtime)|algorithm throughput in bytes per second
++Families::Family::usedMemory = memory use (runtime)|algorithm memory use in bytes
++Families::Family::accuracyConfidence = accuracy confidence (runtime)|accuracy in terms of confidence
++Families::Family::accuracyErrorRate = accuracy error rate (runtime)|accuracy in terms of error rate
++Families::Family::believability = believability (runtime)|believability
++Families::Family::relevancy = relevancy (runtime)|relevancy
++Families::Family::completeness = completeness (runtime)|completeness
++Families::Family::volume = data stream volume (runtime)|processed data stream volume in bytes
++Families::Family::velocity = data stream velocity (runtime)|processed stream velocity in items per second
++Families::Family::variety = data stream variety (runtime)|processed stream variety
++Algorithms::algNamesUnique = All algorithm names must be uniqueFamilies::families = configured families
++Families::familyNameUnqiue = All family names must be unique
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.ivml
+new file mode 100644
+index 0000000..7835f36
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.ivml
+@@ -0,0 +1,64 @@
++project Hardware {
++
++    import Basics;
++    import Observables;
++	
++	annotate BindingTime bindingTime = BindingTime.compile to Hardware;
++	
++	enum MachineRole {Manager, Worker};
++	
++	compound Machine {
++		NonEmptyString name;
++		MemorySize memory;          // open
++		PositiveInteger processors; // open
++        NaturalNumber executors;    // may be 0, shall not process then
++		Frequency frequency;        // open
++		setOf(PortInteger) ports;
++		MachineRole role;
++		assign(bindingTime = BindingTime.runtimeMon) to { 
++            Bandwidth bandwidth;
++            Used_Memory usedMemory;
++            Available_Memory availableMemory;
++            Available_Frequency availableFrequency;
++            Load load;
++		}
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++		    IsAvailable available;
++		}
++		Constraint portsCheck = isDefined(ports);
++		Constraint roleCheck = isDefined(role);
++		// managers do not have configured ports
++		Constraint managerRole = role == MachineRole.Manager implies ports.isEmpty();
++		// workers without configured ports receive the default Storm ports
++        Constraint workerRole = role == MachineRole.Worker and ports.isEmpty() implies ports == {6700, 6701, 6702, 6703};
++   	}
++	 
++	  
++	setOf(refTo(Machine)) machines;
++
++	// legacy
++	//Constraint duplicatePorts = machines->apply(Machine machine; sequenceOf(Integer) usedPorts = {} | usedPorts.union(machine.ports.asSequence())).hasDuplicates() == false;
++	
++	// At least one manager must be assigned
++	Constraint managerReq = machines->exists(refTo(Machine) machine | machine.role == MachineRole.Manager);
++	
++	// At least one worker must be assigned
++	Constraint workerReq = machines->exists(refTo(Machine) machine | machine.role == MachineRole.Worker);	
++ 
++	// Machine names must be unique
++ 	Constraint machineName = machines->collect(m|m.name).size() == machines.size();
++ 	
++// 	Constraint cloudCheck = (usedMachines / (usedMachines + availableMachines)) < 0.8;
++// 	Constraint testConstraint = usedMachines < 5;
++ 	//Constraint cloudCheckRe = (usedMachines / (usedMachines + availableMachines)) < 0.6;
++ 
++    enum ClusterScalingMode {UseAll, ModuloMachineCount};
++    ClusterScalingMode clusterScalingMode = ClusterScalingMode.ModuloMachineCount;
++ 
++ 	assign(bindingTime = BindingTime.runtimeMon) to {
++ 		//Constraint cloudCheck = (usedMachines / availableMachines) < 0.8;
++	    Used_Machines usedMachines = 0;
++	    Available_Machines availableMachines = 0;
++	}
++ 
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.text
+new file mode 100644
+index 0000000..5e5206b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.text
+@@ -0,0 +1,24 @@
++Hardware::Machine::name = network name|The network name of the machine, may be a qualified name or an IP address.
++Hardware::Machine::memory = total amount of memory (KB)|The total amount of memory (future use in adaptation).
++Hardware::Machine::processors = number of processor cores|The number of processor cores (future use in adaptation).
++Hardware::Machine::executors = maximum number of executors|The maximum number of executors that can handled in parallel by this machine.
++Hardware::Machine::frequency = maximum processor frequency (MHz)|The maximum processor frequency (future use in adaptation).
++Hardware::Machine::ports = ports|Ports used for parallel processing. A worker shall have ports, a manager must not have ports.
++Hardware::Machine::role = role|The role of the machine in the cluster.
++Hardware::Machine::managerRole = If Machines role is set to manager, no ports should be used by the machine
++Hardware::Machine::workerRole = If Machines role is set to Worker, no ports must be set to 6700, 6701, 6702, 6703
++Hardware::Machine::bandwidth = network bandwidth (runtime)|The maximum bandwith of the network connection (future use in adaptation).
++Hardware::machines = available machines for software execution
++Hardware::managerReq = At least one manager should be assigned
++Hardware::workerReq = At least one worker should be assigned
++Hardware::machineName = Machine name must be unique
++Hardware::duplicatePorts = At least one machine is using a port already used by another machine
++Hardware::usedMachines = total number of used machines (runtime)
++Hardware::availableMachines= total number of available machines (runtime)
++Hardware::Machine::portsCheck = ports must be configured
++Hardware::Machine::roleCheck = role must be given
++Hardware::clusterScalingMode = cluster scaling mode|How to determine the free executors for an upcoming pipeline.
++Hardware::ClusterScalingMode::UseAll = use all|Just use all (remaining) executors on all available machines.
++Hardware::ClusterScalingMode::ModuloMachineCount = modulo machines|Try limit scaling to a multiplicity of the number of available machines.
++Hardware::MachineRole::Manager = manager|A manager machine not to be used for data processing.
++Hardware::MachineRole::Worker = worker|A worker machine used for data processing.
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.ivml
+new file mode 100644
+index 0000000..e403f6e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.ivml
+@@ -0,0 +1,37 @@
++project Infrastructure {
++	
++    import Basics;
++	import Hardware;
++	import ReconfigurableHardware;
++	import Families;
++	import Observables;
++	import Adaptivity;
++	import Pipelines;
++	import CloudResources; 
++
++	annotate BindingTime bindingTime = BindingTime.compile to Infrastructure;
++	
++	setOf(refTo(Pipeline)) activePipelines;
++	ArtifactString interfaceArtifact;
++	ArtifactString modelArtifact;
++//	OptionalUrlString repositoryURL; 
++	UrlString repositoryURL; 
++	OptionalUrlString deploymentURL;
++
++    // function calculating the workers of the active pipelines	
++	def static Integer activePipelinesNumWorkers() = 
++	  activePipelines->apply(refTo(Pipeline) pipeline; Integer totalNumWorkers = 0 | totalNumWorkers = totalNumWorkers + pipeline.numworkers);
++    
++    // function calculating the (different) configured worker ports
++    def static Integer workerMachinesPortsCount() =
++      machines->select(m|m.role==MachineRole.Worker)->apply(refTo(Machine) machine; Integer usedPorts = 0 | usedPorts = usedPorts + machine.ports.size());
++	
++	// Constraint for checking if the number of workers for the active pipelines is less then reserved ports for machines	
++	Constraint workerportCheck = activePipelinesNumWorkers() <= workerMachinesPortsCount();	
++	Constraint activePipelinesCheck = isDefined(activePipelines);
++	
++    assign(bindingTime = BindingTime.runtimeMon) to {
++        PositiveInteger clusterMonitoringFrequency = 1000;
++    }
++	
++}  
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.text
+new file mode 100644
+index 0000000..71ede1e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.text
+@@ -0,0 +1,8 @@
++Infrastructure::activePipelines = active pipeline|The active pipelines for which code shall be generated.
++Infrastructure::activePipelinesCheck = active pipelines must be configured.
++Infrastructure::subPipelineAlgorithms = sub-pipelines|Experimental - do not touch.
++Infrastructure::interfaceArtifact = interface artifact|The Maven artifact that contains the most recent version of the interfaces of algorithm families, sources and sinks.
++Infrastructure::modelArtifact = model artifact|The Maven artifact that contains the most recent version of this model.
++Infrastructure::repositoryURL = repository URL|The URL of the Maven repository for obtaining artifacts from.
++Infrastructure::deploymentURL = deployment URL|The URL of the (Nexus) Maven repository for deploying artifacts to (future use).
++Infrastructure::workerportCheck = All pipeline number of workers should be less then reserved ports for all machines
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ModelModificationCollection.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ModelModificationCollection.text
+new file mode 100644
+index 0000000..b2bfe56
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ModelModificationCollection.text
+@@ -0,0 +1,14 @@
++02-27  added the name attribute in the compound Tuple of Basics.ivm
++03-02  added the description attribute in Algorithms, Families and Pipelines.
++03-03  added an artifact attribute in Infrastructure and Pipelines.
++       added an ArtifactString in Basics
++04-22  added a Description type in Basics
++       replaced "String" of the description attribute to Description in Algorithms, Families and Pipelines.
++       added a repositoryURL attribute in Infrastructure.
++04-27  added a LongParameter in Basics.
++04-28  added a modelArtifact in Infrastructure.
++06-10  added a FieldType in Basics
++       changed the Type from Field to FieldType
++06-12  added a debug attribute to Pipeline.
++06-16  added a port attribute for MPCCNode in ReconfigurableHardware.
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.ivml
+new file mode 100644
+index 0000000..8be3226
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.ivml
+@@ -0,0 +1,96 @@
++project Observables {
++	
++    import Basics;
++	
++	annotate BindingTime bindingTime = BindingTime.compile to Observables;
++
++    // don't move these alias definitions!
++    // define each category of observable / quality property as an own type
++    // avoid derived types with constraints here - speed up reasoning
++    
++    // time-behavior
++    typedef Latency Integer;
++    typedef Throughput_Items Integer;
++    typedef Throughput_Volume Integer;
++    typedef Enactment_Delay Integer;
++    
++    // resource utilization
++    typedef Used_Memory Integer;
++    typedef Available_Memory Integer;
++    typedef Available_Frequency Integer;
++    typedef Used_Machines Integer;
++    typedef Available_Machines Integer;
++    typedef Bandwidth Real;
++    typedef Capacity Real;
++    typedef Executors Integer;
++    typedef Hosts Integer;
++    typedef Tasks Integer;
++    typedef IsAvailable Boolean;
++    typedef Load Real;
++    typedef Ping NonNegativeReal; // TODO new
++    typedef UsedHarddiscMem Integer; // TODO new
++    typedef UsedProcessors NonNegativeReal; // TODO new
++    typedef UsedWorkingStorage PositiveInteger; // TODO new
++    
++    typedef Accuracy_Confidence Real;
++    typedef Accuracy_Error_Rate Real;
++    typedef Believability Real;
++    typedef Relevancy Real;
++    typedef Completeness Real;
++    // MPVolatility?
++    
++    typedef Volume Real;
++    typedef Velocity Real;
++    typedef Volatility Real;
++    typedef Variety Integer;
++    typedef Items Real;
++
++    abstract compound ObservableDecl {
++    	NonEmptyString type; // not nice
++    }
++
++    compound QualityParameter refines ObservableDecl {
++    }
++
++    compound ConfiguredQualityParameter refines QualityParameter{
++    	NonEmptyString monitorCls = null;
++    	OptionalArtifactString artifact;
++    }
++
++    sequenceOf(ConfiguredQualityParameter) qualityParameters = {
++    	{type="Latency"},
++    	{type="Throughput_Items"},
++    	{type="Throughput_Volume"},
++    	{type="Enactment_Delay"},
++    	{type="Used_Memory"},
++    	{type="Used_Machines"},
++    	{type="Available_Machines"},
++    	{type="Bandwidth"},
++    	{type="Capacity"},
++    	{type="Executors"},
++        {type="Tasks"},
++        {type="IsAvailable"}, // internal
++    	{type="Accuracy_Confidence"},
++    	{type="Accuracy_Error_Rate"},
++    	{type="Believability"},
++    	{type="Relevancy"},
++    	{type="Completeness"},
++    	{type="Volume"},
++    	{type="Velocity"},
++    	{type="Volatility"},
++    	{type="Variety"},
++    	{type="Items"},
++    	{type="Ping"},
++    	{type="UsedHarddiscMem"},
++    	{type="UsedProcessors"},
++    	{type="UsedWorkingStorage"}
++    };
++    Constraint paramTypes = qualityParameters->collect(p|p.type).asSet().size() == qualityParameters.size();
++    
++    sequenceOf(ConfiguredQualityParameter) configuredParameters = {};
++    Constraint cfgParamTypes = configuredParameters->collect(p|p.type).asSet().size() == configuredParameters.size();
++    	 
++    freeze {
++    	qualityParameters;
++    }
++} 
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.text
+new file mode 100644
+index 0000000..d7c69fa
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.text
+@@ -0,0 +1,8 @@
++Observables::paramTypes = Quality parameter count must much
++Observables::cfgParamTypes = Configuration parameter count must much
++Observables::ObservableDecl::type = type|The observable type this element is assigned to.
++Observables::ConfiguredQualityParameter::monitorCls = monitor|The (optional) class name of the monitor observing the value.
++Observables::ConfiguredQualityParameter::artifact = artifact|The (optional) artifact specification implementing the monitor.
++Observables::ObservableDecl = Characterized an observable.
++Observables::QualityParameter = Characterizes a quality parameter.
++Observables::ConfiguredQualityParameter = Characterized an (externally defined) quality parameter.
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.ivml
+new file mode 100644
+index 0000000..530662b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.ivml
+@@ -0,0 +1,351 @@
++project Pipelines {
++   
++	import Basics;
++	import Families;
++	import DataManagement;
++	import Hardware;
++	import CloudResources;
++	import Adaptivity;
++	   
++	annotate BindingTime bindingTime = BindingTime.compile to Pipelines;
++	annotate Boolean userVisible = true to Pipelines;
++
++	enum Grouping {shuffleGrouping, fieldsGrouping, globalGrouping, directGrouping, allGrouping, customGrouping, noneGrouping}; // this is very storm specific - can we infer this from the element type?
++	enum Scaling {doNotScale, startAsIs, useFree};
++
++	compound LoadShedder {
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			String name;
++			Real lastDeviation;
++			Parameters parameters;
++		}
++	}
++	
++	// all elements in a pipeline
++	abstract compound PipelineElement {
++		NonEmptyString name;
++		setOf(Constraint) constraints = {}; // user constraints
++		
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			Boolean isValid = true;
++			refTo(CloudResource) environment;		   
++			PositiveInteger monitoringFrequency = 500;
++			PositiveInteger resourceMonitoringFrequency = 1000;
++		}
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			LoadShedder shedder;
++		}
++	} 
++   
++	// a flow among pipeline nodes
++	compound Flow refines PipelineElement {
++		refTo(PipelineNode) destination;
++		Grouping grouping;
++		refTo(Tuple) tupleType;
++		Constraint destinationConst = typeOf(destination) <> Source;
++		Constraint destinationCheck = isDefined(destination);
++		Constraint groupingCheck = isDefined(grouping);
++		Constraint tupleTypeCheck = isDefined(tupleType);
++	}
++	
++	// all nodes in a pipeline
++	abstract compound PipelineNode refines PipelineElement{
++		PositiveInteger parallelism;      // configured executors
++		OptionalPositiveInteger maxParallelism;
++		OptionalPositiveInteger numtasks; // configured tasks
++		OptionalPositiveInteger maxNumtasks;
++		Boolean loadShedding = false; //allow for loadShedding
++		Boolean scalable = false;         // allow for pipeline scaling on startup?
++		Constraint stormInvariant = parallelism <= numtasks;  // Storm invariant refined StormPipelineNode?
++		Constraint maxParallel = parallelism <= maxParallelism;
++        Constraint maxTasks = numtasks <= maxNumtasks;
++		assign (userVisible = false) to {
++			Tuples inputTypes; 
++			Tuples outputTypes;
++		}
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			Capacity capacity;
++			Tasks tasks;
++			capacity <= capacityHighWatermark; // quality constraint -> trigger adaptation if violated
++			executors > 1 and supportsTaskReallocation implies capacity >= capacityLowWatermark; // scale down only if we can change something
++		}
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++            Executors initialExecutors;
++			Executors executors;
++		}
++	}
++	
++	compound Source refines PipelineNode {
++		setOf(refTo(Flow)) output;
++		refTo(DataSource) source;
++		eval { // TODO enable eval, get rid of inputTypesAssigned/outputTypesAssigned
++			inputTypes = source.input; 
++		}
++		setOf(refTo(Parameter)) permissibleParameters;
++		Constraint permissibleParametersFamilyCheck = isDefined(permissibleParameters) implies collectParameters(permissibleParameters).intersection(collectParameters(source.parameters)) == collectParameters(permissibleParameters);
++ 		Constraint sourceTypeCheck = typeCheck(self, self.output);
++//		Constraint outputCheck = isDefined(output); //allow to configure one source along with the pipeline
++		Constraint sourceCheck = isDefined(source);
++//		Constraint reverseProp = if isDefined(outputTypes) and isDefined(inputTypes) then outputTypes.overlaps(inputTypes) else outputTypes == output->apply(f; Tuples r12 = {} | r12 = r12.union(f.destination.inputTypes)) endif;
++//		Constraint reverseProp = if isDefined(outputTypes) and isDefined(inputTypes) then collectFieldNames(outputTypes).overlaps(collectFieldNames(inputTypes)) and collectFieldTypes(outputTypes).overlaps(collectFieldTypes(inputTypes)) else outputTypes == output->apply(f; Tuples r12 = {} | r12 = r12.union(f.destination.inputTypes)) endif;
++		Constraint reverseProp = if isDefined(outputTypes) and isDefined(inputTypes) then fieldOverlapCheck(outputTypes, inputTypes) else outputTypes == inputTypes endif;
++
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			setOf(refTo(DataSource)) available;
++			refTo(DataSource) actual;
++			Constraint actualSourceCheck = available.includes(actual);
++			Latency latency;
++			Throughput_Items throughputItems;
++			Throughput_Volume throughputVolume;
++			Velocity velocity;
++			Volume volume;
++			Volatility volatility;
++			Accuracy_Confidence accuracyConfidence;
++			Completeness completeness;
++			
++			Items items;
++		}
++		Constraint flowTypeCheck = flowTypeCheck(self);
++	} 
++
++	compound Sink refines PipelineNode {
++		refTo(DataSink) sink;
++		eval { // TODO enable eval, get rid of inputTypesAssigned/outputTypesAssigned
++			outputTypes = sink.output;
++			inputTypes = outputTypes;
++		}
++		setOf(refTo(Parameter)) permissibleParameters;
++		//if isDefined(outputTypes) and isDefined(inputTypes) then outputTypes.overlaps(inputTypes) else outputTypes == inputTypes endif;
++		Constraint sinkCheck = isDefined(sink);
++		Constraint permissibleParametersSinkCheck = isDefined(permissibleParameters) implies collectParameters(permissibleParameters).intersection(collectParameters(sink.parameters)) == collectParameters(permissibleParameters);
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			setOf(refTo(DataSink)) available;
++			refTo(DataSink) actual;
++			Constraint actualSinkCheck = available.includes(actual);
++			Latency latency;
++			Throughput_Items throughputItems;
++			Throughput_Volume throughputVolume;
++			Velocity velocity;
++			Volume volume;
++			Accuracy_Confidence accuracyConfidence;
++			//MPVolatility mpVolatility;
++			Items items;
++			Items predecessorItems;
++			Items predictedItemsThreshold;
++		} 
++	} 
++
++	compound ReplayInfo {
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			Boolean active = false;
++			Integer ticket;
++			String start;
++			String end;
++			Real speed;
++			String query;
++		}
++	}
++	
++	compound ReplaySink refines Sink {
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			ReplayInfo replay;
++		}
++	}
++
++	// inner node that processes something
++	compound ProcessingElement refines PipelineNode {
++		setOf(refTo(Flow)) output;
++		// eval { // TODO enable eval, get rid of inputTypesAssigned/outputTypesAssigned (Constraint variables are not permitted in evals)
++		Constraint peTypeCheck = typeCheck(self, self.output);
++		// }
++		//Constraint outputCheck = isDefined(output) and output.size() > 0; //@Roman, seems to affect also the source
++	}
++	   
++	compound FamilyElement refines ProcessingElement {
++		refTo(Family) family;
++		refTo(Algorithm) defaultAlgorithm = family.members.asSequence().first();//seems this value is null
++		setOf(refTo(Parameter)) permissibleParameters;
++		Integer switchQueueSize = 1000;
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			// TODO available/actual shall be runtimeEnact -> Reasoner :(
++			setOf(refTo(Algorithm)) available; 
++			// TODO actual is not evaluated by reasoner -> RepositoryHelper
++			refTo(Algorithm) actual;
++			Constraint actualAlgorithmCheck = available.includes(actual);
++			// force initialization, but only in STATIC MODE
++			//not(isDefined(actual)) implies if isDefined(defaultAlgorithm) then actual == defaultAlgorithm else actual == available.asSequence().first() endif;
++		
++			// derived			
++			Latency latency;
++			Throughput_Items throughputItems;
++			Throughput_Volume throughputVolume;
++			Used_Memory usedMemory;
++			Accuracy_Confidence accuracyConfidence;
++			Accuracy_Error_Rate accuracyErrorRate;
++			Believability believability;
++			Relevancy relevancy;
++			Completeness completeness;
++			Volume volume;
++			Velocity velocity;
++			Variety variety;
++			
++			Items items;
++			Items predecessorItems;
++			Items predictedItemsThreshold;
++		}
++		Constraint familyCheck = isDefined(family);
++		Constraint tuplesInputTypeCheck = typeCheckTuplesInput(self, self.family);
++		Constraint tuplesOutputTypeCheck = typeCheckTuplesOutput(self, self.family);
++		Constraint permissibleParametersFamilyCheck = isDefined(permissibleParameters) implies collectParameters(permissibleParameters).intersection(collectParameters(family.parameters)) == collectParameters(permissibleParameters);
++		
++		Constraint flowTypeCheck = flowTypeCheck(self);
++		//Constraint defaultCheck = family.members.includes(default);
++	} 
++	
++	
++	compound DataManagementElement refines ProcessingElement {
++		refTo(PersistentDataElement) dataManagement; 
++		inputTypes == outputTypes;
++		Constraint dataManagementCheck = isDefined(dataManagement);
++		//Constraint flowTypeCheck = flowTypeCheck(self);
++	}
++
++	abstract compound StreamOperationElement refines ProcessingElement {
++		// needs to define inputTypes <-> outputTypes
++	}
++
++/*	
++	compound Artifact {
++		NonEmptyString groupId;
++		NonEmptyString artifactId;
++		NonEmptyString versionNum;
++	}
++*/	
++	compound SubPipelineAlgorithm refines Algorithm {
++		refTo(SubPipeline) subPipeline;
++	}
++	
++	compound Pipeline {
++		NonEmptyString name;
++		Description description;
++		setOf(refTo(Source)) sources;
++		PositiveInteger numworkers;
++		PositiveInteger timeout = 100;
++		ArtifactString artifact;
++		Boolean debug = false;
++		Boolean fastSerialization = false;
++		Scaling scaling = Scaling.doNotScale;
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			Latency latency;
++			Throughput_Items throughputItems;
++			Throughput_Volume throughputVolume;
++			Accuracy_Confidence accuracyConfidence;
++			Accuracy_Error_Rate accuracyErrorRate;
++			Capacity capacity;
++			Executors executors;
++			Tasks tasks;
++			Hosts hosts;
++			PositiveInteger monitoringFrequency = 1000;
++			
++			Boolean isValid = true;
++			capacity <= capacityPipelineSheddingWatermark; // overall quality constraint -> trigger adaptation if violated
++		}
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			Boolean cloudExecution;
++		}
++		Boolean isSubpipeline = false;
++		setOf(Constraint) constraints = {}; // user constraints
++		Constraint sourcesCount = if isSubpipeline == false then sources.size() > 0 else true endif;//TODO: shall not be restricted for sub-pipeline
++		Constraint sourcesCheck = isDefined(sources);
++		
++	}	
++	
++	compound SubPipeline refines Pipeline {
++		setOf(refTo(FamilyElement)) connectors;
++		refTo(Family) subPipelineFamily;
++		Constraint connectorTrueCheck = isDefined(connectors) and connectors.size() > 0;	
++		isSubpipeline = true;
++	}
++	
++	sequenceOf(refTo(Pipeline)) pipelines;
++	Constraint pipelineNamesUnique = not(pipelines->collect(p|p.name).hasDuplicates());
++
++	// check the input / output types and assign the default values - used to force evaluation
++	// none for DataManagementElement, handled through default case to enable propagation in typeCheck
++	// replace by eval in compounds!
++
++	  def setOf(NonEmptyString) collectParameters(Parameters parameters) =
++		  parameters->collect(p | p.name).asSet();
++	  def setOf(NonEmptyString) collectParameters(setOf(refTo(Parameter)) parameters) =
++		  parameters->collect(p | p.name);
++
++//	def Boolean inputTypesAssigned(PipelineNode node) = 
++//		isDefined(node.inputTypes);
++//
++//	def Boolean inputTypesAssigned(Source node) = 
++//		if isDefined(node.inputTypes) then true else node.inputTypes = node.source.input endif;
++//
++//	def Boolean inputTypesAssigned(Sink node) = 
++//		if isDefined(node.inputTypes) then true else node.inputTypes = node.sink.output endif;  // only one field in sink
++//
++//	def Boolean inputTypesAssigned(FamilyElement node) = 
++//		if isDefined(node.inputTypes) then true else node.inputTypes = node.family.input endif;
++//
++//	def Boolean outputTypesAssigned(PipelineNode node) = 
++//		isDefined(node.outputTypes);
++//
++//	def Boolean outputTypesAssigned(Source node) = 
++//		if isDefined(node.outputTypes) then true else node.outputTypes = node.source.input endif; // only one field in source
++//
++//	def Boolean putputTypesAssigned(Sink node) = 
++//		if isDefined(node.outputTypes) then true else node.outputTypes = node.sink.output endif;
++//
++//	def Boolean outputTypesAssigned(FamilyElement node) = 
++//		if isDefined(node.outputTypes) then true else node.outputTypes = node.family.output endif;
++	
++	// check types for a node and it's connected nodes
++	
++	def static Boolean typeCheck(PipelineNode src, setOf(refTo(Flow)) output) =
++		output->forAll(f|typeCheck(src, f.destination));
++		
++	def static Boolean typeCheck(PipelineNode src, PipelineNode dst) = 
++		if isDefined(dst) and isDefined(src) then fieldOverlapCheck(src.outputTypes, dst.inputTypes) else dst.inputTypes == src.outputTypes endif;
++
++	def static Boolean typeCheckTuplesInput(FamilyElement elt, Family family) =
++		if isDefined(elt.inputTypes) and isDefined(family.input) then fieldOverlapCheck(elt.inputTypes, family.input) else elt.inputTypes == family.input endif;
++
++	def static Boolean typeCheckTuplesOutput(FamilyElement elt, Family family) =
++		if isDefined(elt.outputTypes) and isDefined(family.output) then fieldOverlapCheck(elt.outputTypes, family.output) else elt.outputTypes == family.output endif;
++		
++	/*
++	 * Validation of Flow.tupleType, checks match for:
++	 *  - FamilyElement.outputTypes
++	 *  - DataManagementElement.outputTypes (currently, disabled in DME as it is not working for some reason)
++	 *  - Source.output
++	 */ 
++	def static Boolean flowTypeCheck(FamilyElement fe) =
++	  if isDefined(fe.outputTypes)
++	    then flowTypeCheck(fe.outputTypes, fe.output)
++	    else false
++	  endif;
++	
++	def static Boolean flowTypeCheck(DataManagementElement dme) =
++    if isDefined(dme.outputTypes)
++      then flowTypeCheck(dme.outputTypes, dme.output)
++      else false
++    endif;
++    
++  def static Boolean flowTypeCheck(Source src) =
++    if isDefined(src.outputTypes)
++      then flowTypeCheck(src.outputTypes, src.output)
++      else false
++    endif;
++	
++	// Generic parts of Flow.tupleType check  
++	def static Boolean flowTypeCheck(Tuples allowedTupleTypes, setOf(refTo(Flow)) outgoingFlows) =
++	  outgoingFlows->forAll(refTo(Flow) flow | flowTypeCheck(allowedTupleTypes, flow.tupleType));
++	
++  def static Boolean flowTypeCheck(sequenceOf(Tuple) allowedTupleTypes, Tuple tupleTypeOfFlow) =
++    allowedTupleTypes->exists(Tuple type| type.name == tupleTypeOfFlow.name);
++
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.text
+new file mode 100644
+index 0000000..aee30c5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.text
+@@ -0,0 +1,108 @@
++Pipelines::PipelineElement::name = name|The logical name of the pipeline element (must be given and be unique within a pipeline).
++Pipelines::PipelineElement::constraints = constraints|Runtime constraints to be considered during adaptation.
++Pipelines::PipelineNode::capacity = used computational capacity (runtime)|the element's capacity in terms of percents (0-1)
++Pipelines::PipelineNode::executors = used number of executors (runtime)|the used number of executors for the entire pipeline
++Pipelines::PipelineNode::inputTypes = input item types|the actual input types accepted by the element
++Pipelines::PipelineNode::outputTypes = output item types|the actual output types provided by the element
++Pipelines::PipelineNode::parallelism = intended parallelism|The intended parallelism of this node in terms of (Storm) executors (at least 1 must be given).
++Pipelines::PipelineNode::numtasks = intended tasks|The number of (potentially sequential or parallel Storm) tasks of this node (same as parallelism if not given).
++Pipelines::PipelineNode::maxParallelism = maximum parallelism|The maximum parallelism of this node in terms of (Storm) executors.
++Pipelines::PipelineNode::maxNumtasks = maximum tasks|The maximum number of (potentially sequential or parallel Storm) tasks.
++Pipelines::PipelineNode::scalable = scalable|Shall this node be subject to pipeline scaling at pipeline startup?
++Pipelines::PipelineNode::stormInvariant = The intended parallelism must not exceed the number of tasks.
++Pipelines::PipelineNode::maxParallel = Intended parallelism is larger than maximum parallelism.
++Pipelines::PipelineNode::maxTasks = Intended number of tasks is larger than maximum tasks.
++Pipelines::Flow::destination = flow end|The end of a data flow in terms of a pipeline node.
++Pipelines::Flow::grouping = grouping|The grouping operation defining the (Storm) data distribution policy.
++Pipelines::Flow::destinationCheck = destination must be configured. 
++Pipelines::Flow::groupingCheck = grouping must be configured.
++Pipelines::Flow::destinationConst = Destination should not be source
++Pipelines::Flow::tupleTypeCheck = tupleType must be configured.
++Pipelines::Source::output = outgoing flows|The outgoing pipeline flows leading data to other pipeline nodes.
++Pipelines::Source::source = data source|The actual data source from Data Management.
++Pipelines::Source::outputCheck = output must be configured.
++Pipelines::Source::sourceCheck = source must be configured.
++Pipelines::Source::reverseProp = Source input and output parameters are not configured properly
++Pipelines::Source::sourceTypeCheck = Input and output types should be the same
++Pipelines::Source::actual = the actually selected source (runtime)|The actually selected source at runtime.
++Pipelines::Source::available = the actually available sources (runtime)|The actually available sources at runtime.
++Pipelines::Source::velocity = velocity of this source (runtime)|Data stream velocity
++Pipelines::Source::volume = volume of this source (runtime)|Data stream volume
++Pipelines::Source::volatility = volatility of this source (runtime)|Data stream volatility
++Pipelines::Source::confidence = accuracy of this source in terms of confidence (runtime)|Data stream accuracy
++Pipelines::Source::completeness= completeness of this source (runtime)|Data stream completeness
++Pipelines::Source::permissibleParametersSourceCheck = permissible parameters must be from the parameters of the source.
++Pipelines::Source::flowTypeCheck = tupleType of an outgoing flow of a Source is not supported by the Source.
++Pipelines::Source::items = output items (runtime)|output items/s
++Pipelines::Sink::sink = data sink|The actual data sink from Data Management.
++Pipelines::Sink::sinkCheck = sink must be configured. 
++Pipelines::ReplaySink::permissibleParametersSinkCheck = permissible parameters must be from the parameters of the sink.
++Pipelines::Sink::actual = the actually selected sink (runtime)|The actually selected sink at runtime.
++Pipelines::Sink::available = the actually available sink (runtime)|The actually available sinks at runtime.
++Pipelines::Sink::velocity = velocity of this sink (runtime)|Data stream velocity
++Pipelines::Sink::volume = volume of this sink (runtime)|Data stream volume
++Pipelines::Sink::confidence = accuracy of this sink in terms of confidence (runtime)|Sink confidence
++Pipelines::Sink::items = output items (runtime)|output items/s
++Pipelines::Sink::predecessorItems = input items (runtime)|input items/s
++Pipelines::Sink::predictedItemsThreshold = predicted output items threshold (runtime)|predicted threshold for output items/s
++Pipelines::ProcessingElement::output = outgoing flows|The outgoing pipeline flows leading data to other pipeline nodes.
++Pipelines::ProcessingElement::outputCheck = output must be configured.
++Pipelines::ProcessingElement::peTypeCheck = Input and output types should be the same
++Pipelines::FamilyElement::family = algorithm family|The actual algorithm family defining the potential algorithms.
++Pipelines::FamilyElement::familyCheck = family must be configured.
++Pipelines::FamilyElement::permissibleParametersFamilyCheck = permissible parameters must be from the parameters of its belonging family.
++Pipelines::FamilyElement::defaultAlgorithm = default algorithm|The algorithm (from the set of members of the family) that shall be used when starting up a pipeline.
++Pipelines::FamilyElement::tuplesInputTypeCheck = Tuples input must match 
++Pipelines::FamilyElement::tuplesOutputTypeCheck = Tuples output must match
++Pipelines::FamilyElement::actualAlgorithmCheck = Actual algorithm must be part of the Family
++Pipelines::FamilyElement::accuracyConfidence = algorithm accuracy in terms of confidence
++Pipelines::FamilyElement::actual = the actually selected algorithm (runtime)|The actually selected algorithm at runtime.
++Pipelines::FamilyElement::available = the actually available algorithms (runtime)|The actually available algorithms at runtime.
++Pipelines::FamilyElement::latency = latency of the actual algorithm (runtime)|processing latency of the actual algorithm in milliseconds
++Pipelines::FamilyElement::throughputItem = item throughput of the actual algorithm (runtime)|throughput of the actual algorithm in terms of items
++Pipelines::FamilyElement::throughputVolume = volume throughput of the actual algorithm(runtime)|throughput of the actual algorithm in terms of bytes
++Pipelines::FamilyElement::usedMemory = memory use of the actual algorithm (runtime)|memory use of the actual algorithm
++Pipelines::FamilyElement::accuracyErrorRate = accuracy of the actual algorithm in terms of errors (runtime)|accuracy
++Pipelines::FamilyElement::believability = believability of the actual algorithm (runtime)|believability
++Pipelines::FamilyElement::relevancy = relevancy of the actual algorithm (runtime)|relevancy
++Pipelines::FamilyElement::completeness = completeness of the actual algorithm (runtime)|completeness
++Pipelines::FamilyElement::volume = volume of the actual algorithm (runtime)|processed data stream volume in bytes
++Pipelines::FamilyElement::velocity = velocity of the actual algorithm (runtime)|processed stream velocity in items per second
++Pipelines::FamilyElement::variety = variety of the actual algorithm (runtime)|processed stream variety
++Pipelines::FamilyElement::defaultCheck = The default algorithm is not member of the set of algorithms of the families.
++Pipelines::FamilyElement::flowTypeCheck = tupleType of an outgoing flow of an FamilyElement is not supported by the family.
++Pipelines::FamilyElement::items = output items (runtime)|output items/s
++Pipelines::FamilyElement::predecessorItems = input items (runtime)|input items/s
++Pipelines::FamilyElement::predictedItemsThreshold = predicted output items threshold (runtime)|predicted threshold for output items/s
++Pipelines::DataManagementElement::dataManagement = data element|The data management element indicating the actual storage for the data and the storage strategy.
++Pipelines::DataManagementElement::dataManagementCheck = dataManagement must be configured.
++Pipelines::DataManagementElement::flowTypeCheck = tupleType of an outgoing flow of a DataManagementElement is not supported by the DataManagementElement.
++Pipelines::SubPipelineAlgorithm::subPipeline = subPipeline|Experimental - do not use.
++Pipelines::Pipeline::name = pipeline name|The logical name of the pipeline.
++Pipelines::Pipeline::sources = data sources|The data sources of this pipeline.
++Pipelines::Pipeline::sourcesCheck = sources must be configured.
++Pipelines::SubPipeline::connectorTrueCheck = connector must be configured and at least one connector must be assigned.
++Pipelines::Pipeline::numworkers = number of workers|The maximum number of workers to allocate.
++Pipelines::Pipeline::timeout = message timeout|The timeout for disappearing messages.
++Pipelines::Pipeline::artifact = artifact|The Maven artifact where to deploy the generated pipeline code to.
++Pipelines::Pipeline::debug = debug mode|Whether additional debugging code shall be generated, such as extensive logging.
++Pipelines::Pipeline::fastSerialization = fast serialization|Use kryo serializers for the pipeline. For full performance, also the types shall provide serializers.
++Pipelines::Pipeline::isSubPipeline = isSubPipeline|Experimental - do not use.
++Pipelines::Pipeline::connectors = connectors|Experimental - do not use.
++Pipelines::Pipeline::subPipelineFamily = subPipelineFamily|Experimental - do not use.
++Pipelines::Pipeline::constraints = constraints|Runtime constraints to be considered during adaptation.
++Pipelines::Pipeline::sourcesCount = At least one source must be assigned
++Pipelines::Pipeline::latency = pipeline latency (runtime)|the maximum pipeline processing latency in milliseconds
++Pipelines::Pipeline::throughputItem = pipeline item throughput (runtime)|the overall pipeline throughput in items per second
++Pipelines::Pipeline::throughputVolume = pipeline volume throughput (runtime)|the overall pipeline throughput in bytes per second
++Pipelines::Pipeline::accuracyConfidence = pipeline accuracy in terms of confidence (runtime)|the overall pipeline accuracy in terms of confidence
++Pipelines::Pipeline::accuracyErrorRate = overall pipeline accuracy in terms of errors (runtime)|the overall pipeline accuracy in terms of errors
++Pipelines::Pipeline::capacity = used computational capacity (runtime)|the overall pipeline capacity in terms of percents (0-1)
++Pipelines::Pipeline::executors = used number of executors (runtime)|the used number of executors for the entire pipeline
++Pipelines::Pipeline::tasks = used number of tasks (runtime)|the used number of tasks for the entire pipeline
++Pipelines::Pipeline::scaling = scaling mode|How shall pipeline be scaled on startup?
++Pipelines::pipelines = configured pipelines
++Pipelines::pipelineNamesUnique = All pipeline names must be unique
++Pipelines::Scaling::doNotScale = do not scale|Do not scale pipeline upon startup at all. If it does not fit, reject start.
++Pipelines::Scaling::startAsIs = start as configured|If up-scaling is possible but not needed, start as configured.
++Pipelines::Scaling::useFree = start with all free executor|If up-scaling is possible but not needed, start with all free executors.
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.ivml
+new file mode 100644
+index 0000000..03faf9f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.ivml
+@@ -0,0 +1,42 @@
++project ReconfigurableHardware {
++	
++	import Basics;
++	import Observables;
++	
++	annotate BindingTime bindingTime = BindingTime.compile to ReconfigurableHardware;
++	
++	compound HwNode {
++		NonEmptyString name;
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			Bandwidth bandwidth;
++		}
++		assign(bindingTime = BindingTime.runtimeEnact) to {
++			IsAvailable available;
++		}
++	}
++	
++	compound MPCCNode refines HwNode{
++		NonEmptyString host; // possibly needed to direct network stream to
++		PortInteger monitoringPort;
++		PortInteger commandSendingPort;
++		PortInteger commandReceivingPort;
++		PositiveInteger numCPUs;
++		PositiveInteger numDFEs;
++		assign(bindingTime = BindingTime.runtimeMon) to {
++			Used_Machines usedCPUs;
++			Used_Machines usedDFEs;
++			Available_Machines availableCPUs;
++			Available_Machines availableDFEs;
++		}
++	} 
++	
++	sequenceOf(refTo(HwNode)) clusters;
++	Constraint namesUnique = size(clusters->collect(h|h.name)) == size(clusters);
++
++	assign(bindingTime = BindingTime.runtimeMon) to {
++		Used_Machines usedCPUs;
++		Used_Machines usedDFEs;
++		Available_Machines availableCPUs;
++		Available_Machines availableDFEs;
++	}
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.text
+new file mode 100644
+index 0000000..88965bd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.text
+@@ -0,0 +1,14 @@
++ReconfigurableHardware::HwNode::name = node name|The logical name of the hardware node as used, e.g., in algorithms.
++ReconfigurableHardware::MPCCNode::host = host node address|The network name or IP address of the hardware node
++ReconfigurableHardware::MPCCNode::monitoringPort = monitoring port|The IP port used for monitoring the availability of individual hardware units.
++ReconfigurableHardware::MPCCNode::commandSendingPort = command sending port|The IP port used for sending commands and algorithms to the hardware node.
++ReconfigurableHardware::MPCCNode::commandReceivingPort = command receiving port|The IP port used for receiving command responses from the hardware node.
++ReconfigurableHardware::HwNode::bandwidth = network bandwidth (runtime)|The network bandwidth of the hardware node (future use in adaptation).
++ReconfigurableHardware::MPCCNode::numCPUs = number of CPUs|The number of CPUs of this MPCC hardware node.
++ReconfigurableHardware::MPCCNode::numDFEs = number of DFEs|The number of DFEs of this MPCC hardware node.
++ReconfigurableHardware::MPCCNode::usedCPUs = actual used CPUs (unused)
++ReconfigurableHardware::MPCCNode::usedDFEs = actual used DFEs (runtime)
++ReconfigurableHardware::MPCCNode::availableCPUs = actual available CPUs (unused)
++ReconfigurableHardware::MPCCNode::availableDFEs = actual available DFEs (runtime)
++ReconfigurableHardware::clusters = available hardware machines for hardware execution
++ReconfigurableHardware::namesUnique = Cluster node names must be unique
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.ivml
+new file mode 100644
+index 0000000..701ef34
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.ivml
+@@ -0,0 +1,29 @@
++project StrategiesTactics {
++
++    import Basics;
++    import Observables;
++	import Adaptivity;
++	 
++	annotate BindingTime bindingTime = BindingTime.compile to StrategiesTactics;
++
++    // relative importance of the quality dimensions as well as the tradeoffs to be considered for cross-pipeline adaptation
++
++	assign(bindingTime = BindingTime.runtimeMon) to {
++		Boolean checkAtStartup = true;
++        Boolean checkBeforeShutdown = true;
++        Boolean checkAfterShutdown = true;
++	    Boolean slaViolation = true;
++		Boolean dataReplay = true;
++		Boolean loadShedding = true;
++
++        Boolean sourceVolumePrediction = true;
++        Boolean sourceVolumeCapacityCheck = true;
++		Boolean cloudAdaptation = true; 
++		Boolean parameterChange = true;
++		Boolean parameterChangeExternal = true;
++		Boolean algorithmChange = true;
++		Boolean algorithmChangeExternal = true;
++		Boolean dataReplayExternal = true;
++	}
++	
++}           
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.text
+new file mode 100644
+index 0000000..f8907ba
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.text
+@@ -0,0 +1,14 @@
++StrategiesTactics::sourceVolumePrediction = Source volume prediction|Warn the adaptation if volumes of sources will probably increase.
++StrategiesTactics::sourceVolumeCapacityCheck = Source volume check|Use the source volume prediction to check whether a change in source subscription will probably exceed available resources.
++StrategiesTactics::cloudAdaptation = Cloud adaptation|Enable dynamic migration of pipelines to a configured cloud (experimental).
++StrategiesTactics::checkAtStartup = Pipeline startup|Checks and adjusts pipelines at pipeline startup regarding their resource consumption.
++StrategiesTactics::checkBeforeShutdown = Pipeline shutting down|Checks a pipeline shutdown.
++StrategiesTactics::checkAfterShutdown = Pipeline shutdown|Adjusts pipelines after pipeline shutdown regarding their resource consumption.
++StrategiesTactics::slaViolation = Constraint violation|Performs adaptations up violations of configured constraints.
++StrategiesTactics::dataReplay = Data replay|Enables runtime adaptation of (enabled) data replay at overload.
++StrategiesTactics::loadShedding = Load shedding|Enables runtime adaptation of load shedding at overload.
++StrategiesTactics::parameterChange = Parameter change|Enables internal adaptation through parameter changes.
++StrategiesTactics::parameterChangeExternal = Parameter change (external)|Enables external adaptation through parameter changes.
++StrategiesTactics::algorithmChange = Algorithm change|Enables internal adaptation through algorithm changes.
++StrategiesTactics::algorithmChangeExternal = Algorithm change (external)|Enables external adaptation through algorithm changes.
++StrategiesTactics::dataReplayExternal = Data replay command|Allows external commands controlling the data replay.
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/modelArtifactPom.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/modelArtifactPom.vtl
+new file mode 100644
+index 0000000..6053165
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/modelArtifactPom.vtl
+@@ -0,0 +1,117 @@
++template modelArtifactPom(Configuration config, FileArtifact target, String modelArtifact) {
++	def appendPlugins(Text text) {		
++//	            text.append("        <plugin>
++//	        <groupId>org.apache.maven.plugins</groupId>
++//	        <artifactId>maven-compiler-plugin</artifactId>
++//	        <version>3.0</version>
++//	        <configuration>
++//	            <source>1.7</source>
++//	            <target>1.7</target>
++//	        </configuration>              
++//	     </plugin>\n");	
++	            text.append("         <plugin>
++                <artifactId>maven-install-plugin</artifactId>
++                <version>2.3.1</version>
++                <configuration>
++                    <createChecksum>true</createChecksum>
++                </configuration>
++            </plugin>\n");  
++            text.append("        <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-assembly-plugin</artifactId>
++                <version>2.5.3</version>
++                <dependencies>
++                    <dependency>
++                        <groupId>eu.qualimaster</groupId>
++                        <artifactId>AlgorithmAssemblies</artifactId>
++                        <version>0.5.0-SNAPSHOT</version>
++                    </dependency>
++                </dependencies>
++		        <executions>
++		          <execution>
++                        <id>make-profilingAssembly</id>
++                        <phase>package</phase>
++                        <goals>
++                            <goal>single</goal>
++                        </goals>
++                        <configuration>
++                            <descriptorRefs>
++                                <descriptorRef>settings</descriptorRef>
++                            </descriptorRefs>
++                        </configuration>
++                    </execution>
++		        </executions>
++            </plugin>\n");
++//	            text.append("        <plugin>
++//                <groupId>org.apache.maven.plugins</groupId>
++//                <artifactId>maven-resources-plugin</artifactId>
++//                <version>2.6</version>              
++//                <executions>
++//                    <execution>
++//                        <id>copy-resources</id>
++//                        <phase>validate</phase>
++//                        <goals>
++//                            <goal>copy-resources</goal>
++//                        </goals>
++//					    <configuration>
++//                        	<outputDirectory>"+"$"+"{basedir}/target</outputDirectory>
++//                    		<includeEmptyDirs>false</includeEmptyDirs>
++//                   			<resources>
++//                        		<resource>
++//                            		<directory>"+"$"+"{basedir}/adaptation</directory>
++//									<filtering>false</filtering>
++//                        		</resource>
++//								<resource>
++//                            		<directory>"+"$"+"{basedir}/infrastructure</directory>
++//									<filtering>false</filtering>
++//                        		</resource>
++//								<resource>
++//                            		<directory>"+"$"+"{basedir}/meta</directory>
++//								<filtering>false</filtering>
++//                        		</resource>
++//                    		</resources>                   
++//                		</configuration>
++//                    </execution>
++//                </executions>
++//            </plugin>\n");         	
++		}
++		
++	def appendResources(Text text) {
++		text.append("        <resource>
++            <directory>"+"$" + "{basedir}"+"</directory>
++            <filtering>false</filtering>
++                <includes>
++                    <include>EASy/**/*.*</include>
++					<include>settings/**/*.*</include>
++                </includes>
++				<excludes>
++                    <exclude>pom.xml</exclude>
++                </excludes>
++        </resource>\n");
++	}
++		
++	def main(Configuration config, FileArtifact target, String modelArtifact) {
++		Text text = target.getText();
++		text.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n");		
++		text.append("  <modelVersion>4.0.0</modelVersion>\n");
++		sequenceOf(String) artList = modelArtifact.split(":");
++		if(artList.size() == 3) {
++		    text.append("  <groupId>${artList[0]}</groupId>\n");
++			text.append("  <artifactId>${artList[1]}</artifactId>\n");
++			text.append("  <version>${artList[2]}</version>\n");	
++		}		
++		text.append("  <packaging>jar</packaging>\n");
++		text.append("\n");
++		text.append("  <build>\n");
++//		text.append("    <sourceDirectory>"+"$"+"{basedir}/meta</sourceDirectory>\n");
++		text.append("    <plugins>\n");
++		appendPlugins(text);
++		text.append("    </plugins>\n");
++		text.append("    <resources>\n");
++		appendResources(text);
++		text.append("    </resources>\n");
++		text.append("  </build>\n");
++		text.append("</project>");
++		target.rename("pom.xml");
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinePom.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinePom.vtl
+new file mode 100644
+index 0000000..68d94d0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinePom.vtl
+@@ -0,0 +1,583 @@
++import commonVTLMethods;
++import commonPomMethods;
++@advice(QM)
++template pipelinePom(Configuration config, FileArtifact target, Pipeline pipeline, String repoURL, String interfaceArtifact, Boolean profiling, setOf(String) subPipNames) {
++    Boolean isSubPipeline = false;
++    setOf(DecisionVariable) flows = {};//collect the visited flows
++    setOf(String) artifacts = {}; //mark visited artifacts
++    def processElement(sequenceOf(DecisionVariable) output, setOf(String) nodes, Text text) {     	
++        for(Flow v : output) { 
++        	if(flows.excludes(v)) {
++        		flows.add(v);
++        		DecisionVariable elt = v.destination;  
++				checkForPipelineNode(elt, nodes, text);          
++	            processElement(elt.byName("output").variables(), nodes, text);
++        	}
++        } 
++    }
++	def checkForPipelineNode(DecisionVariable elt, setOf(String) nodes, Text text) {
++		String nodeName = elt.varName();
++        String nodeClsName = elt.varName().firstToUpperCase() + elt.type();
++        if(elt.type() == "Source" and !isStringExisted(nodeName, nodes)) {               	
++	        Source src =elt;
++	        produceDependencies(src, text);
++	    }
++		if(elt.type() == "Sink" or elt.type() == "ReplaySink" and !isStringExisted(nodeName, nodes)) {
++            Sink snk = elt;
++            produceDependencies(snk, text);
++        }
++        if(elt.type() == "FamilyElement" and !isStringExisted(nodeName, nodes)) {
++            FamilyElement fe = elt;
++            produceDependencies(fe, text);
++        }
++        nodes.add(nodeName);		
++	}
++	def produceDependencies(Source source, Text text) {
++		DataSource dataSrc = source.source;
++		if (!dataSrc.profilingSource) {
++	   	    String artifact = dataSrc.artifact;  
++	   	    if(!isStringExisted(artifact, artifacts)) {
++	   	    	artifacts.add(artifact);
++	   	    	//for source class dependencies
++	            sequenceOf(String) artList = artifact.split(":");
++	            if(artList.size() == 3) {                		
++		       	    text.append("    <dependency>\n      <groupId>${artList[0]}</groupId>\n      <artifactId>${artList[1]}</artifactId>\n");
++		       	    text.append("      <version>${artList[2]}</version>\n    </dependency>\n");                		
++	            }
++	   	    }                       
++        }
++	}
++	
++	def produceDependencies(FamilyElement familyElt, Text text) {
++        Family fm = familyElt.family;
++        //added all algorithm dependencies
++        for(Algorithm alg : fm.members) {
++            String artifact;
++            if(isHardwareAlgorithm(alg)) {
++            	artifact = "eu.qualimaster:" + formulateString(alg.name) + ":" + GenAlgVersion;
++            } else if (isGenSubtopology(alg)) {
++            	SubPipelineAlgorithm subAlg = alg;
++            	Pipeline subPip = subAlg.subPipeline;
++            	artifact = subPip.artifact;
++            } else {
++            	SoftwareAlgorithm a = alg;
++            	artifact = a.artifact;
++            }
++            if(!isStringExisted(artifact, artifacts)) {
++	   	    	artifacts.add(artifact);
++	            sequenceOf(String) artList = artifact.split(":");
++	            if(artList.size() == 3) {                		
++		            text.append("    <dependency>\n      <groupId>${artList[0]}</groupId>\n      <artifactId>${artList[1]}</artifactId>\n");
++		            text.append("      <version>${artList[2]}</version>\n    </dependency>\n");                		
++	            }
++            }
++        }	
++	}
++	
++	def produceDependencies(Sink snk, Text text) {
++        DataSink dataSnk = snk.sink;
++        String snkName = dataSnk.name;
++        String artifact = dataSnk.artifact;
++        if(!isStringExisted(artifact, artifacts)) {
++	   	    artifacts.add(artifact);
++			//for appending sink class dependencies 
++	        sequenceOf(String) artList = artifact.split(":");
++	        if(artList.size() == 3) {                		
++		        text.append("    <dependency>\n      <groupId>${artList[0]}</groupId>\n      <artifactId>${artList[1]}</artifactId>\n");
++		        text.append("      <version>${artList[2]}</version>\n    </dependency>\n");                		
++	        }
++	    }						
++	}
++	
++	def appendPlugins(setOf(String) subPips, Text text) {
++		if(!isSubPipeline) {
++			text.append("            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>"+"$"+"{project.artifactId}-"+"$"+"{project.version}-jar-with-dependencies</finalName>
++            <filters>\n");
++            for(String a : subPipNames) {
++            text.append("                <filter>
++                    <artifact>eu.qualimaster:$a</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>\n");
++			}
++            text.append("            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>\n");
++		} else {
++		text.append("            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-assembly-plugin</artifactId>
++				<version>2.6</version>\n");
++		if(profiling) {
++			text.append("            	<dependencies>
++	                    <dependency>
++	                        <groupId>eu.qualimaster</groupId>
++	                        <artifactId>AlgorithmAssemblies</artifactId>
++	                        <version>0.5.0-SNAPSHOT</version>
++	                    </dependency>
++	                </dependencies>\n");
++        }
++		text.append("					<executions>
++					<execution>
++						<id>make-assembly</id>
++						<phase>package</phase>
++						<goals>
++							<goal>single</goal>
++						</goals>\n");
++		text.append("					<configuration>
++					<descriptorRefs>
++						<descriptorRef>jar-with-dependencies</descriptorRef>
++					</descriptorRefs>
++					<dependencySets>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>runtime</scope>
++						</dependencySet>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>provided</scope>
++						</dependencySet>
++					</dependencySets>
++					<archive>
++						<manifest>
++						</manifest>
++					</archive>
++				</configuration>\n");
++		text.append("					</execution>\n");
++		if(profiling) {
++			text.append("				<execution>
++                        <id>make-profilingAssembly</id>
++                        <phase>package</phase>
++                        <goals>
++                            <goal>single</goal>
++                        </goals>
++                        <configuration>
++                            <descriptorRefs>
++                                <descriptorRef>profiling</descriptorRef>
++                            </descriptorRefs>
++                        </configuration>
++                    </execution>\n");
++        }
++            text.append("				</executions>
++						</plugin>\n");
++		}
++			text.append("            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>\n");
++            text.append("            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>\n");
++            text.append("            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>\n");
++            text.append("            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>\n");
++            text.append("            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>"+"$"+"{storm.topology}"+"</mainClass>
++		        </configuration>
++		    </plugin>\n");
++      text.append("            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>\n");
++	}   
++	
++	def appendResources(Text text) {
++		text.append("        <resource>
++            <directory>"+"$"+"{basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>\n");        
++	}
++	
++	//only for generating a fat jar
++	def appendBasicInfrastructureDependencies(Text text) {
++		text.append("<dependency>
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++      <version>0.9.3</version>  
++      <scope>provided</scope> 
++    </dependency>
++    <dependency>
++      <groupId>com.github.ptgoetz</groupId>
++      <artifactId>storm-hdfs</artifactId>
++      <version>0.1.2</version>
++       
++      <exclusions>
++        <exclusion>
++          <groupId>org.slf4j</groupId>
++          <artifactId>slf4j-log4j12</artifactId>
++        </exclusion>
++        <exclusion>
++          <groupId>log4j</groupId>
++          <artifactId>log4j</artifactId>
++        </exclusion>        
++      </exclusions>          
++    </dependency>    
++    <!-- Hadoop Dependencies -->
++    <dependency>
++      <groupId>org.apache.hadoop</groupId>
++      <artifactId>hadoop-client</artifactId>
++      <version>2.4.0</version>
++      
++      <exclusions>
++        <exclusion>
++          <groupId>org.slf4j</groupId>
++          <artifactId>slf4j-log4j12</artifactId>
++        </exclusion>
++        <exclusion>
++          <groupId>log4j</groupId>
++          <artifactId>log4j</artifactId>
++        </exclusion>        
++      </exclusions>
++    </dependency>
++    <dependency>
++      <groupId>org.apache.hadoop</groupId>
++      <artifactId>hadoop-hdfs</artifactId>
++      <version>2.4.0</version>
++      
++      <exclusions>
++        <exclusion>
++          <groupId>org.slf4j</groupId>
++          <artifactId>slf4j-log4j12</artifactId>
++        </exclusion>
++        <exclusion>
++          <groupId>log4j</groupId>
++          <artifactId>log4j</artifactId>
++        </exclusion>        
++      </exclusions>      
++    </dependency>
++    <dependency>
++      <groupId>org.apache.hadoop</groupId>
++      <artifactId>hadoop-common</artifactId>
++      <version>2.4.0</version> 
++            
++      <exclusions>
++        <exclusion>
++          <groupId>org.slf4j</groupId>
++          <artifactId>slf4j-log4j12</artifactId>
++        </exclusion>
++        <exclusion>
++          <groupId>log4j</groupId>
++          <artifactId>log4j</artifactId>
++        </exclusion>        
++      </exclusions>               
++    </dependency>   
++    <!-- HBase Dependencies -->
++    <dependency>
++      <groupId>org.apache.hbase</groupId>
++      <artifactId>hbase-common</artifactId>
++      <version>0.98.6-hadoop2</version>
++      
++      <exclusions>
++        <exclusion>
++          <groupId>org.slf4j</groupId>
++          <artifactId>slf4j-log4j12</artifactId>
++        </exclusion>
++        <exclusion>
++          <groupId>log4j</groupId>
++          <artifactId>log4j</artifactId>
++        </exclusion>        
++      </exclusions>      
++    </dependency>
++    <dependency>
++      <groupId>org.apache.hbase</groupId>
++      <artifactId>hbase-protocol</artifactId>
++      <version>0.98.6-hadoop2</version>
++      
++      <exclusions>
++        <exclusion>
++          <groupId>org.slf4j</groupId>
++          <artifactId>slf4j-log4j12</artifactId>
++        </exclusion>
++        <exclusion>
++          <groupId>log4j</groupId>
++          <artifactId>log4j</artifactId>
++        </exclusion>        
++      </exclusions>      
++    </dependency>
++    <dependency>
++      <groupId>org.apache.hbase</groupId>
++      <artifactId>hbase-client</artifactId>
++      <version>0.98.6-hadoop2</version>
++      
++      <exclusions>
++        <exclusion>
++          <groupId>org.slf4j</groupId>
++          <artifactId>slf4j-log4j12</artifactId>
++        </exclusion>
++        <exclusion>
++          <groupId>log4j</groupId>
++          <artifactId>log4j</artifactId>
++        </exclusion>        
++      </exclusions>      
++    </dependency>\n ");
++	}
++	
++	def appendQmInfrastructureDependencies(Text text) {
++		text.append("   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>\n");
++//   	    text.append("   <dependency>
++//     <groupId>eu.qualimaster</groupId>
++//     <artifactId>PriorityPipelineInterfaces</artifactId>
++//     <version>0.5.0-SNAPSHOT</version>
++//   </dependency>\n");
++   		text.append("   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>\n");        
++   		text.append("   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>\n");
++	}
++	
++	def appendInterfaceDependency(String artifact, Text text) {
++		text.append("    <dependency>\n");
++		appendArtifact(artifact, text);
++		text.append("    </dependency>\n");
++	}
++	
++	def appendAlgorithmAssembiliesDependency(Text text) {
++		text.append("	<dependency>
++          <groupId>eu.qualimaster</groupId>
++          <artifactId>AlgorithmAssemblies</artifactId>
++          <version>0.5.0-SNAPSHOT</version>
++      </dependency>\n");
++	}
++	 def appendCommonProvidedInfraDependencies(Text text) {
++    	text.append("    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>\n");
++   text.append("   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++   </dependency>\n");
++    text.append("   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++   </dependency>\n");
++    }
++	
++    def appendCommonDependencies(Text text) {
++    	text.append("    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>\n");   		
++   text.append("   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>\n");
++    text.append("   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>\n");
++   text.append("   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>\n");
++    }
++	
++	def appendRepositories(Text text, String repoURL) {
++		text.append("    <repository>\n      <id>qm.eu</id>\n      <name>qm.eu</name>\n      <url>$repoURL</url>\n    </repository>\n");
++	}
++	
++	def appendArtifact(String artifact, Text text) {
++		sequenceOf(String) artList = artifact.split(":");
++		if(artList.size() == 3) {
++		    text.append("  <groupId>${artList[0]}</groupId>\n");
++			text.append("  <artifactId>${artList[1]}</artifactId>\n");
++			text.append("  <version>${artList[2]}</version>\n");	
++		}
++	}
++	
++	def main(Configuration config, FileArtifact target, Pipeline pipeline, String repoURL, String interfaceArtifact, Boolean profiling, setOf(String) subPipNames) {
++		if(pipeline.type() == "SubPipeline") {
++			isSubPipeline = true;
++		}
++		//createPomTemplate(target);
++		setOf(String) nodes = {};
++		Text text = target.getText();		
++		text.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n");		
++		text.append("  <modelVersion>4.0.0</modelVersion>\n");
++		//get the artifact
++		String artifact = pipeline.artifact;
++		appendArtifact(artifact, text);		
++		text.append("  <packaging>jar</packaging>\n");
++		text.append("\n");
++		text.append("  <properties>\n");
++	    text.append("    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n");
++	    text.append("  </properties>\n");
++		text.append("  <repositories>\n");
++		//text.append("    <repository>\n      <id>clojars.org</id>\n      <url>http://clojars.org/repo</url>\n    </repository>\n");
++		appendRepositories(text, repoURL);
++		text.append("  </repositories>\n");
++		text.append("  <build>\n");
++		text.append("    <sourceDirectory>"+"$"+"{basedir}/topology</sourceDirectory>\n");
++		//text.append("    <pluginManagement>\n");
++		text.append("        <plugins>\n");
++		appendPlugins(subPipNames, text);
++		text.append("        </plugins>\n");
++		//text.append("    </pluginManagement>\n");
++		text.append("    <resources>\n");
++		appendResources(text);
++		text.append("    </resources>\n");
++		text.append("  </build>\n");
++		text.append("\n");
++		text.append("\n");
++		appendDependencyManagement(text);
++		text.append("  <dependencies>\n");
++//		appendBasicInfrastructureDependencies(text); //for a fat jar
++		if(profiling) {
++			appendAlgorithmAssembiliesDependency(text);
++		}
++		appendQmInfrastructureDependencies(text);
++		appendInterfaceDependency(interfaceArtifact, text);
++		appendCommonDependencies(text);		
++		for(DecisionVariable v : pipeline.sources) { 
++	        checkForPipelineNode(v, nodes, text);
++	        processElement(v.byName("output").variables(), nodes, text);
++	    }	
++	    if(isSubPipeline) {
++	    	SubPipeline subPip = pipeline;
++		    for(DecisionVariable v : subPip.connectors) {//considering the connectors from subpipeline
++				checkForPipelineNode(v, nodes, text);
++		    	processElement(v.byName("output").variables(), nodes, text);
++		    }
++	    }					
++		text.append("  </dependencies>\n");
++		text.append("</project>\n");
++		target.rename("pom.xml");							
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline
+new file mode 100644
+index 0000000..a2b2213
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="RandomPip" artifact="eu.qualimaster: RandomPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="src" source="2"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="processor" family="5"/>
++  <nodes xsi:type="pipeline:Sink" name="snk" sink="1"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::randomSource.input[0]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::randomFamily.output[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline_diagram
+new file mode 100644
+index 0000000..e5be490
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline_diagram
+@@ -0,0 +1,44 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_QZxYsMfeEeSCGIvEn-RMYA" type="Pipeline" name="PipelineVar_1.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_SQV4wMfeEeSCGIvEn-RMYA" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_SQb_YMfeEeSCGIvEn-RMYA" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_SQb_YcfeEeSCGIvEn-RMYA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_1.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SQV4wcfeEeSCGIvEn-RMYA" x="105" y="275"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_TU00kMfeEeSCGIvEn-RMYA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_TU00ksfeEeSCGIvEn-RMYA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_TU00k8feEeSCGIvEn-RMYA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_1.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TU00kcfeEeSCGIvEn-RMYA" x="251" y="300"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_VUEIcMfeEeSCGIvEn-RMYA" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_VUEIcsfeEeSCGIvEn-RMYA" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_VUEIc8feEeSCGIvEn-RMYA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_1.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VUEIccfeEeSCGIvEn-RMYA" x="433" y="319"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_QZxYscfeEeSCGIvEn-RMYA"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_1.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_WQiXwMfeEeSCGIvEn-RMYA" type="4001" source="_SQV4wMfeEeSCGIvEn-RMYA" target="_TU00kMfeEeSCGIvEn-RMYA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_WQiXw8feEeSCGIvEn-RMYA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_WQoeYMfeEeSCGIvEn-RMYA" x="-11" y="20"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_WQiXwcfeEeSCGIvEn-RMYA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_1.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WQiXwsfeEeSCGIvEn-RMYA" points="[30, 6, -101, 0]$[117, 10, -14, 4]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WRTMwMfeEeSCGIvEn-RMYA" id="(0.23333333333333334,0.5833333333333334)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_XYeQMMfeEeSCGIvEn-RMYA" type="4001" source="_TU00kMfeEeSCGIvEn-RMYA" target="_VUEIcMfeEeSCGIvEn-RMYA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_XYeQM8feEeSCGIvEn-RMYA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_XYeQNMfeEeSCGIvEn-RMYA" x="-5" y="18"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_XYeQMcfeEeSCGIvEn-RMYA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_1.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_XYeQMsfeEeSCGIvEn-RMYA" points="[30, 2, -134, -13]$[152, 13, -12, -2]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_XYkW0MfeEeSCGIvEn-RMYA" id="(0.21818181818181817,0.4727272727272727)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline
+new file mode 100644
+index 0000000..c03f03d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline
+@@ -0,0 +1,35 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="TimeTravelPip" numworkers="18" artifact="eu.qualimaster:TimeTravelPip:0.0.2-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="6">
++    <permissibleParameters>DataManagementCfg::DataSourceVar_7.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="FinancialCorrelation" family="1">
++    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="DynamicGraphCompilation" family="21">
++    <permissibleParameters>FamiliesCfg::FamilyVar_22.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:Sink" name="TimeTravelSink" sink="5"/>
++  <nodes xsi:type="pipeline:Source" name="queries" source="8">
++    <permissibleParameters>DataManagementCfg::DataSourceVar_9.parameters[0]</permissibleParameters>
++    <permissibleParameters>DataManagementCfg::DataSourceVar_9.parameters[1]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphMapper" family="27" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_34"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphIndexer" parallelism="5" family="28" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_35"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphQueryExecutor" family="29" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_36"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[1]"/>
++  <flows name="f2" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::spring.input[0]"/>
++  <flows name="f3" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++  <flows name="f4" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
++  <flows name="f5" source="//@nodes.3" destination="//@nodes.6" tupleType="FamiliesCfg::FamilyVar_22.output[0]"/>
++  <flows name="f6" source="//@nodes.6" destination="//@nodes.7" grouping="3" tupleType="FamiliesCfg::FamilyVar_26.output[0]"/>
++  <flows name="f7" source="//@nodes.7" destination="//@nodes.7" grouping="3" tupleType="FamiliesCfg::FamilyVar_27.output[1]"/>
++  <flows name="f8" source="//@nodes.8" destination="//@nodes.7" grouping="4" tupleType="FamiliesCfg::FamilyVar_28.output[3]"/>
++  <flows name="f9" source="//@nodes.8" destination="//@nodes.7" grouping="3" tupleType="FamiliesCfg::FamilyVar_28.output[2]"/>
++  <flows name="f10" source="//@nodes.8" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_28.output[0]"/>
++  <flows name="f11" source="//@nodes.8" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_28.output[1]"/>
++  <flows name="f12" source="//@nodes.5" destination="//@nodes.8" tupleType="DataManagementCfg::DataSourceVar_9.input[0]"/>
++  <flows name="f13" source="//@nodes.5" destination="//@nodes.8" tupleType="DataManagementCfg::DataSourceVar_9.input[1]"/>
++  <flows name="f14" source="//@nodes.7" destination="//@nodes.8" grouping="3" tupleType="FamiliesCfg::FamilyVar_27.output[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline_diagram
+new file mode 100644
+index 0000000..a1ab8fa
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline_diagram
+@@ -0,0 +1,190 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_1Et5gE_lEeaITemOqq_uIw" type="Pipeline" name="PipelineVar_10.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_AloX8E_mEeaITemOqq_uIw" type="2001" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Alo_AE_mEeaITemOqq_uIw" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_AlpmEE_mEeaITemOqq_uIw" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_10.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AloX8U_mEeaITemOqq_uIw" x="106" y="353"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_Hu12UE_mEeaITemOqq_uIw" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Hu12Uk_mEeaITemOqq_uIw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Hu2dYE_mEeaITemOqq_uIw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hu12UU_mEeaITemOqq_uIw" x="252" y="360"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_LhQ_EE_mEeaITemOqq_uIw" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_LhQ_Ek_mEeaITemOqq_uIw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_LhQ_E0_mEeaITemOqq_uIw" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LhQ_EU_mEeaITemOqq_uIw" x="396" y="360"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_cmCusE_mEeaITemOqq_uIw" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_cmCusk_mEeaITemOqq_uIw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_cmDVwE_mEeaITemOqq_uIw" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cmCusU_mEeaITemOqq_uIw" x="576" y="360"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_s_P_gE_rEeaITemOqq_uIw" type="2002" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_s_QmkE_rEeaITemOqq_uIw" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_s_QmkU_rEeaITemOqq_uIw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_10.pipeline#//@nodes.4"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s_P_gU_rEeaITemOqq_uIw" x="575" y="242"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_7V97sFKDEeaEeuw08GCqxA" type="2001" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_7V_J0FKDEeaEeuw08GCqxA" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_7V_J0VKDEeaEeuw08GCqxA" x="80" y="24"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_10.pipeline#//@nodes.5"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7V97sVKDEeaEeuw08GCqxA" x="240" y="84"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_cP2bwLU9Eea39erpTGVtig" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_cP3C0LU9Eea39erpTGVtig" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_cP3C0bU9Eea39erpTGVtig" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.6"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cP2bwbU9Eea39erpTGVtig" x="876" y="360"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_AUjJULVPEeavFZOgGotjVw" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_AUjwYLVPEeavFZOgGotjVw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_AUjwYbVPEeavFZOgGotjVw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.7"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AUjJUbVPEeavFZOgGotjVw" x="874" y="103"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_RP7sYLVPEeavFZOgGotjVw" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_RP7sYrVPEeavFZOgGotjVw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_RP8TcLVPEeavFZOgGotjVw" x="-20" y="-35"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.8"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RP7sYbVPEeavFZOgGotjVw" x="576" y="96"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_1Et5gU_lEeaITemOqq_uIw"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_10.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_Rra0ME_mEeaITemOqq_uIw" type="4001" source="_AloX8E_mEeaITemOqq_uIw" target="_Hu12UE_mEeaITemOqq_uIw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Rra0M0_mEeaITemOqq_uIw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Rra0NE_mEeaITemOqq_uIw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_Rra0MU_mEeaITemOqq_uIw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Rra0Mk_mEeaITemOqq_uIw" points="[21, -3, -152, 20]$[143, -17, -30, 6]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Rrd3gE_mEeaITemOqq_uIw" id="(0.9833333333333333,0.4666666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_UZ_6UE_mEeaITemOqq_uIw" type="4001" source="_AloX8E_mEeaITemOqq_uIw" target="_LhQ_EE_mEeaITemOqq_uIw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_UZ_6U0_mEeaITemOqq_uIw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_UaAhYE_mEeaITemOqq_uIw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_UZ_6UU_mEeaITemOqq_uIw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UZ_6Uk_mEeaITemOqq_uIw" points="[20, -13, -368, 10]$[178, -113, -210, -90]$[358, -36, -30, -13]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UaC9oE_mEeaITemOqq_uIw" id="(0.9833333333333333,0.3333333333333333)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_Xj2AIE_mEeaITemOqq_uIw" type="4001" source="_Hu12UE_mEeaITemOqq_uIw" target="_LhQ_EE_mEeaITemOqq_uIw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Xj2AI0_mEeaITemOqq_uIw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Xj2AJE_mEeaITemOqq_uIw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_Xj2AIU_mEeaITemOqq_uIw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Xj2AIk_mEeaITemOqq_uIw" points="[60, -9, -169, 0]$[216, -9, -13, 0]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xj5qgE_mEeaITemOqq_uIw" id="(0.0,0.6666666666666666)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xj5qgU_mEeaITemOqq_uIw" id="(0.21666666666666667,0.5166666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_gccYgE_mEeaITemOqq_uIw" type="4001" source="_LhQ_EE_mEeaITemOqq_uIw" target="_cmCusE_mEeaITemOqq_uIw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_gcc_kE_mEeaITemOqq_uIw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_gcc_kU_mEeaITemOqq_uIw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_gccYgU_mEeaITemOqq_uIw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gccYgk_mEeaITemOqq_uIw" points="[19, -4, -253, 45]$[263, -19, -9, 30]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gcfb0E_mEeaITemOqq_uIw" id="(0.9833333333333333,0.4666666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_fmvfELU9Eea39erpTGVtig" type="4001" source="_cmCusE_mEeaITemOqq_uIw" target="_cP2bwLU9Eea39erpTGVtig">
++    <children xmi:type="notation:DecorationNode" xmi:id="_fmwGILU9Eea39erpTGVtig" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_fmwGIbU9Eea39erpTGVtig" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_fmvfEbU9Eea39erpTGVtig" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.4"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fmvfErU9Eea39erpTGVtig" points="[-34, -45, 182, 254]$[-220, -269, -4, 30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_B3p60LVPEeavFZOgGotjVw" type="4001" source="_cP2bwLU9Eea39erpTGVtig" target="_AUjJULVPEeavFZOgGotjVw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_B3qh4LVPEeavFZOgGotjVw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_B3qh4bVPEeavFZOgGotjVw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_B3p60bVPEeavFZOgGotjVw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.5"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_B3p60rVPEeavFZOgGotjVw" points="[-4, -33, 28, 227]$[-28, -230, 4, 30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_GYzKwLVPEeavFZOgGotjVw" type="4001" source="_AUjJULVPEeavFZOgGotjVw" target="_AUjJULVPEeavFZOgGotjVw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_GYzKw7VPEeavFZOgGotjVw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_GYzKxLVPEeavFZOgGotjVw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_GYzKwbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.6"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GYzKwrVPEeavFZOgGotjVw" points="[24, -6, 12, 20]$[86, -6, 74, 20]$[86, -34, 74, -8]$[24, -34, 12, -8]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_GY0Y4LVPEeavFZOgGotjVw" id="(0.6,0.85)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IHSs4LVPEeavFZOgGotjVw" id="(0.8,0.4166666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_TkH8kLVPEeavFZOgGotjVw" type="4001" source="_RP7sYLVPEeavFZOgGotjVw" target="_AUjJULVPEeavFZOgGotjVw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_TkH8k7VPEeavFZOgGotjVw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_TkH8lLVPEeavFZOgGotjVw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_TkH8kbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.7"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TkH8krVPEeavFZOgGotjVw" points="[0, 0, -247, 78]$[241, -48, -6, 30]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TkJKsLVPEeavFZOgGotjVw" id="(1.0,0.7333333333333333)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_ZWj1QLVPEeavFZOgGotjVw" type="4001" source="_RP7sYLVPEeavFZOgGotjVw" target="_AUjJULVPEeavFZOgGotjVw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ZWj1Q7VPEeavFZOgGotjVw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZWj1RLVPEeavFZOgGotjVw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_ZWj1QbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.8"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZWj1QrVPEeavFZOgGotjVw" points="[30, -14, -268, -21]$[150, -66, -148, -73]$[268, -8, -30, -15]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_e0XhwLVPEeavFZOgGotjVw" type="4001" source="_RP7sYLVPEeavFZOgGotjVw" target="_s_P_gE_rEeaITemOqq_uIw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_e0Xhw7VPEeavFZOgGotjVw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_e0XhxLVPEeavFZOgGotjVw" x="23" y="1"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_e0XhwbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.9"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e0XhwrVPEeavFZOgGotjVw" points="[11, 30, 15, -113]$[30, 78, 34, -65]$[10, 116, 14, -27]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_jFzhwLVPEeavFZOgGotjVw" type="4001" source="_RP7sYLVPEeavFZOgGotjVw" target="_s_P_gE_rEeaITemOqq_uIw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_jF0I0LVPEeavFZOgGotjVw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_jF0I0bVPEeavFZOgGotjVw" x="24" y="-4"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_jFzhwbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.10"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jFzhwrVPEeavFZOgGotjVw" points="[-12, 30, -8, -113]$[-30, 78, -26, -65]$[-15, 116, -11, -27]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_ne6QALVPEeavFZOgGotjVw" type="4001" source="_7V97sFKDEeaEeuw08GCqxA" target="_RP7sYLVPEeavFZOgGotjVw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ne6QA7VPEeavFZOgGotjVw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ne6QBLVPEeavFZOgGotjVw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_ne6QAbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.11"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ne6QArVPEeavFZOgGotjVw" points="[0, 5, -306, -3]$[300, -22, -6, -30]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ne7eILVPEeavFZOgGotjVw" id="(1.0,0.5666666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_pq934LVPEeavFZOgGotjVw" type="4001" source="_7V97sFKDEeaEeuw08GCqxA" target="_RP7sYLVPEeavFZOgGotjVw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_pq-e8LVPEeavFZOgGotjVw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_pq-e8bVPEeavFZOgGotjVw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_pq934bVPEeavFZOgGotjVw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.12"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pq934rVPEeavFZOgGotjVw" points="[60, -21, -306, -20]$[192, -67, -174, -66]$[336, -13, -30, -12]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pq_GALVPEeavFZOgGotjVw" id="(0.0,0.7166666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_JJ6RYLVYEea0153D3F85VQ" type="4001" source="_AUjJULVPEeavFZOgGotjVw" target="_RP7sYLVPEeavFZOgGotjVw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_JJ64cLVYEea0153D3F85VQ" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_JJ64cbVYEea0153D3F85VQ" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_JJ6RYbVYEea0153D3F85VQ" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.13"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JJ6RYrVYEea0153D3F85VQ" points="[-1, -30, 297, -23]$[-1, -98, 297, -91]$[-304, -98, -6, -91]$[-304, -37, -6, -30]"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10Cfg.ivml
+new file mode 100644
+index 0000000..387b3c3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10Cfg.ivml
+@@ -0,0 +1,260 @@
++project PipelineVar_10Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_10Cfg;
++	Pipeline PipelineVar_10;
++	Source PipelineVar_10_Source0;
++	Flow PipelineVar_10_Flow0;
++	FamilyElement PipelineVar_10_FamilyElement0;
++	Flow PipelineVar_10_Flow1;
++	FamilyElement PipelineVar_10_FamilyElement1;
++	Flow PipelineVar_10_Flow2;
++	FamilyElement PipelineVar_10_FamilyElement2;
++	Flow PipelineVar_10_Flow3;
++	FamilyElement PipelineVar_10_FamilyElement3;
++	Flow PipelineVar_10_Flow4;
++	FamilyElement PipelineVar_10_FamilyElement4;
++	Flow PipelineVar_10_Flow5;
++	PipelineVar_10_Flow5 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement4), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_27.output[1]), 
++		name = "f7", 
++		constraints = {}
++	};
++	Flow PipelineVar_10_Flow6;
++	FamilyElement PipelineVar_10_FamilyElement5;
++	Flow PipelineVar_10_Flow7;
++	PipelineVar_10_Flow7 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement4), 
++		grouping = Grouping.allGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[3]), 
++		name = "f8", 
++		constraints = {}
++	};
++	Flow PipelineVar_10_Flow8;
++	PipelineVar_10_Flow8 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement4), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[2]), 
++		name = "f9", 
++		constraints = {}
++	};
++	Flow PipelineVar_10_Flow9;
++	Sink PipelineVar_10_Sink0;
++	PipelineVar_10_Sink0 = Sink {
++		sink = refBy(DataSinkVar_5), 
++		parallelism = 1, 
++		name = "TimeTravelSink", 
++		constraints = {}
++	};
++	PipelineVar_10_Flow9 = Flow {
++		destination = refBy(PipelineVar_10_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[0]), 
++		name = "f10", 
++		constraints = {}
++	};
++	Flow PipelineVar_10_Flow10;
++	PipelineVar_10_Flow10 = Flow {
++		destination = refBy(PipelineVar_10_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[1]), 
++		name = "f11", 
++		constraints = {}
++	};
++	PipelineVar_10_FamilyElement5 = FamilyElement {
++		family = refBy(FamilyVar_28), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_36), 
++		output = {
++			refBy(PipelineVar_10_Flow7), refBy(PipelineVar_10_Flow8), refBy(PipelineVar_10_Flow9), refBy(PipelineVar_10_Flow10)
++		}, 
++		parallelism = 1, 
++		name = "TimeGraphQueryExecutor", 
++		constraints = {}
++	};
++	PipelineVar_10_Flow6 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement5), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_27.output[0]), 
++		name = "f14", 
++		constraints = {}
++	};
++	PipelineVar_10_FamilyElement4 = FamilyElement {
++		family = refBy(FamilyVar_27), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_35), 
++		output = {
++			refBy(PipelineVar_10_Flow5), refBy(PipelineVar_10_Flow6)
++		}, 
++		parallelism = 5, 
++		name = "TimeGraphIndexer", 
++		constraints = {}
++	};
++	PipelineVar_10_Flow4 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement4), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_26.output[0]), 
++		name = "f6", 
++		constraints = {}
++	};
++	PipelineVar_10_FamilyElement3 = FamilyElement {
++		family = refBy(FamilyVar_26), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_34), 
++		output = {
++			refBy(PipelineVar_10_Flow4)
++		}, 
++		parallelism = 1, 
++		name = "TimeGraphMapper", 
++		constraints = {}
++	};
++	PipelineVar_10_Flow3 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement3), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_22.output[0]), 
++		name = "f5", 
++		constraints = {}
++	};
++	PipelineVar_10_FamilyElement2 = FamilyElement {
++		family = refBy(FamilyVar_22), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::FamilyVar_22.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_10_Flow3)
++		}, 
++		parallelism = 1, 
++		name = "DynamicGraphCompilation", 
++		constraints = {}
++	};
++	PipelineVar_10_Flow2 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement2), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
++		name = "f4", 
++		constraints = {}
++	};
++	PipelineVar_10_FamilyElement1 = FamilyElement {
++		family = refBy(fCorrelationFinancial), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_10_Flow2)
++		}, 
++		parallelism = 1, 
++		name = "FinancialCorrelation", 
++		constraints = {}
++	};
++	PipelineVar_10_Flow1 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f3", 
++		constraints = {}
++	};
++	PipelineVar_10_FamilyElement0 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		output = {
++			refBy(PipelineVar_10_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "Preprocessor", 
++		constraints = {}
++	};
++	PipelineVar_10_Flow0 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[1]), 
++		name = "f1", 
++		constraints = {}
++	};
++	Flow PipelineVar_10_Flow11;
++	PipelineVar_10_Flow11 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_10_Source0 = Source {
++		output = {
++			refBy(PipelineVar_10_Flow0), refBy(PipelineVar_10_Flow11)
++		}, 
++		source = refBy(DataSourceVar_7), 
++		permissibleParameters = {
++			refBy(DataManagementCfg::DataSourceVar_7.parameters[0])
++		}, 
++		parallelism = 1, 
++		name = "FinancialDataSource", 
++		constraints = {}
++	};
++	Source PipelineVar_10_Source1;
++	Flow PipelineVar_10_Flow12;
++	PipelineVar_10_Flow12 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement5), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_9.input[0]), 
++		name = "f12", 
++		constraints = {}
++	};
++	Flow PipelineVar_10_Flow13;
++	PipelineVar_10_Flow13 = Flow {
++		destination = refBy(PipelineVar_10_FamilyElement5), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_9.input[1]), 
++		name = "f13", 
++		constraints = {}
++	};
++	PipelineVar_10_Source1 = Source {
++		output = {
++			refBy(PipelineVar_10_Flow12), refBy(PipelineVar_10_Flow13)
++		}, 
++		source = refBy(DataSourceVar_9), 
++		permissibleParameters = {
++			refBy(DataManagementCfg::DataSourceVar_9.parameters[0]), refBy(DataManagementCfg::DataSourceVar_9.parameters[1])
++		}, 
++		parallelism = 1, 
++		name = "queries", 
++		constraints = {}
++	};
++	PipelineVar_10 = Pipeline {
++		name = "TimeTravelPip", 
++		sources = {
++			refBy(PipelineVar_10_Source0), refBy(PipelineVar_10_Source1)
++		}, 
++		numworkers = 18, 
++		artifact = "eu.qualimaster:TimeTravelPip:0.0.2-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_10;
++		PipelineVar_10_Source0;
++		PipelineVar_10_Flow0;
++		PipelineVar_10_FamilyElement0;
++		PipelineVar_10_Flow1;
++		PipelineVar_10_FamilyElement1;
++		PipelineVar_10_Flow2;
++		PipelineVar_10_FamilyElement2;
++		PipelineVar_10_Flow3;
++		PipelineVar_10_FamilyElement3;
++		PipelineVar_10_Flow4;
++		PipelineVar_10_FamilyElement4;
++		PipelineVar_10_Flow5;
++		PipelineVar_10_Flow6;
++		PipelineVar_10_FamilyElement5;
++		PipelineVar_10_Flow7;
++		PipelineVar_10_Flow8;
++		PipelineVar_10_Flow9;
++		PipelineVar_10_Sink0;
++		PipelineVar_10_Flow10;
++		PipelineVar_10_Flow11;
++		PipelineVar_10_Source1;
++		PipelineVar_10_Flow12;
++		PipelineVar_10_Flow13;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline
+new file mode 100644
+index 0000000..e7946c3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline
+@@ -0,0 +1,6 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="ReplayTestPip" artifact="eu.qualimaster:ReplayTestPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="RandomSource" source="2"/>
++  <nodes xsi:type="pipeline:ReplaySink" name="ReplaySink" sink="1"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::randomSource.input[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline_diagram
+new file mode 100644
+index 0000000..498ff80
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline_diagram
+@@ -0,0 +1,29 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_baKK4HqaEeadgttKLyIo0A" type="Pipeline" name="PipelineVar_12.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_dmCzoHqaEeadgttKLyIo0A" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_dmGeAHqaEeadgttKLyIo0A" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_dmHFEHqaEeadgttKLyIo0A" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_12.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dmCzoXqaEeadgttKLyIo0A" x="168" y="314"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_wYSxsHqaEeadgttKLyIo0A" type="2007" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_wYTYwHqaEeadgttKLyIo0A" type="5007">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_wYT_0HqaEeadgttKLyIo0A" y="5"/>
++    </children>
++    <element xmi:type="pipeline:ReplaySink" href="PipelineVar_12.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wYSxsXqaEeadgttKLyIo0A" x="360" y="315"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_baKK4XqaEeadgttKLyIo0A"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_12.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_yPPFMHqaEeadgttKLyIo0A" type="4001" source="_dmCzoHqaEeadgttKLyIo0A" target="_wYSxsHqaEeadgttKLyIo0A">
++    <children xmi:type="notation:DecorationNode" xmi:id="_yPQTUHqaEeadgttKLyIo0A" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_yPQ6YHqaEeadgttKLyIo0A" x="-2" y="11"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_yPPFMXqaEeadgttKLyIo0A" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_12.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yPPFMnqaEeadgttKLyIo0A" points="[8, -2, -138, 0]$[140, -2, -6, 0]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yQDkkHqaEeadgttKLyIo0A" id="(0.8666666666666667,0.5333333333333333)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yQDkkXqaEeadgttKLyIo0A" id="(0.10909090909090909,0.5272727272727272)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12Cfg.ivml
+new file mode 100644
+index 0000000..ea4f91f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12Cfg.ivml
+@@ -0,0 +1,51 @@
++project PipelineVar_12Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_12Cfg;
++	Pipeline PipelineVar_12;
++	Source PipelineVar_12_Source0;
++	Flow PipelineVar_12_Flow0;
++	ReplaySink PipelineVar_12_ReplaySink0;
++	PipelineVar_12_ReplaySink0 = ReplaySink {
++		sink = refBy(randomSink), 
++		parallelism = 1, 
++		name = "ReplaySink", 
++		constraints = {}
++	};
++	PipelineVar_12_Flow0 = Flow {
++		destination = refBy(PipelineVar_12_ReplaySink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::randomSource.input[0]), 
++		name = "f1", 
++		constraints = {}
++	};
++	PipelineVar_12_Source0 = Source {
++		output = {
++			refBy(PipelineVar_12_Flow0)
++		}, 
++		source = refBy(randomSource), 
++		parallelism = 1, 
++		name = "RandomSource", 
++		constraints = {}
++	};
++	PipelineVar_12 = Pipeline {
++		name = "ReplayTestPip", 
++		sources = {
++			refBy(PipelineVar_12_Source0)
++		}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster:ReplayTestPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_12;
++		PipelineVar_12_Source0;
++		PipelineVar_12_Flow0;
++		PipelineVar_12_ReplaySink0;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline
+new file mode 100644
+index 0000000..ba59a73
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline
+@@ -0,0 +1,19 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="TransferPip" numworkers="5" artifact="eu.qualimaster:TransferPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="SpringDataSource" source="5">
++    <permissibleParameters>DataManagementCfg::DataSourceVar_6.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0" defaultAlgorithm="AlgorithmsCfg::swPreprocessor"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="TransferEntropyCalculation" family="23" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_33">
++    <permissibleParameters>FamiliesCfg::FamilyVar_24.parameters[2]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::FamilyVar_24.parameters[0]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::FamilyVar_24.parameters[1]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
++  <nodes xsi:type="pipeline:ReplaySink" name="ReplaySink" sink="0"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[1]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_24.output[0]"/>
++  <flows name="f4" source="//@nodes.2" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_24.output[0]"/>
++  <flows name="f5" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::spring.input[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline_diagram
+new file mode 100644
+index 0000000..805a6c4
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline_diagram
+@@ -0,0 +1,83 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_rF-zsIZEEeaF_r1Kj4lT8Q" type="Pipeline" name="PipelineVar_13.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_P-DHoIZFEeaF_r1Kj4lT8Q" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_P-E80IZFEeaF_r1Kj4lT8Q" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_P-E80YZFEeaF_r1Kj4lT8Q" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_13.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_P-DHoYZFEeaF_r1Kj4lT8Q" x="140" y="296"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_cVBEUIZFEeaF_r1Kj4lT8Q" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_cVBrYIZFEeaF_r1Kj4lT8Q" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_cVBrYYZFEeaF_r1Kj4lT8Q" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_13.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cVBEUYZFEeaF_r1Kj4lT8Q" x="270" y="300"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_lQrXwIZFEeaF_r1Kj4lT8Q" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_lQr-0IZFEeaF_r1Kj4lT8Q" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_lQsl4IZFEeaF_r1Kj4lT8Q" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_13.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lQrXwYZFEeaF_r1Kj4lT8Q" x="435" y="300"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_tnPaEIZFEeaF_r1Kj4lT8Q" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_tnQBIIZFEeaF_r1Kj4lT8Q" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_tnQBIYZFEeaF_r1Kj4lT8Q" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_13.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tnPaEYZFEeaF_r1Kj4lT8Q" x="585" y="255"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_yyev4IZFEeaF_r1Kj4lT8Q" type="2007" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_yyf-AIZFEeaF_r1Kj4lT8Q" type="5007">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_yyf-AYZFEeaF_r1Kj4lT8Q" y="5"/>
++    </children>
++    <element xmi:type="pipeline:ReplaySink" href="PipelineVar_13.pipeline#//@nodes.4"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yyev4YZFEeaF_r1Kj4lT8Q" x="600" y="405"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_rF-zsYZEEeaF_r1Kj4lT8Q"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_13.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_2ivVcIZFEeaF_r1Kj4lT8Q" type="4001" source="_P-DHoIZFEeaF_r1Kj4lT8Q" target="_cVBEUIZFEeaF_r1Kj4lT8Q">
++    <children xmi:type="notation:DecorationNode" xmi:id="_2ixKoIZFEeaF_r1Kj4lT8Q" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_2ixKoYZFEeaF_r1Kj4lT8Q" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_2iv8gIZFEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2iv8gYZFEeaF_r1Kj4lT8Q" points="[30, 1, -82, 0]$[100, -1, -12, -2]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2i4fYIZFEeaF_r1Kj4lT8Q" id="(0.2,0.45)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_3jdyoIZFEeaF_r1Kj4lT8Q" type="4001" source="_cVBEUIZFEeaF_r1Kj4lT8Q" target="_lQrXwIZFEeaF_r1Kj4lT8Q">
++    <children xmi:type="notation:DecorationNode" xmi:id="_3jeZsIZFEeaF_r1Kj4lT8Q" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_3jeZsYZFEeaF_r1Kj4lT8Q" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_3jdyoYZFEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3jdyooZFEeaF_r1Kj4lT8Q" points="[30, 8, -119, 0]$[135, 15, -14, 7]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3jlHYIZFEeaF_r1Kj4lT8Q" id="(0.23333333333333334,0.6333333333333333)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_4hUiAIZFEeaF_r1Kj4lT8Q" type="4001" source="_lQrXwIZFEeaF_r1Kj4lT8Q" target="_tnPaEIZFEeaF_r1Kj4lT8Q">
++    <children xmi:type="notation:DecorationNode" xmi:id="_4hVJEIZFEeaF_r1Kj4lT8Q" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_4hVwIIZFEeaF_r1Kj4lT8Q" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_4hUiAYZFEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4hUiAoZFEeaF_r1Kj4lT8Q" points="[30, -10, -117, 38]$[120, -44, -27, 4]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_5Z4hsIZFEeaF_r1Kj4lT8Q" type="4001" source="_lQrXwIZFEeaF_r1Kj4lT8Q" target="_yyev4IZFEeaF_r1Kj4lT8Q">
++    <children xmi:type="notation:DecorationNode" xmi:id="_5Z5v0IZFEeaF_r1Kj4lT8Q" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_5Z5v0YZFEeaF_r1Kj4lT8Q" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_5Z4hsYZFEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5Z4hsoZFEeaF_r1Kj4lT8Q" points="[30, 20, -120, -83]$[142, 98, -8, -5]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5aBEkIZFEeaF_r1Kj4lT8Q" id="(0.14545454545454545,0.3090909090909091)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_Al8fwIZGEeaF_r1Kj4lT8Q" type="4001" source="_P-DHoIZFEeaF_r1Kj4lT8Q" target="_lQrXwIZFEeaF_r1Kj4lT8Q">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Al9G0IZGEeaF_r1Kj4lT8Q" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Al9t4IZGEeaF_r1Kj4lT8Q" x="-32" y="-14"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_Al8fwYZGEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.4"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Al8fwoZGEeaF_r1Kj4lT8Q" points="[30, -17, -265, -21]$[130, -71, -165, -75]$[265, -10, -30, -14]"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13Cfg.ivml
+new file mode 100644
+index 0000000..51cd6fa
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13Cfg.ivml
+@@ -0,0 +1,126 @@
++project PipelineVar_13Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_13Cfg;
++	Pipeline PipelineVar_13;
++	Source PipelineVar_13_Source0;
++	Flow PipelineVar_13_Flow0;
++	FamilyElement PipelineVar_13_FamilyElement0;
++	Flow PipelineVar_13_Flow1;
++	FamilyElement PipelineVar_13_FamilyElement1;
++	Flow PipelineVar_13_Flow2;
++	Sink PipelineVar_13_Sink0;
++	PipelineVar_13_Sink0 = Sink {
++		sink = refBy(DataSinkVar_6), 
++		parallelism = 1, 
++		name = "Sink", 
++		constraints = {}
++	};
++	PipelineVar_13_Flow2 = Flow {
++		destination = refBy(PipelineVar_13_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_24.output[0]), 
++		name = "f3", 
++		constraints = {}
++	};
++	Flow PipelineVar_13_Flow3;
++	ReplaySink PipelineVar_13_ReplaySink1;
++	PipelineVar_13_ReplaySink1 = ReplaySink {
++		sink = refBy(DataSinkVar_6), 
++		parallelism = 1, 
++		name = "ReplaySink", 
++		constraints = {}
++	};
++	PipelineVar_13_Flow3 = Flow {
++		destination = refBy(PipelineVar_13_ReplaySink1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_24.output[0]), 
++		name = "f4", 
++		constraints = {}
++	};
++	PipelineVar_13_FamilyElement1 = FamilyElement {
++		family = refBy(FamilyVar_24), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_33), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::FamilyVar_24.parameters[2]), refBy(FamiliesCfg::FamilyVar_24.parameters[0]), refBy(FamiliesCfg::FamilyVar_24.parameters[1])
++		}, 
++		output = {
++			refBy(PipelineVar_13_Flow2), refBy(PipelineVar_13_Flow3)
++		}, 
++		parallelism = 1, 
++		name = "TransferEntropyCalculation", 
++		constraints = {}
++	};
++	PipelineVar_13_Flow1 = Flow {
++		destination = refBy(PipelineVar_13_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_13_FamilyElement0 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::swPreprocessor), 
++		output = {
++			refBy(PipelineVar_13_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "Preprocessor", 
++		constraints = {}
++	};
++	PipelineVar_13_Flow0 = Flow {
++		destination = refBy(PipelineVar_13_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[1]), 
++		name = "f1", 
++		constraints = {}
++	};
++	Flow PipelineVar_13_Flow4;
++	PipelineVar_13_Flow4 = Flow {
++		destination = refBy(PipelineVar_13_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[0]), 
++		name = "f5", 
++		constraints = {}
++	};
++	PipelineVar_13_Source0 = Source {
++		output = {
++			refBy(PipelineVar_13_Flow0), refBy(PipelineVar_13_Flow4)
++		}, 
++		source = refBy(DataSourceVar_6), 
++		permissibleParameters = {
++			refBy(DataManagementCfg::DataSourceVar_6.parameters[0])
++		}, 
++		parallelism = 1, 
++		name = "SpringDataSource", 
++		constraints = {}
++	};
++	PipelineVar_13 = Pipeline {
++		name = "TransferPip", 
++		sources = {
++			refBy(PipelineVar_13_Source0)
++		}, 
++		numworkers = 5, 
++		artifact = "eu.qualimaster:TransferPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	
++	freeze {
++		PipelineVar_13;
++		PipelineVar_13_Source0;
++		PipelineVar_13_Flow0;
++		PipelineVar_13_FamilyElement0;
++		PipelineVar_13_Flow1;
++		PipelineVar_13_FamilyElement1;
++		PipelineVar_13_Flow2;
++		PipelineVar_13_Sink0;
++		PipelineVar_13_Flow3;
++		PipelineVar_13_ReplaySink1;
++		PipelineVar_13_Flow4;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline
+new file mode 100644
+index 0000000..8233db8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline
+@@ -0,0 +1,14 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="ReflectiveRandomPip" artifact="eu.qualimaster:ReflectiveRandomPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="src" source="2">
++    <permissibleParameters>DataManagementCfg::randomSource.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="processor" family="5">
++    <permissibleParameters>FamiliesCfg::randomFamily.parameters[2]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::randomFamily.parameters[1]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::randomFamily.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:Sink" name="snk" sink="1"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::randomSource.input[0]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::randomFamily.output[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline_diagram
+new file mode 100644
+index 0000000..c6a6784
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline_diagram
+@@ -0,0 +1,44 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_AhJ8QKpqEeaEJ_xOc6LqFA" type="Pipeline" name="PipelineVar_14.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_CAPwcKpqEeaEJ_xOc6LqFA" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_CARloKpqEeaEJ_xOc6LqFA" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_CARloapqEeaEJ_xOc6LqFA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_14.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CAPwcapqEeaEJ_xOc6LqFA" x="44" y="269"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_Dr4L0KpqEeaEJ_xOc6LqFA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Dr5Z8KpqEeaEJ_xOc6LqFA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Dr5Z8apqEeaEJ_xOc6LqFA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_14.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Dr4L0apqEeaEJ_xOc6LqFA" x="195" y="270"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_QnNZ0KpqEeaEJ_xOc6LqFA" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_QnOA4KpqEeaEJ_xOc6LqFA" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_QnOn8KpqEeaEJ_xOc6LqFA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_14.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QnNZ0apqEeaEJ_xOc6LqFA" x="375" y="270"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_AhJ8QapqEeaEJ_xOc6LqFA"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_14.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_FxgbkKpqEeaEJ_xOc6LqFA" type="4001" source="_CAPwcKpqEeaEJ_xOc6LqFA" target="_Dr4L0KpqEeaEJ_xOc6LqFA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_FxhpsKpqEeaEJ_xOc6LqFA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_FxhpsapqEeaEJ_xOc6LqFA" x="-8" y="10"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_FxgbkapqEeaEJ_xOc6LqFA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_14.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FxgbkqpqEeaEJ_xOc6LqFA" points="[13, 2, -121, -2]$[104, 2, -30, -2]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FxplgKpqEeaEJ_xOc6LqFA" id="(0.7833333333333333,0.45)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_RwPecKpqEeaEJ_xOc6LqFA" type="4001" source="_Dr4L0KpqEeaEJ_xOc6LqFA" target="_QnNZ0KpqEeaEJ_xOc6LqFA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_RwQFgKpqEeaEJ_xOc6LqFA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_RwQskKpqEeaEJ_xOc6LqFA" x="7" y="9"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_RwPecapqEeaEJ_xOc6LqFA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_14.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_RwPecqpqEeaEJ_xOc6LqFA" points="[30, 1, -121, 0]$[150, 1, -1, 0]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RwWMIKpqEeaEJ_xOc6LqFA" id="(0.01818181818181818,0.5636363636363636)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14Cfg.ivml
+new file mode 100644
+index 0000000..f1cc352
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14Cfg.ivml
+@@ -0,0 +1,77 @@
++project PipelineVar_14Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_14Cfg;
++	Pipeline PipelineVar_14;
++	Source PipelineVar_14_Source0;
++	Flow PipelineVar_14_Flow0;
++	FamilyElement PipelineVar_14_FamilyElement0;
++	Flow PipelineVar_14_Flow1;
++	Sink PipelineVar_14_Sink0;
++	PipelineVar_14_Sink0 = Sink {
++		sink = refBy(randomSink), 
++		parallelism = 1, 
++		name = "snk", 
++		constraints = {}
++	};
++	PipelineVar_14_Flow1 = Flow {
++		destination = refBy(PipelineVar_14_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::randomFamily.output[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_14_FamilyElement0 = FamilyElement {
++		family = refBy(randomFamily), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::randomFamily.parameters[2]), refBy(FamiliesCfg::randomFamily.parameters[1]), refBy(FamiliesCfg::randomFamily.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_14_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "processor", 
++		constraints = {}
++	};
++	PipelineVar_14_Flow0 = Flow {
++		destination = refBy(PipelineVar_14_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::randomSource.input[0]), 
++		name = "f1", 
++		constraints = {}
++	};
++	PipelineVar_14_Source0 = Source {
++		output = {
++			refBy(PipelineVar_14_Flow0)
++		}, 
++		source = refBy(randomSource), 
++		permissibleParameters = {
++			refBy(DataManagementCfg::randomSource.parameters[0])
++		}, 
++		parallelism = 1, 
++		name = "src", 
++		constraints = {}
++	};
++	PipelineVar_14 = Pipeline {
++		name = "ReflectiveRandomPip", 
++		sources = {
++			refBy(PipelineVar_14_Source0)
++		}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster:ReflectiveRandomPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_14;
++		PipelineVar_14_Source0;
++		PipelineVar_14_Flow0;
++		PipelineVar_14_FamilyElement0;
++		PipelineVar_14_Flow1;
++		PipelineVar_14_Sink0;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline
+new file mode 100644
+index 0000000..1b7ff31
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline
+@@ -0,0 +1,15 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="PriorityFinancialPip" artifact="eu.qualimaster:PriorityFinancialPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="6">
++    <permissibleParameters>DataManagementCfg::DataSourceVar_7.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="FinancialCorrelation" family="1">
++    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::DataSourceVar_7.input[1]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
++  <flows name="f4" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::DataSourceVar_7.input[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline_diagram
+new file mode 100644
+index 0000000..fc5bcfa
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline_diagram
+@@ -0,0 +1,68 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_UrElUOLoEeaIoJk6L2fGOA" type="Pipeline" name="PipelineVar_16.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_dwqQ0OLoEeaIoJk6L2fGOA" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_dwqQ0uLoEeaIoJk6L2fGOA" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_dwqQ0-LoEeaIoJk6L2fGOA" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_16.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dwqQ0eLoEeaIoJk6L2fGOA" x="99" y="238"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_yW6jIOLoEeaIoJk6L2fGOA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_yW6jIuLoEeaIoJk6L2fGOA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_yW6jI-LoEeaIoJk6L2fGOA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_16.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yW6jIeLoEeaIoJk6L2fGOA" x="285" y="240"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_7cfnkOLoEeaIoJk6L2fGOA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_7cgOoOLoEeaIoJk6L2fGOA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_7cgOoeLoEeaIoJk6L2fGOA" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_16.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7cfnkeLoEeaIoJk6L2fGOA" x="480" y="240"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_DNfesOLpEeaIoJk6L2fGOA" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_DNfesuLpEeaIoJk6L2fGOA" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_DNfes-LpEeaIoJk6L2fGOA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_16.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DNfeseLpEeaIoJk6L2fGOA" x="703" y="256"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_UrElUeLoEeaIoJk6L2fGOA"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_16.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_GN-NIOLpEeaIoJk6L2fGOA" type="4001" source="_dwqQ0OLoEeaIoJk6L2fGOA" target="_yW6jIOLoEeaIoJk6L2fGOA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_GN-NI-LpEeaIoJk6L2fGOA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_GN-NJOLpEeaIoJk6L2fGOA" x="-5" y="25"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_GN-NIeLpEeaIoJk6L2fGOA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_16.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GN-NIuLpEeaIoJk6L2fGOA" points="[30, 0, -156, -2]$[156, 0, -30, -2]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_IpZGsOLpEeaIoJk6L2fGOA" type="4001" source="_yW6jIOLoEeaIoJk6L2fGOA" target="_7cfnkOLoEeaIoJk6L2fGOA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_IpZGs-LpEeaIoJk6L2fGOA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_IpZGtOLpEeaIoJk6L2fGOA" x="-1" y="26"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_IpZGseLpEeaIoJk6L2fGOA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_16.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IpZGsuLpEeaIoJk6L2fGOA" points="[30, -1, -146, 0]$[165, -2, -11, -1]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IpiQoOLpEeaIoJk6L2fGOA" id="(0.18333333333333332,0.48333333333333334)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_MXBPAOLpEeaIoJk6L2fGOA" type="4001" source="_7cfnkOLoEeaIoJk6L2fGOA" target="_DNfesOLpEeaIoJk6L2fGOA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_MXBPA-LpEeaIoJk6L2fGOA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_MXBPBOLpEeaIoJk6L2fGOA" y="24"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_MXBPAeLpEeaIoJk6L2fGOA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_16.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MXBPAuLpEeaIoJk6L2fGOA" points="[30, 1, -174, -9]$[193, 7, -11, -3]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MXRGoOLpEeaIoJk6L2fGOA" id="(0.2,0.43636363636363634)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_T2BXMOLpEeaIoJk6L2fGOA" type="4001" source="_dwqQ0OLoEeaIoJk6L2fGOA" target="_7cfnkOLoEeaIoJk6L2fGOA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_T2B-QOLpEeaIoJk6L2fGOA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_T2B-QeLpEeaIoJk6L2fGOA" x="-2" y="-6"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_T2BXMeLpEeaIoJk6L2fGOA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_16.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_T2BXMuLpEeaIoJk6L2fGOA" points="[35, -8, -351, -29]$[191, -39, -195, -60]$[356, 11, -30, -10]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_T2JTAOLpEeaIoJk6L2fGOA" id="(0.4166666666666667,0.18333333333333332)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16Cfg.ivml
+new file mode 100644
+index 0000000..c763412
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16Cfg.ivml
+@@ -0,0 +1,107 @@
++project PipelineVar_16Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_16Cfg;
++	Pipeline PipelineVar_16;
++	Source PipelineVar_16_Source0;
++	Flow PipelineVar_16_Flow0;
++	FamilyElement PipelineVar_16_FamilyElement0;
++	Flow PipelineVar_16_Flow1;
++	FamilyElement PipelineVar_16_FamilyElement1;
++	Flow PipelineVar_16_Flow2;
++	Sink PipelineVar_16_Sink0;
++	PipelineVar_16_Sink0 = Sink {
++		sink = refBy(priorSnk), 
++		parallelism = 1, 
++		name = "Sink", 
++		constraints = {}
++	};
++	PipelineVar_16_Flow2 = Flow {
++		destination = refBy(PipelineVar_16_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
++		name = "f3", 
++		constraints = {}
++	};
++	PipelineVar_16_FamilyElement1 = FamilyElement {
++		family = refBy(fCorrelationFinancial), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_16_Flow2)
++		}, 
++		parallelism = 1, 
++		name = "FinancialCorrelation", 
++		constraints = {}
++	};
++	PipelineVar_16_Flow1 = Flow {
++		destination = refBy(PipelineVar_16_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_16_FamilyElement0 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		output = {
++			refBy(PipelineVar_16_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "Preprocessor", 
++		constraints = {}
++	};
++	PipelineVar_16_Flow0 = Flow {
++		destination = refBy(PipelineVar_16_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_7.input[1]), 
++		name = "f1", 
++		constraints = {}
++	};
++	Flow PipelineVar_16_Flow3;
++	PipelineVar_16_Flow3 = Flow {
++		destination = refBy(PipelineVar_16_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_7.input[0]), 
++		name = "f4", 
++		constraints = {}
++	};
++	PipelineVar_16_Source0 = Source {
++		output = {
++			refBy(PipelineVar_16_Flow0), refBy(PipelineVar_16_Flow3)
++		}, 
++		source = refBy(DataSourceVar_7), 
++		permissibleParameters = {
++			refBy(DataManagementCfg::DataSourceVar_7.parameters[0])
++		}, 
++		parallelism = 1, 
++		name = "FinancialDataSource",
++		loadShedding = true, 
++		constraints = {}
++	};
++	PipelineVar_16 = Pipeline {
++		name = "PriorityFinancialPip", 
++		sources = {
++			refBy(PipelineVar_16_Source0)
++		}, 
++		numworkers = 16, 
++		artifact = "eu.qualimaster:PriorityFinancialPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_16;
++		PipelineVar_16_Source0;
++		PipelineVar_16_Flow0;
++		PipelineVar_16_FamilyElement0;
++		PipelineVar_16_Flow1;
++		PipelineVar_16_FamilyElement1;
++		PipelineVar_16_Flow2;
++		PipelineVar_16_Sink0;
++		PipelineVar_16_Flow3;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline
+new file mode 100644
+index 0000000..d699944
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline
+@@ -0,0 +1,13 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="PrioritySimulatePip" numworkers="5" artifact="eu.qualimaster:PrioritySimulatePip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="FinancialSource" source="9"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="CorrelationComputation" family="1">
++    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::DataSourceVar_10.input[1]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++  <flows name="f3" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::DataSourceVar_10.input[0]"/>
++  <flows name="f4" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline_diagram
+new file mode 100644
+index 0000000..cc2ef08
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline_diagram
+@@ -0,0 +1,67 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_ioxtQO3TEea63e3VPGt0Ow" type="Pipeline" name="PipelineVar_17.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_kr1KIO3TEea63e3VPGt0Ow" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_kr1KIu3TEea63e3VPGt0Ow" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_kr1KI-3TEea63e3VPGt0Ow" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_17.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kr1KIe3TEea63e3VPGt0Ow" x="178" y="262"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_nWGYAO3TEea63e3VPGt0Ow" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_nWGYAu3TEea63e3VPGt0Ow" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_nWGYA-3TEea63e3VPGt0Ow" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_17.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nWGYAe3TEea63e3VPGt0Ow" x="360" y="255"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_pRWjwO3TEea63e3VPGt0Ow" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_pRWjwu3TEea63e3VPGt0Ow" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_pRWjw-3TEea63e3VPGt0Ow" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_17.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pRWjwe3TEea63e3VPGt0Ow" x="525" y="255"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_kwREoO-IEea5f8BRD1AxIg" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_kwS50O-IEea5f8BRD1AxIg" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_kwTg4O-IEea5f8BRD1AxIg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_17.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kwREoe-IEea5f8BRD1AxIg" x="705" y="255"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_ioxtQe3TEea63e3VPGt0Ow"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_17.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_tuWTgO3TEea63e3VPGt0Ow" type="4001" source="_kr1KIO3TEea63e3VPGt0Ow" target="_nWGYAO3TEea63e3VPGt0Ow">
++    <children xmi:type="notation:DecorationNode" xmi:id="_tuWTg-3TEea63e3VPGt0Ow" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_tuWThO3TEea63e3VPGt0Ow" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_tuWTge3TEea63e3VPGt0Ow" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_17.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tuWTgu3TEea63e3VPGt0Ow" points="[30, 1, -131, 0]$[152, 4, -9, 3]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tuWThe3TEea63e3VPGt0Ow" id="(0.15,0.6333333333333333)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_uh0-4O3TEea63e3VPGt0Ow" type="4001" source="_nWGYAO3TEea63e3VPGt0Ow" target="_pRWjwO3TEea63e3VPGt0Ow">
++    <children xmi:type="notation:DecorationNode" xmi:id="_uh2NAO3TEea63e3VPGt0Ow" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_uh2NAe3TEea63e3VPGt0Ow" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_uh0-4e3TEea63e3VPGt0Ow" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_17.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uh0-4u3TEea63e3VPGt0Ow" points="[30, 0, -135, 0]$[135, 0, -30, 0]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_vX32EO3TEea63e3VPGt0Ow" type="4001" source="_kr1KIO3TEea63e3VPGt0Ow" target="_pRWjwO3TEea63e3VPGt0Ow">
++    <children xmi:type="notation:DecorationNode" xmi:id="_vX32E-3TEea63e3VPGt0Ow" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_vX32FO3TEea63e3VPGt0Ow" x="-10" y="-57"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_vX32Ee3TEea63e3VPGt0Ow" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_17.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vX32Eu3TEea63e3VPGt0Ow" points="[30, -16, -307, 11]$[182, -97, -155, -70]$[317, -37, -20, -10]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vYBnEO3TEea63e3VPGt0Ow" id="(0.3333333333333333,0.16666666666666666)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_m0zvQO-IEea5f8BRD1AxIg" type="4001" source="_pRWjwO3TEea63e3VPGt0Ow" target="_kwREoO-IEea5f8BRD1AxIg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_m009YO-IEea5f8BRD1AxIg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_m009Ye-IEea5f8BRD1AxIg" x="7" y="28"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_m0zvQe-IEea5f8BRD1AxIg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_17.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_m0zvQu-IEea5f8BRD1AxIg" points="[30, -4, -147, -1]$[150, -4, -27, -1]"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17Cfg.ivml
+new file mode 100644
+index 0000000..e23e83d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17Cfg.ivml
+@@ -0,0 +1,103 @@
++project PipelineVar_17Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_17Cfg;
++	Pipeline PipelineVar_17;
++	Source PipelineVar_17_Source0;
++	Flow PipelineVar_17_Flow0;
++	FamilyElement PipelineVar_17_FamilyElement0;
++	Flow PipelineVar_17_Flow1;
++	FamilyElement PipelineVar_17_FamilyElement1;
++	Flow PipelineVar_17_Flow2;
++	Sink PipelineVar_17_Sink0;
++	PipelineVar_17_Sink0 = Sink {
++		sink = refBy(priorSnk), 
++		parallelism = 1, 
++		name = "Sink", 
++		constraints = {}
++	};
++	PipelineVar_17_Flow2 = Flow {
++		destination = refBy(PipelineVar_17_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
++		name = "f4", 
++		constraints = {}
++	};
++	PipelineVar_17_FamilyElement1 = FamilyElement {
++		family = refBy(fCorrelationFinancial), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_17_Flow2)
++		}, 
++		parallelism = 1, 
++		name = "CorrelationComputation", 
++		constraints = {}
++	};
++	PipelineVar_17_Flow1 = Flow {
++		destination = refBy(PipelineVar_17_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_17_FamilyElement0 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		output = {
++			refBy(PipelineVar_17_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "Preprocessor", 
++		constraints = {}
++	};
++	PipelineVar_17_Flow0 = Flow {
++		destination = refBy(PipelineVar_17_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_10.input[1]), 
++		name = "f1", 
++		constraints = {}
++	};
++	Flow PipelineVar_17_Flow3;
++	PipelineVar_17_Flow3 = Flow {
++		destination = refBy(PipelineVar_17_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_10.input[0]), 
++		name = "f3", 
++		constraints = {}
++	};
++	PipelineVar_17_Source0 = Source {
++		output = {
++			refBy(PipelineVar_17_Flow0), refBy(PipelineVar_17_Flow3)
++		}, 
++		source = refBy(DataSourceVar_10), 
++		parallelism = 1, 
++		name = "FinancialSource", 
++		constraints = {}
++	};
++	PipelineVar_17 = Pipeline {
++		name = "PrioritySimulatePip", 
++		sources = {
++			refBy(PipelineVar_17_Source0)
++		}, 
++		numworkers = 5, 
++		artifact = "eu.qualimaster:PrioritySimulatePip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_17;
++		PipelineVar_17_Source0;
++		PipelineVar_17_Flow0;
++		PipelineVar_17_FamilyElement0;
++		PipelineVar_17_Flow1;
++		PipelineVar_17_FamilyElement1;
++		PipelineVar_17_Flow2;
++		PipelineVar_17_Sink0;
++		PipelineVar_17_Flow3;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline
+new file mode 100644
+index 0000000..29a1f90
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline
+@@ -0,0 +1,22 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="TimeTravelSimPip" numworkers="18" artifact="eu.qualimaster:TimeTravelSimPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="GraphDataSource" source="10"/>
++  <nodes xsi:type="pipeline:Source" name="queries" source="8">
++    <permissibleParameters>DataManagementCfg::DataSourceVar_9.parameters[1]</permissibleParameters>
++    <permissibleParameters>DataManagementCfg::DataSourceVar_9.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphQueryExecutor" family="29" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_36"/>
++  <nodes xsi:type="pipeline:Sink" name="TimeTravelSink" sink="5"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphIndexer" family="28" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_35"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphMapper" family="27" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_34"/>
++  <flows name="f0" source="//@nodes.0" destination="//@nodes.5" tupleType="DataManagementCfg::DataSourceVar_11.input[0]"/>
++  <flows name="f1" source="//@nodes.5" destination="//@nodes.4" grouping="3" tupleType="FamiliesCfg::FamilyVar_26.output[0]"/>
++  <flows name="f2" source="//@nodes.4" destination="//@nodes.4" grouping="3" tupleType="FamiliesCfg::FamilyVar_27.output[1]"/>
++  <flows name="f4" source="//@nodes.2" destination="//@nodes.4" grouping="3" tupleType="FamiliesCfg::FamilyVar_28.output[2]"/>
++  <flows name="f5" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_28.output[0]"/>
++  <flows name="f6" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_28.output[1]"/>
++  <flows name="f7" source="//@nodes.1" destination="//@nodes.2" tupleType="DataManagementCfg::DataSourceVar_9.input[0]"/>
++  <flows name="f8" source="//@nodes.1" destination="//@nodes.2" tupleType="DataManagementCfg::DataSourceVar_9.input[1]"/>
++  <flows name="f9" source="//@nodes.4" destination="//@nodes.2" grouping="3" tupleType="FamiliesCfg::FamilyVar_27.output[0]"/>
++  <flows name="f3" source="//@nodes.2" destination="//@nodes.4" grouping="4" tupleType="FamiliesCfg::FamilyVar_28.output[3]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline_diagram
+new file mode 100644
+index 0000000..596949c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline_diagram
+@@ -0,0 +1,139 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_be-akO43EeaopKNSMVJKHg" type="Pipeline" name="PipelineVar_18.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_mBMcIO43EeaopKNSMVJKHg" type="2001" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_mBMcIu43EeaopKNSMVJKHg" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_mBMcI-43EeaopKNSMVJKHg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_18.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mBMcIe43EeaopKNSMVJKHg" x="876" y="264"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_ro5EcO43EeaopKNSMVJKHg" type="2001" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ro5rgO43EeaopKNSMVJKHg" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ro5rge43EeaopKNSMVJKHg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_18.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ro5Ece43EeaopKNSMVJKHg" x="140" y="117"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_yU3NMO43EeaopKNSMVJKHg" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_yU3NMu43EeaopKNSMVJKHg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_yU3NM-43EeaopKNSMVJKHg" x="-20" y="-35"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_18.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yU3NMe43EeaopKNSMVJKHg" x="420" y="120"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_7lBxAO43EeaopKNSMVJKHg" type="2002" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_7lBxAu43EeaopKNSMVJKHg" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_7lBxA-43EeaopKNSMVJKHg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_18.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7lBxAe43EeaopKNSMVJKHg" x="420" y="264"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_-6AIwO43EeaopKNSMVJKHg" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_-6Av0O43EeaopKNSMVJKHg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_-6Av0e43EeaopKNSMVJKHg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_18.pipeline#//@nodes.4"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-6AIwe43EeaopKNSMVJKHg" x="660" y="122"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_E6BxgO44EeaopKNSMVJKHg" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_E6Bxgu44EeaopKNSMVJKHg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_E6CYkO44EeaopKNSMVJKHg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_18.pipeline#//@nodes.5"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E6Bxge44EeaopKNSMVJKHg" x="660" y="264"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_be-ake43EeaopKNSMVJKHg"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_18.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_QBq0UO44EeaopKNSMVJKHg" type="4001" source="_mBMcIO43EeaopKNSMVJKHg" target="_E6BxgO44EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_QBq0U-44EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_QBq0VO44EeaopKNSMVJKHg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_QBq0Ue44EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QBq0Uu44EeaopKNSMVJKHg" points="[0, 0, -461, 38]$[455, -8, -6, 30]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QBspgO44EeaopKNSMVJKHg" id="(0.8333333333333334,0.55)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_TlpRYO44EeaopKNSMVJKHg" type="4001" source="_E6BxgO44EeaopKNSMVJKHg" target="_-6AIwO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_TlpRY-44EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_TlpRZO44EeaopKNSMVJKHg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_TlpRYe44EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TlpRYu44EeaopKNSMVJKHg" points="[0, 0, -94, 234]$[85, -204, -9, 30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_Yx4FsO44EeaopKNSMVJKHg" type="4001" source="_-6AIwO43EeaopKNSMVJKHg" target="_-6AIwO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Yx4Fs-44EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Yx4FtO44EeaopKNSMVJKHg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_Yx4Fse44EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Yx4Fsu44EeaopKNSMVJKHg" points="[2, 8, 1, -19]$[103, 8, 102, -19]$[103, 27, 102, 0]$[2, 27, 1, 0]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Yx4swO44EeaopKNSMVJKHg" id="(0.9666666666666667,0.25)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ck_yAO44EeaopKNSMVJKHg" id="(0.9833333333333333,0.7)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_pPmcYO44EeaopKNSMVJKHg" type="4001" source="_yU3NMO43EeaopKNSMVJKHg" target="_-6AIwO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_pPmcY-44EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_pPmcZO44EeaopKNSMVJKHg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_pPmcYe44EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pPmcYu44EeaopKNSMVJKHg" points="[0, 0, -210, 8]$[84, -64, -126, -56]$[180, -22, -30, -14]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pPnqgO44EeaopKNSMVJKHg" id="(0.9666666666666667,0.4)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_v6cjwO44EeaopKNSMVJKHg" type="4001" source="_yU3NMO43EeaopKNSMVJKHg" target="_7lBxAO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_v6cjw-44EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_v6cjxO44EeaopKNSMVJKHg" x="11" y="-15"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_v6cjwe44EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.4"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v6cjwu44EeaopKNSMVJKHg" points="[3, 7, 4, -91]$[29, 55, 30, -43]$[3, 91, 4, -7]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v6dK0O44EeaopKNSMVJKHg" id="(0.5166666666666667,0.8833333333333333)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v6dK0e44EeaopKNSMVJKHg" id="(0.5454545454545454,0.12727272727272726)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_0iFdQO44EeaopKNSMVJKHg" type="4001" source="_yU3NMO43EeaopKNSMVJKHg" target="_7lBxAO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_0iFdQ-44EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_0iFdRO44EeaopKNSMVJKHg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_0iFdQe44EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.5"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0iFdQu44EeaopKNSMVJKHg" points="[-4, 5, -5, -111]$[-26, 41, -27, -75]$[-9, 89, -10, -27]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0iGrYO44EeaopKNSMVJKHg" id="(0.43333333333333335,0.9166666666666666)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_6nq7cO44EeaopKNSMVJKHg" type="4001" source="_ro5EcO43EeaopKNSMVJKHg" target="_yU3NMO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_6nrigO44EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_6nrige44EeaopKNSMVJKHg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_6nq7ce44EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.6"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_6nq7cu44EeaopKNSMVJKHg" points="[18, -2, -229, 22]$[238, -23, -9, 1]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6nsJkO44EeaopKNSMVJKHg" id="(0.9666666666666667,0.6333333333333333)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6nsJke44EeaopKNSMVJKHg" id="(0.15,0.55)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_-NE74O44EeaopKNSMVJKHg" type="4001" source="_ro5EcO43EeaopKNSMVJKHg" target="_yU3NMO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_-NE74-44EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_-NE75O44EeaopKNSMVJKHg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_-NE74e44EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.7"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-NE74u44EeaopKNSMVJKHg" points="[60, -27, -250, -17]$[172, -76, -138, -66]$[280, -25, -30, -15]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-NFi8O44EeaopKNSMVJKHg" id="(0.0,0.7166666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_Cg1QEO45EeaopKNSMVJKHg" type="4001" source="_-6AIwO43EeaopKNSMVJKHg" target="_yU3NMO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Cg1QE-45EeaopKNSMVJKHg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Cg1QFO45EeaopKNSMVJKHg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_Cg1QEe45EeaopKNSMVJKHg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.8"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Cg1QEu45EeaopKNSMVJKHg" points="[-6, -2, 234, -28]$[-6, -76, 234, -102]$[-244, -76, -4, -102]$[-244, -4, -4, -30]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Cg2eMO45EeaopKNSMVJKHg" id="(0.5,0.03333333333333333)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_ZXqocO46EeavEu-7RgqM7A" type="4001" source="_yU3NMO43EeaopKNSMVJKHg" target="_-6AIwO43EeaopKNSMVJKHg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ZXrPgO46EeavEu-7RgqM7A" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZXr2kO46EeavEu-7RgqM7A" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_ZXqoce46EeavEu-7RgqM7A" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.9"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZXqocu46EeavEu-7RgqM7A" points="[60, -3, -210, 1]$[240, -3, -30, 1]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZXu54O46EeavEu-7RgqM7A" id="(0.0,0.6)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18Cfg.ivml
+new file mode 100644
+index 0000000..587dc0a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18Cfg.ivml
+@@ -0,0 +1,182 @@
++project PipelineVar_18Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_18Cfg;
++	Pipeline PipelineVar_18;
++	Source PipelineVar_18_Source0;
++	Flow PipelineVar_18_Flow0;
++	FamilyElement PipelineVar_18_FamilyElement0;
++	Flow PipelineVar_18_Flow1;
++	FamilyElement PipelineVar_18_FamilyElement1;
++	Flow PipelineVar_18_Flow2;
++	PipelineVar_18_Flow2 = Flow {
++		destination = refBy(PipelineVar_18_FamilyElement1), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_27.output[1]), 
++		name = "f2", 
++		constraints = {}
++	};
++	Flow PipelineVar_18_Flow3;
++	FamilyElement PipelineVar_18_FamilyElement2;
++	Flow PipelineVar_18_Flow4;
++	PipelineVar_18_Flow4 = Flow {
++		destination = refBy(PipelineVar_18_FamilyElement1), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[2]), 
++		name = "f4", 
++		constraints = {}
++	};
++	Flow PipelineVar_18_Flow5;
++	Sink PipelineVar_18_Sink0;
++	PipelineVar_18_Sink0 = Sink {
++		sink = refBy(DataSinkVar_5), 
++		parallelism = 1, 
++		name = "TimeTravelSink", 
++		constraints = {}
++	};
++	PipelineVar_18_Flow5 = Flow {
++		destination = refBy(PipelineVar_18_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[0]), 
++		name = "f5", 
++		constraints = {}
++	};
++	Flow PipelineVar_18_Flow6;
++	PipelineVar_18_Flow6 = Flow {
++		destination = refBy(PipelineVar_18_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[1]), 
++		name = "f6", 
++		constraints = {}
++	};
++	Flow PipelineVar_18_Flow7;
++	PipelineVar_18_Flow7 = Flow {
++		destination = refBy(PipelineVar_18_FamilyElement1), 
++		grouping = Grouping.allGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[3]), 
++		name = "f3", 
++		constraints = {}
++	};
++	PipelineVar_18_FamilyElement2 = FamilyElement {
++		family = refBy(FamilyVar_28), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_36), 
++		output = {
++			refBy(PipelineVar_18_Flow4), refBy(PipelineVar_18_Flow5), refBy(PipelineVar_18_Flow6), refBy(PipelineVar_18_Flow7)
++		}, 
++		parallelism = 1, 
++		name = "TimeGraphQueryExecutor", 
++		constraints = {}
++	};
++	PipelineVar_18_Flow3 = Flow {
++		destination = refBy(PipelineVar_18_FamilyElement2), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_27.output[0]), 
++		name = "f9", 
++		constraints = {}
++	};
++	PipelineVar_18_FamilyElement1 = FamilyElement {
++		family = refBy(FamilyVar_27), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_35), 
++		output = {
++			refBy(PipelineVar_18_Flow2), refBy(PipelineVar_18_Flow3)
++		}, 
++		parallelism = 1, 
++		name = "TimeGraphIndexer", 
++		constraints = {}
++	};
++	PipelineVar_18_Flow1 = Flow {
++		destination = refBy(PipelineVar_18_FamilyElement1), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_26.output[0]), 
++		name = "f1", 
++		constraints = {}
++	};
++	PipelineVar_18_FamilyElement0 = FamilyElement {
++		family = refBy(FamilyVar_26), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_34), 
++		output = {
++			refBy(PipelineVar_18_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "TimeGraphMapper", 
++		constraints = {}
++	};
++	PipelineVar_18_Flow0 = Flow {
++		destination = refBy(PipelineVar_18_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_11.input[0]), 
++		name = "f0", 
++		constraints = {}
++	};
++	PipelineVar_18_Source0 = Source {
++		output = {
++			refBy(PipelineVar_18_Flow0)
++		}, 
++		source = refBy(DataSourceVar_11), 
++		parallelism = 1, 
++		name = "GraphDataSource", 
++		constraints = {}
++	};
++	Source PipelineVar_18_Source1;
++	Flow PipelineVar_18_Flow8;
++	PipelineVar_18_Flow8 = Flow {
++		destination = refBy(PipelineVar_18_FamilyElement2), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_9.input[0]), 
++		name = "f7", 
++		constraints = {}
++	};
++	Flow PipelineVar_18_Flow9;
++	PipelineVar_18_Flow9 = Flow {
++		destination = refBy(PipelineVar_18_FamilyElement2), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_9.input[1]), 
++		name = "f8", 
++		constraints = {}
++	};
++	PipelineVar_18_Source1 = Source {
++		output = {
++			refBy(PipelineVar_18_Flow8), refBy(PipelineVar_18_Flow9)
++		}, 
++		source = refBy(DataSourceVar_9), 
++		permissibleParameters = {
++			refBy(DataManagementCfg::DataSourceVar_9.parameters[1]), refBy(DataManagementCfg::DataSourceVar_9.parameters[0])
++		}, 
++		parallelism = 1, 
++		name = "queries", 
++		constraints = {}
++	};
++	PipelineVar_18 = Pipeline {
++		name = "TimeTravelSimPip", 
++		sources = {
++			refBy(PipelineVar_18_Source0), refBy(PipelineVar_18_Source1)
++		}, 
++		numworkers = 18, 
++		artifact = "eu.qualimaster:TimeTravelSimPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_18;
++		PipelineVar_18_Source0;
++		PipelineVar_18_Flow0;
++		PipelineVar_18_FamilyElement0;
++		PipelineVar_18_Flow1;
++		PipelineVar_18_FamilyElement1;
++		PipelineVar_18_Flow2;
++		PipelineVar_18_Flow3;
++		PipelineVar_18_FamilyElement2;
++		PipelineVar_18_Flow4;
++		PipelineVar_18_Flow5;
++		PipelineVar_18_Sink0;
++		PipelineVar_18_Flow6;
++		PipelineVar_18_Flow7;
++		PipelineVar_18_Source1;
++		PipelineVar_18_Flow8;
++		PipelineVar_18_Flow9;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1Cfg.ivml
+new file mode 100644
+index 0000000..d1bac7f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1Cfg.ivml
+@@ -0,0 +1,66 @@
++project PipelineVar_1Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_1Cfg;
++	Pipeline PipelineVar_1;
++	Source PipelineVar_1_Source0;
++	Flow PipelineVar_1_Flow0;
++	FamilyElement PipelineVar_1_FamilyElement0;
++	Flow PipelineVar_1_Flow1;
++	Sink PipelineVar_1_Sink0;
++	PipelineVar_1_Sink0 = Sink {
++		sink = refBy(randomSink), 
++		parallelism = 1, 
++		name = "snk"
++	};
++	PipelineVar_1_Flow1 = Flow {
++		destination = refBy(PipelineVar_1_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::randomFamily.output[0]), 
++		name = "f2"
++	};
++	PipelineVar_1_FamilyElement0 = FamilyElement {
++		family = refBy(randomFamily), 
++		output = {
++			refBy(PipelineVar_1_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "processor"
++	};
++	PipelineVar_1_Flow0 = Flow {
++		destination = refBy(PipelineVar_1_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::randomSource.input[0]), 
++		name = "f1"
++	};
++	PipelineVar_1_Source0 = Source {
++		output = {
++			refBy(PipelineVar_1_Flow0)
++		}, 
++		source = refBy(randomSource), 
++		parallelism = 1, 
++		name = "src"
++	};
++	PipelineVar_1 = Pipeline {
++		name = "RandomPip", 
++		sources = {
++			refBy(PipelineVar_1_Source0)
++		}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster:RandomPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false,
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_1;
++		PipelineVar_1_Source0;
++		PipelineVar_1_Flow0;
++		PipelineVar_1_FamilyElement0;
++		PipelineVar_1_Flow1;
++		PipelineVar_1_Sink0;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline
+new file mode 100644
+index 0000000..ee634bc
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="SwitchPip" artifact="eu.qualimaster.test:SwitchPip:0.0.2-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="src" source="2"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="processor" family="6"/>
++  <nodes xsi:type="pipeline:Sink" name="snk" sink="1"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::randomSource.input[0]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::randomFamily.output[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline_diagram
+new file mode 100644
+index 0000000..7bca4ce
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline_diagram
+@@ -0,0 +1,43 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_DJ1_IBApEeWdifDyhD-nxA" type="Pipeline" name="PipelineVar_2.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_TWtm8BsMEeWh4KdJp1z-Qw" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_TWtm8hsMEeWh4KdJp1z-Qw" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_TWtm8xsMEeWh4KdJp1z-Qw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_2.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TWtm8RsMEeWh4KdJp1z-Qw" x="117" y="320"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_hW0rsBsMEeWh4KdJp1z-Qw" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_hW0rshsMEeWh4KdJp1z-Qw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_hW0rsxsMEeWh4KdJp1z-Qw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_2.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hW0rsRsMEeWh4KdJp1z-Qw" x="264" y="312"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_m7UPABsMEeWh4KdJp1z-Qw" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_m7UPAhsMEeWh4KdJp1z-Qw" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_m7UPAxsMEeWh4KdJp1z-Qw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_2.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_m7UPARsMEeWh4KdJp1z-Qw" x="432" y="378"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_DJ1_IRApEeWdifDyhD-nxA"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_2.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_ljYLsBsMEeWh4KdJp1z-Qw" type="4001" source="_TWtm8BsMEeWh4KdJp1z-Qw" target="_hW0rsBsMEeWh4KdJp1z-Qw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ljYLsxsMEeWh4KdJp1z-Qw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ljYLtBsMEeWh4KdJp1z-Qw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_ljYLsRsMEeWh4KdJp1z-Qw" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_2.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ljYLshsMEeWh4KdJp1z-Qw" points="[30, -4, -100, 0]$[117, -1, -13, 3]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ljYLtRsMEeWh4KdJp1z-Qw" id="(0.21666666666666667,0.5666666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_n7mAQBsMEeWh4KdJp1z-Qw" type="4001" source="_hW0rsBsMEeWh4KdJp1z-Qw" target="_m7UPABsMEeWh4KdJp1z-Qw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_n7mAQxsMEeWh4KdJp1z-Qw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_n7mARBsMEeWh4KdJp1z-Qw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_n7mAQRsMEeWh4KdJp1z-Qw" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_2.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n7mAQhsMEeWh4KdJp1z-Qw" points="[30, -5, -123, -2]$[153, -30, 0, -27]"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2Cfg.ivml
+new file mode 100644
+index 0000000..01e1084
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2Cfg.ivml
+@@ -0,0 +1,71 @@
++project PipelineVar_2Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_2Cfg;
++	Pipeline PipelineVar_2;
++	Source PipelineVar_2_Source0;
++	Flow PipelineVar_2_Flow0;
++	FamilyElement PipelineVar_2_FamilyElement0;
++	Flow PipelineVar_2_Flow1;
++	Sink PipelineVar_2_Sink0;
++	PipelineVar_2_Sink0 = Sink {
++		sink = refBy(randomSink), 
++		parallelism = 1, 
++		name = "snk", 
++		constraints = {}
++	};
++	PipelineVar_2_Flow1 = Flow {
++		destination = refBy(PipelineVar_2_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::switchFamily.output[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_2_FamilyElement0 = FamilyElement {
++		family = refBy(switchFamily), 
++		output = {
++			refBy(PipelineVar_2_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "processor", 
++		constraints = {}
++	};
++	PipelineVar_2_Flow0 = Flow {
++		destination = refBy(PipelineVar_2_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::randomSource.input[0]), 
++		name = "f1", 
++		constraints = {}
++	};
++	PipelineVar_2_Source0 = Source {
++		output = {
++			refBy(PipelineVar_2_Flow0)
++		}, 
++		source = refBy(randomSource), 
++		parallelism = 1, 
++		name = "src", 
++		constraints = {}
++	};
++	PipelineVar_2 = Pipeline {
++		name = "SwitchPip", 
++		sources = {
++			refBy(PipelineVar_2_Source0)
++		}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster.test:SwitchPip:0.0.2-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_2;
++		PipelineVar_2_Source0;
++		PipelineVar_2_Flow0;
++		PipelineVar_2_FamilyElement0;
++		PipelineVar_2_Flow1;
++		PipelineVar_2_Sink0;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline
+new file mode 100644
+index 0000000..85e36d5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline
+@@ -0,0 +1,10 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="testDMPip" numworkers="3" artifact="eu.qualimaster:testDMPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="src" source="2"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="fm1" family="6"/>
++  <nodes xsi:type="pipeline:Sink" name="sink" sink="1"/>
++  <nodes xsi:type="pipeline:DataManagementElement" name="dm" dataManagement="0"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.3"/>
++  <flows name="f3" source="//@nodes.3" destination="//@nodes.2"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline_diagram
+new file mode 100644
+index 0000000..13e3669
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline_diagram
+@@ -0,0 +1,57 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_mDWUYAIiEeW5Iq-O8qo3ZA" type="Pipeline" name="PipelineVar_3.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_nBjpEAIiEeW5Iq-O8qo3ZA" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_nBjpEgIiEeW5Iq-O8qo3ZA" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_nBjpEwIiEeW5Iq-O8qo3ZA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_3.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nBjpEQIiEeW5Iq-O8qo3ZA" x="156" y="336"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_tCnzoAIiEeW5Iq-O8qo3ZA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_tCnzogIiEeW5Iq-O8qo3ZA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_tCnzowIiEeW5Iq-O8qo3ZA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_3.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tCnzoQIiEeW5Iq-O8qo3ZA" x="300" y="336"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_wxYkYAIiEeW5Iq-O8qo3ZA" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_wxYkYgIiEeW5Iq-O8qo3ZA" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_wxYkYwIiEeW5Iq-O8qo3ZA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_3.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wxYkYQIiEeW5Iq-O8qo3ZA" x="588" y="336"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_jv09YBAqEeWdifDyhD-nxA" type="2006" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_jv09YhAqEeWdifDyhD-nxA" type="5006">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_jv09YxAqEeWdifDyhD-nxA" x="24" y="80"/>
++    </children>
++    <element xmi:type="pipeline:DataManagementElement" href="PipelineVar_3.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jv09YRAqEeWdifDyhD-nxA" x="444" y="336"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_mDWUYQIiEeW5Iq-O8qo3ZA"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_3.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_vi_eoAIiEeW5Iq-O8qo3ZA" type="4001" source="_nBjpEAIiEeW5Iq-O8qo3ZA" target="_tCnzoAIiEeW5Iq-O8qo3ZA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_vi_eowIiEeW5Iq-O8qo3ZA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_vi_epAIiEeW5Iq-O8qo3ZA" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_vi_eoQIiEeW5Iq-O8qo3ZA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_3.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vi_eogIiEeW5Iq-O8qo3ZA" points="[30, 2, -146, -14]$[146, 15, -30, -1]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_yl4A0AIiEeW5Iq-O8qo3ZA" type="4001" source="_tCnzoAIiEeW5Iq-O8qo3ZA" target="_jv09YBAqEeWdifDyhD-nxA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_yl-HcgIiEeW5Iq-O8qo3ZA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_yl-HcwIiEeW5Iq-O8qo3ZA" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_yl-HcAIiEeW5Iq-O8qo3ZA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_3.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yl-HcQIiEeW5Iq-O8qo3ZA" points="[30, 5, -184, -25]$[210, 58, -4, 28]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_X9QNkBAyEeWdifDyhD-nxA" type="4001" source="_jv09YBAqEeWdifDyhD-nxA" target="_wxYkYAIiEeW5Iq-O8qo3ZA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_X9QNkxAyEeWdifDyhD-nxA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_X9QNlBAyEeWdifDyhD-nxA" x="-7" y="28"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_X9QNkRAyEeWdifDyhD-nxA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_3.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_X9QNkhAyEeWdifDyhD-nxA" points="[30, 4, -123, 7]$[146, 25, -7, 28]"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3Cfg.ivml
+new file mode 100644
+index 0000000..2971f5a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3Cfg.ivml
+@@ -0,0 +1,34 @@
++project PipelineVar_3Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_3Cfg;
++	Pipeline PipelineVar_3;
++	Source PipelineVar_3_Source0;
++	Flow PipelineVar_3_Flow0;
++	FamilyElement PipelineVar_3_FamilyElement0;
++	Flow PipelineVar_3_Flow1;
++	DataManagementElement PipelineVar_3_DataManagementElement0;
++	Flow PipelineVar_3_Flow2;
++	Sink PipelineVar_3_Sink0;
++	PipelineVar_3_Sink0 = {sink = refBy(randomSink), parallelism = 1, name = "sink"};
++	PipelineVar_3_Flow2 = {destination = refBy(PipelineVar_3_Sink0), grouping = Grouping.shuffleGrouping, name = "f3"};
++	PipelineVar_3_DataManagementElement0 = {dataManagement = refBy(hBaseDataManagement), output = {refBy(PipelineVar_3_Flow2)}, parallelism = 1, name = "dm"};
++	PipelineVar_3_Flow1 = {destination = refBy(PipelineVar_3_DataManagementElement0), grouping = Grouping.shuffleGrouping, name = "f2"};
++	PipelineVar_3_FamilyElement0 = {family = refBy(switchFamily), output = {refBy(PipelineVar_3_Flow1)}, parallelism = 1, name = "fm1"};
++	PipelineVar_3_Flow0 = {destination = refBy(PipelineVar_3_FamilyElement0), grouping = Grouping.shuffleGrouping, name = "f1"};
++	PipelineVar_3_Source0 = {output = {refBy(PipelineVar_3_Flow0)}, source = refBy(randomSource), parallelism = 1, name = "src"};
++	PipelineVar_3 = {name = "testDMPip", sources = {refBy(PipelineVar_3_Source0)}, numworkers = 3, artifact = "eu.qualimaster:testDMPip:0.0.1-SNAPSHOT", debug = false, fastSerialization = false};
++	freeze {
++		PipelineVar_3;
++		PipelineVar_3_Source0;
++		PipelineVar_3_Flow0;
++		PipelineVar_3_FamilyElement0;
++		PipelineVar_3_Flow1;
++		PipelineVar_3_DataManagementElement0;
++		PipelineVar_3_Flow2;
++		PipelineVar_3_Sink0;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline
+new file mode 100644
+index 0000000..620bdf6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline
+@@ -0,0 +1,4 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="RandomProcessor" artifact="eu.qualimaster:RandomProcessor:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:FamilyElement" name="processor" family="5"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline_diagram
+new file mode 100644
+index 0000000..d52fd0b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline_diagram
+@@ -0,0 +1,12 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_0RY4cHf3EeWnJpW8dl25Nw" type="Pipeline" name="PipelineVar_4.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_5GAeAHf3EeWnJpW8dl25Nw" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_5GAeAnf3EeWnJpW8dl25Nw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_5GAeA3f3EeWnJpW8dl25Nw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_4.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5GAeAXf3EeWnJpW8dl25Nw" x="314" y="342"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_0RY4cXf3EeWnJpW8dl25Nw"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_4.pipeline#/"/>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4Cfg.ivml
+new file mode 100644
+index 0000000..c350041
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4Cfg.ivml
+@@ -0,0 +1,59 @@
++project PipelineVar_4Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_4Cfg;
++	SubPipeline PipelineVar_4;
++	PipelineVar_4 = {name = "RandomProcessor", sources = {}, connectors = {refBy(PipelineVar_4_FamilyElement0)}, subPipelineFamily = refBy(randomFamily),numworkers = 1, artifact = "eu.qualimaster.test:RandomProcessor:0.0.1-SNAPSHOT", debug = false, fastSerialization = false, constraints = {}};
++	FamilyElement PipelineVar_4_FamilyElement0;
++	PipelineVar_4_FamilyElement0 = {family = refBy(randomFamily), output = {}, parallelism = 1, name = "processor", constraints = {}};
++	
++	SubPipelineAlgorithm randomProcessor = SubPipelineAlgorithm {
++		name = "RandomProcessor", 
++		artifact = "eu.qualimaster.test:RandomProcessor:0.0.1-SNAPSHOT", 
++		//class = "eu.qualimaster.RandomProcessor.topology.SubTopology", 
++		input = {
++			Tuple {
++				name = "randomData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "proccessedData", 
++				fields = {
++					Field {
++						name = "randomInteger", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 0, 
++				name = "delay"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "flag"
++			}
++		}, 
++		subPipeline = refBy(PipelineVar_4),
++		//algTopologyClass = "RandomProcessor", 
++		successor = null, 
++		inputGivenCheck = false, 
++		outputGivenCheck = false
++	};
++	freeze {
++		PipelineVar_4;
++		PipelineVar_4_FamilyElement0;
++		randomProcessor;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline
+new file mode 100644
+index 0000000..bc73e07
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline
+@@ -0,0 +1,10 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="SimpleEDPipeline" artifact="eu.qualimaster:SimpleEDPipeline:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="source1" source="1"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="stockParser" family="20"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="ed" family="10"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="recom" family="19"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2"/>
++  <flows name="f3" source="//@nodes.2" destination="//@nodes.3"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline_diagram
+new file mode 100644
+index 0000000..64dc19c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline_diagram
+@@ -0,0 +1,57 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_XyV6ML6eEeWt0ezuaR-rMA" type="Pipeline" name="PipelineVar_5.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_iB43YL6eEeWt0ezuaR-rMA" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_iB6skL6eEeWt0ezuaR-rMA" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_iB7ToL6eEeWt0ezuaR-rMA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_5.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iB43Yb6eEeWt0ezuaR-rMA" x="60" y="315"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_ku53QL6eEeWt0ezuaR-rMA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ku6eUL6eEeWt0ezuaR-rMA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ku6eUb6eEeWt0ezuaR-rMA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_5.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ku53Qb6eEeWt0ezuaR-rMA" x="210" y="315"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_nNn8cL6eEeWt0ezuaR-rMA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_nNojgL6eEeWt0ezuaR-rMA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_nNpKkL6eEeWt0ezuaR-rMA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_5.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nNn8cb6eEeWt0ezuaR-rMA" x="330" y="315"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_pP1r0L6eEeWt0ezuaR-rMA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_pP2S4L6eEeWt0ezuaR-rMA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_pP2S4b6eEeWt0ezuaR-rMA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_5.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pP1r0b6eEeWt0ezuaR-rMA" x="450" y="315"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_XyV6Mb6eEeWt0ezuaR-rMA"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_5.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_rqo6UL6eEeWt0ezuaR-rMA" type="4001" source="_iB43YL6eEeWt0ezuaR-rMA" target="_ku53QL6eEeWt0ezuaR-rMA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_rqphYL6eEeWt0ezuaR-rMA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_rqphYb6eEeWt0ezuaR-rMA" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_rqo6Ub6eEeWt0ezuaR-rMA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_5.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rqo6Ur6eEeWt0ezuaR-rMA" points="[30, 1, -120, 1]$[142, 30, -8, 30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_scOvUL6eEeWt0ezuaR-rMA" type="4001" source="_ku53QL6eEeWt0ezuaR-rMA" target="_nNn8cL6eEeWt0ezuaR-rMA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_scPWYL6eEeWt0ezuaR-rMA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_scPWYb6eEeWt0ezuaR-rMA" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_scOvUb6eEeWt0ezuaR-rMA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_5.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_scOvUr6eEeWt0ezuaR-rMA" points="[30, -6, -90, -6]$[112, -30, -8, -30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_tiVbwL6eEeWt0ezuaR-rMA" type="4001" source="_nNn8cL6eEeWt0ezuaR-rMA" target="_pP1r0L6eEeWt0ezuaR-rMA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_tiVbw76eEeWt0ezuaR-rMA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_tiWC0L6eEeWt0ezuaR-rMA" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_tiVbwb6eEeWt0ezuaR-rMA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_5.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tiVbwr6eEeWt0ezuaR-rMA" points="[30, -8, -90, -8]$[119, -30, -1, -30]"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5Cfg.ivml
+new file mode 100644
+index 0000000..ed6e602
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5Cfg.ivml
+@@ -0,0 +1,34 @@
++project PipelineVar_5Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_5Cfg;
++	Pipeline PipelineVar_5;
++	Source PipelineVar_5_Source0;
++	Flow PipelineVar_5_Flow0;
++	FamilyElement PipelineVar_5_FamilyElement0;
++	Flow PipelineVar_5_Flow1;
++	FamilyElement PipelineVar_5_FamilyElement1;
++	Flow PipelineVar_5_Flow2;
++	FamilyElement PipelineVar_5_FamilyElement2;
++	PipelineVar_5_FamilyElement2 = {family = refBy(FamilyVar_20), output = {}, parallelism = 1, name = "recom", constraints = {}};
++	PipelineVar_5_Flow2 = {destination = refBy(PipelineVar_5_FamilyElement2), grouping = Grouping.shuffleGrouping, name = "f3", constraints = {}};
++	PipelineVar_5_FamilyElement1 = {family = refBy(fTwitterEventDetection), output = {refBy(PipelineVar_5_Flow2)}, parallelism = 1, name = "ed", constraints = {}};
++	PipelineVar_5_Flow1 = {destination = refBy(PipelineVar_5_FamilyElement1), grouping = Grouping.shuffleGrouping, name = "f2", constraints = {}};
++	PipelineVar_5_FamilyElement0 = {family = refBy(FamilyVar_21), output = {refBy(PipelineVar_5_Flow1)}, parallelism = 1, name = "stockParser", constraints = {}};
++	PipelineVar_5_Flow0 = {destination = refBy(PipelineVar_5_FamilyElement0), grouping = Grouping.shuffleGrouping, name = "f1", constraints = {}};
++	PipelineVar_5_Source0 = {output = {refBy(PipelineVar_5_Flow0)}, source = refBy(twitter), parallelism = 1, name = "source1", constraints = {}};
++	PipelineVar_5 = {name = "SimpleEDPipeline", sources = {refBy(PipelineVar_5_Source0)}, numworkers = 1, artifact = "eu.qualimaster:SimpleEDPipeline:0.0.1-SNAPSHOT", debug = false, fastSerialization = false, constraints = {}};
++	freeze {
++		PipelineVar_5;
++		PipelineVar_5_Source0;
++		PipelineVar_5_Flow0;
++		PipelineVar_5_FamilyElement0;
++		PipelineVar_5_Flow1;
++		PipelineVar_5_FamilyElement1;
++		PipelineVar_5_Flow2;
++		PipelineVar_5_FamilyElement2;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline
+new file mode 100644
+index 0000000..7e9a46b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline
+@@ -0,0 +1,10 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="CorrelationClusteringPip" artifact="eu.qualimaster:CorrelationClusteringPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="MutualInform" family="23"/>
++  <nodes xsi:type="pipeline:Sink" name="MIsink" sink="4"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="Preproc" family="0"/>
++  <flows name="f3" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::FamilyVar_24.output[0]"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.3" tupleType="DataManagementCfg::spring.input[1]"/>
++  <flows name="f2" source="//@nodes.3" destination="//@nodes.1" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline_diagram
+new file mode 100644
+index 0000000..27d0e49
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline_diagram
+@@ -0,0 +1,61 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_pq7j8L9wEeWEl-7tYwy4NQ" type="Pipeline" name="PipelineVar_6.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_QNBvwL98EeWXtt_eKSIfyw" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_QNH2YL98EeWXtt_eKSIfyw" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_QNH2Yb98EeWXtt_eKSIfyw" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_6.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QNBvwb98EeWXtt_eKSIfyw" y="204"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_Woon4M_8EeW51LJshkTnLA" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_WorrMM_8EeW51LJshkTnLA" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_WorrMc_8EeW51LJshkTnLA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_6.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Woon4c_8EeW51LJshkTnLA" x="264" y="204"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_hPg6MNCwEeWgXpgiO_fhBA" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_hPiIUNCwEeWgXpgiO_fhBA" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_hPiIUdCwEeWgXpgiO_fhBA" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_6.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hPg6MdCwEeWgXpgiO_fhBA" x="432" y="288"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_qDv_kNcJEeWCRoh1QSFUeg" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_qDxNsNcJEeWCRoh1QSFUeg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_qDxNsdcJEeWCRoh1QSFUeg" x="17" y="-44"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_6.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qDv_kdcJEeWCRoh1QSFUeg" x="144" y="108"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_pq7j8b9wEeWEl-7tYwy4NQ"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_6.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_nropENCwEeWgXpgiO_fhBA" type="4001" source="_Woon4M_8EeW51LJshkTnLA" target="_hPg6MNCwEeWgXpgiO_fhBA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_nrpQINCwEeWgXpgiO_fhBA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_nrp3MNCwEeWgXpgiO_fhBA" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_nropEdCwEeWgXpgiO_fhBA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_6.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nropEtCwEeWgXpgiO_fhBA" points="[0, 0, -140, -25]$[113, 25, -27, 0]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nruvsNCwEeWgXpgiO_fhBA" id="(1.0,0.6)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_swGRENcJEeWCRoh1QSFUeg" type="4001" source="_QNBvwL98EeWXtt_eKSIfyw" target="_qDv_kNcJEeWCRoh1QSFUeg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_swG4INcJEeWCRoh1QSFUeg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_swG4IdcJEeWCRoh1QSFUeg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_swGREdcJEeWCRoh1QSFUeg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_6.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_swGREtcJEeWCRoh1QSFUeg" points="[0, 0, -45, 146]$[36, -148, -9, -2]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_swLJkNcJEeWCRoh1QSFUeg" id="(1.0,0.6833333333333333)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_swLJkdcJEeWCRoh1QSFUeg" id="(0.16666666666666666,0.4666666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_uBavANcJEeWCRoh1QSFUeg" type="4001" source="_qDv_kNcJEeWCRoh1QSFUeg" target="_Woon4M_8EeW51LJshkTnLA">
++    <children xmi:type="notation:DecorationNode" xmi:id="_uBbWENcJEeWCRoh1QSFUeg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_uBbWEdcJEeWCRoh1QSFUeg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_uBavAdcJEeWCRoh1QSFUeg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_6.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uBavAtcJEeWCRoh1QSFUeg" points="[0, 0, -69, -102]$[64, 72, -5, -30]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uBdLQNcJEeWCRoh1QSFUeg" id="(0.75,1.0)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6Cfg.ivml
+new file mode 100644
+index 0000000..26367ad
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6Cfg.ivml
+@@ -0,0 +1,84 @@
++project PipelineVar_6Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_6Cfg;
++	Pipeline PipelineVar_6;
++	Source PipelineVar_6_Source0;
++	Flow PipelineVar_6_Flow0;
++	FamilyElement PipelineVar_6_FamilyElement0;
++	Flow PipelineVar_6_Flow1;
++	FamilyElement PipelineVar_6_FamilyElement1;
++	Flow PipelineVar_6_Flow2;
++	Sink PipelineVar_6_Sink0;
++	PipelineVar_6_Sink0 = Sink {
++		sink = refBy(DataSinkVar_4), 
++		parallelism = 1, 
++		name = "MIsink"
++	};
++	PipelineVar_6_Flow2 = Flow {
++		destination = refBy(PipelineVar_6_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_24.output[0]), 
++		name = "f3"
++	};
++	PipelineVar_6_FamilyElement1 = FamilyElement {
++		family = refBy(FamilyVar_24), 
++		output = {
++			refBy(PipelineVar_6_Flow2)
++		}, 
++		parallelism = 1, 
++		name = "MutualInform"
++	};
++	PipelineVar_6_Flow1 = Flow {
++		destination = refBy(PipelineVar_6_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f2"
++	};
++	PipelineVar_6_FamilyElement0 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		output = {
++			refBy(PipelineVar_6_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "Preproc"
++	};
++	PipelineVar_6_Flow0 = Flow {
++		destination = refBy(PipelineVar_6_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[1]), 
++		name = "f1"
++	};
++	PipelineVar_6_Source0 = Source {
++		output = {
++			refBy(PipelineVar_6_Flow0)
++		}, 
++		source = refBy(spring), 
++		parallelism = 1, 
++		name = "FinancialDataSource"
++	};
++	PipelineVar_6 = Pipeline {
++		name = "CorrelationClusteringPip", 
++		sources = {
++			refBy(PipelineVar_6_Source0)
++		}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster:CorrelationClusteringPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_6;
++		PipelineVar_6_Source0;
++		PipelineVar_6_Flow0;
++		PipelineVar_6_FamilyElement0;
++		PipelineVar_6_Flow1;
++		PipelineVar_6_FamilyElement1;
++		PipelineVar_6_Flow2;
++		PipelineVar_6_Sink0;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline
+new file mode 100644
+index 0000000..db439d6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline
+@@ -0,0 +1,33 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="FocusPip" numworkers="13" artifact="eu.qualimaster:FocusPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="TwitterDataSource" source="1"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="SpamDetection" family="13"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="Spam Removal" family="14"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="StockParser" family="20"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="EventDetection" family="10"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="KeywordAnalyzer" family="16"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="Recommendations" family="18"/>
++  <nodes xsi:type="pipeline:Source" name="SpringDataSource" source="5">
++    <permissibleParameters>DataManagementCfg::DataSourceVar_6.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="preprocessor" family="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="correlation" family="1">
++    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="DynamicGraphCompilation" family="21">
++    <permissibleParameters>FamiliesCfg::FamilyVar_22.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:Sink" name="FocusSink" sink="3"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::twitter.input[1]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::FamilyVar_14.output[0]"/>
++  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_14.output[0]"/>
++  <flows name="f4" source="//@nodes.3" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_21.output[0]"/>
++  <flows name="f5" source="//@nodes.4" destination="//@nodes.5" tupleType="FamiliesCfg::fTwitterEventDetection.output[0]"/>
++  <flows name="f6" source="//@nodes.5" destination="//@nodes.6" tupleType="FamiliesCfg::FamilyVar_17.output[0]"/>
++  <flows name="f7" source="//@nodes.7" destination="//@nodes.8" tupleType="DataManagementCfg::DataSourceVar_6.input[1]"/>
++  <flows name="f8" source="//@nodes.8" destination="//@nodes.9" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++  <flows name="f9" source="//@nodes.9" destination="//@nodes.10" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
++  <flows name="f10" source="//@nodes.10" destination="//@nodes.11" tupleType="FamiliesCfg::FamilyVar_22.output[0]"/>
++  <flows name="f11" source="//@nodes.6" destination="//@nodes.11" tupleType="FamiliesCfg::FamilyVar_19.output[0]"/>
++  <flows name="f12" source="//@nodes.7" destination="//@nodes.9" tupleType="DataManagementCfg::DataSourceVar_6.input[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline_diagram
+new file mode 100644
+index 0000000..90a9f59
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline_diagram
+@@ -0,0 +1,193 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_zagAkL9wEeWEl-7tYwy4NQ" type="Pipeline" name="PipelineVar_7.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_M3R8kMtcEeWGdqL98b7yTg" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_M3SjoMtcEeWGdqL98b7yTg" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_M3TKsMtcEeWGdqL98b7yTg" x="-42" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_7.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M3R8kctcEeWGdqL98b7yTg" x="30" y="375"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_ViupwMtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_VivQ0MtcEeWGdqL98b7yTg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_VivQ0ctcEeWGdqL98b7yTg" x="-20" y="-40"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ViupwctcEeWGdqL98b7yTg" x="165" y="375"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_h0puYMtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_h0qVcMtcEeWGdqL98b7yTg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_h0qVcctcEeWGdqL98b7yTg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_h0puYctcEeWGdqL98b7yTg" x="285" y="375"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_nnOJ8MtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_nnPYEMtcEeWGdqL98b7yTg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_nnPYEctcEeWGdqL98b7yTg" x="4" y="-40"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nnOJ8ctcEeWGdqL98b7yTg" x="405" y="375"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_0L-D8MtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_0L-rAMtcEeWGdqL98b7yTg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_0L_SEMtcEeWGdqL98b7yTg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.4"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0L-D8ctcEeWGdqL98b7yTg" x="510" y="375"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_5tXP8MtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_5tX3AMtcEeWGdqL98b7yTg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_5tX3ActcEeWGdqL98b7yTg" x="-20" y="-40"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.5"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5tXP8ctcEeWGdqL98b7yTg" x="615" y="375"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_FqjasMtdEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_FqjasstdEeWGdqL98b7yTg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Fqjas8tdEeWGdqL98b7yTg" x="80" y="15"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.6"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FqjasctdEeWGdqL98b7yTg" x="720" y="375"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_QbX5YM_FEeW8-5XBVQ8Cgw" type="2001" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_QbX5Ys_FEeW8-5XBVQ8Cgw" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_QbX5Y8_FEeW8-5XBVQ8Cgw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_7.pipeline#//@nodes.7"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QbX5Yc_FEeW8-5XBVQ8Cgw" x="88" y="145"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_Vt1RgM_FEeW8-5XBVQ8Cgw" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Vt14kM_FEeW8-5XBVQ8Cgw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Vt14kc_FEeW8-5XBVQ8Cgw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.8"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Vt1Rgc_FEeW8-5XBVQ8Cgw" x="288" y="144"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_bqbLwM_FEeW8-5XBVQ8Cgw" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_bqbLws_FEeW8-5XBVQ8Cgw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_bqbLw8_FEeW8-5XBVQ8Cgw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.9"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bqbLwc_FEeW8-5XBVQ8Cgw" x="528" y="144"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_g8XmgM_FEeW8-5XBVQ8Cgw" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_g8YNkM_FEeW8-5XBVQ8Cgw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_g8YNkc_FEeW8-5XBVQ8Cgw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.10"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_g8Xmgc_FEeW8-5XBVQ8Cgw" x="696" y="144"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_oUUEcM_FEeW8-5XBVQ8Cgw" type="2002" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_oUUEcs_FEeW8-5XBVQ8Cgw" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_oUUEc8_FEeW8-5XBVQ8Cgw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_7.pipeline#//@nodes.11"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oUUEcc_FEeW8-5XBVQ8Cgw" x="948" y="258"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_zagAkb9wEeWEl-7tYwy4NQ"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_7.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_9yVhQMtcEeWGdqL98b7yTg" type="4001" source="_M3R8kMtcEeWGdqL98b7yTg" target="_ViupwMtcEeWGdqL98b7yTg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_9yWIUMtcEeWGdqL98b7yTg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_9yWIUctcEeWGdqL98b7yTg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_9yVhQctcEeWGdqL98b7yTg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9yVhQstcEeWGdqL98b7yTg" points="[30, -3, -105, -3]$[127, -30, -8, -30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_-gyisMtcEeWGdqL98b7yTg" type="4001" source="_ViupwMtcEeWGdqL98b7yTg" target="_h0puYMtcEeWGdqL98b7yTg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_-gyis8tcEeWGdqL98b7yTg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_-gyitMtcEeWGdqL98b7yTg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_-gyisctcEeWGdqL98b7yTg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-gyisstcEeWGdqL98b7yTg" points="[30, -3, -90, -3]$[120, -30, 0, -30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="__K-IIMtcEeWGdqL98b7yTg" type="4001" source="_h0puYMtcEeWGdqL98b7yTg" target="_nnOJ8MtcEeWGdqL98b7yTg">
++    <children xmi:type="notation:DecorationNode" xmi:id="__K-vMMtcEeWGdqL98b7yTg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="__K-vMctcEeWGdqL98b7yTg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="__K-IIctcEeWGdqL98b7yTg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__K-IIstcEeWGdqL98b7yTg" points="[30, -3, -90, -3]$[112, -30, -8, -30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="__0tosMtcEeWGdqL98b7yTg" type="4001" source="_nnOJ8MtcEeWGdqL98b7yTg" target="_0L-D8MtcEeWGdqL98b7yTg">
++    <children xmi:type="notation:DecorationNode" xmi:id="__0tos8tcEeWGdqL98b7yTg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="__0totMtcEeWGdqL98b7yTg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="__0tosctcEeWGdqL98b7yTg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__0tosstcEeWGdqL98b7yTg" points="[30, -3, -75, -3]$[103, -30, -2, -30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_Ai8nsMtdEeWGdqL98b7yTg" type="4001" source="_0L-D8MtcEeWGdqL98b7yTg" target="_5tXP8MtcEeWGdqL98b7yTg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Ai9OwMtdEeWGdqL98b7yTg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ai9OwctdEeWGdqL98b7yTg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_Ai8nsctdEeWGdqL98b7yTg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.4"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Ai8nsstdEeWGdqL98b7yTg" points="[30, -4, -75, -4]$[112, -30, 7, -30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_HtPEIMtdEeWGdqL98b7yTg" type="4001" source="_5tXP8MtcEeWGdqL98b7yTg" target="_FqjasMtdEeWGdqL98b7yTg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_HtPEI8tdEeWGdqL98b7yTg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_HtPEJMtdEeWGdqL98b7yTg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_HtPEIctdEeWGdqL98b7yTg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.5"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HtPEIstdEeWGdqL98b7yTg" points="[30, -4, -75, -4]$[100, -30, -5, -30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_ZAofAM_FEeW8-5XBVQ8Cgw" type="4001" source="_QbX5YM_FEeW8-5XBVQ8Cgw" target="_Vt1RgM_FEeW8-5XBVQ8Cgw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ZApGEM_FEeW8-5XBVQ8Cgw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZApGEc_FEeW8-5XBVQ8Cgw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_ZAofAc_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.6"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZAofAs_FEeW8-5XBVQ8Cgw" points="[18, -2, -157, 10]$[164, -12, -11, 0]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZAriUM_FEeW8-5XBVQ8Cgw" id="(0.9833333333333333,0.5666666666666667)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZAriUc_FEeW8-5XBVQ8Cgw" id="(0.18333333333333332,0.5)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_eX9wEM_FEeW8-5XBVQ8Cgw" type="4001" source="_Vt1RgM_FEeW8-5XBVQ8Cgw" target="_bqbLwM_FEeW8-5XBVQ8Cgw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_eX9wE8_FEeW8-5XBVQ8Cgw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_eX9wFM_FEeW8-5XBVQ8Cgw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_eX9wEc_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.7"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eX9wEs_FEeW8-5XBVQ8Cgw" points="[0, 0, -209, -76]$[204, 46, -5, -30]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eX_lQM_FEeW8-5XBVQ8Cgw" id="(0.9166666666666666,0.5666666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_mgRT8M_FEeW8-5XBVQ8Cgw" type="4001" source="_bqbLwM_FEeW8-5XBVQ8Cgw" target="_g8XmgM_FEeW8-5XBVQ8Cgw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_mgR7AM_FEeW8-5XBVQ8Cgw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_mgR7Ac_FEeW8-5XBVQ8Cgw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_mgRT8c_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.8"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mgRT8s_FEeW8-5XBVQ8Cgw" points="[60, 0, -142, -10]$[172, -12, -30, -22]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mgVlYM_FEeW8-5XBVQ8Cgw" id="(0.8333333333333334,0.5)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_rIjtsM_FEeW8-5XBVQ8Cgw" type="4001" source="_g8XmgM_FEeW8-5XBVQ8Cgw" target="_oUUEcM_FEeW8-5XBVQ8Cgw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_rIkUwM_FEeW8-5XBVQ8Cgw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_rIkUwc_FEeW8-5XBVQ8Cgw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_rIjtsc_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.9"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rIjtss_FEeW8-5XBVQ8Cgw" points="[16, 12, -139, -113]$[145, 114, -10, -11]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rIn_IM_FEeW8-5XBVQ8Cgw" id="(0.9333333333333333,0.4666666666666667)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rIn_Ic_FEeW8-5XBVQ8Cgw" id="(0.23636363636363636,0.2)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_sNmqMM_FEeW8-5XBVQ8Cgw" type="4001" source="_FqjasMtdEeWGdqL98b7yTg" target="_oUUEcM_FEeW8-5XBVQ8Cgw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_sNnRQM_FEeW8-5XBVQ8Cgw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_sNnRQc_FEeW8-5XBVQ8Cgw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_sNmqMc_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.10"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sNmqMs_FEeW8-5XBVQ8Cgw" points="[0, 0, -129, 125]$[102, -121, -27, 4]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sNpGcM_FEeW8-5XBVQ8Cgw" id="(0.9666666666666667,0.45)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_Jm5oAM_dEeWO14jNxLAiNg" type="4001" source="_QbX5YM_FEeW8-5XBVQ8Cgw" target="_bqbLwM_FEeW8-5XBVQ8Cgw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Jm5oA8_dEeWO14jNxLAiNg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Jm5oBM_dEeWO14jNxLAiNg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_Jm5oAc_dEeWO14jNxLAiNg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.11"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Jm5oAs_dEeWO14jNxLAiNg" points="[0, 0, -424, -29]$[178, -85, -246, -114]$[394, 15, -30, -14]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jm8rUM_dEeWO14jNxLAiNg" id="(1.0,0.4666666666666667)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7Cfg.ivml
+new file mode 100644
+index 0000000..4c55503
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7Cfg.ivml
+@@ -0,0 +1,269 @@
++project PipelineVar_7Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_7Cfg;
++	Pipeline PipelineVar_7;
++	Source PipelineVar_7_Source0;
++	Flow PipelineVar_7_Flow0;
++	FamilyElement PipelineVar_7_FamilyElement0;
++	Flow PipelineVar_7_Flow1;
++	FamilyElement PipelineVar_7_FamilyElement1;
++	Flow PipelineVar_7_Flow2;
++	FamilyElement PipelineVar_7_FamilyElement2;
++	Flow PipelineVar_7_Flow3;
++	FamilyElement PipelineVar_7_FamilyElement3;
++	Flow PipelineVar_7_Flow4;
++	FamilyElement PipelineVar_7_FamilyElement4;
++	Flow PipelineVar_7_Flow5;
++	FamilyElement PipelineVar_7_FamilyElement5;
++	Flow PipelineVar_7_Flow6;
++	Sink PipelineVar_7_Sink0;
++	PipelineVar_7_Sink0 = Sink {
++		sink = refBy(DataSinkVar_3), 
++		parallelism = 1, 
++		name = "FocusSink", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow6 = Flow {
++		destination = refBy(PipelineVar_7_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_19.output[0]), 
++		name = "f11", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement5 = FamilyElement {
++		family = refBy(FamilyVar_19), 
++		output = {
++			refBy(PipelineVar_7_Flow6)
++		}, 
++		parallelism = 1, 
++		name = "Recommendations", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow5 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement5), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_17.output[0]), 
++		name = "f6", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement4 = FamilyElement {
++		family = refBy(FamilyVar_17), 
++		output = {
++			refBy(PipelineVar_7_Flow5)
++		}, 
++		parallelism = 1, 
++		name = "KeywordAnalyzer", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow4 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement4), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fTwitterEventDetection.output[0]), 
++		name = "f5", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement3 = FamilyElement {
++		family = refBy(fTwitterEventDetection), 
++		output = {
++			refBy(PipelineVar_7_Flow4)
++		}, 
++		parallelism = 1, 
++		name = "EventDetection", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow3 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement3), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_21.output[0]), 
++		name = "f4", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement2 = FamilyElement {
++		family = refBy(FamilyVar_21), 
++		output = {
++			refBy(PipelineVar_7_Flow3)
++		}, 
++		parallelism = 1, 
++		name = "StockParser", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow2 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement2), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_14.output[0]), 
++		name = "f3", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement1 = FamilyElement {
++		family = refBy(FamilyVar_15), 
++		output = {
++			refBy(PipelineVar_7_Flow2)
++		}, 
++		parallelism = 1, 
++		name = "Spam Removal", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow1 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_14.output[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement0 = FamilyElement {
++		family = refBy(FamilyVar_14), 
++		output = {
++			refBy(PipelineVar_7_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "SpamDetection", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow0 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::twitter.input[1]), 
++		name = "f1", 
++		constraints = {}
++	};
++	PipelineVar_7_Source0 = Source {
++		output = {
++			refBy(PipelineVar_7_Flow0)
++		}, 
++		source = refBy(twitter), 
++		parallelism = 1, 
++		name = "TwitterDataSource", 
++		constraints = {}
++	};
++	Source PipelineVar_7_Source1;
++	Flow PipelineVar_7_Flow7;
++	FamilyElement PipelineVar_7_FamilyElement6;
++	Flow PipelineVar_7_Flow8;
++	FamilyElement PipelineVar_7_FamilyElement7;
++	Flow PipelineVar_7_Flow9;
++	FamilyElement PipelineVar_7_FamilyElement8;
++	Flow PipelineVar_7_Flow10;
++	PipelineVar_7_Flow10 = Flow {
++		destination = refBy(PipelineVar_7_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_22.output[0]), 
++		name = "f10", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement8 = FamilyElement {
++		family = refBy(FamilyVar_22), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::FamilyVar_22.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_7_Flow10)
++		}, 
++		parallelism = 1, 
++		name = "DynamicGraphCompilation", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow9 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement8), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
++		name = "f9", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement7 = FamilyElement {
++		family = refBy(fCorrelationFinancial), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_7_Flow9)
++		}, 
++		parallelism = 1, 
++		name = "correlation", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow8 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement7), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f8", 
++		constraints = {}
++	};
++	PipelineVar_7_FamilyElement6 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		output = {
++			refBy(PipelineVar_7_Flow8)
++		}, 
++		parallelism = 1, 
++		name = "preprocessor", 
++		constraints = {}
++	};
++	PipelineVar_7_Flow7 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement6), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_6.input[1]), 
++		name = "f7", 
++		constraints = {}
++	};
++	Flow PipelineVar_7_Flow11;
++	PipelineVar_7_Flow11 = Flow {
++		destination = refBy(PipelineVar_7_FamilyElement7), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::DataSourceVar_6.input[0]), 
++		name = "f12", 
++		constraints = {}
++	};
++	PipelineVar_7_Source1 = Source {
++		output = {
++			refBy(PipelineVar_7_Flow7), refBy(PipelineVar_7_Flow11)
++		}, 
++		source = refBy(DataSourceVar_6), 
++		permissibleParameters = {
++			refBy(DataManagementCfg::DataSourceVar_6.parameters[0])
++		}, 
++		parallelism = 1, 
++		name = "SpringDataSource", 
++		constraints = {}
++	};
++	PipelineVar_7 = Pipeline {
++		name = "FocusPip", 
++		sources = {
++			refBy(PipelineVar_7_Source0), refBy(PipelineVar_7_Source1)
++		}, 
++		numworkers = 13, 
++		artifact = "eu.qualimaster:FocusPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_7;
++		PipelineVar_7_Source0;
++		PipelineVar_7_Flow0;
++		PipelineVar_7_FamilyElement0;
++		PipelineVar_7_Flow1;
++		PipelineVar_7_FamilyElement1;
++		PipelineVar_7_Flow2;
++		PipelineVar_7_FamilyElement2;
++		PipelineVar_7_Flow3;
++		PipelineVar_7_FamilyElement3;
++		PipelineVar_7_Flow4;
++		PipelineVar_7_FamilyElement4;
++		PipelineVar_7_Flow5;
++		PipelineVar_7_FamilyElement5;
++		PipelineVar_7_Flow6;
++		PipelineVar_7_Sink0;
++		PipelineVar_7_Source1;
++		PipelineVar_7_Flow7;
++		PipelineVar_7_FamilyElement6;
++		PipelineVar_7_Flow8;
++		PipelineVar_7_FamilyElement7;
++		PipelineVar_7_Flow9;
++		PipelineVar_7_FamilyElement8;
++		PipelineVar_7_Flow10;
++		PipelineVar_7_Flow11;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline
+new file mode 100644
+index 0000000..b49714a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline
+@@ -0,0 +1,22 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="DynamicGraphPip" numworkers="18" artifact="eu.qualimaster:DynamicGraphPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="CorrelationComputation" family="1">
++    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="DynamicGraphCompilation" family="21">
++    <permissibleParameters>FamiliesCfg::FamilyVar_22.parameters[0]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:FamilyElement" name="DynamicHubComputation" family="22">
++    <permissibleParameters>FamiliesCfg::FamilyVar_23.parameters[0]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::FamilyVar_23.parameters[1]</permissibleParameters>
++  </nodes>
++  <nodes xsi:type="pipeline:Sink" name="DynamicGraphSink" sink="2"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="preprocessor" family="0"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.5" tupleType="DataManagementCfg::spring.input[1]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
++  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_22.output[0]"/>
++  <flows name="f4" source="//@nodes.3" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_23.output[0]"/>
++  <flows name="f5" source="//@nodes.5" destination="//@nodes.1" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++  <flows name="f6" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline_diagram
+new file mode 100644
+index 0000000..cc6d413
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline_diagram
+@@ -0,0 +1,103 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_PydUoL9xEeWEl-7tYwy4NQ" type="Pipeline" name="PipelineVar_8.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_X6qw4L98EeWXtt_eKSIfyw" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_X6rX8L98EeWXtt_eKSIfyw" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_X6rX8b98EeWXtt_eKSIfyw" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_8.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6qw4b98EeWXtt_eKSIfyw" x="24" y="36"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_ZtyUUL98EeWXtt_eKSIfyw" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ZtyUUr98EeWXtt_eKSIfyw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZtyUU798EeWXtt_eKSIfyw" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_8.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZtyUUb98EeWXtt_eKSIfyw" x="240" y="204"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_yxp5MM8ZEeWf2Z7v9E2CtQ" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_yxqgQM8ZEeWf2Z7v9E2CtQ" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_yxqgQc8ZEeWf2Z7v9E2CtQ" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_8.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yxp5Mc8ZEeWf2Z7v9E2CtQ" x="384" y="216"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_21wAwM8ZEeWf2Z7v9E2CtQ" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_21wn0M8ZEeWf2Z7v9E2CtQ" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_21wn0c8ZEeWf2Z7v9E2CtQ" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_8.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_21wAwc8ZEeWf2Z7v9E2CtQ" x="384" y="372"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_8_EvcM8ZEeWf2Z7v9E2CtQ" type="2002" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_8_Evcs8ZEeWf2Z7v9E2CtQ" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_8_Evc88ZEeWf2Z7v9E2CtQ" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_8.pipeline#//@nodes.4"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8_Evcc8ZEeWf2Z7v9E2CtQ" x="384" y="528"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_N1wOEM_dEeWO14jNxLAiNg" type="2005" fontName="Ubuntu">
++    <children xmi:type="notation:DecorationNode" xmi:id="_N1w1IM_dEeWO14jNxLAiNg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_N1w1Ic_dEeWO14jNxLAiNg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_8.pipeline#//@nodes.5"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_N1wOEc_dEeWO14jNxLAiNg" x="228" y="36"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_PydUob9xEeWEl-7tYwy4NQ"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_8.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_dSZqkL98EeWXtt_eKSIfyw" type="4001" source="_X6qw4L98EeWXtt_eKSIfyw" target="_N1wOEM_dEeWO14jNxLAiNg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_dSZqk798EeWXtt_eKSIfyw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_dSZqlL98EeWXtt_eKSIfyw" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_dSZqkb98EeWXtt_eKSIfyw" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dSZqkr98EeWXtt_eKSIfyw" points="[30, 5, -162, 0]$[182, 3, -10, -2]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_1_hjYM8ZEeWf2Z7v9E2CtQ" type="4001" source="_ZtyUUL98EeWXtt_eKSIfyw" target="_yxp5MM8ZEeWf2Z7v9E2CtQ">
++    <children xmi:type="notation:DecorationNode" xmi:id="_1_hjY88ZEeWf2Z7v9E2CtQ" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_1_hjZM8ZEeWf2Z7v9E2CtQ" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_1_hjYc8ZEeWf2Z7v9E2CtQ" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1_hjYs8ZEeWf2Z7v9E2CtQ" points="[0, 0, -326, -32]$[328, 62, 2, 30]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1_j_oM8ZEeWf2Z7v9E2CtQ" id="(1.0,0.6833333333333333)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_5gZCEM8ZEeWf2Z7v9E2CtQ" type="4001" source="_yxp5MM8ZEeWf2Z7v9E2CtQ" target="_21wAwM8ZEeWf2Z7v9E2CtQ">
++    <children xmi:type="notation:DecorationNode" xmi:id="_5gZCE88ZEeWf2Z7v9E2CtQ" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_5gZCFM8ZEeWf2Z7v9E2CtQ" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_5gZCEc8ZEeWf2Z7v9E2CtQ" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5gZCEs8ZEeWf2Z7v9E2CtQ" points="[4, 16, -41, -164]$[31, 175, -14, -5]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5gehoM8ZEeWf2Z7v9E2CtQ" id="(0.4,0.9666666666666667)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5gehoc8ZEeWf2Z7v9E2CtQ" id="(0.23333333333333334,0.4166666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="__WO0EM8ZEeWf2Z7v9E2CtQ" type="4001" source="_21wAwM8ZEeWf2Z7v9E2CtQ" target="_8_EvcM8ZEeWf2Z7v9E2CtQ">
++    <children xmi:type="notation:DecorationNode" xmi:id="__WPbIM8ZEeWf2Z7v9E2CtQ" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="__WQCMM8ZEeWf2Z7v9E2CtQ" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="__WO0Ec8ZEeWf2Z7v9E2CtQ" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__WO0Es8ZEeWf2Z7v9E2CtQ" points="[0, 0, 61, -155]$[-59, 144, 2, -11]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__WTFgM8ZEeWf2Z7v9E2CtQ" id="(0.6333333333333333,1.0)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__WTFgc8ZEeWf2Z7v9E2CtQ" id="(0.5636363636363636,0.2)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_PkVPwM_dEeWO14jNxLAiNg" type="4001" source="_N1wOEM_dEeWO14jNxLAiNg" target="_ZtyUUL98EeWXtt_eKSIfyw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_PkVPw8_dEeWO14jNxLAiNg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_PkVPxM_dEeWO14jNxLAiNg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_PkVPwc_dEeWO14jNxLAiNg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.4"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PkVPws_dEeWO14jNxLAiNg" points="[0, 0, 31, -174]$[-34, 165, -3, -9]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PkXE8M_dEeWO14jNxLAiNg" id="(0.6333333333333333,1.0)"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PkXE8c_dEeWO14jNxLAiNg" id="(0.4166666666666667,0.15)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_QuD38M_dEeWO14jNxLAiNg" type="4001" source="_X6qw4L98EeWXtt_eKSIfyw" target="_ZtyUUL98EeWXtt_eKSIfyw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_QuEfAM_dEeWO14jNxLAiNg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_QuEfAc_dEeWO14jNxLAiNg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_QuD38c_dEeWO14jNxLAiNg" fontName="Ubuntu"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.5"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QuD38s_dEeWO14jNxLAiNg" points="[0, 0, -142, -198]$[112, 178, -30, -20]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QuGUMM_dEeWO14jNxLAiNg" id="(0.7333333333333333,1.0)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8Cfg.ivml
+new file mode 100644
+index 0000000..3e6f822
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8Cfg.ivml
+@@ -0,0 +1,149 @@
++project PipelineVar_8Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_8Cfg;
++	Pipeline PipelineVar_8;
++	Source PipelineVar_8_Source0;
++	Flow PipelineVar_8_Flow0;
++	FamilyElement PipelineVar_8_FamilyElement0;
++	Flow PipelineVar_8_Flow1;
++	FamilyElement PipelineVar_8_FamilyElement1;
++	Flow PipelineVar_8_Flow2;
++	FamilyElement PipelineVar_8_FamilyElement2;
++	Flow PipelineVar_8_Flow3;
++	FamilyElement PipelineVar_8_FamilyElement3;
++	Flow PipelineVar_8_Flow4;
++	Sink PipelineVar_8_Sink0;
++	PipelineVar_8_Sink0 = Sink {
++		sink = refBy(DataSinkVar_2), 
++		parallelism = 1, 
++		name = "DynamicGraphSink", 
++		constraints = {}
++	};
++	PipelineVar_8_Flow4 = Flow {
++		destination = refBy(PipelineVar_8_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_23.output[0]), 
++		name = "f4", 
++		constraints = {}
++	};
++	PipelineVar_8_FamilyElement3 = FamilyElement {
++		family = refBy(FamilyVar_23), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::FamilyVar_23.parameters[0]), refBy(FamiliesCfg::FamilyVar_23.parameters[1])
++		}, 
++		output = {
++			refBy(PipelineVar_8_Flow4)
++		}, 
++		parallelism = 1, 
++		name = "DynamicHubComputation", 
++		constraints = {}
++	};
++	PipelineVar_8_Flow3 = Flow {
++		destination = refBy(PipelineVar_8_FamilyElement3), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::FamilyVar_22.output[0]), 
++		name = "f3", 
++		constraints = {}
++	};
++	PipelineVar_8_FamilyElement2 = FamilyElement {
++		family = refBy(FamilyVar_22), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::FamilyVar_22.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_8_Flow3)
++		}, 
++		parallelism = 1, 
++		name = "DynamicGraphCompilation", 
++		constraints = {}
++	};
++	PipelineVar_8_Flow2 = Flow {
++		destination = refBy(PipelineVar_8_FamilyElement2), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_8_FamilyElement1 = FamilyElement {
++		family = refBy(fCorrelationFinancial), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
++		}, 
++		output = {
++			refBy(PipelineVar_8_Flow2)
++		}, 
++		parallelism = 1, 
++		name = "CorrelationComputation", 
++		constraints = {}
++	};
++	PipelineVar_8_Flow1 = Flow {
++		destination = refBy(PipelineVar_8_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f5", 
++		constraints = {}
++	};
++	PipelineVar_8_FamilyElement0 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		output = {
++			refBy(PipelineVar_8_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "preprocessor", 
++		constraints = {}
++	};
++	PipelineVar_8_Flow0 = Flow {
++		destination = refBy(PipelineVar_8_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[1]), 
++		name = "f1", 
++		constraints = {}
++	};
++	Flow PipelineVar_8_Flow5;
++	PipelineVar_8_Flow5 = Flow {
++		destination = refBy(PipelineVar_8_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[0]), 
++		name = "f6", 
++		constraints = {}
++	};
++	PipelineVar_8_Source0 = Source {
++		output = {
++			refBy(PipelineVar_8_Flow0), refBy(PipelineVar_8_Flow5)
++		}, 
++		source = refBy(spring), 
++		parallelism = 1, 
++		name = "FinancialDataSource", 
++		constraints = {}
++	};
++	PipelineVar_8 = Pipeline {
++		name = "DynamicGraphPip", 
++		sources = {
++			refBy(PipelineVar_8_Source0)
++		}, 
++		numworkers = 18, 
++		artifact = "eu.qualimaster:DynamicGraphPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_8;
++		PipelineVar_8_Source0;
++		PipelineVar_8_Flow0;
++		PipelineVar_8_FamilyElement0;
++		PipelineVar_8_Flow1;
++		PipelineVar_8_FamilyElement1;
++		PipelineVar_8_Flow2;
++		PipelineVar_8_FamilyElement2;
++		PipelineVar_8_Flow3;
++		PipelineVar_8_FamilyElement3;
++		PipelineVar_8_Flow4;
++		PipelineVar_8_Sink0;
++		PipelineVar_8_Flow5;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline
+new file mode 100644
+index 0000000..b41e771
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline
+@@ -0,0 +1,13 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="ReplayPip" artifact="eu.qualimaster:ReplayPip:0.0.1-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="FinancialCorrelation" family="1"/>
++  <nodes xsi:type="pipeline:ReplaySink" name="ReplaySink" sink="0"/>
++  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[1]"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
++  <flows name="f4" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::spring.input[0]"/>
++  <flows name="f5" source="//@nodes.2" destination="//@nodes.4" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline_diagram
+new file mode 100644
+index 0000000..33bb201
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline_diagram
+@@ -0,0 +1,83 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_xoqvcEKqEeaNvMtNd6k-kg" type="Pipeline" name="PipelineVar_9.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_yz8PwEKqEeaNvMtNd6k-kg" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_y0EyoEKqEeaNvMtNd6k-kg" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_y0Gn0EKqEeaNvMtNd6k-kg" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PipelineVar_9.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yz820EKqEeaNvMtNd6k-kg" x="101" y="268"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_3RtbkEKqEeaNvMtNd6k-kg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_3RupsEKqEeaNvMtNd6k-kg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_3RupsUKqEeaNvMtNd6k-kg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_9.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3RtbkUKqEeaNvMtNd6k-kg" x="270" y="270"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_5QsQwEKqEeaNvMtNd6k-kg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_5Qs30EKqEeaNvMtNd6k-kg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_5Qte4EKqEeaNvMtNd6k-kg" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_9.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5QsQwUKqEeaNvMtNd6k-kg" x="432" y="270"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_6vdU0EKqEeaNvMtNd6k-kg" type="2007" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_6vd74EKqEeaNvMtNd6k-kg" type="5007">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_6vei8EKqEeaNvMtNd6k-kg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:ReplaySink" href="PipelineVar_9.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6vdU0UKqEeaNvMtNd6k-kg" x="630" y="324"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_raWBAEgFEea6yohzEVxiGQ" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_raWoEEgFEea6yohzEVxiGQ" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_raWoEUgFEea6yohzEVxiGQ" x="18" y="75"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PipelineVar_9.pipeline#//@nodes.4"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_raWBAUgFEea6yohzEVxiGQ" x="630" y="198"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_xoqvcUKqEeaNvMtNd6k-kg"/>
++  <element xmi:type="pipeline:Pipeline" href="PipelineVar_9.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_87ypgEKqEeaNvMtNd6k-kg" type="4001" source="_yz8PwEKqEeaNvMtNd6k-kg" target="_3RtbkEKqEeaNvMtNd6k-kg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_87z3oEKqEeaNvMtNd6k-kg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_87z3oUKqEeaNvMtNd6k-kg" x="8" y="18"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_87ypgUKqEeaNvMtNd6k-kg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_87ypgkKqEeaNvMtNd6k-kg" points="[30, 2, -121, 0]$[139, 2, -12, 0]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_88BTAEKqEeaNvMtNd6k-kg" id="(0.2,0.5)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_9r-wUEKqEeaNvMtNd6k-kg" type="4001" source="_3RtbkEKqEeaNvMtNd6k-kg" target="_5QsQwEKqEeaNvMtNd6k-kg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_9r_-cEKqEeaNvMtNd6k-kg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_9r_-cUKqEeaNvMtNd6k-kg" x="5" y="18"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_9r-wUUKqEeaNvMtNd6k-kg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9r-wUkKqEeaNvMtNd6k-kg" points="[30, 4, -132, 4]$[132, 4, -30, 4]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_-ebg8EKqEeaNvMtNd6k-kg" type="4001" source="_5QsQwEKqEeaNvMtNd6k-kg" target="_6vdU0EKqEeaNvMtNd6k-kg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_-ecvEEKqEeaNvMtNd6k-kg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_-ecvEUKqEeaNvMtNd6k-kg" x="-4" y="20"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_-ebg8UKqEeaNvMtNd6k-kg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-ebg8kKqEeaNvMtNd6k-kg" points="[30, -2, -128, 0]$[150, -2, -8, 0]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-ejcwEKqEeaNvMtNd6k-kg" id="(0.14545454545454545,0.509090909090909)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_TTlK4EKrEeaNvMtNd6k-kg" type="4001" source="_yz8PwEKqEeaNvMtNd6k-kg" target="_5QsQwEKqEeaNvMtNd6k-kg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_TTlx8UKrEeaNvMtNd6k-kg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_TTlx8kKrEeaNvMtNd6k-kg" x="17" y="-8"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_TTlK4UKrEeaNvMtNd6k-kg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TTlx8EKrEeaNvMtNd6k-kg" points="[30, -13, -301, -15]$[193, -82, -138, -84]$[301, -17, -30, -19]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_sQrzIEgFEea6yohzEVxiGQ" type="4001" source="_5QsQwEKqEeaNvMtNd6k-kg" target="_raWBAEgFEea6yohzEVxiGQ">
++    <children xmi:type="notation:DecorationNode" xmi:id="_sQsaMEgFEea6yohzEVxiGQ" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_sQsaMUgFEea6yohzEVxiGQ" x="21" y="-14"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_sQrzIUgFEea6yohzEVxiGQ" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.4"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sQrzIkgFEea6yohzEVxiGQ" points="[30, -16, -135, 70]$[153, -84, -12, 2]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sQvdgEgFEea6yohzEVxiGQ" id="(0.21818181818181817,0.5636363636363636)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9Cfg.ivml
+new file mode 100644
+index 0000000..8dee2f8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9Cfg.ivml
+@@ -0,0 +1,118 @@
++project PipelineVar_9Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_9Cfg;
++	Pipeline PipelineVar_9;
++	Source PipelineVar_9_Source0;
++	Flow PipelineVar_9_Flow0;
++	FamilyElement PipelineVar_9_FamilyElement0;
++	Flow PipelineVar_9_Flow1;
++	FamilyElement PipelineVar_9_FamilyElement1;
++	Flow PipelineVar_9_Flow2;
++	ReplaySink PipelineVar_9_ReplaySink0;
++	PipelineVar_9_ReplaySink0 = ReplaySink {
++		sink = refBy(priorSnk), 
++		parallelism = 1, 
++		name = "ReplaySink", 
++		constraints = {}
++	};
++	PipelineVar_9_Flow2 = Flow {
++		destination = refBy(PipelineVar_9_ReplaySink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
++		name = "f3", 
++		constraints = {}
++	};
++	Flow PipelineVar_9_Flow3;
++	Sink PipelineVar_9_Sink1;
++	PipelineVar_9_Sink1 = Sink {
++		sink = refBy(priorSnk), 
++		parallelism = 1, 
++		name = "Sink", 
++		constraints = {}
++	};
++	PipelineVar_9_Flow3 = Flow {
++		destination = refBy(PipelineVar_9_Sink1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
++		name = "f5", 
++		constraints = {}
++	};
++	PipelineVar_9_FamilyElement1 = FamilyElement {
++		family = refBy(fCorrelationFinancial), 
++		output = {
++			refBy(PipelineVar_9_Flow2), refBy(PipelineVar_9_Flow3)
++		}, 
++		parallelism = 1, 
++		name = "FinancialCorrelation", 
++		permissibleParameters = {refBy(fCorrelationFinancial.parameters[0])},
++		constraints = {}
++	};
++	PipelineVar_9_Flow1 = Flow {
++		destination = refBy(PipelineVar_9_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f2", 
++		constraints = {}
++	};
++	PipelineVar_9_FamilyElement0 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		output = {
++			refBy(PipelineVar_9_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "Preprocessor", 
++		constraints = {}
++	};
++	PipelineVar_9_Flow0 = Flow {
++		destination = refBy(PipelineVar_9_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[1]), 
++		name = "f1", 
++		constraints = {}
++	};
++	Flow PipelineVar_9_Flow4;
++	PipelineVar_9_Flow4 = Flow {
++		destination = refBy(PipelineVar_9_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[0]), 
++		name = "f4", 
++		constraints = {}
++	};
++	PipelineVar_9_Source0 = Source {
++		output = {
++			refBy(PipelineVar_9_Flow0), refBy(PipelineVar_9_Flow4)
++		}, 
++		source = refBy(spring), 
++		parallelism = 1, 
++		name = "FinancialDataSource", 
++		constraints = {}
++	};
++	PipelineVar_9 = Pipeline {
++		name = "ReplayPip", 
++		sources = {
++			refBy(PipelineVar_9_Source0)
++		}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster:ReplayPip:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		PipelineVar_9;
++		PipelineVar_9_Source0;
++		PipelineVar_9_Flow0;
++		PipelineVar_9_FamilyElement0;
++		PipelineVar_9_Flow1;
++		PipelineVar_9_FamilyElement1;
++		PipelineVar_9_Flow2;
++		PipelineVar_9_ReplaySink0;
++		PipelineVar_9_Flow3;
++		PipelineVar_9_Sink1;
++		PipelineVar_9_Flow4;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelinesCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelinesCfg.ivml
+new file mode 100644
+index 0000000..933e16b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelinesCfg.ivml
+@@ -0,0 +1,30 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++	import SubTopologyCfg;
++	import PipelineVar_9Cfg;
++	import PipelineVar_10Cfg;
++	import SubPipelineVar_11Cfg;
++	//import PipelineVar_12Cfg;
++	import PipelineVar_13Cfg;
++	import PipelineVar_14Cfg;
++	import SubPipelineVar_15Cfg;
++	import PipelineVar_16Cfg;
++	import PipelineVar_17Cfg;
++	import PipelineVar_18Cfg;
++	import SubPipelineVar_19Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(SubTopology), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(SubPipelineVar_11)/* , refBy(PipelineVar_12)*/, refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(SubPipelineVar_15), refBy(PipelineVar_16), refBy(PipelineVar_17), refBy(PipelineVar_18), refBy(SubPipelineVar_19)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline
+new file mode 100644
+index 0000000..9ce5b5c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline
+@@ -0,0 +1,17 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="PriorityPip" artifact="eu.qualimaster:PriorityPip:0.0.2-SNAPSHOT">
++  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="FinancialCorrelation" family="1"/>
++  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
++  <nodes xsi:type="pipeline:Source" name="TwitterDataSource" source="1"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="SentimentAnalysis" family="2"/>
++  <nodes xsi:type="pipeline:DataManagementElement" name="DataManagement" dataManagement="0"/>
++  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
++  <flows name="f3" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::spring.input[0]"/>
++  <flows name="f4" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
++  <flows name="f5" source="//@nodes.4" destination="//@nodes.5" tupleType="DataManagementCfg::twitter.input[1]"/>
++  <flows name="f6" source="//@nodes.5" destination="//@nodes.6" tupleType="FamiliesCfg::fSentimentAnalysis.output[0]"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[1]"/>
++  <flows name="f7" source="//@nodes.6" destination="//@nodes.3" tupleType="FamiliesCfg::fSentimentAnalysis.output[0]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline_diagram
+new file mode 100644
+index 0000000..41ba408
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline_diagram
+@@ -0,0 +1,112 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="__WpXAJ7tEeSsKttrnmqngg" type="Pipeline" name="PriorityPip.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_C1FMwJ7uEeSsKttrnmqngg" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_C1LTYJ7uEeSsKttrnmqngg" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_C1LTYZ7uEeSsKttrnmqngg" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PriorityPip.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_C1FMwZ7uEeSsKttrnmqngg" x="60" y="288"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_IYMQAJ7uEeSsKttrnmqngg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_IYSWoJ7uEeSsKttrnmqngg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_IYSWoZ7uEeSsKttrnmqngg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PriorityPip.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IYMQAZ7uEeSsKttrnmqngg" x="240" y="288"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_PUR4YJ7uEeSsKttrnmqngg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_PUR4Yp7uEeSsKttrnmqngg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_PUR4Y57uEeSsKttrnmqngg" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PriorityPip.pipeline#//@nodes.2"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PUR4YZ7uEeSsKttrnmqngg" x="396" y="288"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_YkanAJ7uEeSsKttrnmqngg" type="2002" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_YkanAp7uEeSsKttrnmqngg" type="5002">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_YkanA57uEeSsKttrnmqngg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:Sink" href="PriorityPip.pipeline#//@nodes.3"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YkanAZ7uEeSsKttrnmqngg" x="684" y="432"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_M4visJ7xEeSsKttrnmqngg" type="2001" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_M4visp7xEeSsKttrnmqngg" type="5001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_M4vis57xEeSsKttrnmqngg" x="-65" y="80"/>
++    </children>
++    <element xmi:type="pipeline:Source" href="PriorityPip.pipeline#//@nodes.4"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M4visZ7xEeSsKttrnmqngg" x="68" y="537"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_Q3qPUJ7xEeSsKttrnmqngg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Q3qPUp7xEeSsKttrnmqngg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Q3qPU57xEeSsKttrnmqngg" x="-64" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="PriorityPip.pipeline#//@nodes.5"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q3qPUZ7xEeSsKttrnmqngg" x="228" y="540"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_Yt-EQJ7xEeSsKttrnmqngg" type="2006" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_Yt-EQp7xEeSsKttrnmqngg" type="5006">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_Yt-EQ57xEeSsKttrnmqngg" x="-16" y="80"/>
++    </children>
++    <element xmi:type="pipeline:DataManagementElement" href="PriorityPip.pipeline#//@nodes.6"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Yt-EQZ7xEeSsKttrnmqngg" x="396" y="540"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="__WpXAZ7tEeSsKttrnmqngg"/>
++  <element xmi:type="pipeline:Pipeline" href="PriorityPip.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_SR6HIJ7uEeSsKttrnmqngg" type="4001" source="_IYMQAJ7uEeSsKttrnmqngg" target="_PUR4YJ7uEeSsKttrnmqngg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_SR6HI57uEeSsKttrnmqngg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_SR6HJJ7uEeSsKttrnmqngg" x="-7" y="13"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_SR6HIZ7uEeSsKttrnmqngg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SR6HIp7uEeSsKttrnmqngg" points="[30, -1, -126, -1]$[164, -30, 8, -30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_VfEmsJ7uEeSsKttrnmqngg" type="4001" source="_C1FMwJ7uEeSsKttrnmqngg" target="_PUR4YJ7uEeSsKttrnmqngg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_VfEms57uEeSsKttrnmqngg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_VfEmtJ7uEeSsKttrnmqngg" x="16" y="-13"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_VfEmsZ7uEeSsKttrnmqngg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VfEmsp7uEeSsKttrnmqngg" points="[30, -12, -306, -12]$[174, -66, -162, -66]$[306, -13, -30, -13]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_ZreVsJ7uEeSsKttrnmqngg" type="4001" source="_PUR4YJ7uEeSsKttrnmqngg" target="_YkanAJ7uEeSsKttrnmqngg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ZreVs57uEeSsKttrnmqngg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZreVtJ7uEeSsKttrnmqngg" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_ZreVsZ7uEeSsKttrnmqngg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZreVsp7uEeSsKttrnmqngg" points="[30, 21, -182, -125]$[211, 174, -1, 28]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_VUm7wJ7xEeSsKttrnmqngg" type="4001" source="_M4visJ7xEeSsKttrnmqngg" target="_Q3qPUJ7xEeSsKttrnmqngg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_VUm7w57xEeSsKttrnmqngg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_VUm7xJ7xEeSsKttrnmqngg" x="-5" y="17"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_VUm7wZ7xEeSsKttrnmqngg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.3"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VUm7wp7xEeSsKttrnmqngg" points="[30, -1, -149, 0]$[190, -4, 11, -3]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VUtCYJ7xEeSsKttrnmqngg" id="(0.8166666666666667,0.43333333333333335)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_dTfd4J7xEeSsKttrnmqngg" type="4001" source="_Q3qPUJ7xEeSsKttrnmqngg" target="_Yt-EQJ7xEeSsKttrnmqngg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_dTfd457xEeSsKttrnmqngg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_dTfd5J7xEeSsKttrnmqngg" x="-1" y="13"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_dTfd4Z7xEeSsKttrnmqngg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.4"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dTfd4p7xEeSsKttrnmqngg" points="[30, -1, -138, -1]$[138, -1, -30, -1]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_FYa5wKYhEeSCau1ctzSuwA" type="4001" source="_C1FMwJ7uEeSsKttrnmqngg" target="_IYMQAJ7uEeSsKttrnmqngg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_FYa5w6YhEeSCau1ctzSuwA" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_FYa5xKYhEeSCau1ctzSuwA" x="5" y="25"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_FYa5waYhEeSCau1ctzSuwA" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.5"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FYa5wqYhEeSCau1ctzSuwA" points="[30, 9, -150, 9]$[176, 30, -4, 30]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_x1yOcLrvEeWX4saP8WSdcQ" type="4001" source="_Yt-EQJ7xEeSsKttrnmqngg" target="_YkanAJ7uEeSsKttrnmqngg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_x10DoLrvEeWX4saP8WSdcQ" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_x10DobrvEeWX4saP8WSdcQ" y="40"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_x1yOcbrvEeWX4saP8WSdcQ" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.6"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_x1yOcrrvEeWX4saP8WSdcQ" points="[24, -12, -255, 129]$[252, -118, -27, 23]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x17YYLrvEeWX4saP8WSdcQ" id="(0.7666666666666667,0.5)"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPipCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPipCfg.ivml
+new file mode 100644
+index 0000000..7dd1baf
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPipCfg.ivml
+@@ -0,0 +1,149 @@
++project PriorityPipCfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to PriorityPipCfg;
++	Pipeline PriorityPip;
++	Source PriorityPip_Source0;
++	Flow PriorityPip_Flow0;
++	FamilyElement PriorityPip_FamilyElement0;
++	Flow PriorityPip_Flow1;
++	Sink PriorityPip_Sink0;
++	PriorityPip_Sink0 = Sink {
++		sink = refBy(priorSnk), 
++		parallelism = 1, 
++		name = "Sink"
++	};
++	PriorityPip_Flow1 = Flow {
++		destination = refBy(PriorityPip_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
++		name = "f4"
++	};
++	PriorityPip_FamilyElement0 = FamilyElement {
++		family = refBy(fCorrelationFinancial), 
++		output = {
++			refBy(PriorityPip_Flow1)
++		}, 
++		parallelism = 1, 
++		name = "FinancialCorrelation",
++		permissibleParameters = {refBy(fCorrelationFinancial.parameters[0])}
++	};
++	PriorityPip_Flow0 = Flow {
++		destination = refBy(PriorityPip_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[0]), 
++		name = "f3"
++	};
++	Flow PriorityPip_Flow2;
++	FamilyElement PriorityPip_FamilyElement1;
++	Flow PriorityPip_Flow3;
++	PriorityPip_Flow3 = Flow {
++		destination = refBy(PriorityPip_FamilyElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
++		name = "f2"
++	};
++	PriorityPip_FamilyElement1 = FamilyElement {
++		family = refBy(fPreprocessor), 
++		output = {
++			refBy(PriorityPip_Flow3)
++		}, 
++		parallelism = 1, 
++		name = "Preprocessor"
++	};
++	PriorityPip_Flow2 = Flow {
++		destination = refBy(PriorityPip_FamilyElement1), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::spring.input[1]), 
++		name = "f1"
++	};
++	PriorityPip_Source0 = Source {
++		output = {
++			refBy(PriorityPip_Flow0), refBy(PriorityPip_Flow2)
++		}, 
++		source = refBy(spring), 
++		parallelism = 1, 
++		name = "FinancialDataSource"
++	};
++	Source PriorityPip_Source1;
++	Flow PriorityPip_Flow4;
++	FamilyElement PriorityPip_FamilyElement2;
++	Flow PriorityPip_Flow5;
++	DataManagementElement PriorityPip_DataManagementElement0;
++	Flow PriorityPip_Flow6;
++	PriorityPip_Flow6 = Flow {
++		destination = refBy(PriorityPip_Sink0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fSentimentAnalysis.output[0]), 
++		name = "f7"
++	};
++	PriorityPip_DataManagementElement0 = DataManagementElement {
++		dataManagement = refBy(hBaseDataManagement), 
++		output = {
++			refBy(PriorityPip_Flow6)
++		}, 
++		parallelism = 1, 
++		name = "DataManagement"
++	};
++	PriorityPip_Flow5 = Flow {
++		destination = refBy(PriorityPip_DataManagementElement0), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(FamiliesCfg::fSentimentAnalysis.output[0]), 
++		name = "f6"
++	};
++	PriorityPip_FamilyElement2 = FamilyElement {
++		family = refBy(fSentimentAnalysis), 
++		output = {
++			refBy(PriorityPip_Flow5)
++		}, 
++		parallelism = 1, 
++		name = "SentimentAnalysis",
++		permissibleParameters = {refBy(fSentimentAnalysis.parameters[2])}
++	};
++	PriorityPip_Flow4 = Flow {
++		destination = refBy(PriorityPip_FamilyElement2), 
++		grouping = Grouping.shuffleGrouping, 
++		tupleType = refBy(DataManagementCfg::twitter.input[1]), 
++		name = "f5"
++	};
++	PriorityPip_Source1 = Source {
++		output = {
++			refBy(PriorityPip_Flow4)
++		}, 
++		source = refBy(twitter), 
++		parallelism = 1, 
++		name = "TwitterDataSource"
++	};
++	PriorityPip = Pipeline {
++		name = "PriorityPip", 
++		sources = {
++			refBy(PriorityPip_Source0), refBy(PriorityPip_Source1)
++		}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster:PriorityPip:0.0.2-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		scaling = Scaling.useFree, // keep this for experiments!
++		constraints = {}
++	};
++	freeze {
++		PriorityPip;
++		PriorityPip_Source0;
++		PriorityPip_Flow0;
++		PriorityPip_FamilyElement0;
++		PriorityPip_Flow1;
++		PriorityPip_Sink0;
++		PriorityPip_Flow2;
++		PriorityPip_FamilyElement1;
++		PriorityPip_Flow3;
++		PriorityPip_Source1;
++		PriorityPip_Flow4;
++		PriorityPip_FamilyElement2;
++		PriorityPip_Flow5;
++		PriorityPip_DataManagementElement0;
++		PriorityPip_Flow6;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline
+new file mode 100644
+index 0000000..962cce4
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline
+@@ -0,0 +1,9 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="RandomSubPipeline1" artifact="eu.qualimaster:RandomSubPipeline1:0.0.1-SNAPSHOT" isSubPipeline="true" subPipelineFamily="FamiliesCfg::randomFamily">
++  <nodes xsi:type="pipeline:FamilyElement" name="dataProcessor" family="6" isConnector="true" defaultAlgorithm="AlgorithmsCfg::switchAlg1">
++    <permissibleParameters>FamiliesCfg::switchFamily.parameters[1]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::switchFamily.parameters[3]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::switchFamily.parameters[0]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::switchFamily.parameters[2]</permissibleParameters>
++  </nodes>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline_diagram
+new file mode 100644
+index 0000000..08ceaff
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline_diagram
+@@ -0,0 +1,12 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_oB9q0HqYEeaAoPSZz-F4Hg" type="Pipeline" name="SubPipelineVar_11.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_pNMu4HqYEeaAoPSZz-F4Hg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_pNOkEHqYEeaAoPSZz-F4Hg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_pNPLIHqYEeaAoPSZz-F4Hg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="SubPipelineVar_11.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pNMu4XqYEeaAoPSZz-F4Hg" x="229" y="337"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_oB9q0XqYEeaAoPSZz-F4Hg"/>
++  <element xmi:type="pipeline:Pipeline" href="SubPipelineVar_11.pipeline#/"/>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11Cfg.ivml
+new file mode 100644
+index 0000000..0587199
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11Cfg.ivml
+@@ -0,0 +1,38 @@
++project SubPipelineVar_11Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to SubPipelineVar_11Cfg;
++	SubPipeline SubPipelineVar_11;
++	FamilyElement SubPipelineVar_11_FamilyElement0;
++	SubPipelineVar_11_FamilyElement0 = FamilyElement {
++		family = refBy(switchFamily), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::switchAlg1), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::switchFamily.parameters[1]), refBy(FamiliesCfg::switchFamily.parameters[3]), refBy(FamiliesCfg::switchFamily.parameters[0]), refBy(FamiliesCfg::switchFamily.parameters[2])
++		}, 
++		output = {}, 
++		parallelism = 1, 
++		name = "dataProcessor", 
++		constraints = {}
++	};
++	SubPipelineVar_11 = SubPipeline {
++		connectors = {
++			refBy(SubPipelineVar_11_FamilyElement0)
++		}, 
++		subPipelineFamily = refBy(FamiliesCfg::randomFamily), 
++		name = "RandomSubPipeline1", 
++		sources = {}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster:RandomSubPipeline1:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		SubPipelineVar_11;
++		SubPipelineVar_11_FamilyElement0;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline
+new file mode 100644
+index 0000000..ef9cee0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline
+@@ -0,0 +1,9 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="RandomSubPipeline2" artifact="eu.qualimaster:RandomSubPipeline2:0.0.1-SNAPSHOT" isSubPipeline="true" subPipelineFamily="FamiliesCfg::randomFamily">
++  <nodes xsi:type="pipeline:FamilyElement" name="dataProcessor2" family="6" isConnector="true" defaultAlgorithm="AlgorithmsCfg::switchAlg1">
++    <permissibleParameters>FamiliesCfg::switchFamily.parameters[1]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::switchFamily.parameters[3]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::switchFamily.parameters[0]</permissibleParameters>
++    <permissibleParameters>FamiliesCfg::switchFamily.parameters[2]</permissibleParameters>
++  </nodes>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline_diagram
+new file mode 100644
+index 0000000..bed7ae9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline_diagram
+@@ -0,0 +1,12 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_y99foLikEeaEk6TB62Bs9g" type="Pipeline" name="SubPipelineVar_15.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_z6D7gLikEeaEk6TB62Bs9g" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_z6NFcLikEeaEk6TB62Bs9g" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_z6NFcbikEeaEk6TB62Bs9g" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="SubPipelineVar_15.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z6D7gbikEeaEk6TB62Bs9g" x="435" y="282"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_y99fobikEeaEk6TB62Bs9g"/>
++  <element xmi:type="pipeline:Pipeline" href="SubPipelineVar_15.pipeline#/"/>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15Cfg.ivml
+new file mode 100644
+index 0000000..13838d1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15Cfg.ivml
+@@ -0,0 +1,38 @@
++project SubPipelineVar_15Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to SubPipelineVar_15Cfg;
++	SubPipeline SubPipelineVar_15;
++	FamilyElement SubPipelineVar_15_FamilyElement0;
++	SubPipelineVar_15_FamilyElement0 = FamilyElement {
++		family = refBy(switchFamily), 
++		defaultAlgorithm = refBy(AlgorithmsCfg::switchAlg1), 
++		permissibleParameters = {
++			refBy(FamiliesCfg::switchFamily.parameters[1]), refBy(FamiliesCfg::switchFamily.parameters[3]), refBy(FamiliesCfg::switchFamily.parameters[0]), refBy(FamiliesCfg::switchFamily.parameters[2])
++		}, 
++		output = {}, 
++		parallelism = 1, 
++		name = "dataProcessor2", 
++		constraints = {}
++	};
++	SubPipelineVar_15 = SubPipeline {
++		connectors = {
++			refBy(SubPipelineVar_15_FamilyElement0)
++		}, 
++		subPipelineFamily = refBy(FamiliesCfg::randomFamily), 
++		name = "RandomSubPipeline2", 
++		sources = {}, 
++		numworkers = 1, 
++		artifact = "eu.qualimaster:RandomSubPipeline2:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		SubPipelineVar_15;
++		SubPipelineVar_15_FamilyElement0;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline
+new file mode 100644
+index 0000000..07c5e38
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="CorrelationSWAlternative" artifact="eu.qualimaster:CorrelationSWAlternative:0.0.1-SNAPSHOT" isSubPipeline="true" subPipelineFamily="FamiliesCfg::fCorrelationFinancial">
++  <nodes xsi:type="pipeline:FamilyElement" name="MP" family="24" isConnector="true"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="HY" family="25"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" grouping="3" tupleType="FamiliesCfg::fMapper.output[0]"/>
++  <flows name="f2" source="//@nodes.0" destination="//@nodes.1" grouping="3" tupleType="FamiliesCfg::fMapper.output[1]"/>
++  <flows name="f3" source="//@nodes.0" destination="//@nodes.1" grouping="4" tupleType="FamiliesCfg::fMapper.output[2]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline_diagram
+new file mode 100644
+index 0000000..9b39cd5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline_diagram
+@@ -0,0 +1,45 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_GfdH0O-kEeaL1dVO1_Y-Pg" type="Pipeline" name="SubPipelineVar_19.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_JK4MQO-kEeaL1dVO1_Y-Pg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_JK6BcO-kEeaL1dVO1_Y-Pg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_JK6Bce-kEeaL1dVO1_Y-Pg" x="27" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="SubPipelineVar_19.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JK4MQe-kEeaL1dVO1_Y-Pg" x="196" y="267"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_QJzGMO-kEeaL1dVO1_Y-Pg" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_QJztQO-kEeaL1dVO1_Y-Pg" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_QJztQe-kEeaL1dVO1_Y-Pg" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="SubPipelineVar_19.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QJzGMe-kEeaL1dVO1_Y-Pg" x="390" y="270"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_GfdH0e-kEeaL1dVO1_Y-Pg"/>
++  <element xmi:type="pipeline:Pipeline" href="SubPipelineVar_19.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_VjXy8O-kEeaL1dVO1_Y-Pg" type="4001" source="_JK4MQO-kEeaL1dVO1_Y-Pg" target="_QJzGMO-kEeaL1dVO1_Y-Pg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_VjZBEO-kEeaL1dVO1_Y-Pg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_VjZoIO-kEeaL1dVO1_Y-Pg" x="-7" y="-7"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_VjXy8e-kEeaL1dVO1_Y-Pg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="SubPipelineVar_19.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VjXy8u-kEeaL1dVO1_Y-Pg" points="[15, -9, -164, -29]$[74, -40, -105, -60]$[149, 2, -30, -18]"/>
++    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Vjg84O-kEeaL1dVO1_Y-Pg" id="(0.75,0.21666666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_f17A0O-kEeaL1dVO1_Y-Pg" type="4001" source="_JK4MQO-kEeaL1dVO1_Y-Pg" target="_QJzGMO-kEeaL1dVO1_Y-Pg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_f18O8O-kEeaL1dVO1_Y-Pg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_f18O8e-kEeaL1dVO1_Y-Pg" x="-1" y="12"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_f17A0e-kEeaL1dVO1_Y-Pg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="SubPipelineVar_19.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f17A0u-kEeaL1dVO1_Y-Pg" points="[30, 1, -145, 0]$[164, -1, -11, -2]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f2CVkO-kEeaL1dVO1_Y-Pg" id="(0.18333333333333332,0.4666666666666667)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_kYEWUO-kEeaL1dVO1_Y-Pg" type="4001" source="_JK4MQO-kEeaL1dVO1_Y-Pg" target="_QJzGMO-kEeaL1dVO1_Y-Pg">
++    <children xmi:type="notation:DecorationNode" xmi:id="_kYE9YO-kEeaL1dVO1_Y-Pg" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_kYFkcO-kEeaL1dVO1_Y-Pg" x="-4" y="12"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_kYEWUe-kEeaL1dVO1_Y-Pg" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="SubPipelineVar_19.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kYEWUu-kEeaL1dVO1_Y-Pg" points="[30, 16, -164, 13]$[89, 48, -105, 45]$[164, 15, -30, 12]"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19Cfg.ivml
+new file mode 100644
+index 0000000..32e31e1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19Cfg.ivml
+@@ -0,0 +1,72 @@
++project SubPipelineVar_19Cfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to SubPipelineVar_19Cfg;
++	SubPipeline SubPipelineVar_19;
++	FamilyElement SubPipelineVar_19_FamilyElement0;
++	Flow SubPipelineVar_19_Flow0;
++	FamilyElement SubPipelineVar_19_FamilyElement1;
++	SubPipelineVar_19_FamilyElement1 = FamilyElement {
++		family = refBy(fHayashiYoshida), 
++		output = {}, 
++		parallelism = 14, 
++		name = "HY", 
++		constraints = {}
++	};
++	SubPipelineVar_19_Flow0 = Flow {
++		destination = refBy(SubPipelineVar_19_FamilyElement1), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::fMapper.output[0]), 
++		name = "f1", 
++		constraints = {}
++	};
++	Flow SubPipelineVar_19_Flow1;
++	SubPipelineVar_19_Flow1 = Flow {
++		destination = refBy(SubPipelineVar_19_FamilyElement1), 
++		grouping = Grouping.directGrouping, 
++		tupleType = refBy(FamiliesCfg::fMapper.output[1]), 
++		name = "f2", 
++		constraints = {}
++	};
++	Flow SubPipelineVar_19_Flow2;
++	SubPipelineVar_19_Flow2 = Flow {
++		destination = refBy(SubPipelineVar_19_FamilyElement1), 
++		grouping = Grouping.allGrouping, 
++		tupleType = refBy(FamiliesCfg::fMapper.output[2]), 
++		name = "f3", 
++		constraints = {}
++	};
++	SubPipelineVar_19_FamilyElement0 = FamilyElement {
++		family = refBy(fMapper), 
++		output = {
++			refBy(SubPipelineVar_19_Flow0), refBy(SubPipelineVar_19_Flow1), refBy(SubPipelineVar_19_Flow2)
++		}, 
++		parallelism = 1, 
++		name = "MP", 
++		constraints = {}
++	};
++	SubPipelineVar_19 = SubPipeline {
++		connectors = {
++			refBy(SubPipelineVar_19_FamilyElement0)
++		}, 
++		subPipelineFamily = refBy(FamiliesCfg::fCorrelationFinancial), 
++		name = "CorrelationSWAlternative", 
++		sources = {}, 
++		numworkers = 4, 
++		artifact = "eu.qualimaster:CorrelationSWAlternative:0.0.1-SNAPSHOT", 
++		debug = false, 
++		fastSerialization = false, 
++		constraints = {}
++	};
++	freeze {
++		SubPipelineVar_19;
++		SubPipelineVar_19_FamilyElement0;
++		SubPipelineVar_19_Flow0;
++		SubPipelineVar_19_FamilyElement1;
++		SubPipelineVar_19_Flow1;
++		SubPipelineVar_19_Flow2;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline
+new file mode 100644
+index 0000000..57e2be2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="CorrelationSW" artifact="eu.qualimaster:CorrelationSW:0.0.1-SNAPSHOT" isSubPipeline="true" subPipelineFamily="FamiliesCfg::fCorrelationFinancial">
++  <nodes xsi:type="pipeline:FamilyElement" name="Mapper" family="24" isConnector="true"/>
++  <nodes xsi:type="pipeline:FamilyElement" name="HayashiYoshida" family="25"/>
++  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" grouping="3" tupleType="FamiliesCfg::fMapper.output[0]"/>
++  <flows name="f2" source="//@nodes.0" destination="//@nodes.1" grouping="3" tupleType="FamiliesCfg::fMapper.output[1]"/>
++  <flows name="f3" source="//@nodes.0" destination="//@nodes.1" grouping="4" tupleType="FamiliesCfg::fMapper.output[2]"/>
++</pipeline:Pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline_diagram
+new file mode 100644
+index 0000000..107cce8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline_diagram
+@@ -0,0 +1,44 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_lDeAED6lEeaI656rJtj2kw" type="Pipeline" name="SubTopology.pipeline_diagram" measurementUnit="Pixel">
++  <children xmi:type="notation:Shape" xmi:id="_ltl7ID6lEeaI656rJtj2kw" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ltnwUD6lEeaI656rJtj2kw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ltnwUT6lEeaI656rJtj2kw" y="5"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="SubTopology.pipeline#//@nodes.0"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ltl7IT6lEeaI656rJtj2kw" x="166" y="259"/>
++  </children>
++  <children xmi:type="notation:Shape" xmi:id="_nIfy4D6lEeaI656rJtj2kw" type="2005" fontName="Segoe UI">
++    <children xmi:type="notation:DecorationNode" xmi:id="_nIfy4j6lEeaI656rJtj2kw" type="5005">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_nIfy4z6lEeaI656rJtj2kw" x="-20" y="80"/>
++    </children>
++    <element xmi:type="pipeline:FamilyElement" href="SubTopology.pipeline#//@nodes.1"/>
++    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nIfy4T6lEeaI656rJtj2kw" x="360" y="252"/>
++  </children>
++  <styles xmi:type="notation:DiagramStyle" xmi:id="_lDeAET6lEeaI656rJtj2kw"/>
++  <element xmi:type="pipeline:Pipeline" href="SubTopology.pipeline#/"/>
++  <edges xmi:type="notation:Connector" xmi:id="_ppH8kD6lEeaI656rJtj2kw" type="4001" source="_ltl7ID6lEeaI656rJtj2kw" target="_nIfy4D6lEeaI656rJtj2kw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_ppJxwD6lEeaI656rJtj2kw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_ppJxwT6lEeaI656rJtj2kw" x="5"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_ppH8kT6lEeaI656rJtj2kw" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="SubTopology.pipeline#//@flows.0"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ppH8kj6lEeaI656rJtj2kw" points="[30, -18, -164, -11]$[96, -57, -98, -50]$[164, -23, -30, -16]"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_q-GLcD6lEeaI656rJtj2kw" type="4001" source="_ltl7ID6lEeaI656rJtj2kw" target="_nIfy4D6lEeaI656rJtj2kw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_q-GLcz6lEeaI656rJtj2kw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_q-GygD6lEeaI656rJtj2kw" x="3" y="10"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_q-GLcT6lEeaI656rJtj2kw" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="SubTopology.pipeline#//@flows.1"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_q-GLcj6lEeaI656rJtj2kw" points="[30, 1, -142, 0]$[164, 3, -8, 2]"/>
++    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_q-M5ID6lEeaI656rJtj2kw" id="(0.13333333333333333,0.6333333333333333)"/>
++  </edges>
++  <edges xmi:type="notation:Connector" xmi:id="_sbWMkD6lEeaI656rJtj2kw" type="4001" source="_ltl7ID6lEeaI656rJtj2kw" target="_nIfy4D6lEeaI656rJtj2kw">
++    <children xmi:type="notation:DecorationNode" xmi:id="_sbWzoD6lEeaI656rJtj2kw" type="6001">
++      <layoutConstraint xmi:type="notation:Location" xmi:id="_sbWzoT6lEeaI656rJtj2kw" x="7" y="10"/>
++    </children>
++    <styles xmi:type="notation:FontStyle" xmi:id="_sbWMkT6lEeaI656rJtj2kw" fontName="Segoe UI"/>
++    <element xmi:type="pipeline:Flow" href="SubTopology.pipeline#//@flows.2"/>
++    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sbWMkj6lEeaI656rJtj2kw" points="[30, 15, -164, 22]$[101, 53, -93, 60]$[164, 12, -30, 19]"/>
++  </edges>
++</notation:Diagram>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopologyCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopologyCfg.ivml
+new file mode 100644
+index 0000000..f5e54e2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopologyCfg.ivml
+@@ -0,0 +1,52 @@
++project SubTopologyCfg {
++
++	import Basics;
++	import Pipelines;
++	import FamiliesCfg;
++	import DataManagementCfg;
++	annotate BindingTime bindingTime = BindingTime.compile to SubTopologyCfg;
++	SubPipeline SubTopology;
++	SubTopology = {name = "CorrelationSW", sources = {/*refBy(SubTopology_Source0), refBy(SubTopology_Source1)*/}, connectors = {refBy(SubTopology_FamilyElement0)}, subPipelineFamily = refBy(fCorrelationFinancial),numworkers = 4, artifact = "eu.qualimaster:CorrelationSW:0.0.1-SNAPSHOT", debug = false, fastSerialization = false, isSubpipeline = true, constraints = {}};
++	
++//	Source SubTopology_Source0;//source to mapper
++//	Source SubTopology_Source1;//source to hayashiyoshida
++//	Flow SubTopology_Flow4;//source flow to mapper
++//	Flow SubTopology_Flow5;//source flow to hayashiyoshida
++	Flow SubTopology_Flow0;
++	Flow SubTopology_Flow1;
++	Flow SubTopology_Flow2;
++//	Flow SubTopology_Flow3; //a flow cycle case
++	FamilyElement SubTopology_FamilyElement0;
++	FamilyElement SubTopology_FamilyElement1;
++//	Sink SubTopology_Sink0;
++//	Flow SubTopology_Flow6;
++//	SubTopology_Source0 = {output = {refBy(SubTopology_Flow4)}, source = refBy(randomSource), parallelism = 1, name = "testMaperSource", constraints = {}};
++//	SubTopology_Source1 = {output = {refBy(SubTopology_Flow5)}, source = refBy(randomSource), parallelism = 1, name = "testHayaSource", constraints = {}};
++//	SubTopology_Sink0 = {sink = refBy(priorSnk), parallelism = 1, name = "Sink", constraints = {}};
++	SubTopology_Flow0 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.directGrouping, tupleType = refBy(fMapper.output[0]), name = "f1", constraints = {}};
++	SubTopology_Flow1 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.directGrouping, tupleType = refBy(fMapper.output[1]), name = "f2", constraints = {}};
++	SubTopology_Flow2 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.allGrouping, tupleType = refBy(fMapper.output[2]), name = "f3", constraints = {}};
++//	SubTopology_Flow3 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.allGrouping, tupleType = refBy(fHayashiYoshida.output[1]), name = "f4", constraints = {}};
++//	SubTopology_Flow4 = {destination = refBy(SubTopology_FamilyElement0), grouping = Grouping.shuffleGrouping, tupleType = refBy(fMapper.input[2]), name = "f4", constraints = {}};
++//	SubTopology_Flow5 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.shuffleGrouping, tupleType = refBy(fHayashiYoshida.input[3]), name = "f5", constraints = {}};
++//	SubTopology_Flow6 = {destination = refBy(SubTopology_Sink0), grouping = Grouping.shuffleGrouping, tupleType = refBy(fHayashiYoshida.output[0]), name = "f6", constraints = {}};
++	SubTopology_FamilyElement0 = {family = refBy(fMapper), output = {refBy(SubTopology_Flow0),refBy(SubTopology_Flow1),refBy(SubTopology_Flow2)}, parallelism = 1, name = "Mapper", constraints = {}, permissibleParameters = {refBy(fMapper.parameters[0])}};
++	SubTopology_FamilyElement1 = {family = refBy(fHayashiYoshida), output = {/*refBy(SubTopology_Flow6)*/}, parallelism = 14, name = "HayashiYoshida", constraints = {}};
++	
++	freeze {
++		SubTopology;
++		SubTopology_Flow0;
++	    SubTopology_Flow1;
++	    SubTopology_Flow2;
++//	    SubTopology_Flow3;
++//        SubTopology_Source0;
++//	    SubTopology_Flow4;
++//	    SubTopology_Source1;
++//	    SubTopology_Flow5;
++		SubTopology_FamilyElement0;
++		SubTopology_FamilyElement1;
++//		SubTopology_Sink0;
++//		SubTopology_Flow6;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinesXml.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinesXml.vtl
+new file mode 100644
+index 0000000..426c0cf
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinesXml.vtl
+@@ -0,0 +1,91 @@
++import commonVTLMethods;
++@advice(QM)
++template pipelinesXml(Configuration config, FileArtifact target, sequenceOf(DecisionVariable) pipelines, String interfaceArtifact, String modelArtifact, setOf(HardwareAlgorithm) hardwareAlgorithms) {
++
++	def appendBasics(Text text) {
++		text.append("<project name=\"pipelines\" default=\"deploy\" basedir=\".\">
++
++    <property file=\""+"$"+"{user.home}/global-build.properties\"/>
++    <property file=\""+"$"+"{user.home}/qualimaster-build.properties\"/>
++    <include file=\""+"$"+"{user.home}/macros.xml\"/>
++
++    <!--
++    <taskdef uri=\"antlib:org.jacoco.ant\" resource=\"org/jacoco/ant/antlib.xml\"/>
++
++    <path id=\"easyTaskDef.lib\">
++      <fileset dir=\""+"$"+"{home.base.dir}/"+"$"+"{projects.standalone.dir}/build/generatedLibs.ex/dist\">
++        <include name=\"*.jar\"/>
++      </fileset>
++    </path>
++    -->
++");
++	}
++	
++	def appendPipelinesDeploy(sequenceOf(DecisionVariable) pipelines, Text text) {
++		for(Pipeline pip : pipelines) {
++			String pipName = pip.name;
++			String artifact = pip.artifact;
++			String pipelineJarFileName = obtainArtifactName(artifact,false);
++			String pipelineFatJarFileName = obtainArtifactName(artifact,true);
++			if(pipelineJarFileName.length()>0) {
++				text.append("      <delete file=\"pipelines/eu/qualimaster/$pipName/target/${pipelineJarFileName}.jar\"/>\n");
++				text.append("      <rename src=\"pipelines/eu/qualimaster/$pipName/target/${pipelineFatJarFileName}.jar\" dest=\"pipelines/eu/qualimaster/$pipName/target/${pipelineJarFileName}.jar\"/>\n");
++				text.append("      <mvnDeploy folderName=\"eu/qualimaster/$pipName\" pomFile=\"pipelines/eu/qualimaster/$pipName/pom.xml\" 
++        jarFolder=\"pipelines/eu/qualimaster/$pipName/target\" jarFile= \"${pipelineJarFileName}.jar\"/>\n");
++			}			
++	    }
++	}
++	
++	def appendInterfaceDeploy(String interfaceArtifact, Text text) {
++		String interfaceJarFileName = obtainArtifactName(interfaceArtifact, false);
++		if(interfaceJarFileName.length()>0) {
++		    text.append("      <mvnDeploy folderName=\"if-gen\" pomFile=\"if-gen/pom.xml\" 
++        jarFolder=\"if-gen/target\" jarFile= \"${interfaceJarFileName}.jar\"/>\n");
++		}		
++	}
++	
++	def appendModelArtifactDeploy(String modelArtifact, Text text) {
++		String artifactName = obtainArtifactName(modelArtifact, false);
++		if(artifactName.length()>0) {			
++		    text.append("      <mvnDeploy folderName=\"model-gen\" pomFile=\"model-gen/pom.xml\" jarFolder=\"model-gen/target\" jarFile=\"${artifactName}.jar\" />\n");
++	    }
++	}
++	
++	def appendHardwareAlgorithmDeploy(setOf(HardwareAlgorithm) harwareAlgorithms, Text text) {
++		for(HardwareAlgorithm alg : hardwareAlgorithms) {
++			String artifactName = alg.name + "-" + GenAlgVersion;
++			text.append("      <mvnDeploy folderName=\"hardwareAlgorithms/eu/qualimaster/algorithms/${alg.name}\" pomFile=\"hardwareAlgorithms/eu/qualimaster/algorithms/${alg.name}/pom.xml\" 
++        jarFolder=\"hardwareAlgorithms/eu/qualimaster/algorithms/${alg.name}/target\" jarFile= \"${artifactName}.jar\"/>\n");
++		}
++	}
++	
++	def String obtainArtifactName(String artifact, Boolean pipeline) {
++		String artifactName = null;
++		sequenceOf(String) artList = artifact.split(":");
++		if(artList.size() == 3) {
++			String artifactId = artList[1];
++		    String versionNum = artList[2];
++		    if(pipeline) {
++		    	artifactName = artifactId + "-" + versionNum + "-jar-with-dependencies";
++		    } else {
++		    	artifactName = artifactId + "-" + versionNum;
++		    }		    
++		}
++		artifactName;   
++	}
++
++	def main(Configuration config, FileArtifact target, sequenceOf(DecisionVariable) pipelines, String interfaceArtifact, String modelArtifact, setOf(HardwareAlgorithm) hardwareAlgorithms) {
++		Text text = target.getText();
++//		text.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
++		appendBasics(text);
++		text.append("    <target name=\"deploy\">\n");
++		appendPipelinesDeploy(pipelines, text);
++		appendInterfaceDeploy(interfaceArtifact, text);
++		appendHardwareAlgorithmDeploy(hardwareAlgorithms, text);
++		appendModelArtifactDeploy(modelArtifact, text);
++        //text.append("      <clearMavenRepo/>\n");
++		text.append("    </target>\n");
++		text.append("</project>\n");
++		target.rename("pipelines.xml");
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/profileCtl.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/profileCtl.vtl
+new file mode 100644
+index 0000000..308ceee
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/profileCtl.vtl
+@@ -0,0 +1,5 @@
++template profileCtl(Configuration config, FileArtifact target, String artifact) {
++	def main(Configuration config, FileArtifact target, String artifact) {
++		'import $artifact'
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/protoFiles.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/protoFiles.vtl
+new file mode 100644
+index 0000000..9f6df9c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/protoFiles.vtl
+@@ -0,0 +1,67 @@
++import commonVTLMethods;
++@advice(QM)
++template protoFiles(Configuration config, FileArtifact target, DecisionVariable elt, String pkg) {
++	def produceForTuples(Tuples tuples, Boolean output, String ifName, Integer indent) {
++	    String type;
++	    String typeName;
++    	String tupleName;
++		Integer count = 1;		
++    	for (Tuple t : tuples) {
++    		Boolean flag1 = true;
++			Boolean flag2 = false;
++    		tupleName = t.name;
++    		tupleName = firstToUpperCase(tupleName);
++	        if (output) {
++    		    type = "${ifName}${tupleName}Output";
++    		    typeName = "output";
++    	    } else {
++    		    type = "${ifName}${tupleName}Input";
++    		    typeName = "input";   		
++    	    }  	    
++    	   	for (Field f : t.fields) {
++    	   		FieldType ftype = f.type;
++    			String fname = toIdentifier("${f.name}");    			
++    			String ptype = basicTypeForProto(ftype);
++    			if(ptype != "") {
++    				if(flag1) {
++    					'message S$type {' | indent; //only generate once for one tuple
++    					flag1 = false;
++    					flag2 = true;
++    				}
++	    			"required $ptype $fname = $count;" | indent+4;
++	    			count = count + 1;		    				
++    			}  			
++    		}
++    		if(flag2) {
++	    		'}' | indent;
++	    		flag2 = false;
++    		}
++    		''
++      }
++    }
++    
++	def produceFor(DecisionVariable elt) {
++		'//unhandled type ${elt.type()}'
++	}
++	def produceFor(Family elt) {
++		produceForTuples(elt.input, false, "I"+formulateString(elt.name), 0);
++		produceForTuples(elt.output, true, "I"+formulateString(elt.name), 0);
++	}
++	
++	def produceFor(DataSource elt) {
++		produceForTuples(elt.input, true, formulateString(elt.name), 0);
++	}
++	def produceFor(DataSink elt) {
++		produceForTuples(elt.output, false, formulateString(elt.name), 0);
++	}
++	
++	def main(Configuration config, FileArtifact target, DecisionVariable elt, String pkg) {		
++		'package $pkg.protobuf;'
++
++		'option java_package = "eu.qualimaster.protos";'
++		'option java_outer_classname = "${formulateString(eltName(elt))}Protos";'
++		''
++		produceFor(elt);
++	}
++	
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/serializationRegistry.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/serializationRegistry.vtl
+new file mode 100644
+index 0000000..280b0bc
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/serializationRegistry.vtl
+@@ -0,0 +1,61 @@
++@advice(QM)
++template serializationRegistry(Configuration config, FileArtifact target, setOf(DecisionVariable) families) {
++	//TODO: register the specific types.
++    // needs to be translated into new advice-style of writing
++
++    def produceForTuples(DecisionVariable tuples, Boolean output, Boolean implementation, String fName, Integer indent) {
++	    String type;
++	    String serializerType;
++	    String typeName;
++    	String tupleName;
++    	String ifName = "I" + fName;
++    	for (Tuple t : tuples) {
++    		tupleName = t.name;
++    		tupleName = firstToUpperCase(tupleName);
++	        if (output) {
++    		    type = "${ifName}${tupleName}Output";
++    		    typeName = "output";
++    	    } else {
++    		    type = "${ifName}${tupleName}Input";
++    		    typeName = "input";   		
++    	    }
++    	    serializerType = "${fName}Serializers.${type}Serializer";
++    	    type = "${fName}.${type}"; // qualify inner classes
++    	    
++    	    'conf.registerSerialization(${type}.class, ${serializerType}.class);' | indent;
++      }
++    }
++
++    def main(Configuration config, FileArtifact target, setOf(DecisionVariable) families) {
++    	'package eu.qualimaster.families.imp;'
++    	''
++    	'import javax.annotation.Generated;'
++    	'import backtype.storm.Config;'
++    	''
++    	'/**'
++    	' * The registration of the generated serializers (GEN).'
++    	' */'
++    	'@Generated(value="EASy-Producer")'
++    	'public class SerializationRegistry {'
++    	''
++    	'/**'
++    	' * Registers all generated kryo serializers. To be called from a topology.'
++    	' */'
++    	'public static final void registerKryoSerializers(Config conf) {' | 4;
++    	for (Family family : families) {
++    		String fName = family.name.firstToUpperCase();
++    	    produceForTuples(family.byName("input"), false, true, fName, 8);
++    	    produceForTuples(family.byName("output"), true, true, fName, 8);
++    	}
++    	'}' |4;
++        ''    	
++    	'/**'
++    	' * Registers all generated hardware serializers. To be called from a topology.'
++    	' */'
++    	'public static final void registerHardwareSerializers() {' | 4;
++    	'}' |4;
++    	
++        '}'
++    }
++    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/settingsXml.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/settingsXml.vtl
+new file mode 100644
+index 0000000..5afcc52
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/settingsXml.vtl
+@@ -0,0 +1,270 @@
++@advice(QM)
++template settingsXml(Configuration config, FileArtifact target, setOf(Sink) sinks, setOf(Parameter) permissibleParameters, mapOf(String, setOf(DecisionVariable)) lastElementMap, String topoName) {
++	def main(Configuration config, FileArtifact target, setOf(Sink) sinks, setOf(Parameter) permissibleParameters, mapOf(String, setOf(DecisionVariable)) lastElementMap, String topoName) {
++		Text text = target.getText();
++		text.append("<pipeline>\n");
++		text.append("    <name>$topoName</name>\n");
++		
++		//append external settings
++		appendExternalSettings(text);
++		
++		//append commands
++		text.append("    <commands>\n");
++		//append common commands
++		appendCommonCommands(text);
++		
++		//append replay commands, if existed - agreed with Apostolos to remove as they are not used anymore
++		/* 
++		if(hasReplaySink(sinks)) {
++			appendReplayCommands(text);
++		}
++		*/
++		//append permissible parameter commands
++		appendPermissibleParameterCommands(permissibleParameters, text);
++		text.append("    </commands>\n");
++		
++		/*
++		//append sinks 
++		text.append("    <sinks>\n");
++		//append general sinks
++		appendGeneralSinks(sinks, text);
++		//append replay sinks
++		appendReplaySinks(sinks, text);
++		text.append("    </sinks>\n");
++		
++		if(permissibleParameters.size() > 0) {
++			text.append("    <permissibleParameters>\n");
++			appendPermissibleParameters(permissibleParameters, text);
++			text.append("    </permissibleParameters>\n");
++		}
++		* 
++		*/
++		text.append("</pipeline>\n");
++		target.rename("settings.xml");
++	}
++	
++	def appendPermissibleParameterCommands(setOf(Parameter) parameters, Text text) {
++		for(Parameter p : parameters) {
++			text.append("        <!--This is generated based on the configuration of permissible parameters from the pipeline-->\n");
++			text.append("        <command>									
++			<name>change${p.name}</name>
++			<request>
++				<field sequence=\"0\">change${p.name}</field>
++				<field sequence=\"1\">%new${firstToUpperCase(p.name)}%</field>
++			</request>
++			<response>
++				<field sequence=\"0\">change${p.name}_response</field>
++				<field sequence=\"1\">%status%</field>
++				<field sequence=\"2\">%new${firstToUpperCase(p.name)}%</field>
++			</response>
++		</command>\n");
++		}
++	}
++	
++	def appendReplayCommands(Text text) {
++		text.append("        <command>
++			<name>replaySubscribe</name>
++			<request>
++				<field sequence=\"0\">replaySubscribe</field>
++				<field sequence=\"1\">%replayID%</field>
++				<field sequence=\"2\">%listOfPairs%</field>
++				<field sequence=\"3\">%StartDateTime%</field>
++				<field sequence=\"4\">%EndDateTime%</field>
++				<field sequence=\"5\">%Speed%</field>
++			</request>
++			<response>
++				<field sequence=\"0\">replaySubscribe_response</field>
++				<field sequence=\"1\">%status%</field>
++				<field sequence=\"2\">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>replayUnsubscribe</name>
++			<request>
++				<field sequence=\"0\">replayUnsubscribe</field>
++				<field sequence=\"1\">%replayID%</field>
++			</request>
++			<response>
++				<field sequence=\"0\">replayUnsubscribe_response</field>
++				<field sequence=\"1\">%status%</field>
++			</response>
++		</command>\n");
++	}
++	
++	def appendCommonCommands(Text text) {
++		text.append("        <command>
++			<name>login</name>
++			<request>
++				<field sequence=\"0\">login</field>
++				<field sequence=\"1\">%username%</field>
++				<field sequence=\"2\">%password%</field>
++			</request>
++			<response>
++				<field sequence=\"0\">login_response</field>
++				<field sequence=\"1\">%status%</field>
++				<field sequence=\"2\">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence=\"0\">logout</field>
++			</request>
++			<response>
++				<field sequence=\"0\">logout_response</field>
++				<field sequence= \"1\">%status%</field>
++				<field sequence=\"2\">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence=\"0\">quoteList</field>
++			</request>
++			<response>
++				<field sequence=\"0\">quoteList_response</field>
++				<field sequence=\"1\">%status%</field>
++				<field sequence=\"2\">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence=\"0\">requestHistoricalSentiment</field>
++				<field sequence=\"1\">%startDate%</field>
++				<field sequence=\"2\">%endDate%</field>
++				<field sequence=\"3\">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence=\"0\">historicalSentiment_response</field>
++				<field sequence=\"1\">%status%</field>
++				<field sequence=\"2\">%result%</field>
++			</response>
++		</command>\n");
++	}
++	
++	def appendExternalSettings(Text text) {
++		text.append("    <external_service_settings>\n");
++		//text.append("        <ip>configurableIp</ip>\n");
++		//text.append("        <port>configurablePort</port>\n");
++		text.append("        <packet_delimiter>!</packet_delimiter>\n");
++		text.append("        <main_delimiter>,</main_delimiter>\n");
++		text.append("        <secondary_delimiter>|</secondary_delimiter>\n");
++		text.append("        <line_delimiter>\"Lf\"</line_delimiter>\n");
++		text.append("    </external_service_settings>\n");
++	}
++	/**
++	 * Appends the replay sinks.
++	 */
++	def appendReplaySinks(setOf(Sink) sinks, Text text) {
++		for(Sink snk : sinks) {
++			if(snk.type() == "ReplaySink") {
++				ReplaySink reSink = snk;
++				text.append("        <sink type=\"replaySink\">\n");
++				text.append("            <name>${snk.name}</name>\n");
++				text.append("            <data>\n");
++				
++				String varName = snk.varName().firstToUpperCase();
++				setOf(DecisionVariable) lastElt = {};
++				if(lastElementMap.containsKey(varName)) {
++					lastElt = lastElementMap.get(varName); //last elements linked to the current element	
++				}
++				obtainTupleTypes(lastElt, text); //append only relative tuple types
++				
++				text.append("            </data>\n");
++				text.append("        </sink>\n");
++			}
++		}
++	}
++	
++	/**
++	 * Appends the source, i.e., sink in the pipeline.
++	 */
++	def appendGeneralSinks(setOf(Sink) sinks, Text text) {
++        //produce data tuples
++        for(Sink snk : sinks) {
++        	if(snk.type() == "Sink") {//only for general sink
++        		text.append("    <sink type=\"sink\">\n");
++				text.append("        <name>${snk.name}</name>\n");
++        		text.append("        <data>\n");
++        		String varName = snk.varName().firstToUpperCase();
++				setOf(DecisionVariable) lastElt = {};
++				if(lastElementMap.containsKey(varName)) {
++					lastElt = lastElementMap.get(varName); //last elements linked to the current element	
++				}
++				obtainTupleTypes(lastElt, text); //append only relative tuple types
++				text.append("        </data>\n");
++    			text.append("    </sink>\n");
++        	}
++        }
++	}
++	
++	def obtainTupleTypes(setOf(DecisionVariable) lastElt, Text text) {
++		for(DecisionVariable e : lastElt) {
++			Tuples tuples;
++			if(e.type() == "Source") {
++				Source src = e;
++      			DataSource dataSrc = src.source;
++      			tuples = dataSrc.input;
++			} else if (e.type() == "FamilyElement") {
++				FamilyElement fe = e;
++				Family fm = fe.family;
++				tuples = fm.output;
++			} else if (e.type() == "DataManagementElement") {//recursively check the last element
++				String dmVarName = e.varName().firstToUpperCase();
++				setOf(DecisionVariable) lastElt = lastElementMap.get(dmVarName);
++				obtainTupleTypes(lastElt, text);
++			}
++			if(tuples != null and tuples.size() > 0) {
++				appendDataTuples(tuples, text); //only generate the type of tuples emitted from the last element
++			}
++		}
++	}
++	def appendDataTuples(Tuples tuples, Text text) {
++		for(Tuple t : tuples) {
++    		text.append("            <tuple>\n");
++    		text.append("                <name>${t.name}</name>\n");
++    		for(Field f : t.fields) {
++    			text.append("                <field>\n");
++    			text.append("                    <name>${f.name}</name>\n");
++    			text.append("                    <type>${f.type.class}</type>\n");
++    			text.append("                </field>\n");
++    		}       		
++    		text.append("            </tuple>\n");
++    	}
++	}
++	
++	def appendPermissibleParameters(setOf(Parameter) parameters, Text text) {
++		for(Parameter p : parameters) {
++			text.append("        <parameter>\n");
++			text.append("            <name>${p.name}</name>\n");
++			text.append("            <value/>\n");//consider default value?
++			text.append("        </parameter>\n");
++		}
++	}
++	
++	def Boolean hasReplaySink(setOf(Sink) sinks) {
++		Boolean result = false;
++		for(Sink snk : sinks) {
++			if(snk.type() == "ReplaySink") {
++				result = true;
++			}
++		}
++		result;
++	}
++	
++	def Boolean hasSink(setOf(Sink) sinks) {
++		Boolean result = false;
++		for(Sink snk : sinks) {
++			if(snk.type() == "Sink") {
++				result = true;
++			}
++		}
++		result;
++	}
++		 
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormDataManagementElement.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormDataManagementElement.vtl
+new file mode 100644
+index 0000000..1fcae8a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormDataManagementElement.vtl
+@@ -0,0 +1,158 @@
++import commonVTLMethods;
++@advice(QM)
++template stormDataManagementElement(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, Tuple)) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap) {
++	
++	def produceOutputVariable(setOf(DecisionVariable) lastElts, mapOf(Tuple,String) nameToOutputMap) {
++		String outputInfName; //output interface name
++        Integer size = lastElts.size();
++		Integer count = 1;
++		for(DecisionVariable lastElt : lastElts) {
++			FamilyElement fe = lastElt;
++			Family fm = fe.family;			
++			Tuples tuples = fm.output;			
++			String tupleId = "";			
++			for(Tuple t : tuples) {				
++				outputInfName = nameToOutputMap.get(t);
++				if(size > 1){
++					 tupleId = "$count";
++				}
++			    '    transient $outputInfName iTuple${formulateString(t.name)}${tupleId} = null;'
++			    count = count + 1;
++			}
++			
++		}	
++	
++	}
++	
++	def produceInputForTuples(mapOf(Tuple,String) nameToOutputMap, setOf(DecisionVariable) lastElts, String prefixStreamId, setOf(String) streamListToDeclare) {
++		String outputInfName; //output interface name	
++		Boolean multiStream = false;
++		Integer indent = 4;
++		
++		Integer size = lastElts.size();
++		Integer count = 1;
++		for(DecisionVariable lastElt : lastElts) {
++			FamilyElement fe = lastElt;
++			Family fm = fe.family;			
++			Tuples tuples = fm.output;
++			String tupleId = "";
++			String tupleName;
++			for(Tuple t : tuples) {
++			    if(size > 1){	
++			    	tupleId = "$count";			
++				    multiStream = true;
++				    indent = 8;
++			    }				
++				outputInfName = nameToOutputMap.get(t);
++				tupleName = t.name;
++				streamListToDeclare.add(tupleName);
++//				if(multiStream){
++				    'if(tuple instanceof $outputInfName) {' | indent;
++//			    }
++			    'iTuple${formulateString(t.name)}${tupleId} = ($outputInfName)tuple.getValue(0);' | indent+4;
++			    'streamId = "${prefixStreamId}${tupleName.firstToUpperCase()}";' | indent+4;
++			   // '_collector.emit(streamId, tuple, new Values(iTuple${tupleId}));' | indent+4;
++			   '//support.write(iTuple${tupleId});' | indent+4; //--problematic line
++			   '//_collector.ack(tuple);' | indent+4;			   
++//			    if(multiStream){
++			 	    '}' | indent;
++//			    }
++				count = count + 1;
++			}
++			
++		}				
++		
++	}
++	
++    def main(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName,mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, Tuple)) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap) {
++        setOf(String) streamListToDeclare = {};
++        String name = elt.varName().firstToUpperCase() + elt.type();
++        String nontopoStream = "Stream";
++        String topoStream = "TopoStream";
++        String dataMgtName = elt.byName("dataManagement").varName();
++        String ifName = "I" + dataMgtName.firstToUpperCase();
++      	String ifOutputName = "I" + ifName + "Output";
++      	
++		String streamId = elt.varName() + nontopoStream;
++		String topoStreamId = elt.varName();
++		
++		DataManagementElement dataMgtElt = elt;
++		PersistentDataElement persistentDataElt = dataMgtElt.dataManagement;
++		
++		String fmVarName = elt.varName().firstToUpperCase();
++		setOf(DecisionVariable) lastElts = lastElementMap.get(fmVarName); //last elements linked to the current element
++		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
++    	''    	
++    	'import java.util.*;'
++    	'import org.apache.log4j.Logger;'
++    	'import backtype.storm.tuple.*;'
++    	'import backtype.storm.task.*;'
++    	'import backtype.storm.topology.*;'
++    	'import eu.qualimaster.common.signal.*;'
++    	'import eu.qualimaster.dataManagement.DataManager;'
++		'import eu.qualimaster.dataManagement.storage.AbstractStorageTable;'
++		'import eu.qualimaster.dataManagement.storage.support.IStorageSupport;'
++		'import eu.qualimaster.dataManagement.strategies.*;'
++		    	produceImportsFromLastElements(lastElts, {}, topoName);
++    	''
++    	'/**'
++    	'* Defines the FamilyElment in the pipeline(GEN).'
++    	'**/'
++    	'@SuppressWarnings({ "rawtypes", "serial" })'
++    	'public class $name extends BaseSignalBolt {'
++    	''
++    	'    final static Logger logger = Logger.getLogger($name.class);'
++    	'    transient OutputCollector _collector;'
++    	'    private static String streamId;'
++    	'    private transient IStorageSupport support;'
++    	produceOutputVariable(lastElts, nameToOutputMap);	    	
++    	''
++    	'    public $name(String name, String namespace) {'
++    	'        super(name, namespace);'
++    	'    }'
++    	''   	      
++		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
++		'		 super.prepare(map, topologyContext, collector);'
++		'		 String pipelineName = "$topoName";'
++		String location = persistentDataElt.storageLocation;
++		'		 String location = "$location";'
++		String strategyStr = obtainManagementStrategyInstance(persistentDataElt);
++		'		 IStorageStrategyDescriptor storageStrategy = $strategyStr;'
++		'		 AbstractStorageTable table = DataManager.INTERMEDIARY_STORAGE_MANAGER.getTable(pipelineName, location, storageStrategy);'
++		'         support = table.getStorageSupport();'
++		'         _collector = collector;'
++		'initMonitor();' | 8;
++		'logger.info("The end of the prepare method.");' | 8;
++		'    }'
++	    ''
++	    //override the initial monitor
++	    produceInitMonitor(true, 4);
++	    ''
++		'    public void execute(Tuple tuple) {'
++        if (genMonitoringProbes) {
++        '        startMonitoring();'
++        }
++		
++		 //produce input -- output casting statement
++		 produceInputForTuples(nameToOutputMap, lastElts, streamId, streamListToDeclare);
++        if (genMonitoringProbes) {      
++        '        endMonitoring();'
++        }
++		'    }'
++        ''
++        	
++	    '    @Override'
++        '    public void cleanup() {'
++        '        super.cleanup();'
++        '    }'
++        ''       
++		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'	
++		for(String s : streamListToDeclare) {
++		'        declarer.declareStream("${streamId}${s.firstToUpperCase()}", new Fields("$ifOutputName"));'	
++		}			
++		
++		'    }'
++    	''
++    	'}'
++    }	
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBolt.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBolt.vtl
+new file mode 100644
+index 0000000..b372a40
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBolt.vtl
+@@ -0,0 +1,374 @@
++import commonVTLMethods;
++@advice(QM)
++template stormEndBolt(Configuration config, FileArtifact target, String topoName, String topLevelPip, DecisionVariable fmElt, Algorithm algorithm, String nextNode) {
++	String algName = algorithm.name.firstToUpperCase().toIdentifier();
++	String fmVarName = fmElt.varName();
++	FamilyElement fe = fmElt;
++	Family fm = fe.family;
++	String fmName = fm.name.firstToUpperCase().toIdentifier();
++	Boolean isActive;
++	def main(Configuration config, FileArtifact target, String topoName, String topLevelPip, DecisionVariable fmElt, Algorithm algorithm, String nextNode) {
++		isActive = isActiveAlgorithm(fm, algorithm);
++		setOf(String) types = coreTupleTypes(fmName, algorithm, false); //get the list of output types
++		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
++    	'' 
++    	/****************************/
++    	/*        Imports           */  
++    	/****************************/ 
++    	'import java.util.*;'
++    	'import java.io.IOException;'
++    	'import org.apache.log4j.Logger;'
++    	'import backtype.storm.tuple.*;'
++    	'import backtype.storm.task.*;'
++    	'import backtype.storm.topology.*;'
++    	'import eu.qualimaster.common.signal.*;'
++    	'import eu.qualimaster.base.algorithm.*;'
++    	'import eu.qualimaster.families.inf.*;'
++    	if(looseSub) {
++    		'import com.esotericsoftware.kryo.io.Output;'
++    		'import java.util.concurrent.ConcurrentLinkedQueue;'
++    		'import eu.qualimaster.common.signal.PortManager.*;'
++			'import eu.qualimaster.common.signal.PortManager;'
++			'import eu.qualimaster.base.serializer.KryoGeneralTupleSerializer;'
++			'import eu.qualimaster.common.switching.*;'
++    	}
++		if(newSwitchLog) {
++    		'import java.io.PrintWriter;'
++			'import eu.qualimaster.common.logging.DataLogger;'
++			'import java.util.Calendar;'
++    	}  
++    	for(String type : types) {
++			'import eu.qualimaster.families.imp.${fmName}.I$type;'
++			'import eu.qualimaster.families.inf.I${fmName}.II$type;'
++		}  	    	    			
++		/****************************/
++    	/*        Bolt class        */  
++    	/****************************/
++    	''
++    	'/**'
++    	'* Defines the end bolt for the algorithm $algName (GEN).'  
++    	'**/'
++    	'@SuppressWarnings({ "rawtypes", "serial" })'
++    	String name = algName + "EndBolt";
++//    	if(looseSub) {
++//    		name = topoName + "EndBolt";
++//    	}
++    	'public class $name extends BaseSignalBolt {'
++		    	/****************************/
++		    	/*     Class variables      */  
++		    	/****************************/
++    	''    
++    	'    final static Logger logger = Logger.getLogger(${name}.class);'
++    	'    transient OutputCollector _collector;'
++    	'    private String streamId;'
++    		'private boolean emit = false;' | 4;
++    		'private boolean isActive;' | 4;
++    		if(looseSub) {
++    			'    private String host = "localhost";'
++		    	'    private int port;'
++		    	'    private transient TupleSender sender = null;'
++		    	'    private transient KryoGeneralTupleSerializer genSer = null;'
++		    	'private transient Queue<IGeneralTuple> queue = null;' | 4;
++		    	'private transient SynchronizedQueue<IGeneralTuple> syn = null;' | 4;
++		    	'private static int QUEUE_SIZE = 100;' | 4;
++    		}
++    		if(newSwitchLog) {
++				'private transient PrintWriter out = null;' | 4;
++			}
++		    	/****************************/
++		    	/*    Class constructor     */  
++		    	/****************************/
++    	''
++    	'    public $name(String name, String namespace, String streamId) {'
++    	'        super(name, namespace, $genMonitoringProbes);'
++    			 'this.streamId = streamId;' | 8;
++    	'    }'  
++    			/****************************/
++		    	/*      prepare method      */  
++		    	/****************************/		
++		'' 	      
++		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
++		'        super.prepare(map, topologyContext, collector);'
++				 '_collector = collector;' | 8;
++				 if(newSwitchLog) {
++				 	'String logDir = (String) map.get("LOG.DIRECTORY");' | 8;
++				 	'out = DataLogger.getPrintWriter(logDir + "${algName}EndBolt.log");' | 8;
++				 }
++				 if(looseSub) {
++				 	'isActive = "true".equals(map.get(Constants.CONFIG_KEY_INITIAL_SUBPIPELINE));' | 8;
++				 } else {
++				 	'isActive = $isActive; //initialized true with the first algorithm in the family' | 8;
++				 }
++				 'logger.info("Is this active? " + isActive);' | 8;
++			 	 if(newSwitchLog) {
++			 		'out.println("Is this active? " + isActive);' | 8;
++			 		'out.flush();' | 8;
++			 	 }
++				 if(!looseSub) {
++					 if(isActive) {
++					 	'emit = true;' | 8;	
++					 } else {
++					 	'emit = false;' | 8;	
++					 }	
++				 }	 
++				if(looseSub) {
++					'genSer = new KryoGeneralTupleSerializer(map); ' | 8;
++					'queue = new ConcurrentLinkedQueue<IGeneralTuple>();' | 8;
++	        		'syn = new SynchronizedQueue<IGeneralTuple>(queue, QUEUE_SIZE);' | 8;
++	        		
++	        		'PortManager portManager = getPortManager();' | 8;
++	        			'PortAssignment assignment = null;' | 8;
++	        			'while(assignment == null && portManager.isConnected()) {' | 8;
++			        		'try {' | 12;
++			        			'assignment = portManager.getPortAssignment("$topLevelPip", "$nextNode", 0, null);' | 16; //TODO: change hardcoded!
++							'} catch (SignalException e) {' | 12;
++								'e.printStackTrace();' | 16;
++							'}' | 12;
++	        			'}' | 8;   
++	        		'if(assignment != null) {' | 8;    		
++						'host = assignment.getHost();' | 12;
++	        			'port = assignment.getPort();' | 12;
++	        		'}' | 8;
++	        		if(newSwitchLog) {
++	        			'logger.info("Connecting to the host : " + host + ", the port: " + port);' | 8;
++			        	'out.println("Connecting to the host : " + host + ", the port: " + port);' | 8;
++			        	'out.flush();' | 8;
++			        }
++					'sender = new TupleSender(host, port);' | 8;
++					'Thread sendTupleThread = new Thread(new SendTuple());' | 8;
++	        		'sendTupleThread.start();' | 8;
++				}
++				'initMonitor();' | 8;
++				'logger.info("The end of the prepare method.");' | 8;
++			'}' | 4; 
++	    ''
++	    //override the initial monitor
++	    produceInitMonitor(true, 4);
++	    
++    			/****************************/
++		    	/*      execute method      */  
++		    	/****************************/	
++		if(looseSub) {
++			'/**' | 4;
++			' * A thread executes tuples.' | 4;
++			'**/' | 4;
++			'public class SendTuple implements Runnable {' | 4;
++            ''
++            'private AbstractMonitor monitor = createThreadMonitor();' | 8;
++            ''
++				'@Override' | 8;
++	    		'public void run() {' | 8;
++					'while(true) {' | 12;
++			            if (genMonitoringProbes) {      
++                        'monitor.startMonitoring();' | 16;
++                        }
++                        'IGeneralTuple tuple = syn.consume();' | 16;
++						'byte[] bytes = genSer.serialize(tuple);' | 16;
++						'sender.send(bytes);' | 16;
++                        if (genMonitoringProbes) {
++                        'monitor.endMonitoring(tuple);' | 16;
++                        }           
++					'}' | 12;
++				'}' | 8;
++			'}' | 4;  
++			''  
++			'    public void execute(Tuple tuple) {'
++				if(newSwitchLog) {
++	    			'out.println("Received data and emitting...");' | 8;
++	    			'out.flush();' | 8;
++	    		}
++	    			'if(isActive) {' | 8;
++				 		'//queue received data' | 12;
++				 		'syn.produce(new GeneralTuple(tuple.getValues()));' | 12;
++				 	'}' | 8;
++				 	'_collector.ack(tuple);' | 8;
++				 '}' | 4;	 
++		} else {   
++		'    public void execute(Tuple tuple) {'
++				'if(isActive) {' | 8;
++			 		'activeExecute(tuple);' | 12;
++			 	'} else {' | 8;
++			 		'passiveExecute(tuple);' | 12;
++			 	'}' | 8;
++			 '}' | 4;
++		
++			 ''	
++			 'public void activeExecute(Tuple tuple) {' | 4;
++				'if(emit) {' | 8;
++					castTupleTypes();
++			 		'//_collector.emit(streamId, new Values(tuple));' | 12;
++			 		'_collector.ack(tuple);' | 12;
++			 	'}' | 8;
++			 '}' | 4;
++			 ''
++			 'public void passiveExecute(Tuple tuple) {' | 4;
++				'if(emit) {' | 8;
++					castTupleTypes();
++			 		'//_collector.emit(streamId, new Values(tuple));' | 12;
++			 	'}' | 8;
++			 	'_collector.ack(tuple);' | 8;
++			 '}' | 4;
++			 }
++			 ''	
++    			/********************************/
++		    	/* notifyParameterChange method */  
++		    	/********************************/
++			'@Override' | 4;
++			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
++				'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
++					'ParameterChange para = signal.getChange(i);' | 12;			
++					'switch (para.getName()) {' | 12;
++						'case "disable": //active' | 16;
++							if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter signal disable!");' | 20;
++				                'out.flush();' | 20;
++				            }
++				            if(!looseSub) {
++								'emit = false;' | 20;
++							} else {
++								'isActive = false;' | 20;
++							}
++							'try {' | 20;
++								'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), "${algName}Intermediary", "stopped", true, null);' | 24; //"$topoName"
++	                    		'sendSignal(paraSignal);' | 24;
++                    		'} catch (SignalException e) {' | 20;
++					            'e.printStackTrace();' | 24;
++					        '}' | 20;
++                    		if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal stopped to ${algName}Intermediary!");' | 20;
++				                'out.flush();' | 20;
++				            }
++							'break;' | 20;
++						'case "emit": //passive' | 16;
++							if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter signal emit!");' | 20;
++				                'out.flush();' | 20;
++				            }
++							'isActive = true;' | 20;
++							if(!looseSub) {
++								'emit = true;' | 20;
++							}
++							'try {' | 20;
++								'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), "${algName}Intermediary", "ready", true, null);' | 24;//"$topoName"
++	                    		'sendSignal(paraSignal);' | 24;
++                    		'} catch (SignalException e) {' | 20;
++					            'e.printStackTrace();' | 24;
++					        '}' | 20;
++                    		if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal ready to ${algName}Intermediary!");' | 20;
++				                'out.flush();' | 20;
++				            }
++							'break;' | 20;
++						'case "goToPassive": //passive' | 16;
++							if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter signal goToPassive!");' | 20;
++				                'out.flush();' | 20;
++				            }
++							'isActive = false;' | 20;
++							'emit = false;' | 20;
++							if(isHardwareAlgorithm(algorithm)) {
++								if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Sending a signal to stop algorithm!");' | 20;
++				                'out.flush();' | 20;
++				            	}
++				            	'try {' | 20;
++									'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), "$fmVarName", "stopHWAlg", true, null);' | 24;//"$topoName"
++		                    		'sendSignal(paraSignal);' | 24;
++	                    		'} catch (SignalException e) {' | 20;
++						            'e.printStackTrace();' | 24;
++						        '}' | 20;
++							}
++							'break;' | 20;
++						'case "goToActive": //active' | 16;
++							if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter signal goToActive!");' | 20;
++				                'out.flush();' | 20;
++				            }
++							'isActive = true;' | 20;
++							if(!looseSub) {
++								'emit = true;' | 20;
++							}
++							'break;' | 20;
++					'}' | 12;	
++				'}' | 8;
++			'}' | 4;
++			''		    				 	 
++				/************************************/
++				/*   declareOutputFields method     */
++				/************************************/
++		''              
++		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'				
++		'        declarer.declareStream(streamId, new Fields("endBolt"));'	
++			 '}' | 4;
++			 ''
++			 /********************************* */
++	    	/*******Prepare shut down signal** */
++	    	/********************************* */
++	    	'@Override' | 4;
++	    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
++	        	'super.prepareShutdown(signal);' | 8;
++	        	if(looseSub) {
++	        	'if(null != sender) {' | 8;
++        			'sender.stop();' | 12;
++        		'}' | 8;
++        		}
++	    	'}' | 4;
++	    	''		  	  	    	
++    	'}'
++	}
++	
++	def castTupleTypes(mapOf(Tuple, Tuple) inputToOutputMapping, mapOf(Tuple,String) nameToOutputMap) {
++		String ifName = "I" + fmName;
++   			String ifInputName = "I" + ifName;
++    		String tupleName;
++    		String outputInfName;
++			String inputInfName;
++			String fImpInputName;
++    		for(Tuple t : fm.input) {
++				//get the tuple name
++				tupleName = t.name;
++				
++				//get input interface name
++				inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
++				//get input imp name
++				fImpInputName= 	ifName + "${firstToUpperCase(tupleName)}Input";
++				//get output interface name	
++				if(inputToOutputMapping.containsKey(t))	{
++		  			Tuple output = inputToOutputMapping.get(t);
++		  			outputInfName = nameToOutputMap.get(output);				
++				} 
++				'if(sTuple.getValue(0) instanceof $outputInfName) {' | 12;
++					'iTuple${firstToUpperCase(tupleName)} = ($outputInfName)sTuple.getValue(0);' | 16;
++					'input${firstToUpperCase(tupleName)} = new $fmName.$fImpInputName();' | 16;
++		 			for(Field f : t.fields) {
++			 			String fname = toIdentifier("${f.name}");
++			 			String mname = firstToUpperCase(fname);
++	         			'input${firstToUpperCase(tupleName)}.set${mname}(iTuple${firstToUpperCase(tupleName)}.get${mname}());' | 16;
++		 			}
++    				'_collector.emit(streamId, new Values(input${firstToUpperCase(tupleName)}));' | 16;
++    			'}' | 12;
++    		}
++	}
++	
++	def castTupleTypes() {
++		String ifName = "I" + fmName;
++   		String ifInputName = "I" + ifName;
++    	String tupleName;
++    	String outputInfName;
++		for(Tuple t : fm.output) {
++			//get the tuple name
++			tupleName = t.name;
++			
++			//get input interface name
++			outputInfName = ifInputName + "${firstToUpperCase(tupleName)}Output";
++			'if(tuple.getValue(0) instanceof $outputInfName) {' | 12;
++				'$outputInfName algOutput = ($outputInfName)tuple.getValue(0);' | 16;
++				if(newSwitchLog) {
++	                'out.println(Calendar.getInstance().getTimeInMillis() + "Emitting the tuple.");' | 20;
++	                'out.flush();' | 20;
++				}
++				'_collector.emit(streamId, new Values(algOutput));' | 16;
++			'}' | 12;
++		}
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBoltSubPipeline.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBoltSubPipeline.vtl
+new file mode 100644
+index 0000000..6851d23
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBoltSubPipeline.vtl
+@@ -0,0 +1,158 @@
++import commonVTLMethods;
++@advice(QM)
++template stormEndBoltSubPipeline(Configuration config, FileArtifact target, String topoName, String topLevelPip, String nextNode, Algorithm algorithm) {
++	def main(Configuration config, FileArtifact target, String topoName, String topLevelPip, String nextNode, Algorithm algorithm) {
++		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
++    	'' 
++    	/****************************/
++    	/*        Imports           */  
++    	/****************************/ 
++    	'import java.util.*;'
++    	'import java.io.IOException;'
++    	'import org.apache.log4j.Logger;'
++    	'import backtype.storm.tuple.*;'
++    	'import backtype.storm.task.*;'
++    	'import backtype.storm.topology.*;'
++    	'import eu.qualimaster.common.signal.*;'
++    	'import eu.qualimaster.base.algorithm.*;'
++    	'import eu.qualimaster.families.inf.*;'
++    	'import eu.qualimaster.common.switching.*;'
++    	'import eu.qualimaster.base.serializer.*;'
++    	'import backtype.storm.Config;'
++    	'import eu.qualimaster.base.pipeline.CollectingTopologyInfo;'
++    	'import java.util.concurrent.ConcurrentLinkedQueue;'
++    	'import eu.qualimaster.common.signal.PortManager.*;'
++		'import eu.qualimaster.common.signal.PortManager;'
++		if(newSwitchLog) {
++    		'import java.io.PrintWriter;'
++			'import eu.qualimaster.common.logging.DataLogger;'
++			'import java.util.Calendar;'
++    	}  
++    	  	    	    			
++		/****************************/
++    	/*        Bolt class        */  
++    	/****************************/
++    	''
++    	'/**'
++    	'* Defines the end bolt for the algorithm $algName (GEN).'  
++    	'**/'
++    	'@SuppressWarnings({ "rawtypes", "serial" })'
++    	String name = formulateString(algorithm.name) + "EndBolt";
++    	'public class $name extends BaseSignalBolt {'
++		    	/****************************/
++		    	/*     Class variables      */  
++		    	/****************************/
++    	''    
++    	'    final static Logger logger = Logger.getLogger($name.class);'
++    	'    transient OutputCollector _collector;'
++    	'    private String streamId;'
++    	'    private String host = "localhost";'
++    	'    private int port;'
++    	'    private transient TupleSender sender = null;'
++    	'    private transient KryoGeneralTupleSerializer genSer = null;'
++    	'private String nimbus_host = "localhost";' | 4;
++    	'private int thrift_port = 6027;' | 4;
++    	'private transient Queue<IGeneralTuple> queue = null;' | 4;
++    	'private transient SynchronizedQueue<IGeneralTuple> syn = null;' | 4;
++    	'private static int QUEUE_SIZE = 100;' | 4;
++    		if(newSwitchLog) {
++				'private transient PrintWriter out = null;' | 4;
++			}
++		    	/****************************/
++		    	/*    Class constructor     */  
++		    	/****************************/
++    	''
++    	'    public $name(String name, String namespace, String streamId) {'
++    	'        super(name, namespace, $genMonitoringProbes);'
++    			 'this.streamId = streamId;' | 8;
++    	'    }' 
++    	    	/****************************/
++		    	/*      prepare method      */  
++		    	/****************************/		
++		'' 	      
++		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
++		'        super.prepare(map, topologyContext, collector);'
++				 '_collector = collector;' | 8;	
++				 'nimbus_host = (String) map.get(Config.NIMBUS_HOST);' | 8;
++        		 'thrift_port = (int) map.get(Config.NIMBUS_THRIFT_PORT);' | 8;	 
++				 if(newSwitchLog) {
++				 	'String logDir = (String) map.get("LOG.DIRECTORY");' | 8;
++				 	'out = DataLogger.getPrintWriter(logDir + "${topoName}EndBolt.log");' | 8;
++				 }
++				'genSer = new KryoGeneralTupleSerializer(map); ' | 8;
++				'queue = new ConcurrentLinkedQueue<IGeneralTuple>();' | 8;
++        		'syn = new SynchronizedQueue<IGeneralTuple>(queue, QUEUE_SIZE);' | 8;
++        		
++        		'PortManager portManager = getPortManager();' | 8;
++        			'PortAssignment assignment = null;' | 8;
++        			'while(assignment == null && portManager.isConnected()) {' | 8;
++		        		'try {' | 12;
++		        			'assignment = portManager.getPortAssignment(getPipeline(), "$nextNode", 0, null);' | 16; //TODO: change hardcoded!
++						'} catch (SignalException e) {' | 12;
++							'e.printStackTrace();' | 16;
++						'}' | 12;
++        			'}' | 8;   
++        		'if(assignment != null) {' | 8;    		
++					'host = assignment.getHost();' | 12;
++        			'port = assignment.getPort();' | 12;
++        		'}' | 8;
++        		if(newSwitchLog) {
++        			'logger.info("Connecting to the host : " + host + ", the port: " + port);' | 8;
++		        	'out.println("Connecting to the host : " + host + ", the port: " + port);' | 8;
++		        	'out.flush();' | 8;
++		        }
++				'sender = new TupleSender(host, port);' | 8;
++				'Thread sendTupleThread = new Thread(new SendTuple());' | 8;
++        		'sendTupleThread.start();' | 8;
++
++        		'initMonitor();' | 8;
++        		'logger.info("The end of the prepare method.");' | 8;
++			'}' | 4; 
++    	''
++    	//override the initial monitor
++	    produceInitMonitor(true, 4);
++	    
++    			/****************************/
++		    	/*      execute method      */  
++		    	/****************************/	
++		'/**' | 4;
++		' * A thread executes tuples.' | 4;
++		'**/' | 4;
++		'public class SendTuple implements Runnable {' | 4;
++		''
++		'private AbstractMonitor monitor = createThreadMonitor();' | 8;
++		''
++			'@Override' | 8;
++    		'public void run() {' | 8;
++				'while(true) {' | 12;
++		            if (genMonitoringProbes) {      
++                    'monitor.startMonitoring();' | 16;
++                    }
++				    'IGeneralTuple tuple = syn.consume();' | 16;
++					'byte[] bytes = genSer.serialize(tuple);' | 16;
++					'sender.send(bytes);' | 16;
++                    if (genMonitoringProbes) {
++                    'monitor.endMonitoring(tuple);' | 16;
++                    }           
++				'}' | 12;
++			'}' | 8;
++		'}' | 4;  
++		''  	    
++		'    public void execute(Tuple tuple) {'
++			if(newSwitchLog) {
++    			'out.println("Received data and emitting...");' | 8;
++    			'out.flush();' | 8;
++    		}
++			 	'//queue received data' | 8;
++			 	'syn.produce(new GeneralTuple(tuple.getValues()));' | 8;
++			 '}' | 4;
++				/************************************/
++				/*   declareOutputFields method     */
++				/************************************/
++		''              
++		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'				
++		'        declarer.declareStream(streamId, new Fields("endBolt"));'	
++			 '}' | 4;		  	  	    	
++    	'}'
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormFamilyElement.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormFamilyElement.vtl
+new file mode 100644
+index 0000000..9ef9da8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormFamilyElement.vtl
+@@ -0,0 +1,1545 @@
++import commonVTLMethods;
++@advice(QM)
++template stormFamilyElement(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap, mapOf(String, Integer) algToPort, Family subPipelineFamily, mapOf(Tuple, Grouping) tupleToGrouping, String subAlgName, Boolean debug, Boolean connector) {//subPipelineFamily is only for the family element in the subpipeline, otherwise null
++	Boolean forSubPipeline = false;	//indicates whether this is used in the sub-pipeline
++	Boolean hasSubPipeline = false;	//indicates whether the family has distributed algorithms including manually-implemented and generated sub-topologies		
++	Boolean lastHasSubPipeline = false; //indicates whether the last elements have sub-pipeline-based algorithm																																																																																																 //subAlgName is for the prefix in the subtopology
++	Boolean loadShedding = false;//indicates whether it shall enable loadShedding.
++	mapOf(String, String) impNameToConfName = {}; //<algImpName, algConfName>
++	Boolean sendSymbolList = false;//indicates whether it shall send symbollist (only for correlation computation component)
++	
++	Boolean logOutput = false; //ONLY TEMPORARY, TO BE REMOVED!
++	def requestHardwareConnections(HardwareAlgorithm hwAlg, Boolean isStatic, Boolean hasDistAlg) {
++		MPCCNode node = hwAlg.hwNode;
++		String algName = hwAlg.name;
++		'try {' | 20;
++		if(newSwitchLog and hasDistAlg) {
++		'out.println(Calendar.getInstance().getTimeInMillis() + "Connecting the hardware in order to get the dynamic ports");' | 8;	
++		'out.flush();' | 8;
++		}
++		
++		if(isStatic) {
++			'String host = "${node.host}";' | 24;
++        	'int sendingPort = ${node.commandSendingPort};' | 24;
++        	'int receivingPort = ${node.commandReceivingPort};' | 24;
++        	'String url = "hello";//actual algorithm executable information is passed from the parameter signal but not in STATIC mode' | 24;
++		} else {
++        	'String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "${node.host}");' | 24;
++        	'int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, ${node.commandSendingPort});' | 24;
++        	'int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, ${node.commandReceivingPort});' | 24;
++			'String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);' | 24;
++		}
++		'HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);' | 24;
++		'ByteString executable = ByteString.copyFromUtf8(url);' | 24;
++		'UploadMessageOut msg = hardwareConnection.uploadAlgorithm("${algName}", ${hwAlg.receiverParallelism}, executable);' | 24;
++		
++        'ParameterChangeSignal signalForBolt= new ParameterChangeSignal("$topoName",
++                    "${algName}HardwareConnectionBolt", "port", msg.getPortIn(), null);' | 24;
++        /*     
++        'ParameterChangeSignal signalForBolt= new ParameterChangeSignal("$topoName",
++                    "${algName}HardwareConnectionBolt", "port", 2404, null);' | 24;
++                    * 
++                    */
++        'sendSignal(signalForBolt);' | 24;
++ 
++		            if(newSwitchLog and hasDistAlg) {
++					'logger.info(Calendar.getInstance().getTimeInMillis() + "Received the dynamic ports, portIn:  " + msg.getPortIn() + ", portsOut: " + msg + ", signalForBolt: " + signalForBolt.toString());' | 8;
++		'out.println(Calendar.getInstance().getTimeInMillis() + "Received the dynamic ports, portIn:  " + msg.getPortIn() + ", portsOut: " + msg + ", signalForBolt: " + signalForBolt.toString());' | 8;	
++		'out.flush();' | 8;
++		}
++
++        'String ports = "";' | 24;
++ 
++    		'ports = ports + msg.getPortOut(0);' | 24;
++		'for (int i=1; i<msg.getPortOutCount(); i++) {' | 24;
++			'ports = ports + "," + msg.getPortOut(i);' | 28;
++		'}' | 24;           		
++		
++		'ParameterChangeSignal signalForSpout= new ParameterChangeSignal("$topoName",
++                    "${algName}HardwareConnectionSpout", "port", ports, null);' | 24;           			
++        'sendSignal(signalForSpout);' | 24;
++		if(newSwitchLog and hasDistAlg) {
++		'logger.info(Calendar.getInstance().getTimeInMillis() + "Received the dynamic out ports, portOut:  " + ports + ", signalForSpout: " + signalForSpout.toString());' | 8;
++		'out.println(Calendar.getInstance().getTimeInMillis() + "Received the dynamic out ports, portOut:  " + ports + ", signalForSpout: " + signalForSpout.toString());' | 8;	
++		'out.flush();' | 8;
++		}
++            
++		'} catch (IOException e) {' | 20;
++			'e.printStackTrace();' | 24;						
++		'} catch (SignalException e) {' | 20;
++			'e.printStackTrace();' | 24;
++		'}' | 20;
++	}
++	
++	def createAlgorithmInstance(setOf(String) destinations, String ifName, String cls, Boolean forNotify, Integer indent) {
++		'try {' | indent;
++		'Class cls = Class.forName("$cls");' | indent+4;
++		if(destinations.size() == 0) {
++			if(forNotify) {
++				if(newSwitch and hasSubPipeline and !forSubPipeline) {
++					'if(!algChange) {//initialize the algorithm' | indent+4;
++					if (ifName=="IFHayashiYoshida") {//for test
++						'alg = ($ifName) cls.getConstructor(int.class).newInstance(taskId);' | indent+4;
++					} else {
++						'alg = ($ifName) cls.newInstance();' | indent+8;
++					}
++					'} else {' | indent+4;
++					if (ifName=="IFHayashiYoshida") {//for test
++						'algSwitch = ($ifName) cls.getConstructor(int.class).newInstance(taskId);' | indent+4;
++					} else {
++						'algSwitch = ($ifName) cls.newInstance();' | indent+8;
++					}
++					'}' | indent+4;
++				} else if (ifName=="IFHayashiYoshida") {//for test
++					'alg = ($ifName) cls.getConstructor(int.class).newInstance(taskId);' | indent+4;
++				} else {
++					'alg = ($ifName) cls.newInstance();' | indent+4;
++				}								
++			} else {
++				if (ifName=="IFHayashiYoshida") {//for test
++					'alg = ($ifName) cls.getConstructor(int.class).newInstance(taskId);' | indent+4;
++				} else { // for test
++					'alg = ($ifName) cls.newInstance();' | indent+4;
++				}
++			}
++		} else {
++			String args = "";
++        	String argsClass = "";
++        	Boolean first = true;
++        	for(String d : destinations) {
++                if(first) {
++                    first = false;
++                    args = args + "taskId${firstToUpperCase(d)}";
++                    argsClass = argsClass + "List.class";
++                } else {
++                    args = args + ", taskId${firstToUpperCase(d)}";
++                    argsClass = argsClass + ", List.class";
++                }
++        	}
++        	if(destinations.size() != 0) {
++        		args = args + ", ${elt.varName()}TaskId";
++        		argsClass = argsClass + ", int.class";
++        	}
++        	
++        	if(forNotify) {
++				if(newSwitch and !forSubPipeline) {
++					'if(!algChange) {//initialize the algorithm' | indent+4;
++						'alg = ($ifName) cls.getConstructor($argsClass).newInstance($args);' | indent+8;
++					'} else {' | indent+4;
++						'algSwitch = ($ifName) cls.getConstructor($argsClass).newInstance($args);' | indent+8;
++					'}' | indent+4;
++				} else {
++					'alg = ($ifName) cls.getConstructor($argsClass).newInstance($args);' | indent+4;
++				}
++			} else {
++				'alg = ($ifName) cls.getConstructor($argsClass).newInstance($args);' | indent+4;
++			}
++		}
++		'} catch (ClassNotFoundException e) {' | indent;
++		'e.printStackTrace();' | indent+4;
++		'} catch (InstantiationException e) {' | indent;
++		'e.printStackTrace();' | indent+4;
++		'} catch (IllegalAccessException e) {' | indent;
++		'e.printStackTrace();' | indent+4;
++		if(destinations.size() > 0) {
++		'} catch (NoSuchMethodException e) {' | indent;
++		'e.printStackTrace();' | indent+4;
++		'} catch (InvocationTargetException e) {' | indent;
++		'e.printStackTrace();' | indent+4;
++		}
++		'}' | indent;
++	}	
++	
++	def produceInputForTuples(mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping, mapOf(Tuple,String) nameToOutputMap, DecisionVariable elt, setOf(DecisionVariable) lastElt) {
++		FamilyElement fe = elt;
++		Family fm = fe.family;
++		String name = fm.name;
++		String fName = name.firstToUpperCase();	
++		//String familyName = elt.byName("family").varName().firstToUpperCase();	
++		String inputInfName; //input interface name
++		String outputInfName; //output interface name	
++        String ifName = "I" + fName;
++        String ifInputName = "I" + ifName;
++
++        String fImpName = fName.firstToUpperCase();
++		String fImpInputName;
++		
++		String tupleName;
++		Boolean multiStream = false;
++		Integer indent = 4;
++		sequenceOf(Tuple) tuples = fm.input;
++		Integer tuplesSize = tuples.size();
++		for(Tuple t : tuples) {
++			//get the tuple name
++			tupleName = t.name;
++			if(tuplesSize > 1){
++				multiStream = true;
++				indent = 8;
++			}
++			//get input interface name
++			inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
++			//get input imp name
++			fImpInputName= 	ifName + "${firstToUpperCase(tupleName)}Input";
++			//get output interface name	
++			if(inputToOutputMapping.containsKey(t))	{
++			  sequenceOf(Tuple) outputs = inputToOutputMapping.get(t);
++			  String number;
++			  Integer size = outputs.size();
++			  Integer count = 0;
++			  for(Tuple tuple : outputs) {
++			  	  count = count + 1;
++			  	  outputInfName = nameToOutputMap.get(tuple);
++			  	  if(size > 1) {
++				      number = "$count";
++				  } else {
++				  	  number = "";
++				  }
++			
++				if(!connector and receiveByField and subAlgName != "") { //direct receiving based on the stream id
++					produceDirectReceive(lastElt, tuple);
++				} else {	
++//				  if(multiStream){
++					'if(tupleItem instanceof $outputInfName) {' | indent;
++//				}
++				'iTuple${firstToUpperCase(tupleName)}$number = ($outputInfName)tupleItem;' | indent+4;
++				}
++				
++				if(genInstance) {
++					'input${firstToUpperCase(tupleName)} = new $fName.$fImpInputName();' | indent+4;
++				}				
++				 for(Field f : t.fields) {
++					 String fname = toIdentifier("${f.name}");
++	    			 String mname = firstToUpperCase(fname);
++	    			 if(!connector and receiveByField and subAlgName != "") {
++	    			 	'input${firstToUpperCase(tupleName)}.set${mname}(tuple.get${firstToUpperCase(f.type.class)}ByField("${formulateString(mname)}"));' | indent+4;
++	    			 } else {
++	    	         'input${firstToUpperCase(tupleName)}.set${mname}(iTuple${firstToUpperCase(tupleName)}$number.get${mname}());' | indent+4;
++				 	}				 	
++				 }				 
++				 
++				 'try {' | indent+4;
++				 'if(alg != null) {' | indent+8;
++				 if(genMultiTupleTypes) {
++					'alg.calculate(input${firstToUpperCase(tupleName)}${resultTypesString(fm)});'| indent+12;
++				 } else { //original one tuple type case in the algorithm output
++				 	'alg.calculate(input${firstToUpperCase(tupleName)}, result);'| indent+12;
++				 }
++				 '} else {' | indent+8;
++				    	'long now = System.currentTimeMillis();' | indent+8;
++					    'if ((now - record) > 1000) {//print this error log once per second' | indent+8;
++					    	'logger.error("Algorithm is not assigned!");' | indent+12;
++							'record = now;' | indent+12;
++					    '}' | indent+8;
++					 '}' | indent+8;
++				'} catch(Throwable e) {' | indent+4;
++					'long now = System.currentTimeMillis();' | indent+8;
++				    'if ((now - record) > 1000) {//print this error log once per second' | indent+8;
++				    	'e.printStackTrace();' | indent+12;
++						'record = now;' | indent+12;
++				    '}' | indent+8;
++				 if(genMultiTupleTypes) {
++					produceResultDefaultValue(fm, indent);
++				 } else {//original one tuple type case in the algorithm output
++					sequenceOf(Tuple) outputTuples = fm.output;
++					for(Tuple ot : outputTuples) {
++						for(Field fd : ot.fields) {
++						String fieldName = toIdentifier("${fd.name}"); 
++						String upFieldName = firstToUpperCase(fieldName);
++						FieldType fdType = fd.type;
++						'result.set${upFieldName}(${obtainDefaultValue(fdType)});' | indent+8;	
++						}
++					}
++				}
++				'if (e instanceof DefaultModeException) {' | indent+8;
++					'sendDefaultModeMonitoringEvent((DefaultModeException) e);' | indent+12;
++				'}' | indent+8;
++				'}' | indent+4;
++			    
++			    if(!looseSub and !newSwitch and hasDistAlgorithm(fm)) {
++			    	'if(alg instanceof ITopologyCreate) {' | indent+4;
++				    	if(debug) {
++					    'logger.info("Emitting data with streamId: "+ streamId + ", data:");'| indent+8;		    
++					    }
++					    '_collector.emit(streamId, new Values(input${firstToUpperCase(tupleName)}));'| indent+8;
++				    '}' | indent+4;
++			    } 
++			    
++			    //loose sub-pipeline algorithm -- excluded for the new switch
++				if(!newSwitch and looseSub and !forSubPipeline and hasSubPipeline) {
++					'if(alg instanceof ITopologyCreate) {' | indent+4;
++						'values.clear();' | indent+8;
++						'values.add(input${firstToUpperCase(tupleName)});' | indent+8;
++						'IGeneralTuple genTuple = new GeneralTuple(values);' | indent+8;
++						'byte[] bytes = genSer.serialize(genTuple);' | indent+8;
++						'sender.send(bytes);' | indent+8;
++					'}' | indent+4;
++				}
++//			    if(multiStream){
++					 	'}' | indent;
++//					 }
++				 ''
++				 
++			  }				
++			}
++		} //tu	
++		
++		if(newSwitch and hasDistAlgorithm(fm)) {
++					'if(alg instanceof ITopologyCreate) {' | indent+4;
++				    	if(debug) {
++					    'logger.info("Sending data via network to the intermediary Spout: ");'| indent+8;		    
++					    }
++					    'if(both) {' | indent+8;
++					    	'id++;' | indent+12;
++					    '}' | indent+8;
++					    'values.clear();' | indent+8;
++                		'values.add(tupleItem);' | indent+8;
++					    'switchTuple = new SwitchTuple(id, values);'| indent+8;
++//					    if(looseSub) {
++					    	'synQueue.produce(switchTuple);' | indent+8;
++//					    } else {
++//					    	'queue.offer(switchTuple);' | indent+8;
++//					    }
++					    'if(emit && !both && !queue.isEmpty()) {' | indent+8;
++//					    if(looseSub) {
++					    	'byte[] bytes = kryoSer.serialize(synQueue.consume());' | indent+12;
++//					    } else {
++//					    	'byte[] bytes = kryoSer.serialize(queue.poll());' | indent+12;
++//					    }
++						    for(Algorithm alg : fm.members) {
++					    		String algClsName = algImplName(alg);	
++					    		String aName = alg.name.firstToUpperCase().toIdentifier();
++					    		impNameToConfName.add(algClsName, aName);
++						    	'if(alg instanceof $algClsName) {' | indent+12;
++									'sendTo${aName}(bytes);' | indent+16;
++						    	'}' | indent+12;
++			        		}
++					    '}' | indent+8;
++					    'long current = Calendar.getInstance().getTimeInMillis();' | indent+8;
++					    'if(both && ((current - startRecord) <= duration) && emit) {' | indent+8;
++					    	'if(!queue.isEmpty()) {' | indent+12;
++//					    	if(looseSub) {
++					    		'item = synQueue.consume();' | indent+12;
++//					    	} else {
++//						    	'item = queue.poll();' | indent+16;
++//						    }
++						    	'byte[] bytes = kryoSer.serialize(item);' | indent+16;
++						    	
++		                		for(Algorithm alg : fm.members) {	
++						    		String aName = alg.name.firstToUpperCase().toIdentifier();
++						    		'sendTo${aName}(bytes);' | indent+16;
++						    		}
++						    	if(newSwitchLog) { //print the tuple has been sent
++						    		'out.println(Calendar.getInstance().getTimeInMillis() + ": Sent the item with the id: " + item.getId() + ", with the value:"' | indent+16;
++//						    		for(Field f : t.fields) {
++//										 String fname = toIdentifier("${f.name}");
++//						    			 String mname = firstToUpperCase(fname);
++//						    	         '+ ", $mname: "+ (($outputInfName)item.getValue(0)).get${mname}()' | indent+16;
++//									 }
++									 ');' | indent+16;
++						    		'out.flush();' | indent+16;
++						    	}
++					    	'}' | indent+12;
++	            		'} else if(both && ((current - startRecord) > duration)){' | indent+8;
++	            			if(newSwitchLog) {
++	            			'out.println(Calendar.getInstance().getTimeInMillis() + ": Real Switching!!!!!!!!!!!!!!!!!!!!!!!!!");' | indent+12;
++	            			'out.flush();' | indent+12;
++	            			}
++	            			'emit = false;' | indent+12;
++	            			'both = false;' | indent+12;
++	            			'id = 0;' | indent+12;
++	            			'if(item != null) {' | indent+12;
++	            			'try {' | indent+12;
++	            				'String idAndTarget = item.getId() + "," + originalAlg + "," + targetAlg;' | indent+16;
++	            				String namespace = topoName;
++	            				for(Algorithm alg : fm.members) {
++	            					if(looseSub) {
++	            						if(isGenSubtopology(alg)) {
++	            							SubPipelineAlgorithm subAlg = alg;
++	            							namespace = subAlg.subPipeline.name;
++	            						}
++	            						if(isHardwareAlgorithm(alg)) {
++	            							namespace = alg.name;
++	            						}
++	            					}
++	            					String aName = alg.name.firstToUpperCase().toIdentifier();
++	            					//'ParameterChangeSignal signal${aName} = new ParameterChangeSignal("$namespace",
++								'ParameterChangeSignal signal${aName} = new ParameterChangeSignal(getNamespace(),
++	                        "${aName}Intermediary", "passivate", idAndTarget, null);' | indent+16;
++	                    			'sendSignal(signal${aName});' | indent+16;
++	                    		}
++	            			'} catch (SignalException e) {' | indent+12;
++	                    		'e.printStackTrace();' | indent+16;
++	                		'}' | indent+12;
++	                		'alg = algSwitch;' | indent+12;
++	                		'//sendAlgorithmChangeEvent(algSwitch.getClass().getSimpleName(), null);//inform later when the switch is done' | indent+12;
++	                		'}' | indent+12;
++	            		'}' | indent+8;
++				    '}' | indent+4;
++				}
++	}	
++	
++	def resultTypesString(Family family) {
++		String result = "";
++		String tupleName;
++		for(Tuple t : family.output) {
++			tupleName = t.name;
++			result = result + ", " + t.name + "Result";
++		}
++		result;
++	}
++	
++	def produceDirectReceive(setOf(DecisionVariable) lastElt, Tuple tuple) {
++		String name;
++		String streamId;
++		for(DecisionVariable d : lastElt) {
++			name = d.byName("name");
++			for(Tuple t : tuples(d)) {
++				if(t == tuple) {
++					streamId = formulateString(name) + formulateString(t.name);
++					'if (sourceStreamId.equals("$streamId")) {'
++				}
++			}
++		}
++	}
++	
++	def sequenceOf(Tuple) tuples(DecisionVariable elt) {
++		sequenceOf(Tuple) result = {};
++		result;
++	}
++	
++	def sequenceOf(Tuple) tuples(Source elt) {
++		DataSource dataSrc = elt.source;
++		dataSrc.input;
++	}
++	
++	def sequenceOf(Tuple) tuples(FamilyElement elt) {
++		Family fm = elt.family;
++		fm.output;
++	}
++	
++	
++	/*produce the result-related variables (declaration or instance) */
++	def produceResultVariables(FamilyElement fe, Boolean instance) {
++		String nameVar = fe.varName();
++		String name = fe.name;
++		String streamId;
++		Family family = fe.family;
++		setOf(Flow) flows = fe.output;
++		Boolean isDirect = false;
++		String fName = family.name;
++		String ifName = "I" + fName.firstToUpperCase();
++		String fImpName = fName.firstToUpperCase();
++		String tupleName;
++		for(Tuple t : family.output) {
++			isDirect = isDirectGroupping(flows, t);
++			tupleName = t.name;
++			String ifOutputName = "I" + ifName + firstToUpperCase(tupleName)+ "Output";
++			String fImpOutputName = ifName + firstToUpperCase(tupleName)+ "Output";
++			
++			if(subAlgName != "") { //sub-topology
++				streamId = formulateString(name) + formulateString(tupleName);
++			} else {
++				streamId = formulateString(nameVar) + formulateString(tupleName);
++			}
++			if(!instance) {
++    		'    private transient $fImpName.$fImpOutputName ${tupleName}Result = new $fImpName.$fImpOutputName();'
++    		} else {
++    			'${tupleName}Result = new $fImpName.$fImpOutputName();' | 8;
++    			//produce emitter instance, must distinguish between emit and emitDirect
++	    		'IItemEmitter<$ifOutputName> ${tupleName}Emitter = new IItemEmitter<$ifOutputName>() {' | 8;
++	    			'@Override' | 12;
++	    			'public void emitDirect(String streamId, $ifOutputName item) {' | 12;
++	    			if(isDirect) {
++	    				'_collector.emitDirect(item.getTaskId(), "$streamId", new Values(item));' | 16;
++	    			} else {
++	    				'_collector.emit("$streamId", new Values(item));' | 16;
++	    			}
++	    			'}' | 12;
++	    		'};' | 8;
++	    		'${tupleName}Result.setEmitter(${tupleName}Emitter);' | 8;
++	    		''
++    		}
++		}
++	}
++	
++	/* produce the default value settings for the result types */
++	def produceResultDefaultValue(Family family, Integer indent) {
++		String tupleName;
++		for(Tuple t : family.output) {
++			tupleName = t.name;
++			for(Field fd : t.fields) {
++				String fieldName = toIdentifier("${fd.name}"); 
++				String upFieldName = firstToUpperCase(fieldName);
++				FieldType fdType = fd.type;
++				'${tupleName}Result.set${upFieldName}(${obtainDefaultValue(fdType)});' | indent+8;	
++			}
++		}
++	}
++	
++	/* produce emitting statements based on the output types */
++	def produceResultEmit(FamilyElement familyElement, Integer indent) {
++		Family family = familyElement.family;
++		String fName = family.name;
++		String ifName = "I" + fName.firstToUpperCase();
++		String fImpName = fName.firstToUpperCase();
++		String tupleName;
++		for(Tuple t : family.output) {
++			tupleName = t.name;
++			String streamId;
++			if(subAlgName == "") {//for the main pipeline, remains as "streamId"
++				streamId = "streamId";
++			} else {
++				streamId = familyElement.varName().firstToUpperCase() + tupleName.firstToUpperCase();
++			}
++			'if(${tupleName}Result != null) {' | indent;
++				'_collector.emit("$streamId", new Values(${tupleName}Result));' | indent+4;
++			'}' | indent;   					
++		}
++	}
++	
++	def produceMultipleOutputs(FamilyElement familyElement, mapOf(Tuple, Grouping) tupleToGrouping, Integer indent) {
++		Family family = familyElement.family;
++		String fName = family.name;
++		String ifName = "I" + fName.firstToUpperCase();
++		String tupleName;
++		String streamId;
++		Grouping grouping;
++		for(Tuple t : family.output) {
++			if(tupleToGrouping.containsKey(t)) {
++				grouping = tupleToGrouping.get(t);
++			}
++			tupleName = t.name;
++			String ifOutputName = "I" + ifName + firstToUpperCase(tupleName)+ "Output";
++			//for the simple java algorithm, the stream id is the elt name plus tuple name.
++			if(subAlgName != "") {//the subtopology uses the actual configured name
++				streamId = formulateString(familyElement.name) + formulateString(tupleName);
++			} else {
++				streamId = formulateString(familyElement.varName()) + formulateString(tupleName);
++			}
++			'eu.qualimaster.base.algorithm.IOutputItemIterator<$ifOutputName> iter${firstToUpperCase(tupleName)} = ${tupleName}Result.iterator();' | indent;
++			'iter${firstToUpperCase(tupleName)}.reset();' | indent;
++		    'while (iter${firstToUpperCase(tupleName)}.hasNext()) {' | indent;
++		    if(logOutput) {
++		    	'long nowOutput = System.currentTimeMillis();'
++			    'if ((nowOutput - recordOutput) > 1000) {'
++				'recordOutput = nowOutput;'
++				'logger.error("The output rate at the time " + nowOutput + ":" + counter);'
++				'counter = 0;'
++			    '} else {'
++				'counter++;'
++			    '}'
++		    }
++		    	'$ifOutputName out = iter${firstToUpperCase(tupleName)}.next();' | indent+4;
++		    	String outValues = "";
++		    	Boolean first = true;
++		    	String split = "";
++		    	if(receiveByField) {
++		    		for(Field f : t.fields) {
++		    			String fname = f.name;
++		    			if(first) {
++		    				split = "";
++		    				first = false;
++		    			} else {
++		    				split = ",";
++		    			}
++		    			outValues = outValues + split + "out.get${formulateString(fname)}()";
++		    		}
++		    	} else {
++		    		outValues = "out";
++		    	}
++		    	if(isDirectGroupping(familyElement.output, t)) {
++		    		'_collector.emitDirect(out.getTaskId(), "$streamId", new Values($outValues));' | indent+4;  
++		    	} 
++		    	/*
++		    	else if (isAllGroupping(familyElement.output, t)) {
++		    		String dest = allGroupingDestName(familyElement.output, t);
++		    		'for(int i=0; i<taskId${firstToUpperCase(dest)}.size(); i++) {' | indent+4;
++		    			'_collector.emit("$streamId", new Values($outValues));' | indent+8;   
++		    		'}' | indent+4;
++		    	}
++		    	* */
++		    	else {
++            		'_collector.emit("$streamId", new Values($outValues));' | indent+4;   
++            	} 
++		    '}' | indent;	
++		
++		}		
++	}
++	
++	def produceStreamId(Family family, Boolean variable) {
++		Boolean first = true;//select the first subtopology algorithm as the initial algorithm to conduct the stream id
++		String sId;
++		for(Algorithm alg : family.members) {
++			if(first) {
++				if(isDistAlgorithm(alg)) {
++					first = false;
++					sId = formulateString(elt.varName()) + formulateString(alg.name);
++					if(variable) {
++						'    private String streamId = "$sId";'
++						} else {
++						'            streamId = "$sId";'	
++						}
++				}
++			}
++		}
++	}
++	
++	def produceForJavaAlgorithm() {
++		
++	}
++	
++	/* print log per tuple */
++	def produceLogVariable(sequenceOf(Tuple) tuples, Boolean variable, String fName) {
++		String ifName = "I" + fName;
++		String ifInputName = "I" + ifName;
++		String tupleName;
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			String inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
++			String fImpInputName = 	ifName + "${firstToUpperCase(tupleName)}Input";
++			if(variable) {
++				'    private transient PrintStream out${firstToUpperCase(tupleName)} = System.out;'
++			} else {
++				'        out${firstToUpperCase(tupleName)} = getPrintStream("gen-${firstToUpperCase(tupleName)}" + "-" + Thread.currentThread().getId() + "-" + topologyContext.getThisTaskId() + ".log");'
++			}
++		}
++	}
++	
++	
++    def main(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName,mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap, mapOf(String, Integer) algToPort, Family subPipelineFamily, mapOf(Tuple, Grouping) tupleToGrouping, String subAlgName, Boolean debug, Boolean connector) {
++        if(subAlgName != "") {
++			forSubPipeline = true;
++		}
++		
++        Boolean parameterSetting = true; //use for commenting the parameterSetting
++        //name for FamilyElement class
++        String name = elt.varName().firstToUpperCase() + elt.type();
++        //streamId endings
++        String nontopoStream = "Stream";
++        String topoStream = "TopoStream";        
++        
++        FamilyElement fe = elt;
++		Family fm = fe.family;
++		String fName = fm.name;
++		
++		//algorithm specific!!
++		if(fm.name == "fCorrelationFinancial") {
++			sendSymbolList = true;
++		}
++		
++		//ONLYTEMPORARY; TOBE REMOVED!!
++		if(fm.name == "fHayashiYoshida") {
++			logOutput = true;
++		}
++		
++		loadShedding = fe.loadShedding;
++		if(hasDistAlgorithm(fm)) {
++			hasSubPipeline = true;
++		}
++		
++//        String familyName = elt.byName("family").varName();
++        String ifName = "I" + fName.firstToUpperCase();      	
++		String fImpName = fName.firstToUpperCase();
++		String fImpInputName = ifName + "Input";
++		String fImpOutputName = ifName;
++		String streamId = elt.varName() + nontopoStream;
++		String topoStreamId = elt.varName();
++        String ifOutputName = "I" + ifName;
++        String tupleName;
++		
++		//get family varname
++		String fmVarName = elt.varName().firstToUpperCase();
++		setOf(DecisionVariable) lastElt = lastElementMap.get(fmVarName); //last elements linked to the current element
++		
++		//determine whether the last elements have sub-pipeline-based algorithm
++		for(DecisionVariable elt : lastElt) {
++			if(elt.type() == "FamilyElement") {
++				FamilyElement familyElt = elt;
++				Family fm = familyElt.family;
++				if(looseSub and hasGenAlgorithm(fm)) {
++					lastHasSubPipeline = true;
++				}
++			}
++		}
++		
++		//get family variable
++		Family eltFamily = elt.byName("family");
++		String fmNameInCapital = fName.firstToUpperCase();
++		
++		//get the inputToOutputMapping of this family element
++		String eltName = elt.varName().firstToUpperCase();
++		mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping = {};
++		if(globalMap.containsKey(eltName)){
++			inputToOutputMapping = globalMap.get(eltName);
++		}
++//		if(!genMultiTupleTypes) {//originally considering only one tuple type in the output of the algorithm
++			//get the tuple name of the first output tuple to obtain the output interface/class name (assume that there is only one output from the family node)				
++			Tuples outputTuples = eltFamily.output;
++			Integer first = 1;
++			for(Tuple t : outputTuples) {
++				if(first == 1){
++					tupleName = t.name;
++					ifOutputName = ifOutputName + firstToUpperCase(tupleName)+ "Output";
++					fImpOutputName = fImpOutputName + firstToUpperCase(tupleName)+ "Output";
++					streamId =  streamId + firstToUpperCase(tupleName);
++				}
++				first = first + 1;
++			}
++//		}
++		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
++    	'' 
++    	/****************************/
++    	/*        Imports           */  
++    	/****************************/ 	
++    	'import java.util.*;'
++    	'import java.io.IOException;'
++    	'import java.lang.NoSuchMethodException;'
++    	'import java.lang.reflect.InvocationTargetException;'
++		'import java.io.OutputStream;'
++		'import java.io.Serializable;'
++		'import java.net.Socket;'
++		'import java.io.PrintWriter;'
++		'import eu.qualimaster.common.logging.DataLogger;'
++		'import java.net.UnknownHostException;'
++		'import com.esotericsoftware.kryo.io.Output;'
++    	'import org.apache.log4j.Logger;'
++    	'import backtype.storm.tuple.*;'
++    	'import backtype.storm.task.*;'
++    	'import backtype.storm.topology.*;'
++		'import eu.qualimaster.events.EventManager;'
++		'import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;' 
++		'import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;'    	
++    	'import eu.qualimaster.families.inf.*;'
++    	'import eu.qualimaster.families.inf.$ifName.*;'
++    	if(genMultiTupleTypes and subAlgName != "") { //import the family interface of the subpipeline family
++    		String isubfName = "I" + subPipelineFamily.name.firstToUpperCase();
++    		'import eu.qualimaster.families.inf.$isubfName.*;'
++    	}
++    	'import eu.qualimaster.families.imp.*;'
++    	//'import eu.qualimaster.hardware.imp.*;' --currently no hardware-based algorithm
++    	'import eu.qualimaster.common.signal.*;'
++    	'import eu.qualimaster.base.algorithm.*;'
++    	'import eu.qualimaster.base.algorithm.IFamily.State;'
++    	'import eu.qualimaster.infrastructure.PipelineOptions;'
++    	'import eu.qualimaster.pipeline.DefaultModeException;'
++    	'import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;'
++    	'import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;'
++    	'import backtype.storm.Config;'
++    	'import eu.qualimaster.base.pipeline.CollectingTopologyInfo;'
++    	'import eu.qualimaster.pipeline.AlgorithmChangeParameter;'
++    	produceAlgorithmImports(fe.family); 
++    	produceImportsFromLastElements(lastElt, lastElementMap, topoName);
++    	if(hasHardwareAlgorithm(fm)) {
++    		'import eu.qualimaster.common.hardware.*;'
++    		'import com.google.protobuf.ByteString;'
++		}
++    	if(newSwitch) {
++    		'import com.esotericsoftware.kryo.KryoException;'
++    		'import java.util.concurrent.ConcurrentLinkedQueue;'
++    		'import eu.qualimaster.common.switching.*;'
++			'import java.io.PrintWriter;'
++			'import eu.qualimaster.common.logging.DataLogger;'
++			'import java.util.Calendar;'
++    	}
++    	if(looseSub and !forSubPipeline and hasSubPipeline) {
++    		'import com.esotericsoftware.kryo.KryoException;'
++    		'import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;'
++			'import eu.qualimaster.base.serializer.KryoGeneralTupleSerializer;'
++			'import eu.qualimaster.common.signal.PortManager.*;'
++			'import eu.qualimaster.common.signal.PortManager;'
++    	}
++    	'import eu.qualimaster.base.algorithm.IItemEmitter;'
++    	/****************************/
++    	/*        Bolt class        */  
++    	/****************************/
++    	''
++    	'/**'
++    	'* Defines the FamilyElment in the pipeline(GEN).'  
++    	'**/'
++    	'@SuppressWarnings({ "rawtypes", "serial" })'
++    	'public class $name extends BaseSignalBolt {'
++		    	/****************************/
++		    	/*     Class variables      */  
++		    	/****************************/
++    	''    
++    	'    final static Logger logger = Logger.getLogger($name.class);'
++    	'    transient OutputCollector _collector;'
++    	'    private boolean algChange = false;'
++    	'    private boolean firstTuple = false;'
++    	'    private long record = 0;'
++    	'    private int taskId;'
++    	
++    	if(logOutput) {
++			'int counter = 0;'
++			'long recordOutput = 0;'
++    	} 
++    	
++    	if(newSwitchLog) {
++			'private transient PrintWriter out = null;' | 4;
++		}
++    	if(!genMultiTupleTypes) {
++    	'    private String streamId = "$streamId";'
++    	} else {
++    		if(hasDistAlgorithm(fm)) {//only generated for subtopology-based algorithm in the new version of the code
++    			produceStreamId(fm, true);
++    		}
++    	}
++    	if(genMultiTupleTypes) {
++    		produceResultVariables(fe, false);
++    	} else {
++    		'    private transient $ifOutputName result = new $fImpName.$fImpOutputName();'
++    	}
++    	'    private transient $ifName alg = null; '
++    	//define the taskId related variables if there are direct emit in use
++    	setOf(String) destinations = {};
++    	directEmitDestination(fe.output, destinations); //collect the direct emit and all grouping related destinations
++    	for(String dest : destinations) {
++    		'private transient List<Integer> taskId${firstToUpperCase(dest)};' | 4;
++    	}
++    	if(destinations.size() != 0) {
++    		'private int ${elt.varName()}TaskId;' | 4;
++    	}
++    	
++    	produceOutputVariable(eltFamily.input, inputToOutputMapping, nameToOutputMap, fmNameInCapital);
++    	produceInputVariable(eltFamily.input, true, fmNameInCapital);    
++    	
++    	if(looseSub and !forSubPipeline and hasSubPipeline) {
++    		for(Algorithm alg : fm.members) {
++    		    'private String host${toIdentifier(firstToUpperCase(alg.name))} = "localhost";' | 4; //TODO: determine dynamically
++	    		'private int port${toIdentifier(firstToUpperCase(alg.name))} = 8999;' | 4;//TODO: determine dynamically
++    		}
++    		'private transient KryoGeneralTupleSerializer genSer = null;' | 4;
++    		'private transient KryoSwitchTupleSerializer swiSer = null;' | 4;
++    		'private transient TupleSender sender = null;' | 4;
++    	}
++    	if(newSwitch and !forSubPipeline and hasDistAlgorithm(fm)) {
++			'private static int QUEUE_SIZE = ${fe.switchQueueSize};' | 4;
++			'private transient SynchronizedQueue<ISwitchTuple> synQueue = null;' | 4;
++		}
++    	
++    	if(lastHasSubPipeline) {
++    		'private int port;' | 4;
++    		'private static int QUEUE_SIZE = 1;' | 4;
++    		'private transient TupleReceiverServer server = null;' | 4;
++    		'private transient Queue<IGeneralTuple> queue = new ConcurrentLinkedQueue<IGeneralTuple>();//receiving tuples' | 4;
++    		'private transient SynchronizedQueue<IGeneralTuple> syn = null;' | 4;
++    	}
++    	
++    	if(newSwitch or looseSub) {
++    		'private transient List<Object> values = new ArrayList<Object>();' | 4;
++    		'private String nimbus_host = "localhost";' | 4;
++    		'private int thrift_port = 6027;' | 4;
++    	}
++    	if(newSwitch and hasDistAlgorithm(fm)) {
++    		'private static final int DEFAULT_WARMUP_DELAY = 30000;' | 4;
++    		if(hasHardwareAlgorithm(fm)) {
++    		'private transient HardwareControlConnection hardwareConnection = null;' | 4;
++    		}
++    		'private transient $ifName algSwitch = null;' | 4;
++    		'private boolean both;' | 4;
++    		'private int duration = DEFAULT_WARMUP_DELAY;' | 4;
++    		'private long startRecord;' | 4;
++    		'private boolean emit;' | 4;
++    		'private long id = 0;' | 4;
++    		'private transient ISwitchTuple switchTuple = null;' | 4;
++    		'private transient KryoSwitchTupleSerializer kryoSer = null;' | 4;
++    		'private transient Queue<ISwitchTuple> queue = null;' | 4;    		
++    		'transient ISwitchTuple item = null;' | 4;
++    		'private String originalAlg;' | 4;
++    		'private String targetAlg;' | 4;
++    		'private transient HashMap<String, String> impNameToConfName = null;' | 4;
++
++    		Integer port;
++    		for(Algorithm alg : fm.members) {
++    			if(algToPort.containsKey(alg.name)) {
++    				port = algToPort.get(alg.name);
++    			}
++    			if(!looseSub) {
++	    			'private String host${toIdentifier(firstToUpperCase(alg.name))} = "localhost";' | 4;
++	    			'private int port${toIdentifier(firstToUpperCase(alg.name))} = $port;' | 4;
++	    		}
++	    		'private transient Output output${toIdentifier(firstToUpperCase(alg.name))} = null;' | 4;
++    			'private transient Socket socket${toIdentifier(firstToUpperCase(alg.name))} = null;' | 4;
++    		}
++    		'private String subTopologySpoutName;' | 4;
++    	}
++		    	/****************************/
++		    	/*    Class constructor     */  
++		    	/****************************/
++    	''
++    	'    public $name(String name, String namespace) {'
++    	'        super(name, namespace, $genMonitoringProbes);'
++    	'    }'
++    	
++    			/***********************************/
++		    	/* sendAlgorithmChangeEvent method */  
++		    	/***********************************/
++    	''
++		'    /**'
++		'     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct' 
++		'     * testing.'
++		'     * @param algorithm the new algorithm'
++		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
++		'     */'
++		'    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {'
++		'        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));'
++		'    }' 
++    			/***********************************/
++		    	/* sendParameterChangeEvent method */  
++		    	/***********************************/
++    	''
++		'    /**'
++		'     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct' 
++		'     * testing.'
++		'     * @param parameter the parameter to be changed'
++		'     * @param value the new value'
++		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
++		'     */'
++		'    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {'
++		'        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));'
++		'    }' 		
++    			/*****************************************/
++		    	/* sendDefaultModeMonitoringEvent method */  
++		    	/*****************************************/
++    	''
++		'    /**'
++		'     * Sends an a default mode monitoring event with a DefaultModeException case.' 
++		'     * @param exceptionCase the DefaultModeException case'
++		'     */'
++		'    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {'
++		'        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));'
++		'    }' 		
++    			/****************************/
++		    	/*      prepare method      */  
++		    	/****************************/		
++		'' 	      
++		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
++		'        super.prepare(map, topologyContext, collector);'
++		'        _collector = collector;'
++		'        taskId = topologyContext.getThisTaskId();'
++		'        algChange = false;'
++		//TOBEREMOVED!
++		if(logOutput) {
++			'counter = 0;'
++		}
++		
++		if(newSwitchLog) {
++				'String logDir = (String) map.get("LOG.DIRECTORY");' | 8;
++				'out = DataLogger.getPrintWriter(logDir + "${name}.log");' | 8;
++		}
++		if(looseSub and hasGenAlgorithm(fm)) {
++		'//Enable the namespace of underlying sub-pipelines' | 8;
++		'installNamespaceLifecycleSignalHandler();' | 8;
++		}
++				 //get the task id of the destination nodes
++				 for(String dest : destinations) {
++				     String compName;
++				     if (subAlgName != "") {
++				         compName = "${firstToUpperCase(toIdentifier(subAlgName))}${firstToUpperCase(dest)}"; 
++				     } else {
++				         compName = directEmitDestinationEltName(fe.output, dest);
++				     }
++				 	'taskId${firstToUpperCase(dest)} = topologyContext.getComponentTasks("${compName}");' | 8;
++				 	'logger.info("taskIds${firstToUpperCase(dest)} = " + taskId${firstToUpperCase(dest)});' | 8;
++				 }
++				 if(destinations.size() != 0) {
++				 	'${elt.varName()}TaskId = topologyContext.getThisTaskId();' | 8;
++				 	'logger.info("${elt.varName()}TaskId = " + ${elt.varName()}TaskId);' | 8;
++				 }
++				 ''
++			if(!genInstance) {
++				produceInputVariable(eltFamily.input, false, fmNameInCapital);
++			}
++			if(newSwitch and hasDistAlgorithm(fm)) {
++				'nimbus_host = (String) map.get(Config.NIMBUS_HOST);' | 8;
++        		'thrift_port = (int) map.get(Config.NIMBUS_THRIFT_PORT);' | 8;
++        		'logger.info("The nimubs host is " + nimbus_host + " and the thrift port is " + thrift_port);' | 8;
++				'id = 0;' | 8;
++				'both = false;' | 8;
++				'emit = true;' | 8;
++				'kryoSer = new KryoSwitchTupleSerializer(map);' | 8;
++				'queue = new ConcurrentLinkedQueue<ISwitchTuple>();' | 8;
++				'impNameToConfName = new HashMap<String, String>();' | 8;
++				'values = new ArrayList<Object>();' | 8;
++			}
++			if(genMultiTupleTypes) {
++				produceResultVariables(fe, true);		    	
++			} else {
++				'result = new $fImpName.$fImpOutputName();' | 8;
++			}
++				
++			/** initialize the algorithm based on the default one **/
++			Algorithm alg;
++			if(isConfigured(fe.defaultAlgorithm) and fe.defaultAlgorithm != null) {
++				alg = fe.defaultAlgorithm; //take the configured one
++			} else {
++				alg = fm.members.asSequence().first(); //take the first one 
++			}
++
++			String algClsName = algImplName(alg);
++			String cls = algQualifiedClsName(alg);	
++			if(newSwitch and hasDistAlgorithm(fm)) {//TODO:auto-generated subtopology has no clas configuration					
++				String algConfName = alg.name.firstToUpperCase().toIdentifier();
++				'impNameToConfName.put("$algClsName", "$algConfName");' | 12;
++			}
++			'if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {' | 8;
++			'try {' | 12;
++			createAlgorithmInstance(destinations, ifName, cls, false, 16);
++			/* for hardware algorithm to requestion the hardware connections*/
++			if(isHardwareAlgorithm(alg) and dynamicHWUpload) {
++				HardwareAlgorithm hwAlg = alg;
++				requestHardwareConnections(hwAlg, true, hasDistAlgorithm(fm));
++			}
++			
++			
++				setDefaultParameterValue(alg.parameters, "map", "alg", 16);
++				'if (alg != null) {' | 16;
++				'            	alg.switchState(State.ACTIVATE); //activate the current algorithm'
++				'}' | 16;
++				if (initByAdaptation) {
++				'		    	sendAlgorithmChangeEvent("${algImplName(alg)}", null);' //TODO qualified class name instead of class name
++				}
++			
++			if(genMultiTupleTypes) {
++	    		if(hasDistAlgorithm(fm)) {//only generated for subtopology-based algorithm in the new version of the code
++	    			produceStreamId(fm, false);
++	    		}
++			} else {
++				if (!isManualSubtopology(alg)) {
++					'streamId = "$streamId";' | 20;
++		        } else {
++		         	topoStreamId = topoStreamId + "1" + topoStream; //.........have to adjust, for now hardcode to initial the first topo streamId			         			        
++					'streamId = "$topoStreamId";' | 20;
++	        	}
++			}
++				
++			 String spoutName = alg.name;
++			 String pipeline;
++			 if(alg.type() == "SubPipelineAlgorithm") {//for the generated sub-pipeline to use the sub-pipeline name
++			 	SubPipelineAlgorithm subAlg = alg;
++			 	spoutName = subAlg.subPipeline.name;
++			 	pipeline = spoutName;
++			 }
++			 if(!looseSub) {
++			 	pipeline = topoName;
++			 }
++		     if(newSwitch and hasDistAlgorithm(fm)) { 
++		     	 'originalAlg = "$algConfName";' | 16; //initialize with the first algorithm 
++		     	 'targetAlg = "$algConfName";'	| 16; //initialize with the first algorithm 
++		         'if(alg instanceof ITopologyCreate) {' | 16;
++            		'subTopologySpoutName = "${firstToUpperCase(toIdentifier(alg.name))}Intermediary";' | 20;
++        		'}' | 16;
++				'host${toIdentifier(firstToUpperCase(alg.name))} = initSubtopologyConnection("$pipeline", subTopologySpoutName); // get the executor host' | 16;
++			 }
++			 'algChange = true;' | 16;		
++			 catchThrowable(12);	 
++			 '}' | 8;
++			 if(newSwitch and !forSubPipeline and hasDistAlgorithm(fm)) {
++				'synQueue = new SynchronizedQueue<ISwitchTuple>(queue, QUEUE_SIZE);' | 8;
++			}
++			 if(looseSub and !forSubPipeline and hasSubPipeline) {
++			 	'genSer = new KryoGeneralTupleSerializer(map); ' | 8;
++			 	'swiSer = new KryoSwitchTupleSerializer(map); ' | 8;
++				'values = new ArrayList<Object>();' | 8; 
++				/*				
++			 	if(isGenSubtopology(alg)) { //generated software algorithm
++			 		SubPipelineAlgorithm subAlg = alg;
++			 		SubPipeline subPip = subAlg.subPipeline;
++			 		String subPipName = formulateString(subPip.name);
++			 		'PortManager portManager = getPortManager();' | 8;
++        			'PortAssignment assignment = null;' | 8;
++        			'while(assignment == null && portManager.isConnected()) {' | 8;
++		        		'try {' | 12;
++		        			'assignment = portManager.getPortAssignment("$subPipName", "${subPipName}Intermediary", 0, null);' | 16;
++						'} catch (SignalException e) {' | 12;
++							'e.printStackTrace();' | 16;
++						'}' | 12;
++        			'}' | 8;
++        			'if(assignment != null) {' | 8;
++			 			'host${toIdentifier(firstToUpperCase(alg.name))} = assignment.getHost();' | 12;
++			 			'port${toIdentifier(firstToUpperCase(alg.name))} = assignment.getPort();' | 12;
++			 		'}' | 8;
++			 	if(newSwitchLog) {
++			 		'logger.info("Connecting to the host : " + host${toIdentifier(firstToUpperCase(alg.name))} + ", the port: " + port${toIdentifier(firstToUpperCase(alg.name))});' | 8;
++		        	'out.println("Connecting to the host : " + host${toIdentifier(firstToUpperCase(alg.name))} + ", the port: " + port${toIdentifier(firstToUpperCase(alg.name))});' | 8;
++		        	'out.flush();' | 8;
++		        }
++			 	'sender = new TupleSender(host${toIdentifier(firstToUpperCase(alg.name))} , port${toIdentifier(firstToUpperCase(alg.name))});' | 8;    
++				}
++				* 
++				*/
++			 }	
++			 'initMonitor();' | 8;
++			 ''
++			 if(lastHasSubPipeline) { //generate for next consuming bolt
++			 	'queue = new ConcurrentLinkedQueue<IGeneralTuple>();' | 8;
++			 	'syn = new SynchronizedQueue<IGeneralTuple>(queue, QUEUE_SIZE);' | 8;
++//			 	'try {' | 8;
++        			'TupleReceiverHandler handler = new TupleReceiverHandler(genSer, syn);' | 8;
++        			produceDynamicPortObtainment();
++            		'server = new TupleReceiverServer(handler, port);' | 12;
++//        		'} catch (IOException e1) {' | 8;
++//            		'e1.printStackTrace();' | 12;
++//        		'}' | 8;
++        		'server.start();' | 8;
++        		''
++        		'Thread exeTupleThread = new Thread(new ExecuteTuple());' | 8;
++        		'exeTupleThread.start();' | 8;
++			 }
++			 'logger.info("The end of the prepare method.");' | 8;		
++		'    }'
++	    ''
++	    //override the initial monitor
++	    produceInitMonitor(true, 4);
++    			/****************************/
++		    	/*      execute method      */  
++		    	/****************************/	
++		if(lastHasSubPipeline) {
++		'/*' | 4;
++		'* A thread executes tuples.' | 4;
++		'*/' | 4;
++		'public class ExecuteTuple implements Runnable {' | 4;
++			'@Override' | 8;
++			'public void run() {' | 8;
++				'while(true) {' | 12;
++					'forwardTuple(syn.consume().getValue(0));' | 16;
++				'}' | 12;
++			'}' | 8;
++		'}' | 4;
++		}
++		''
++		'public void forwardTuple(Object tupleItem) {' | 4;  
++		 	if (genMonitoringProbes) {		
++			'        startMonitoring();'
++			}
++			'        // delegate to family "$fName"'
++			'if (!firstTuple) {//the first tuple arrived' | 8;
++				'firstTuple = true;' | 12;
++				'record = System.currentTimeMillis();' | 12;
++				//TOBEREMOVED!
++				if(logOutput) {
++					'recordOutput = System.currentTimeMillis();' 
++				}
++			'}' | 8;
++			if(!connector and receiveByField and subAlgName != "") {
++				'String sourceStreamId = tuple.getSourceStreamId();' | 8;
++			}
++			 //produce input -- output casting statement
++			produceInputForTuples(inputToOutputMapping, nameToOutputMap, elt, lastElt);		
++	
++			'if(!(alg instanceof ITopologyCreate)) {' | 8; //TODO check result!=null ?
++			if(debug) {
++			'logger.info("Emitting data with streamId: " + streamId + ", data:" + result);' | 12;		
++			}
++	        if (genMultiOutputs) {
++	        	if(genMultiTupleTypes) {
++	        		produceMultipleOutputs(elt, tupleToGrouping, 12);
++	        	} else {
++		            'eu.qualimaster.base.algorithm.IOutputItemIterator<$ifOutputName> iter = result.iterator();' | 12;
++				    'iter.reset();' | 12;
++				    'while (iter.hasNext()) {' | 12;
++				    '$ifOutputName out = iter.next();' | 16;
++				    'if(out != null) {' | 16;
++		            '_collector.emit(streamId, new Values(out));' | 20; 
++		            '}' | 16;
++				    '}' | 12;
++			    }
++			} else {
++	           	 '_collector.emit(streamId, new Values(result));' | 12; 
++			}
++			'}' | 8;
++	
++			'//		 _collector.ack(tuple);'
++	        if (genMonitoringProbes) {	
++			'        endMonitoring();'
++			}
++		'}' | 4;
++		''
++        '    @Override'
++        if (loadShedding) {
++        '    protected void doExecute(Tuple tuple) {'
++		} else {
++        '    public void execute(Tuple tuple) {'        
++        }		
++        	'forwardTuple(tuple.getValue(0));' | 8;
++        	if(newSwitch and forSubPipeline) {//acknowledge when it's using the switch for a sub-pipeline
++        		'_collector.ack(tuple);' | 8;
++        	}
++		'    }'
++	    ''
++    			/********************************/
++		    	/* notifyParameterChange method */  
++		    	/********************************/	    
++		sequenceOf(Parameter) parameters = fm.parameters;	           
++        if(fm.parameters.isConfigured() and parameters.size()>0 or (newSwitch and hasDistAlgorithm(fm))) {
++			'@Override' | 4;
++			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
++			'try {' | 8;
++			'for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {' | 8;
++			'ParameterChange para = signal.getChange(i);' | 12;			
++			'switch (para.getName()) {' | 12;			
++			for(Parameter p : parameters) {
++				String paraName = p.name;
++				String type = parameterTypeName(p);				
++				'case "$paraName" :' | 16;
++				Integer indent = 16;
++				if(formatException(type)) {
++					indent = 20;
++					'try {' | indent;
++				}
++				'System.out.println("Received parameter changing signal $paraName");' | indent+4;
++				'alg.setParameter${paraName.firstToUpperCase()}(para.get${type.firstToUpperCase()}Value()); ' | indent+4;
++				'sendParameterChangeEvent("$paraName", para.get${type.firstToUpperCase()}Value(), signal.getCauseMessageId());' | indent+4;
++				if(formatException(type)) {
++					'} catch (ValueFormatException e) {' | indent;
++						'e.printStackTrace();' | indent+4;
++					'}' | indent;
++				} else {
++					indent = indent+4;
++				}
++				'break;' | indent;
++				}
++				//original plain switch code
++				if(newSwitch and hasDistAlgorithm(fm)) {
++					'case "synchronized": //for switching' | 16; //fixed signal for switching
++					if(newSwitchLog) {
++	                    'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal synchronized: " + queue.size());' | 20;
++	                	'out.flush();' | 20;
++	                }
++	                    'emit = true;' | 20;
++	                    'sendAlgorithmChangeEvent(alg.getClass().getSimpleName(), null);' | 20;
++	                    Integer indent = 16;
++	                    /* 
++	                    if(!looseSub) {
++	                    'while(!queue.isEmpty()) {' | 20;
++	                    'if(emit && !both && !queue.isEmpty()) {' | indent+8;
++					    	'byte[] bytes = kryoSer.serialize(queue.poll());' | indent+12;
++						    for(Algorithm alg : fm.members) {
++					    		String algClsName = algImplName(alg);	
++					    		String aName = alg.name.firstToUpperCase().toIdentifier();
++					    		impNameToConfName.add(algClsName, aName);
++						    	'if(alg instanceof $algClsName) {' | indent+12;
++									'sendTo${aName}(bytes);' | indent+16;
++						    	'}' | indent+12;
++			        		}
++					    '}' | indent+8;
++					    '}' | 20;
++					    'queue.notifyAll();' | 20;
++					    }
++					    * 
++					    */
++	                    'break;' | 20;
++	                  'case "stopHWAlg": //stop the hardware algorithm' | 16;
++	                  	 if(newSwitchLog) {
++		                    'out.println(Calendar.getInstance().getTimeInMillis() + "Received stopHWAlg signal!!");' | 20;
++		                	'out.flush();' | 20;
++		                }
++		                if(hasHardwareAlgorithm(fm)) {
++	                    for(Algorithm alg : fm.members) {
++	                    	if(isHardwareAlgorithm(alg)) {	                    		
++		    					String algClsName = algImplName(alg);	
++	                    		'if(alg instanceof $algClsName) {' | 20; 
++	                    			'if(hardwareConnection != null) {' | 24;
++	                    				'try {' | 28;
++	                    				if(newSwitchLog) {
++						                    'out.println(Calendar.getInstance().getTimeInMillis() + "Stopping the hardware algorithm " + originalAlg);' | 20;
++						                	'out.flush();' | 20;
++						                }
++	                    				'hardwareConnection.stopAlgorithm(originalAlg);' | 32;
++	                    				'hardwareConnection.stopServer();//to be deleted, just for test' | 32;
++	                    				'hardwareConnection.close();' | 32;
++	                    				'} catch (IOException e) {' | 28;
++	                    					'e.printStackTrace();' | 32;
++	                    				'}' | 28;
++	                    			'}' | 24;
++	                    		'}' | 20;
++	                    	}
++	                    }
++	                    '//if switch back to software algorithm, the hardware connection should be closed.' | 20;
++	                    }
++                }
++			'}' | 12;
++			'}' | 8;
++			catchThrowable(8);
++			'}' |4;		
++		}
++
++				/********************************/
++				/* notifyAlgorithmChange method */
++				/********************************/	
++	Integer algTopoCount = 1;
++		'@Override' | 4;
++		'public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {' | 4;
++		'logger.info("Received algorithm switching signal " + signal.getAlgorithm());' | 8;	
++		if(newSwitchLog and hasDistAlgorithm(fm)) {
++		'out.println(Calendar.getInstance().getTimeInMillis() + "Received algorithm switching signal " + signal.getAlgorithm());' | 8;	
++		'out.flush();' | 8;
++		}
++		'try {' | 8;
++		'switch (signal.getAlgorithm()) {' | 8;	
++		for(Algorithm alg : fm.members) {
++			String algClsName = algImplName(alg);
++			String algName = alg.name;
++			String cls = algQualifiedClsName(alg);								
++	     	/* generated for subtopology (distributed) algorithms */    
++		    if(isDistAlgorithm(alg)) { 
++		    	topoStreamId = elt.varName();
++		    	topoStreamId = topoStreamId + "$algTopoCount" + topoStream;
++		    	if(algClsName != algName) {
++				'case "$algName":' | 12;
++				}
++				'case "$algClsName":' | 12;
++				if(newSwitchLog and hasDistAlgorithm(fm)) {
++					'out.println(Calendar.getInstance().getTimeInMillis() + "Is it the first change? " + algChange);' | 16;	
++					'out.flush();' | 16;
++				}
++				'logger.info("Is it the first change? " + algChange);' | 16;
++				'if(!algChange || !(alg instanceof $algClsName)) {' | 16;
++				'logger.info("Changing to the algorithm: " + signal.getAlgorithm());' | 20;
++				if(newSwitchLog and hasDistAlgorithm(fm)) {
++					'out.println(Calendar.getInstance().getTimeInMillis() + "Changing to the algorithm: " + signal.getAlgorithm());' | 20;	
++					'out.flush();' | 20;
++				}
++				if(!newSwitch) {
++					'if(alg != null) {' | 20;
++						'alg.switchState(State.PASSIVATE); //passivate the previous algorithm' | 24;
++					'}' | 20;
++				}
++		        createAlgorithmInstance(destinations, ifName, cls, true, 20);
++				/*** Hardware algorithm ***/
++				if(isHardwareAlgorithm(alg) and dynamicHWUpload) {
++					HardwareAlgorithm hwAlg = alg;
++					requestHardwareConnections(hwAlg, false, hasDistAlgorithm(fm));
++				}
++				
++				//wait the port assignment
++				if(looseSub and isGenSubtopology(alg)) { //generated software algorithm				
++			 		SubPipelineAlgorithm subAlg = alg;
++			 		SubPipeline subPip = subAlg.subPipeline;
++			 		String subPipName = formulateString(subPip.name);
++			 		'PortManager portManager = getPortManager();' | 20;
++        			'PortAssignment assignment = null;' |20;
++        			'while(assignment == null && portManager.isConnected()) {' | 20;
++		        		'try {' | 24;
++		        			'assignment = portManager.getPortAssignment(getPipeline(), "${alg.name}Intermediary", 0, null);' | 28;
++						'} catch (SignalException e) {' | 24;
++							'e.printStackTrace();' | 28;
++						'}' | 24;
++        			'}' | 20;
++        			'if(assignment != null) {' | 20;
++			 			'host${toIdentifier(firstToUpperCase(alg.name))} = assignment.getHost();' | 24;
++			 			'port${toIdentifier(firstToUpperCase(alg.name))} = assignment.getPort();' | 24;
++			 		'}' | 20;
++			 	if(newSwitchLog) {
++			 		'logger.info("Connecting to the host : " + host${toIdentifier(firstToUpperCase(alg.name))} + ", the port: " + port${toIdentifier(firstToUpperCase(alg.name))});' | 20;
++		        	'out.println("Connecting to the host : " + host${toIdentifier(firstToUpperCase(alg.name))} + ", the port: " + port${toIdentifier(firstToUpperCase(alg.name))});' | 20;
++		        	'out.flush();' | 20;
++		        }
++			 	'sender = new TupleSender(host${toIdentifier(firstToUpperCase(alg.name))} , port${toIdentifier(firstToUpperCase(alg.name))});' | 20; 
++			 	
++			 	//Algorithm specific -- only for the correlation algorithms!!!
++			 	if(sendSymbolList) {
++					'//send the symbolList explicitly only for the correlation algorithms'
++					'if(iTupleSymbolList != null) {'
++                    'List<Object> list = new ArrayList<Object>();'
++                    'list.add(iTupleSymbolList);'
++                    'ISwitchTuple symbolTuple = new SwitchTuple(id, list);'
++                    'byte[] bytes = kryoSer.serialize(symbolTuple);'
++                    'sendTo${toIdentifier(firstToUpperCase(alg.name))}(bytes);'
++                	'}'
++				}   
++				}
++				
++				if(newSwitch) {
++					if(!looseSub) {
++						'subTopologySpoutName = "${firstToUpperCase(toIdentifier(alg.name))}Intermediary";' | 20;
++						'host${toIdentifier(firstToUpperCase(alg.name))} = initSubtopologyConnection("$topoName", subTopologySpoutName);' | 20;
++					}
++					'startRecord = Calendar.getInstance().getTimeInMillis();' | 20;
++					'targetAlg = "${firstToUpperCase(toIdentifier(alg.name))}";' | 20;
++					'if(algChange) { //switch algorithm change' | 20;
++						'duration = Math.max(500, signal.getIntParameter(AlgorithmChangeParameter.WARMUP_DELAY, DEFAULT_WARMUP_DELAY));' | 24;
++						'both = true;' | 24;	
++						'originalAlg = impNameToConfName.get(alg.getClass().getSimpleName());' | 24;
++					'}' | 20;
++					
++				}
++				if(genMultiTupleTypes) {
++					String sId = formulateString(elt.varName()) + formulateString(alg.name);
++					'streamId = "$sId";' | 20;
++				} else {
++					'streamId = "$topoStreamId";' | 20;
++				}
++				
++				if(newSwitch) {
++					'if(!algChange) {//initialize the algorithm' | 20;
++						setDefaultParameterValue(alg.parameters, "", "alg", 24);
++					'} else {//switch to the algorithm' | 20;
++						setDefaultParameterValue(alg.parameters, "", "algSwitch", 24);
++					'}' | 20;
++				} else {
++					setDefaultParameterValue(alg.parameters, "", "alg", 20);
++				}
++				Integer indent = 20;
++				if(newSwitch) {
++					'if(!algChange) {' | 20;
++					indent = indent + 4;
++				}
++				'sendAlgorithmChangeEvent("$algClsName", signal.getCauseMessageId());' | indent;
++				if(newSwitch) {
++					'}' | 20;
++				}
++				
++				if(!newSwitch) {				
++				'if(alg != null) {' | 20;	
++					'alg.switchState(State.ACTIVATE); //activate the current algorithm' | 24;
++				'}' | 20;	
++				}
++				'algChange = true;' | 20;
++				'}' | 16;
++			    'break;' | 16;
++	    	    algTopoCount = algTopoCount + 1;
++		    } else { 
++			    /* generated for normal Java algorithms */
++			    'case "$algClsName":' | 12;
++				'if (!algChange || !(alg instanceof $algClsName)) {' | 16;
++				'algChange = true;' | 20;
++				'if(alg != null) {' | 20;
++					'alg.switchState(State.PASSIVATE); //passivate the previous algorithm' | 24;
++				'}' | 20;
++		        createAlgorithmInstance(destinations, ifName, cls, true, 20);
++				if(!genMultiTupleTypes) {			
++					'streamId = "$streamId";'  | 20;	
++				}
++				setDefaultParameterValue(alg.parameters, "", "alg", 20);
++				'sendAlgorithmChangeEvent("$algClsName", signal.getCauseMessageId());' | 20;
++				'if(alg != null) {' | 20;
++				'alg.switchState(State.ACTIVATE); //activate the current algorithm' | 24;
++				'}' | 20;
++				'}' | 16;
++				'break;' | 16;
++		    }						
++		}		
++		'}' | 8;	
++		'super.notifyAlgorithmChange(signal);' | 8;
++		catchThrowable(8);
++		'}' | 4;
++			      
++        ''
++				/************************************/
++				/* checkDisconnect method --not used*/
++				/************************************/    	
++	   	Boolean hasHW = false;
++	    if(hasHW){ // only generate when there is hardware algorithm
++	    '/**' | 4;
++	    '* Checks if the FamilyElement connects to hardware.' | 4;
++	    '* @param alg the family algorithm' | 4;
++	    '**/' | 4;
++	    '    protected void checkDisconnect($ifName alg) {'
++	    '        if (alg instanceof HardwareStub) {'
++		'            ((HardwareStub) alg).disconnect();'
++		'            }'
++	    '    }'
++	    ''	    	
++	    }
++				/****************************/
++				/*     cleanup method       */
++				/****************************/
++	    '    @Override'
++        '    public void cleanup() {'
++        '        super.cleanup();'
++        'if(alg != null) {' | 8;
++        'alg.switchState(State.TERMINATING);' | 12;
++        '}' | 8;
++        if(newSwitch and hasHardwareAlgorithm(fm)) {
++        'if(hardwareConnection != null) {' | 24;
++				'try {' | 28;
++				'hardwareConnection.stopServer();' | 32;
++				'hardwareConnection.close();' | 32;
++				'} catch (IOException e) {' | 28;
++					'e.printStackTrace();' | 32;
++				'}' | 28;
++			'}' | 24;
++			}
++        '    }'
++        '' 
++				/************************************/
++				/*   declareOutputFields method     */
++				/************************************/              
++		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'				
++		if(genMultiTupleTypes) {
++			produceStreamIdDeclaration(elt, (subAlgName != ""), 8);
++		} else {
++			'        declarer.declareStream("$streamId", new Fields("$ifOutputName"));'
++			Integer algCount = 1;	
++			for(Algorithm alg : fm.members) {
++			    //declare all streamId of the topo-based algorithm
++			    if(isDistAlgorithm(alg)) { 
++			    	String algStreamId = elt.varName();
++			    	algStreamId = algStreamId + "$algCount" + topoStream;
++			    	'        declarer.declareStream("$algStreamId", new Fields("$ifOutputName"));'
++			    	algCount = algCount + 1;
++			    }  
++			}
++		}	
++		'    }'
++    	''
++    	
++    	/********************************* */
++    	/*******Prepare shut down signal** */
++    	/********************************* */
++    	'@Override' | 4;
++    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
++        	'super.prepareShutdown(signal);' | 8;
++        	'if(alg != null) {' | 8;
++        		'alg.switchState(State.TERMINATING);' | 12;
++        	'}' | 8;
++    	'}' | 4;
++		''
++    	if((looseSub and hasSubPipeline) or (newSwitch and hasDistAlgorithm(fm)) and !forSubPipeline ) {
++    	'private String initSubtopologyConnection(String pipeline, String executor) {' | 4;
++        	'String host = new CollectingTopologyInfo(pipeline, executor, nimbus_host, thrift_port).getExecutorHost();' | 8;
++        	'logger.info("The executor: " + executor + "-- host: " + host); ' | 8;
++        	'return host;' | 8;
++     	'}' | 4;
++    	''
++    	}
++    	if((newSwitch and hasDistAlgorithm(fm)) and !forSubPipeline ) {
++    	for(Algorithm alg : fm.members) {
++    		String aName = alg.name.firstToUpperCase().toIdentifier();
++    		if(isDistAlgorithm(alg)) { //generate only when the algorithm is subtopology
++    	'public boolean connect${aName}() {' | 4;
++        	'Socket s = null;' | 8;
++        	'if(null == socket${aName}) {' | 8;
++            	'try {' | 12;               
++	                'System.out.println("FM--Creating the socket with the host: " + host${aName} + " and the port: " + port${aName});' | 16;
++	                's = new Socket(host${aName},port${aName});' | 16; 
++	                'output${aName} = new Output(s.getOutputStream());' | 16;
++	                'socket${aName} = s;' | 16;
++            	'} catch (UnknownHostException e) {' | 12;
++                	'e.printStackTrace();' | 16;
++            	'} catch (IOException e) {' | 12;
++                	'e.printStackTrace();' | 16;
++            	'}' | 12;
++        	'}' | 8;
++        	'return null != socket${aName};' | 8;
++    	'}' | 4;
++    	''
++    	'public void sendTo${aName}(byte[] bytes) {' | 4;
++    		'if(connect${aName}()) {' | 8;
++    			'try {' | 12;
++				'output${aName}.writeInt(bytes.length);' | 16;
++				'output${aName}.writeBytes(bytes);' | 16;
++				'output${aName}.flush();' | 16;
++				'emitted(bytes);' | 16;
++				'} catch (KryoException e) {' | 12;
++					'e.printStackTrace();' | 16;
++				'}' | 12;
++			'}'| 8;
++    	'}' | 4;
++    	}
++    	}
++    	}
++    	'}'
++    }       
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareAlgorithmSubTopology.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareAlgorithmSubTopology.vtl
+new file mode 100644
+index 0000000..8fbf0e5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareAlgorithmSubTopology.vtl
+@@ -0,0 +1,112 @@
++import commonVTLMethods;
++@advice(QM)
++template stormHardwareAlgorithmSubTopology(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm, String pipelineName, String algName) {
++	def main(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm, String pipelineName, String algName) {
++		String fName = family.name;
++		String ifName = "I" + fName.firstToUpperCase();
++		String outputImpName;
++		String tupleName; 
++		for(Tuple t : family.output) {
++			tupleName = t.name; // assume that we only have one type of Tuple in the output of the family
++			outputImpName = fName + "${firstToUpperCase(tupleName)}Output";
++		}
++
++		HardwareAlgorithm hwAlg = algorithm;
++		Integer senderParallelism = hwAlg.senderParallelism;
++		Integer receiverParallelism = hwAlg.receiverParallelism;
++		'package eu.qualimaster.algorithms.${firstToUpperCase(toIdentifier(algName))};'
++		''
++		'import eu.qualimaster.base.algorithm.ITopologyCreate;'
++		'import eu.qualimaster.base.algorithm.SubTopologyOutput;'
++		'import eu.qualimaster.families.inf.$ifName;'
++		'import eu.qualimaster.observables.IObservable;'
++		'import backtype.storm.topology.TopologyBuilder;'
++		'import backtype.storm.Config;'
++		'import eu.qualimaster.infrastructure.PipelineOptions;'
++		''
++		'public class ${firstToUpperCase(toIdentifier(algName))}SubTopology implements ITopologyCreate, $ifName {'
++			'final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(${firstToUpperCase(toIdentifier(algName))}SubTopology.class);' | 4;
++			'private String pipelineName = "$pipelineName";' | 4;
++			''
++			'public SubTopologyOutput createSubTopology(TopologyBuilder topologyBuilder,
++            Config config, String prefix, String input, String streamId) {' | 4;
++                'String keyPrefix = prefix + ".${hwAlg.name}.";' | 8;
++                'String senderKey = keyPrefix + "sender";' | 8;
++                'String receiverKey = keyPrefix + "receiver";' | 8;
++                'int senderParallelism = PipelineOptions.getExecutorParallelism(config, senderKey, ${hwAlg.senderParallelism});' | 8;
++                'int senderTasks = PipelineOptions.getTaskParallelism(config, senderKey, ${defaults(hwAlg.senderNumTasks, hwAlg.senderParallelism)});' | 8;
++                'int receiverParallelism = PipelineOptions.getExecutorParallelism(config, receiverKey, ${hwAlg.receiverParallelism});' | 8;
++                'int receiverTasks = PipelineOptions.getTaskParallelism(config, receiverKey, ${defaults(hwAlg.receiverNumTasks, hwAlg.receiverParallelism)});' | 8;
++                'int totalParallelism = Math.max(senderParallelism, receiverParallelism);' | 8;
++            	'topologyBuilder.setSpout(prefix + "HardwareConnectionSpout", new HardwareConnectionSpout(prefix + "HardwareConnectionSpout",
++                        pipelineName, streamId), receiverParallelism).setNumTasks(receiverTasks);' | 8;
++        		'topologyBuilder.setBolt(prefix + "HardwareConnectionBolt", new HardwareConnectionBolt(prefix + "HardwareConnectionBolt",
++                        pipelineName), senderParallelism).setNumTasks(senderTasks).shuffleGrouping(input, streamId);' | 8;
++        		'return new SubTopologyOutput(prefix + "HardwareConnectionSpout", streamId, 1, totalParallelism);' | 8;
++    		'}' | 4;
++    		''
++    		produceForCalculate(family.input, family.output, ifName);
++    		for (Parameter p : family.parameters) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++	        	'    /**'
++	        	'     * Sets the algorithm parameter "${paramName}".'
++	        	'     *'
++	        	'     * @param value the new value of the algorithm parameter'
++	        	'     */'
++	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
++	        	'    }'
++	        	''      	
++	    	}
++    		'public Double getMeasurement(IObservable observable) {' | 4;
++        		'return null; ' | 8;
++    		'}' | 4;
++			''
++    		'@Override' | 4;
++    		'public void switchState(State state) {' | 4;        
++    		'}' | 4;
++			''			    		  		
++		'}'
++	}
++	
++	def produceForCalculate(Tuples inputTuples, Tuples outputTuples, String ifName) {   	 
++    	 String inputTupleName;
++    	 String outputTupleName;
++  	  
++    	 for(Tuple t : inputTuples){
++    	    inputTupleName = t.name;
++    	    inputTupleName = firstToUpperCase(inputTupleName);        	      	 	
++    	 	String inTypeName = "I${ifName}${inputTupleName}Input";
++
++    	 	for(Tuple p : outputTuples){
++    	 		outputTupleName = p.name;
++    	        outputTupleName = firstToUpperCase(outputTupleName);    	 		
++    	 		String outTypeName = "I${ifName}${outputTupleName}Output";  	 
++    	
++    	'    /**'
++    	'     * Calculates the actual <code>result</code> for <code>input</code>.'
++    	'     *'
++    	'     * @param input the algorithm input taken from the input stream'
++    	'     * @param result the result calculated by the algorithm'
++    	'     */'
++    	'    @Override'
++        '    public void calculate(${inTypeName} input, ${outTypeName} result){'
++        '    }'
++        ''
++           }
++       }
++    }
++
++    //move to commonVTLMethods?
++    def Integer defaults(DecisionVariable var, Integer deflt) {
++        Integer result = deflt;
++        if (var.isConfigured()) {
++            Integer val = var.getIntegerValue();
++            if (val > 0) {
++                result = val;
++            }
++        }
++        result;
++    }
++    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionBolt.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionBolt.vtl
+new file mode 100644
+index 0000000..914212a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionBolt.vtl
+@@ -0,0 +1,449 @@
++import commonVTLMethods;
++@advice(QM)
++template stormHardwareConnectionBolt(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm) {
++	sequenceOf(String) letters = {"a", "b", "c", "d", "e"}; 
++	String algName = algorithm.name;
++	MPCCNode node = algorithm.hwNode;
++	def main(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm) {
++		String fName = family.name.firstToUpperCase();
++		String ifName = "I" + fName.firstToUpperCase();	
++		'package eu.qualimaster.algorithms.${firstToUpperCase(toIdentifier(algName))};'
++		''
++		'import java.io.IOException;'
++		'import java.io.ByteArrayOutputStream;'
++		'import java.util.Map;'
++		'import backtype.storm.task.OutputCollector;'
++		'import backtype.storm.task.TopologyContext;'
++		'import backtype.storm.topology.OutputFieldsDeclarer;'
++		'import backtype.storm.tuple.Tuple;'
++		'import eu.qualimaster.common.signal.AbstractMonitor;'
++		'import eu.qualimaster.common.signal.BaseSignalBolt;'
++		'import eu.qualimaster.base.algorithm.HardwareTransmitter;'
++		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
++		'import eu.qualimaster.base.serializer.Parameters.*;'
++		'import eu.qualimaster.common.signal.ShutdownSignal;'
++		'import eu.qualimaster.common.signal.ParameterChangeSignal;'	
++		'import eu.qualimaster.common.signal.ParameterChange;'	
++		'import eu.qualimaster.common.signal.ValueFormatException;'
++		'import eu.qualimaster.observables.ResourceUsage;'
++		if(hwlog) {
++			'import java.io.PrintWriter;'
++			'import eu.qualimaster.common.logging.DataLogger;'
++			'import java.util.Calendar;'
++		}
++		if(ackThread) {
++			'import java.util.Queue;'
++			'import java.util.concurrent.ConcurrentLinkedQueue;'
++			'import eu.qualimaster.common.switching.SynchronizedQueue;'
++		}
++		produceImportFromInput(family.input, fName, 0);
++		''
++		'public class HardwareConnectionBolt extends BaseSignalBolt {'
++			'final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionBolt.class);' | 4;
++			'private transient OutputCollector collector;' | 4;
++			'private String ip;' | 4;
++			'private int port = 0;' | 4;
++			'private boolean ready = false;' | 4;
++			'private transient Queue<Tuple> queueTuple = new ConcurrentLinkedQueue<Tuple>();' | 4;
++			'private transient HardwareTransmitter hardwareConnection;' | 4;
++			'private transient ByteArrayOutputStream output = null;' | 4;
++			'private transient ByteArrayOutputStream paraOutput = null;' | 4;
++			'private String separator;' | 4;
++			produceInputVariable(family.input, ifName, 4);
++			if(hwlog) {
++				'private transient PrintWriter out = null;' | 4;
++				'private transient PrintWriter out1 = null;' | 4;
++				'private int counter = 0;' | 4;
++				'private long timestampInS = 0;' | 4;
++			}
++			if(ackThread) {
++				'private int size;' | 4;
++				'private transient DataAcker dataAcker;' | 4;
++				'private transient Queue<Tuple> queue = new ConcurrentLinkedQueue<Tuple>();' | 4;	
++				'private transient SynchronizedQueue<Tuple> syn = null;' | 4;
++			}
++			''
++			/*********************** */
++			/*******Constructor***** */
++			/*********************** */
++			'public HardwareConnectionBolt(String name, String namespace) {' | 4;
++        		'super(name, namespace, $genMonitoringProbes); ' | 8; 
++    		'}' | 4;
++    		''
++    		/************************* */
++    		/*******prepare method**** */
++    		/************************* */
++    		'@SuppressWarnings("rawtypes")' | 4;
++    		'public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {' | 4;
++    			'super.prepare(map, topologyContext, outputCollector);' | 8;
++    			'collector = outputCollector;' | 8;
++    			'ip = "${node.host}";' | 8; //replace to the ip configuration
++    			if(hwlog) {
++        			'counter = 0;' | 8;
++        			'timestampInS = System.currentTimeMillis()/1000;' | 8;
++        			'out = DataLogger.getPrintWriter("/var/nfs/spass/hardwareBolt.csv");' | 8;
++        			'out1 = DataLogger.getPrintWriter("/var/nfs/spass/hardwareBoltResult.csv");' | 8;
++        		}
++    			if(!dynamicHWUpload) { //static port
++        			'port = 2404; //default' | 8; //replace to the port configuration
++        			'ready = true;' | 8;
++        		} else {
++        			'ready = false;' | 8;
++        		}
++        		'queueTuple = new ConcurrentLinkedQueue<Tuple>();' | 8;
++        		'output = new ByteArrayOutputStream();' | 8;
++        		'paraOutput = new ByteArrayOutputStream();' | 8;
++        		produceTypesRegistration(family.input, fName, false, 8);
++        		if(ackThread) {
++        			'queue = new ConcurrentLinkedQueue<Tuple>();' | 8;
++        			'size = 50;' | 8;
++        			'syn = new SynchronizedQueue<Tuple>(queue, size);' | 8;
++        			'try {' | 8;
++      					'dataAcker = new DataAcker();' | 12;
++    				'} catch (Exception e) {' | 8;
++      					'logger.error("", e);' | 12;
++    				'}' | 8;
++    				'Thread dataAckerThread = new Thread(dataAcker);' | 8;
++    				'dataAckerThread.start();' | 8;
++        		}
++        		/* 
++        		if(dynamicHWUpload) {
++        			'while(port==0) {//waiting for the dynamic port' | 8;
++        			'}' | 8;
++        			if(hwlog) {
++        				'logger.info("Port is ready and continuing the processing...");' | 8;
++        				'out.println("Port is ready and continuing the processing...");' | 8;
++        				'out.flush();' | 8;
++	        		}
++        		}
++        		* 
++        		*/
++        		'initMonitor();' | 8;
++        		'logger.info("The end of the prepare method.");' | 8;
++    		'}' | 4;
++    		''
++    		//override the initial monitor
++	    	produceInitMonitor(true, 4);
++	    
++    		if(ackThread) {
++    			'public class DataAcker implements Runnable {' | 4;
++    				'private boolean cont = false;' | 8;
++    				''
++    				'public DataAcker() {' | 8;
++    					'cont = true;' | 12;
++    				'}' | 8;
++    				''
++    				'@Override' | 8;
++    				'public void run() {' | 8;
++    					'while(cont) {' | 12;
++    						'collector.ack(syn.consume());' | 16;
++    					'}' | 12;
++    				'}' | 8;
++    				''
++    				'public void stop() {' | 8;
++    					'cont = false;' | 12;
++    				'}' | 8;
++    			'}' | 4;
++    			''
++    		}
++    		''
++    		/************************** */
++    		/*******execute method***** */
++    		/************************** */
++    		'public void execute(Tuple tuple) {' | 4;
++    			'queueTuple.offer(tuple);' | 8;
++    			'if(ready) {' | 8;
++    				'sendTuple();' | 12;
++    			'}' | 8;        		
++        	'}' | 4;
++        	''
++        	'protected void sendTuple() {' | 4;
++        		if (genMonitoringProbes) {
++		            'AbstractMonitor monitor = createThreadMonitor();' | 8;
++		        }
++		        'Tuple tuple = queueTuple.poll();' | 8;
++        		produceInputForTuples(family.input, ifName, 8);
++        	'}' | 4;
++			/**************************** */
++			/*********connect method***** */
++			/**************************** */
++			'private boolean connect() {' | 4;
++        		'if (null == hardwareConnection) {' | 8;
++	            	'try {' | 12;
++	                	'hardwareConnection = new HardwareTransmitter(ip, port);' | 16;
++	                	'logger.info("Created a transmitter connection.");' | 16;
++	                	if(hwlog) {
++	                	'out.println("Created a transmitter connection.");' | 16;
++	                	'out.flush();' | 16;
++	                	}
++	            	'} catch (IOException e) {' | 12;
++	                	'e.printStackTrace();' | 16;
++	            	'}' | 12;
++        		'}' | 8;
++        		'return null != hardwareConnection;' | 8;
++    		'}' | 4;
++    		''
++    		/********************************/
++		    /* notifyParameterChange method */  
++		    /********************************/	    
++		sequenceOf(Parameter) parameters = family.parameters;
++		String protocol;	           
++        if(family.parameters.isConfigured()) {
++			'@Override' | 4;
++			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
++			'logger.info("Received the parameter change signal!");' | 8;
++			if(hwlog) {
++				'out.println(Calendar.getInstance().getTimeInMillis() + ", Received the parameter change signal!"); ' | 8;
++				'out.flush();' | 8;
++			}
++			'String paraSeparator = null;' | 8;
++			'try {' | 8;
++			'for(int i = 0; i < signal.getChangeCount(); i++) {' | 12;
++			'ParameterChange para = signal.getChange(i);' | 16;	
++			'paraOutput.reset();' | 16;		
++			'switch (para.getName()) {' | 16;			
++			for(Parameter p : parameters) {
++				DecisionVariable paraVar = p;
++				String paraVarType = p.type();
++				String paraName = p.name;
++				String type = parameterTypeName(p);	
++				protocol = parameterHwProtocol(p);
++				'case "$paraName" :' | 20;
++					'logger.info("Received parameter changing signal $paraName");' | 24;
++					'$paraVarType ${paraName}Para = new $paraVarType();' | 24;
++					'${paraName}Para.setName("$paraName");' | 24;
++					'${paraName}Para.setValue(para.get${type.firstToUpperCase()}Value());' | 24;
++					'SerializerRegistry.getSerializerSafe("$paraVarType", $paraVarType.class).serializeTo(${paraName}Para, paraOutput);' | 24;
++					'paraSeparator = "p${protocol}";'	 | 24;
++					'if (connect()) {' | 24;
++        	 			'if(paraOutput != null && paraSeparator != null) {' | 28;
++        	 				'hardwareConnection.sendSeparator(paraSeparator);' | 32;
++			 				'hardwareConnection.sendData(paraOutput.toByteArray());' | 32;           
++            			'}' | 28;
++        			'}' | 24;
++					'break;' | 24;
++				}
++				'case "port": ' | 20;
++					'logger.info("Received signal port!"); ' | 24;
++					'port = para.getIntValue();' | 24;
++					'ready = true;' | 24;
++					'logger.info("Received signal port!" + port); ' | 24;
++					'recordOnce(ResourceUsage.USED_CPUS, 1);' | 24;
++					'recordOnce(ResourceUsage.USED_DFES, 1);' | 24;
++					if(hwlog) {
++					'out.println(Calendar.getInstance().getTimeInMillis() + ", Received signal port!" + port); ' | 24;
++					'out.flush();' | 24;
++					}
++					'break;' | 24;
++					
++				'case "omit": ' | 20;
++					'logger.info("Received signal omit, sending the omit message to hardware!!");' | 24;
++					if(hwlog) {
++					'out.println(Calendar.getInstance().getTimeInMillis() + ", Received signal omit, sending the omit message to hardware!!");' | 24;
++					'out.flush();' | 24;
++					}
++					'paraSeparator = "cc";'	 | 24;
++					'if (connect()) {' | 24;
++        	 			'hardwareConnection.sendSeparator(paraSeparator);' | 32;
++        			'}' | 24;
++        			'break;' | 20;
++        			
++        		'case "flush": ' | 20;
++					'logger.info("Received signal flush, sending the flush message to hardware!!");' | 24;
++					if(hwlog) {
++					'out.println(Calendar.getInstance().getTimeInMillis() + ", Received signal flush, sending the flush message to hardware!!");' | 24;
++					'out.flush();' | 24;
++					}
++					'if (connect()) {' | 24;
++        	 			'hardwareConnection.sendFlushMessage();' | 32;
++        			'}' | 24;
++        			'break;' | 20;
++        				
++        			'}' | 16;
++				'}' | 12;
++				'} catch (ValueFormatException e) {' | 8;
++				'e.printStackTrace();' | 12;
++				'} catch (IOException e) {' | 8;
++				'e.printStackTrace();' | 12;
++				'}' | 8;
++			'}' |4;		
++		}
++    		''
++    		/******************************** */
++    		/****declareOuputFields method*** */
++    		/******************************** */
++    		'public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {' | 4;
++    		'}' | 4;
++    		''
++    		
++    		/********************************* */
++	    	/*******Prepare shut down signal** */
++	    	/********************************* */
++	    	'@Override' | 4;
++	    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
++	        	'super.prepareShutdown(signal);' | 8;
++	        	'dataAcker.stop();' | 8;
++	        	'try {' | 8;
++        			'if(hardwareConnection != null) {' | 12;
++                        'hardwareConnection.sendCloseMessage();' | 16;
++                        'hardwareConnection.close();' | 16;  
++                 	'}' | 12;        		
++            		'if(output != null) {' | 12;
++            			'output.close();' | 16;
++            		'}' | 12;
++            		'if(paraOutput != null) {' | 12;
++            			'paraOutput.close();' | 16;
++            		'}' | 12;
++        		'} catch (IOException e) {' | 8;
++            		'e.printStackTrace();' | 12;
++        		'}' | 8;
++        		'recordOnce(ResourceUsage.USED_CPUS, 0);' | 8;
++				'recordOnce(ResourceUsage.USED_DFES, 0);' | 8;
++	    	'}' | 4;
++	    	''
++    		'@Override' | 4;
++    		'public void cleanup() {' | 4;
++        		'super.cleanup();' | 8;
++        		'try {' | 8;
++        			'if(hardwareConnection != null) {' | 12;
++                        'hardwareConnection.sendCloseMessage();' | 16;
++                        'hardwareConnection.close();' | 16;  
++                 	'}' | 12;
++                 	'if(output != null) {' | 12;
++            			'output.close();' | 16;
++            		'}' | 12;
++            		'if(paraOutput != null) {' | 12;
++            			'paraOutput.close();' | 16;
++            		'}' | 12;
++        		'} catch (IOException e) {' | 8;
++            		'e.printStackTrace();' | 12;
++        		'}' | 8;
++    		'}' | 4;    		   		
++		'}'
++	}
++
++	def produceInputForTuples(Tuples tuples, String ifName, Integer indent) {	
++		'if(tuple != null) {' | indent - 4;
++		String inputInfName; //input interface name	
++		String inputImpName;		     
++		
++		String tupleName;
++		Boolean multiStream = false;
++
++		Integer tuplesSize = tuples.size();
++		Integer innerIndent = indent;
++		if(tuplesSize > 1){
++			multiStream = true;
++			innerIndent = indent + 4;
++		}
++		String letter;
++		Integer counter = 0;
++		for(Tuple t : tuples) {
++			//get the tuple name
++			tupleName = t.name;			
++			//get input interface name
++			inputInfName = "I" + ifName + "${firstToUpperCase(tupleName)}Input";
++			inputImpName =ifName + "${firstToUpperCase(tupleName)}Input";
++			letter = letters.get(counter);									
++			if(multiStream){
++				'if(tuple.getValue(0) instanceof $inputInfName) {' | indent;
++			}
++			'if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {'
++			'separator = "d${letter}";' | innerIndent;
++			'input${firstToUpperCase(tupleName)} = ($inputInfName)tuple.getValue(0);' | innerIndent;
++			/* 
++			if(hwlog) {
++				'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending data to hardware: "' | indent;
++	    		for(Field f : t.fields) {
++					 String fname = toIdentifier("${f.name}");
++	    			 String mname = firstToUpperCase(fname);
++	    	         '+ ", $mname: "+ input${firstToUpperCase(tupleName)}.get${mname}()' | indent;
++				 }
++				 ');' | indent;
++	    		'out.flush();' | indent;
++	    		'logger.info(Calendar.getInstance().getTimeInMillis() + ", Sending data to hardware: "' | indent;
++	    		for(Field f : t.fields) {
++					 String fname = toIdentifier("${f.name}");
++	    			 String mname = firstToUpperCase(fname);
++	    	         '+ ", $mname: "+ input${firstToUpperCase(tupleName)}.get${mname}()' | indent;
++				 }
++				 ');' | indent;
++			}
++			* 
++			*/
++			
++			'try {' | innerIndent;
++				'output.reset();' | innerIndent + 4;
++		    	'SerializerRegistry.getSerializerSafe("$inputImpName", $inputInfName.class).serializeTo(input${firstToUpperCase(tupleName)}, output);' | innerIndent + 4;
++			 '} catch (IOException e) {' | innerIndent;
++            	'e.printStackTrace();' | innerIndent + 4;
++        	 '}' | innerIndent;
++        	 '}'
++			 if(multiStream){
++			 	'}' | indent;
++			 }
++			 counter = counter +1;
++			 ''		
++		}	
++		if(ackEarlier) {
++			if(ackThread) {
++			 		'syn.produce(tuple);' | indent;
++			 	} else {
++            		'collector.ack(tuple);' | indent;
++            	}
++		}
++		'if (connect()) {' | indent;
++        	 'if(output != null && separator != null) {' | indent + 4;
++        	 	if (genMonitoringProbes) {
++				  'monitor.startMonitoring();' | indent + 8;
++		        }
++		        if(hwlog) {
++					'long now = System.currentTimeMillis();' | indent+24;
++                    'if(timestampInS == now/1000) {' | indent+24;
++                    	'counter++;' | indent+28;
++                    '} else {' | indent+24;
++                    	'out1.println(timestampInS + " " + counter);' | indent+28;
++						'out1.flush();' | indent+28;
++                    	'timestampInS = now/1000;' | indent+28;
++                    	'counter = 1;' | indent+28;
++                    '}'  indent+24;
++				}
++        	 	'hardwareConnection.sendSeparator(separator);' | indent + 8;
++			 	'hardwareConnection.sendData(output.toByteArray());' | indent + 8;  
++			 	if (genMonitoringProbes) {
++				  'monitor.endMonitoring(tuple);' | indent + 8;
++		        }
++			 	if(!ackEarlier) {
++				 	if(ackThread) {
++				 		'syn.produce(tuple);' | indent + 8;
++				 	} else {
++	            		'collector.ack(tuple);' | indent + 8;
++	            	}
++            	}
++            '}' | innerIndent + 4;
++        '}' | innerIndent;	
++      	'}' | indent - 4;						
++	}
++	
++	def produceInputVariable(Tuples tuples, String ifName, Integer indent) {
++		String tupleName;
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			String inputInfName = 'I' + ifName + "${firstToUpperCase(tupleName)}Input";
++			'private transient $inputInfName input${firstToUpperCase(tupleName)} = null;' | indent;
++		}
++	}
++	
++	def produceImportFromInput(Tuples tuples, String fName, Integer indent) {
++		String ifName = 'I' + fName;
++		String tupleName;
++		'import eu.qualimaster.families.inf.${firstToUpperCase(toIdentifier(ifName))}.*;'
++		'import eu.qualimaster.families.imp.${firstToUpperCase(toIdentifier(fName))}.*;'
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			String inputInfName = ifName + "${firstToUpperCase(tupleName)}Input";
++			'import eu.qualimaster.families.inf.${firstToUpperCase(toIdentifier(ifName))}.I$inputInfName;' | indent;
++			'import eu.qualimaster.families.imp.${firstToUpperCase(toIdentifier(fName))}.$inputInfName;' | indent;
++		}
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionSpout.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionSpout.vtl
+new file mode 100644
+index 0000000..36af0bb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionSpout.vtl
+@@ -0,0 +1,677 @@
++import commonVTLMethods;
++@advice(QM)
++template stormHardwareConnectionSpout(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm, String topoName) {
++	Boolean fastThread = false;
++	String fName = family.name.firstToUpperCase();
++    String ifName = "I" + fName.firstToUpperCase();
++	String tupleName;
++	String outputImpName;
++	String algName = algorithm.name;
++	MPCCNode node = algorithm.hwNode;
++	String algClsName;	
++	def main(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm, String topoName) {
++		algClsName = algImplName(algorithm);
++		'package eu.qualimaster.algorithms.${firstToUpperCase(toIdentifier(algName))};'
++		''
++		'import java.io.IOException;'
++		'import java.io.ByteArrayOutputStream;'
++		'import java.io.ByteArrayInputStream;'
++		'import java.util.ArrayList;'
++		'import java.util.List;'
++		'import java.util.Map;'
++		'import java.util.HashMap;'
++		'import backtype.storm.spout.SpoutOutputCollector;'
++		'import backtype.storm.task.TopologyContext;'
++		'import backtype.storm.topology.OutputFieldsDeclarer;'
++		'import backtype.storm.tuple.Tuple;'
++		'import backtype.storm.tuple.Fields;'
++		'import backtype.storm.tuple.Values;'
++		'import eu.qualimaster.common.signal.BaseSignalSpout;'
++		'import eu.qualimaster.base.algorithm.HardwareTransmitter;'
++		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
++		'import eu.qualimaster.common.signal.ParameterChangeSignal;'
++		'import eu.qualimaster.common.signal.ShutdownSignal;'	
++		'import eu.qualimaster.common.signal.ParameterChange;'	
++		'import eu.qualimaster.common.signal.ValueFormatException;'
++		'import eu.qualimaster.common.signal.SignalException;'
++		'import eu.qualimaster.families.inf.${toIdentifier(ifName)}.*;'
++		if(hwlog) {
++			'import java.io.PrintWriter;'
++			'import eu.qualimaster.common.logging.DataLogger;'
++			'import java.util.Calendar;'
++		}
++		if(emitThread) {
++			'import java.util.Queue;'
++			'import java.util.concurrent.ConcurrentLinkedQueue;'
++			'import eu.qualimaster.common.switching.SynchronizedQueue;'
++		}
++		
++		if(multiHWThread) {
++			'import eu.qualimaster.common.hardware.IHardwareHandlerCreator;'
++			'import eu.qualimaster.common.hardware.MultiHardwareThreadsExecutor;'
++		}
++
++		produceImportFromOutput(family.output, fName, 0);
++		''
++		'public class HardwareConnectionSpout extends BaseSignalSpout {'
++			'final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionSpout.class);' | 4;
++			'private transient SpoutOutputCollector collector;' | 4;
++			'private String streamId;' | 4;
++			'private int MAXDATASIZE;' | 4;
++			'private int taskId;' | 4;
++			'private int taskNum;' | 4;
++			'private int taskIndex;' | 4;
++			'private boolean ready = false;' | 4;
++			if(multiHWThread) {
++				'private transient Map<String, List<Integer>> servers = null;' | 4;
++				'private transient MultiHardwareThreadsExecutor multiExecutor;' | 4; 
++				'private transient List<Integer> ports = new ArrayList<Integer>();' | 4;
++			} else {
++				'private String ip;' | 4;
++				'private int port = 0;' | 4;
++				'private byte [] msg = null;' | 4;
++				'private transient HardwareTransmitter hardwareConnection;' | 4;
++				'private transient ByteArrayInputStream in = null;' | 4;
++			}	
++			produceOutputVariable(family.output, ifName, 4, true);
++			if(hwlog){
++				'private transient PrintWriter out = null;' | 4;
++				'private transient PrintWriter out1 = null;' | 4;
++				'private int counter = 0;' | 4;
++				
++				'private long timestampInS = 0;' //record the output in second
++			}
++			if(fastThread) {
++				'private transient HardwareReceiver hardwareReceiver;' | 4;
++			}
++			if(emitThread) {
++				'private int size;' | 4;
++				'private transient DataEmitter dataEmitter;' | 4;
++			}
++			/*********************** */
++			/*******Constructor***** */
++			/*********************** */
++			'public HardwareConnectionSpout(String name, String namespace, String streamId) {' | 4;
++        		'super(name, namespace, $genMonitoringProbes); ' | 8; 
++        		'this.streamId = streamId;' | 8;
++    		'}' | 4;
++    		''
++    		/************************* */
++    		/*******prepare method**** */
++    		/************************* */
++    		'@SuppressWarnings("rawtypes")' | 4;
++    		'public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutputCollector) {' | 4;
++    			'super.open(map, topologyContext, spoutputCollector);' | 8;
++    			'collector = spoutputCollector;' | 8;
++    			'taskId = topologyContext.getThisTaskId();' | 8;
++    			'taskNum = topologyContext.getThisWorkerTasks().size();' | 8;
++    			'taskIndex = topologyContext.getThisTaskIndex();' | 8;
++    			if(hwlog) {
++        			'counter = 0;' | 8;
++        			'out = DataLogger.getPrintWriter("/var/nfs/spass/hardwareSpout-" + taskId +".csv");' | 8;
++					'out1 = DataLogger.getPrintWriter("/var/nfs/spass/hardwareSpoutResult-" + taskId +".csv");' | 8;     			
++        		}
++    			produceOutputVariable(family.output, ifName, 8, false);
++    			if(multiHWThread) {
++    				'ports = new ArrayList<Integer>();' | 8;
++    				if(!dynamicHWUpload) {//static ports
++        			'ports.add(2405); //replace to the port configuration' | 8;
++        			'ports.add(2406); //replace to the port configuration' | 8;
++        			} else {
++        				'while(ports.size()==taskNum) {//waiting for ports' | 8; //TODO:consider to compare with the requested number of threads
++	        			'}' | 8;
++        			}
++        			'servers = new HashMap<String, List<Integer>>();' | 8;
++        			'servers.put("${node.host}", ports);' | 8;
++    			} else {
++	    			'ip = "${node.host}";' | 8; //replace to the ip configuration
++	    			if(!dynamicHWUpload) { //static port
++//only for test---TO BE REMOVED!!!
++ 
++'List<Integer> ports = new ArrayList<Integer>();' | 8;
++'ports.add(2405); //replace to the port configuration' | 8;
++'ports.add(2406); //replace to the port configuration' | 8;	
++'ports.add(2407); //replace to the port configuration' | 8;	
++'ports.add(2408); //replace to the port configuration' | 8;	
++'port=ports.get(taskIndex);' | 8;
++ 					
++    				'ready = true;' | 8;
++	        		'//port = 2405; //default' | 8; //replace to the port configuration
++	        		} else { 
++	        			'ready = false;' | 8;
++	        			/*
++	        			'while(port==0) {//waiting for ports' | 8;
++	        			'}' | 8;
++	        			if(hwlog) {
++	        				'logger.info("Port is ready and continuing the processing...");' | 8;
++	        				'out.println("Port is ready and continuing the processing...");' | 8;
++	        				'out.flush();' | 8;
++	        			}
++	        			* 
++	        			*/
++	        		}
++	        		'msg = new byte[MAXDATASIZE];' | 8;
++        		}
++        		if(batchData) {
++        			'MAXDATASIZE = 8192;' | 8;
++        		} else {
++        		'MAXDATASIZE = 16384;' | 8;
++        		}
++        		produceTypesRegistration(family.output, fName, true,  8);
++        		
++        		if(multiHWThread) {
++        			'multiExecutor = new MultiHardwareThreadsExecutor(servers, new HardwareReceiverHandler(), ports.size());//TODO:change the default thread number' | 8;
++        			'multiExecutor.createMultiThreads();' | 8;
++        		} else {
++	        		if(fastThread) {
++	        			'try {' | 8;
++	      					'hardwareReceiver = new HardwareReceiver();' | 12;
++	    				'} catch (Exception e) {' | 8;
++	      					'logger.error("", e);' | 12;
++	    				'}' | 8;
++	    				'Thread hardwareConnectionThread = new Thread(hardwareReceiver);' | 8;
++	    				'hardwareConnectionThread.start();' | 8;
++	        		}
++        		}
++        		if(emitThread) {
++        			'try {' | 8;
++      					'dataEmitter = new DataEmitter();' | 12;
++    				'} catch (Exception e) {' | 8;
++      					'logger.error("", e);' | 12;
++    				'}' | 8;
++    				'Thread dataEmitterThread = new Thread(dataEmitter);' | 8;
++    				'dataEmitterThread.start();' | 8;
++        		}
++        		'initMonitor();' | 8;
++        		'logger.info("The end of the open method.");' | 8;
++    		'}' | 4;
++    		''
++    		//override the initial monitor
++	    	produceInitMonitor(false, 4);
++	    
++    		if(fastThread) { 
++    			if(multiHWThread) {
++    			'public class HardwareReceiverHandler implements IHardwareHandlerCreator {' | 4;   	
++					'@Override' | 8;
++					'public Runnable createHandler(String host, int port) {' | 8;
++						'return new HardwareReceiver(host, port);' | 12;
++					'}' | 8;
++    			'}' | 4;
++    			'' 
++    			} 			
++    			'public class HardwareReceiver implements Runnable {' | 4;
++    				if(multiHWThread) {
++    					'String ip;' | 8;
++				    	'int port;' | 8;
++				    	'byte [] msg = null;' | 8;
++				    	'ByteArrayInputStream in = null;' | 8;
++				    	'String str = null;' | 8;
++				    	'HardwareTransmitter hardwareConnection;' | 8;
++				    	''
++				    	'public HardwareReceiver(String ip, int port) {' | 8;
++				    		'this.ip = ip;' | 12;
++				    		'this.port = port;' | 12;
++				    		'msg = new byte[MAXDATASIZE];' | 12;
++				    	'}' | 8;
++				    	''
++				    	produceConnectMethod(8);
++				    	''
++				    	'public void close() {' | 8;
++				    		produceCloseStatement(12);
++				    	'}' | 8;
++				    	''
++    				}
++    				
++    				'@Override' | 8;
++    				'public void run() {' | 8;
++    				if(multiHWThread) {
++    					'str = null;' | 12;
++    				} else {
++    					'String str = null;' | 12;
++						if(batchData) {
++							'String str1 = null;' | 12;
++							'int k = 0;' | 12;
++						}
++					}
++						if(hwlog) {
++							'timestampInS = System.currentTimeMillis()/1000;' | 12;			
++						}
++    					'while(true) {' | 12;
++    						'if(ready) {' | 16;
++    							commonPartForFastThread(20);
++    						'}' | 16;
++    					'}' | 12;
++    				'}' | 8;
++    			'}' | 4;
++    			''
++    		} 
++    		
++    		if(emitThread) {
++    			'public class DataEmitter implements Runnable {' | 4;
++    				'private boolean cont = false;' | 8;
++    				''
++    				'public DataEmitter() {' | 8;
++    					'cont = true;' | 12;
++    				'}' | 8;
++    				''
++    				'@Override' | 8;
++    				'public void run() {' | 8;
++    					'while(cont) {' | 12;
++    					for(Tuple t : family.output) {
++    						'collector.emit(streamId, new Values(syn${firstToUpperCase(t.name)}.consume()));' | 16;
++    					}
++    					'}' | 12;
++    				'}' | 8;
++    				''
++    				'public void stop() {' | 8;
++    					'cont = false;' | 12;
++    				'}' | 8;
++    			'}' | 4;
++    			''
++    		}
++    		/************************** */
++    		/*******execute method***** */
++    		/************************** */
++    		'public void nextTuple() {' | 4;
++    		if(!fastThread) {
++    			'if(ready) {' | 8;
++    				commonPartForFastThread(8);
++    			'}' | 8;
++        		}
++        	'}' | 4;
++        	''
++        	/********************************/
++		    /* notifyParameterChange method */  
++		    /********************************/	    
++			'@Override' | 4;
++			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
++				'logger.info("Received the parameter change signal!");' | 8;
++				if(hwlog) {
++					'out.println(Calendar.getInstance().getTimeInMillis() + ", Received the parameter change signal!"); ' | 8;
++					'out.flush();' | 8;
++				}
++				'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
++				'ParameterChange para = signal.getChange(i);' | 12;	
++				'switch (para.getName()) {' | 12;
++					if(dynamicHWUpload) {		
++					'case "port": ' | 16;
++						'String value = para.getStringValue();' | 20;
++						'logger.info("Received signal port!" + value + ", taskId: " + taskId); ' | 20;
++						if(hwlog) {
++						'out.println("Received signal port!" + value + ", taskId: " + taskId); ' | 20;
++						'out.flush();' | 20;
++						}
++						'String[] portList = value.split(",");' | 20;
++						if(multiHWThread) {
++							'for(int j=0; j<portList.length; j++) {' | 20;
++								'ports.add(Integer.parseInt(portList[j]));' | 24;
++							'}' | 20;
++						} else {
++		            	'port = assignPort(portList, taskIndex);' | 20;
++		            	'ready = true;' | 20;
++		            	'logger.info("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex);' | 20;
++		            	if(hwlog) {
++							'out.println("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex); ' | 20;
++							'out.flush();' | 20;
++						}
++		            	}
++						
++						'break;' | 20;
++						}
++						'}' | 14;
++					'}' | 8;
++			'}' |4;		
++		''
++			/**************************** */
++			/*********connect method***** */
++			/**************************** */
++			if(!multiHWThread) {
++				produceConnectMethod(4);
++			}
++    		
++    		/******************************** */
++    		/****declareOuputFields method*** */
++    		/******************************** */
++    		'public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {' | 4;
++    			'outputFieldsDeclarer.declareStream(streamId, false, new Fields("hardwareOutput"));' | 8;
++    		'}' | 4;  
++    		''
++    		/****************************/
++			/*       close method       */
++			/****************************/             
++	        '    @Override'
++	        '    public void close() {' 
++	        '        super.close();'
++	        if(multiHWThread) {
++	        	produceExecutorCloseStatement(8);
++	        } else {
++			    produceCloseStatement(8);
++			}
++	        '    }'
++	        ''
++    		/********************************* */
++	    	/*******Prepare shut down signal** */
++	    	/********************************* */
++	    	'@Override' | 4;
++	    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
++	        	'super.prepareShutdown(signal);' | 8;
++	        	'dataEmitter.stop();' | 8;
++	        	if(multiHWThread) {
++	        		produceExecutorCloseStatement(8);
++		        } else {
++				    produceCloseStatement(8);
++				}
++	    	'}' | 4;
++	    	'' 	
++	    	produceAssignPortMethod(4);	   		
++		'}'
++	}
++	
++	def produceOutputVariable(Tuples tuples, String ifName, Integer indent, Boolean variable) {
++		String outputInfName;	
++		String tupleName;	
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			//get output interface name	
++			outputInfName = 'I' + ifName + "${firstToUpperCase(tupleName)}Output"; //output interface name		
++			if(variable) {		
++				'private transient $outputInfName output${firstToUpperCase(tupleName)} = null;' | indent;	
++				if(emitThread) {
++					'private transient Queue<$outputInfName> queue${firstToUpperCase(tupleName)} = new ConcurrentLinkedQueue<$outputInfName>();' | indent;
++					'private transient SynchronizedQueue<$outputInfName> syn${firstToUpperCase(tupleName)} = null;'	| indent;
++				}
++			} else {
++				if(emitThread) {
++					'queue${firstToUpperCase(tupleName)} = new ConcurrentLinkedQueue<$outputInfName>();' | indent;
++					'size = 50;' | indent; 
++					'syn${firstToUpperCase(tupleName)} = new SynchronizedQueue<$outputInfName>(queue${firstToUpperCase(tupleName)}, size);' | indent;	
++				}
++			}			
++	    }
++	}
++	
++	def produceImportFromOutput(Tuples tuples, String fName, Integer indent) {
++		String ifName = "I" + fName.firstToUpperCase();
++		String tupleName;
++		'import eu.qualimaster.families.imp.${firstToUpperCase(toIdentifier(fName))}.*;'
++		for(Tuple t : tuples) {
++			tupleName = t.name;
++			String outputInfName = ifName + "${firstToUpperCase(tupleName)}Output";
++			'import eu.qualimaster.families.imp.${firstToUpperCase(toIdentifier(fName))}.$outputInfName;' | indent;
++			'import eu.qualimaster.families.inf.${firstToUpperCase(toIdentifier(ifName))}.I$outputInfName;' | indent;
++		}
++	}
++	
++	def commonPartForFastThread(Integer indent) {
++        	'if (connect()) {' | indent;
++        	'try {' | indent + 4;
++        		if(batchData) {
++        			'msg = hardwareConnection.receiveBatchData(msg, MAXDATASIZE);' | indent+8;
++        		} else {
++        			'in = null;' | indent+8;
++        			if(newHWReceive) {
++        				'msg = hardwareConnection.receiveData();' | indent+8;
++        			} else {
++        				'msg = hardwareConnection.receiveData(msg, pointer);' | indent+8;
++        			}
++        		}
++        		for(Tuple t : family.output) {
++					tupleName = t.name; // assume that we only have one type of Tuple in the output of the family
++					outputImpName = ifName + "${firstToUpperCase(tupleName)}Output";
++					if(hwlog) {
++						'//out1.println("Received data!" + msg);' | indent+8;
++                		'//out1.flush();' | indent+8;
++					}
++					'if(msg != null) {' | indent+8;							
++        					'if (msg[0] == \'d\') {' | indent+12;
++        					'in = new ByteArrayInputStream(msg, 1, msg.length-1);' | indent+12;
++        					'if (in != null) {' | indent+16;
++        						if (genMonitoringProbes) {
++					            	'startMonitoring();' | indent+20;
++					        	}
++        						'output${firstToUpperCase(tupleName)} = null;' | indent+20;
++                    			'output${firstToUpperCase(tupleName)} = SerializerRegistry.getSerializerSafe("$outputImpName", I$outputImpName.class).deserializeFrom(in);' | indent+20;
++                				'if(output${firstToUpperCase(tupleName)} != null) {' | indent+20;
++                				/* 
++                				if(hwlog) {
++                					'long now = System.currentTimeMillis();' | indent+24;
++                                    'if(timestampInS == now/1000) {' | indent+24;
++                                    	'counter++;' | indent+28;
++                                    '} else {' | indent+24;
++                                    	'out1.println(timestampInS + " " + counter);' | indent+28;
++                						'out1.flush();' | indent+28;
++                                    	'timestampInS = now/1000;' | indent+28;
++                                    	'counter = 1;' | indent+28;
++                                    '}'  indent+24;
++                				}
++                				* 
++                				*/
++                				/* 
++	                			if(hwlog) { // print the log of the data received from hardware
++									'out.println(Calendar.getInstance().getTimeInMillis() + ", Receiving data to hardware: "' | indent;
++						    		for(Field f : t.fields) {
++										 String fname = toIdentifier("${f.name}");
++						    			 String mname = firstToUpperCase(fname);
++						    	         '+ ", $mname: "+ output${firstToUpperCase(tupleName)}.get${mname}()' | indent;
++									 }
++									 ');' | indent;
++						    		'out.flush();' | indent;
++						    		'logger.info(Calendar.getInstance().getTimeInMillis() + ", Receiving data to hardware: "' | indent;
++						    		for(Field f : t.fields) {
++										 String fname = toIdentifier("${f.name}");
++						    			 String mname = firstToUpperCase(fname);
++						    	         '+ ", $mname: "+ output${firstToUpperCase(tupleName)}.get${mname}()' | indent;
++									 }
++									 ');' | indent;
++								}
++								* 
++								*/
++									if(emitThread) { //queue the received data
++										'syn${firstToUpperCase(tupleName)}.produce(output${firstToUpperCase(tupleName)});'  | indent+24;
++									} else {
++	                					'collector.emit(streamId, new Values(output${firstToUpperCase(tupleName)}));' | indent+24;
++	                				}
++	                				if (genMonitoringProbes) {
++									  'endMonitoring();' | indent+24;
++							        }
++                				'}'| indent+20;
++                			'}' | indent+16;
++
++        					'} else if (msg[0] == \'o\') {' | indent+12;
++                			'/* HERE PUT THE CODE FOR THE FLUSH PROCESS */' | indent+20;
++                			if(hwlog) {
++                			'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending the signal emit to the end bolt!");' | indent+16;
++                			'out.flush();' | indent+16;
++                			}
++                			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++				                        "$topoName", "${algName}EndBolt", "emit", true, null);' | indent+16;
++				                  'try {' | indent+16;
++				                    'sendSignal(paraSignal);' | indent+20;
++				                '} catch (SignalException e) {' | indent+16;
++				                    'e.printStackTrace();' | indent+20;
++				                '}' | indent+16;
++				                
++        					'} else if (msg[0] == \'f\') {' | indent+12;
++                			'/* HERE PUT THE CODE FOR THE OMIT PROCESS */' | indent+16;
++                			if(hwlog) {
++                			'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending the signal disable to the hw end bolt!");' | indent+16;
++                			'out.flush();' | indent+16;
++                			}
++                			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++				                        "$topoName", "${algName}EndBolt", "disable", true, null);' | indent+16;
++				                  'try {' | indent+16;
++				                    'sendSignal(paraSignal);' | indent+20;
++				                '} catch (SignalException e) {' | indent+16;
++				                    'e.printStackTrace();' | indent+20;
++				                '}' | indent+16;
++                		'}' | indent+12;
++                	'}' | indent+8;			
++				}
++        	'} catch (IOException e) {' | indent+4;
++        		'logger.info("IOException : " + e.getMessage());' | indent+8;
++        	'}' | indent+4;
++        '}' | indent;
++	}
++	
++	def produceConnectMethod(Integer indent) {
++		'private boolean connect() {' | indent;
++			'if (null == hardwareConnection) {' | indent+4;
++	        	'try {' | indent+8;
++	            	'hardwareConnection = new HardwareTransmitter(ip, port);' | indent+12;
++	            	'logger.info("Created a receiver connection.");' | indent+12;
++	            	if(hwlog) {
++	            	'out.println("Created a receiver connection.");' | indent+12;
++	            	'out.flush();' | indent+12;
++	            	}
++	        	'} catch (IOException e) {' | indent+8;
++	            	'e.printStackTrace();' | indent+12;
++	        	'}' | indent+8;
++			'}' | indent+4;
++			'return null != hardwareConnection;' | indent+4;
++		'}' | indent;
++	}
++	
++	def produceCloseStatement(Integer indent) {
++		'try {' | indent;
++			'if(hardwareConnection != null) {' | indent+4;
++                'hardwareConnection.sendCloseMessage();' | indent+8;
++                'hardwareConnection.close();' | indent+8;  
++         	'}' | indent+4;  
++         	'if(in != null) {' | indent+4;
++    			'in.close();' | indent+8;
++    		'}' | indent+4;
++		'} catch (IOException e) {' | indent;
++    		'e.printStackTrace();' | indent+4;
++		'}' | indent;
++	}
++	
++	def produceExecutorCloseStatement(Integer indent) {
++		'List<Runnable> threads = multiExecutor.getThreadList();' | indent;
++        'for(int i=0; i<threads.size(); i++) {' | indent;
++        	'HardwareReceiver receiver = (HardwareReceiver) threads.get(i);' | indent+4;
++        	'receiver.close();' | indent+4;
++        '}' | indent;
++	}
++	
++	def produceAssignPortMethod(Integer indent) {
++		'protected int assignPort(String[] ports, int index) {' | indent;
++    	'//int mode = index % ports.length;'  | indent+4;
++    	'return Integer.parseInt(ports[index]);'  | indent+4;
++    '}' | indent;
++	}
++	
++	def previousReceiveCode(Integer indent) { //store the previous code 
++		'if(msg != null) {' | indent+8;
++			if(batchData) {
++				'str = new String(msg);' | indent+12;
++				'if(k > 0) {' | indent+12;
++					'str = str1.concat(str);' | indent+12;
++				'}' | indent+12;
++				'while(true) {' | indent+12;
++				    'if(str.indexOf(\'\\0\') == -1) {' | indent +16;
++				     	'break;' | indent+20;
++				    '}' | indent+16;
++					'in = null;' | indent+16;
++					'in = new ByteArrayInputStream(str.getBytes(), 1, str.indexOf(\'\\0\')-1);' | indent+16;
++			} else {
++				'in = new ByteArrayInputStream(msg);' | indent+12;
++				'in.skip(1);' | indent+12;
++				'str = new String(msg, 0, 1);' | indent+12;
++			}
++			if(batchData) {
++				'if (str.startsWith("d")) {' | indent+12;
++			} else {
++				'if (str.equalsIgnoreCase("d")) {' | indent+12;
++			}
++				'if (in != null) {' | indent+16;
++					if (genMonitoringProbes) {
++		            	'startMonitoring();' | indent+20;
++		        	}
++					'output${firstToUpperCase(tupleName)} = null;' | indent+20;
++        			'output${firstToUpperCase(tupleName)} = SerializerRegistry.getSerializerSafe("$outputImpName", I$outputImpName.class).deserializeFrom(in);' | indent+20;
++    				'if(output${firstToUpperCase(tupleName)} != null) {' | indent+20;
++    				if(hwlog) {
++    					'counter++;' | indent+24;
++    					'out1.println(Calendar.getInstance().getTimeInMillis() + " , " + counter);' | indent+24;
++    					'out1.flush();' | indent+24;
++    				}
++    				/* 
++        			if(hwlog) { // print the log of the data received from hardware
++						'out.println(Calendar.getInstance().getTimeInMillis() + ", Receiving data to hardware: "' | indent;
++			    		for(Field f : t.fields) {
++							 String fname = toIdentifier("${f.name}");
++			    			 String mname = firstToUpperCase(fname);
++			    	         '+ ", $mname: "+ output${firstToUpperCase(tupleName)}.get${mname}()' | indent;
++						 }
++						 ');' | indent;
++			    		'out.flush();' | indent;
++			    		'logger.info(Calendar.getInstance().getTimeInMillis() + ", Receiving data to hardware: "' | indent;
++			    		for(Field f : t.fields) {
++							 String fname = toIdentifier("${f.name}");
++			    			 String mname = firstToUpperCase(fname);
++			    	         '+ ", $mname: "+ output${firstToUpperCase(tupleName)}.get${mname}()' | indent;
++						 }
++						 ');' | indent;
++					}
++					* 
++					*/
++						if(emitThread) { //queue the received data
++							'syn${firstToUpperCase(tupleName)}.produce(output${firstToUpperCase(tupleName)});'  | indent+24;
++						} else {
++        					'collector.emit(streamId, new Values(output${firstToUpperCase(tupleName)}));' | indent+24;
++        				}
++        				if (genMonitoringProbes) {
++						  'endMonitoring();' | indent+24;
++				        }
++    				'}'| indent+20;
++    			'}' | indent+16;
++    		if(batchData) {
++				'} else if (str.startsWith("o")) {' | indent+12;
++			} else {
++				'} else if (str.equalsIgnoreCase("o")) {' | indent+12;
++			}
++    			'/* HERE PUT THE CODE FOR THE FLUSH PROCESS */' | indent+20;
++    			if(hwlog) {
++    			'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending the signal emit to the end bolt!");' | indent+16;
++    			'out.flush();' | indent+16;
++    			}
++    			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++	                        "$topoName", "${algName}EndBolt", "emit", true, null);' | indent+16;
++	                  'try {' | indent+16;
++	                    'sendSignal(paraSignal);' | indent+20;
++	                '} catch (SignalException e) {' | indent+16;
++	                    'e.printStackTrace();' | indent+20;
++	                '}' | indent+16;
++	        if(batchData) {
++				'} else if (str.startsWith("f")) {' | indent+12;
++			} else {
++				'} else if (str.equalsIgnoreCase("f")) {' | indent+12;
++			}
++    			'/* HERE PUT THE CODE FOR THE OMIT PROCESS */' | indent+16;
++    			if(hwlog) {
++    			'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending the signal disable to the hw end bolt!");' | indent+16;
++    			'out.flush();' | indent+16;
++    			}
++    			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++	                        "$topoName", "${algName}EndBolt", "disable", true, null);' | indent+16;
++	                  'try {' | indent+16;
++	                    'sendSignal(paraSignal);' | indent+20;
++	                '} catch (SignalException e) {' | indent+16;
++	                    'e.printStackTrace();' | indent+20;
++	                '}' | indent+16;
++    		'}' | indent+12;
++    		if(batchData) {
++    			'str = str.substring(str.indexOf(\'\\0\')+1, str.length());' | indent+12;
++    		} else if(!newHWReceive) {
++        		'pointer = 1;' | indent+12;
++        		'in.read(msg, 0, in.available());' | indent+12;
++    		}
++    	'}' | indent+8;	
++    	if(batchData) {
++    		'str1 = str;' | indent+8;
++			'k = str1.length();' | indent+8;
++			'}' | indent+4;
++    	}		
++	}
++
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpout.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpout.vtl
+new file mode 100644
+index 0000000..78f1f11
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpout.vtl
+@@ -0,0 +1,1368 @@
++import commonVTLMethods;
++@advice(QM)
++template stormIntermediarySpout(Configuration config, FileArtifact target, String topoName, String topLevelPip, DecisionVariable fmElt, Algorithm algorithm, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap, mapOf(String, setOf(DecisionVariable)) lastElementMap, mapOf(Tuple,String) nameToOutputMap, mapOf(String, Integer) algNameToPort) {
++	String fmVarName = fmElt.varName();
++	FamilyElement fe = fmElt;
++	Family fm = fe.family;
++	String fmName = fm.name.firstToUpperCase().toIdentifier();
++	String algClsName;	
++	Boolean isHwAlg;
++	Boolean isActive;
++	Boolean switchInvolvesHW;
++	def main(Configuration config, FileArtifact target, String topoName, String topLevelPip, DecisionVariable fmElt, Algorithm algorithm, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap, mapOf(String, setOf(DecisionVariable)) lastElementMap, mapOf(Tuple,String) nameToOutputMap, mapOf(String, Integer) algNameToPort) {
++		isHwAlg = isHardwareAlgorithm(algorithm);
++		isActive = isActiveAlgorithm(fm, algorithm); //TODO: assume the first algorithm as the active algorithm		
++		algClsName = algImplName(algorithm);
++		switchInvolvesHW = hasHardwareAlgorithm(fm);
++		setOf(String) types = coreTupleTypes(fmName, algorithm, true);
++		String algName = algorithm.name.firstToUpperCase().toIdentifier();
++		sequenceOf(Tuple) tuples = fm.input;
++		
++		//get the inputToOutputMapping of this family element
++		mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping = {};
++		if(globalMap.containsKey(fmVarName)){
++			inputToOutputMapping = globalMap.get(fmVarName);
++		}
++		
++		setOf(DecisionVariable) lastElt = lastElementMap.get(fmVarName);
++
++		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
++    	''
++    	/****************************/
++    	/*        Imports           */  
++    	/****************************/ 
++		'import java.io.IOException;'
++		'import java.io.ObjectInputStream;'
++		'import java.io.ObjectOutputStream;'
++		'import java.io.OutputStream;'
++		'import java.io.InputStream;'
++		'import java.net.ServerSocket;'
++		'import java.net.Socket;'
++		'import java.net.UnknownHostException;'
++		'import java.util.Calendar;'
++		'import java.util.Iterator;'
++		'import java.util.Map;'
++		'import java.util.HashMap;'
++		'import java.util.Queue;'
++		'import java.util.LinkedList;'
++		'import java.util.concurrent.ConcurrentLinkedQueue;'
++		'import java.util.concurrent.ConcurrentLinkedDeque;'
++		'import org.apache.log4j.Logger;'
++		'import com.esotericsoftware.kryo.Kryo;'
++		'import com.esotericsoftware.kryo.io.Input;'
++		'import com.esotericsoftware.kryo.io.Output;'
++		'import com.esotericsoftware.kryo.KryoException;'
++
++		'import backtype.storm.Config;'
++		'import backtype.storm.spout.SpoutOutputCollector;'
++		'import backtype.storm.task.TopologyContext;'
++		'import backtype.storm.topology.OutputFieldsDeclarer;'
++		'import backtype.storm.tuple.Fields;'
++		'import backtype.storm.tuple.Values;'
++		'import eu.qualimaster.base.algorithm.ISwitchTuple;'
++		'import eu.qualimaster.base.pipeline.CollectingTopologyInfo;'
++		'import eu.qualimaster.common.signal.BaseSignalSpout;'
++		'import eu.qualimaster.common.signal.ParameterChange;'
++		'import eu.qualimaster.common.signal.ParameterChangeSignal;'
++		'import eu.qualimaster.common.signal.SignalException;'
++		'import eu.qualimaster.common.signal.ValueFormatException;'
++		'import eu.qualimaster.common.signal.ShutdownSignal;'
++		'import eu.qualimaster.common.signal.SignalMechanism;'
++		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
++		'import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;'
++		'import eu.qualimaster.families.imp.*;'
++		'import eu.qualimaster.families.inf.*;'
++		if(looseSub) {
++			'import java.net.InetAddress;'
++			'import eu.qualimaster.common.signal.PortManager.*;'
++			'import eu.qualimaster.common.signal.PortManager;'
++			'import eu.qualimaster.common.signal.Constants;'
++		}
++		if(newSwitchLog) {
++			'import java.io.PrintWriter;'
++			'import eu.qualimaster.common.logging.DataLogger;'
++			'import java.util.Calendar;'
++		}
++		produceImportsFromLastElements(lastElt, lastElementMap, topoName);
++ 
++		for(String type : types) {
++			'import eu.qualimaster.families.imp.${fmName}.I$type;'
++			'import eu.qualimaster.families.inf.I${fmName}.II$type;'
++		}		
++		/****************************/
++    	/*        Spout class        */  
++    	/****************************/    	
++    	'/**'
++    	'* Define the intermediary Spout class.'
++    	'* @generated'
++    	'**/'
++    	'@SuppressWarnings({ "rawtypes", "serial" })'
++    	String name = algName + "Intermediary";
++//    	if(looseSub) {
++//    		name = topoName + "Intermediary";
++//    	}
++    	'public class $name extends BaseSignalSpout {'
++    		'private static final Logger LOGGER = Logger.getLogger($name.class);' | 4;
++    		'private final static int LOWER_SIZE = 10;' | 4;
++    		'private static int OVERLOAD_SIZE = 500;' | 4;
++    		'private transient SpoutOutputCollector _collector;' | 4;
++    		'private String streamId;' | 4;
++    		'private String nimbus_host = "localhost";' | 4;
++    		'private int thrift_port = 6027;' | 4;
++    		if(looseSub) {
++    			'private int port;' | 4; 
++    			'private transient Map<String,String> algToSub = new HashMap<String,String>(); //<subAlgName, subPipName>' | 4;
++    		} else {
++	    		if(algNameToPort.containsKey(algName)) {
++	    			Integer port = algNameToPort.get(algName);
++	    		'private static int port = $port;' | 4;
++	    		}
++	    		'private transient HashMap<String, Integer> algNameToPort = null;' | 4;
++    		}
++    		
++    		'private transient FillInQueueServer server;' | 4;
++    		'private Object msgId;' | 4;
++    		'private transient ConcurrentLinkedDeque<ISwitchTuple> outQueue = new ConcurrentLinkedDeque<ISwitchTuple>(); //output queue for checking the acknowledged items' | 4;
++    		'private transient Queue<ISwitchTuple> inQueue = new ConcurrentLinkedQueue<ISwitchTuple>(); //input queue' | 4;
++	    	'private transient Queue<ISwitchTuple> tmpQueue = new ConcurrentLinkedQueue<ISwitchTuple>(); //temporary queue' | 4;
++	    	'private transient Iterator<ISwitchTuple> iterator = null;' | 4;
++	    	'private ISwitchTuple sTuple = null;' | 4;
++	    	'private static KryoSwitchTupleSerializer kryoSer = null;' | 4;
++	    	'private boolean isPassivate = false; //indicating whether the spout shall emit data' | 4;
++	    	'private long lastProcessedId; //indicating the id of the last acknowledged data item' | 4;
++	    	'private boolean isActiveSpout; //indicating whether the spout is the original one' | 4;
++	    	'private long lastFamilyId; //indicating the id of the last data item emitted from the preceding family element' | 4;
++	    	'private long firstId; // the id of the first data item to be transferred' | 4;
++	    	'private String originalAlg; //the original algorithm name' | 4;
++	    	'private String targetAlg; //the target algorithm name' | 4;
++	    	'private boolean isTransferring; //indicating whether it is transferring data to the target algorithm in case of missing data items' | 4;
++	    	'private Output outputTarget = null;' | 4;
++	    	'private Socket socketTarget = null;' | 4;
++	    	'private boolean omitOnce; //flag control to only omit once' | 4;
++	    	'private boolean synOnce; //flag control to only send synchronize signal once' | 4;
++	    	if(switchInvolvesHW) {
++	    		'private boolean lastIdOnce;' | 4;
++	    		'private boolean isCompleting; //indicating the switch is completing' | 4;
++	    	}
++	    	'private long transferredId = 0; //the id of last transferred data item' | 4;
++	    	produceOutputVariable(tuples, inputToOutputMapping, nameToOutputMap, fmName);
++	    	produceInputVariable(tuples, true, fmName);
++	    	if(newSwitchLog) {
++				'private transient PrintWriter out = null;' | 4;
++			}
++    		''
++    		/****************************/
++		    /*    Class constructor     */  
++		    /****************************/  
++    		'public $name(String name, String namespace, String streamId) {' | 4;
++        		'super(name, namespace,$genMonitoringProbes);' | 8; 
++        		'this.streamId = streamId;' | 8;
++    		'}' | 4;
++    		''
++    		    /****************************/
++		    	/*     open method          */  
++		    	/****************************/    	
++    	'    @Override'
++        '    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {'
++        '		 super.open(conf, context, collector);'
++        '        _collector = collector;' 
++        		if(newSwitchLog) {
++        			'String logDir = (String) conf.get("LOG.DIRECTORY");' | 8;
++        			'out = DataLogger.getPrintWriter(logDir + "${name}.log");' | 8;
++				}
++        		'inQueue = new ConcurrentLinkedQueue<ISwitchTuple>();' | 8;
++	    		'outQueue = new ConcurrentLinkedDeque<ISwitchTuple>();' | 8;
++	    		if(looseSub) {
++	    			'algToSub = new HashMap<String, String>();' | 8;
++	    			for(Algorithm alg : fm.members) {
++	    				if(isGenSubtopology(alg)) {
++	    					SubPipelineAlgorithm subAlg = alg;
++	    					'algToSub.put("${alg.name}", "${subAlg.subPipeline.name}");' | 8;
++	    					'SignalMechanism.initEnabledSignalNamespaceState("${subAlg.subPipeline.name}");' | 8;
++	    				}
++	    				if(isHardwareAlgorithm(alg)) {
++	    					'algToSub.put("${alg.name}", "${alg.name}");' | 8;
++	    				}
++	    			}
++	    		}
++	    		'tmpQueue = new ConcurrentLinkedQueue<ISwitchTuple>();' | 8;
++        		'kryoSer = new KryoSwitchTupleSerializer(conf); ' | 8;
++        		'nimbus_host = (String) conf.get(Config.NIMBUS_HOST);' | 8;
++        		'thrift_port = (int) conf.get(Config.NIMBUS_THRIFT_PORT);' | 8;
++        		'isPassivate = false;' | 8;
++        		if(looseSub) {
++        			'isActiveSpout = "true".equals(conf.get(Constants.CONFIG_KEY_INITIAL_SUBPIPELINE));' | 8;
++        		} else {
++        			'isActiveSpout = $isActive;' | 8;
++        			'algNameToPort = new HashMap<String, Integer>();' | 8;
++        		}
++        		'LOGGER.info("Is this active? " + isActiveSpout);' | 8;
++    			if(newSwitchLog) {
++    				'out.println("Is this active? " + isActiveSpout);' | 8;
++    				'out.flush();' | 8;
++    			}
++        		'isTransferring = false;' | 8;
++        		'omitOnce = true;' | 8;
++        		'synOnce = true;' | 8;
++        		if(switchInvolvesHW) {
++        			'lastIdOnce = true;' | 8;
++        			'isCompleting = false;' | 8;
++        		}
++        		'firstId = 0;' | 8;
++        		if(looseSub) {
++        			'String localhost = "localhost";' | 8;
++	        		'try {' | 8;
++						'localhost = InetAddress.getLocalHost().getCanonicalHostName();' | 12;
++					'} catch (UnknownHostException e1) {' | 8;
++						'e1.printStackTrace();' | 12;
++					'}' | 8;
++	        		'PortAssignmentRequest portRequest = new PortAssignmentRequest(getPipeline(), getName(), 0, localhost, null);' | 8;
++	        		'PortManager portManager = getPortManager();' | 8;
++	        		'try {' | 8;
++						'PortAssignment assignment = portManager.registerPortAssignment(portRequest);' | 12;
++						'port = assignment.getPort();' | 12;
++						if(newSwitchLog) {
++						'LOGGER.info("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
++						'out.println("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
++						'out.flush();' | 12;
++						}
++						'} catch (SignalException e) {' | 8;
++							'e.printStackTrace();' | 12;
++					'}' | 8;
++        		} else {
++	        		for(Algorithm alg: fm.members) {
++	        			String algName = alg.name.firstToUpperCase().toIdentifier();
++	        			if(algNameToPort.containsKey(algName)) {
++	        				Integer port = algNameToPort.get(algName);
++	        				'algNameToPort.put("$algName", $port);' | 8; 
++	        			}
++	        		}
++        		}
++        		'try {' | 8;
++            		'server = new FillInQueueServer(conf);' | 12;
++        		'} catch (IOException e1) {' | 8;
++            		'e1.printStackTrace();' | 12;
++        		'}' | 8;
++        		'server.start();' | 8;
++				'initMonitor();' | 8;
++				'LOGGER.info("The end of the open method.");' | 8;
++        '	 }'
++        ''
++        //override the initial monitor
++	    produceInitMonitor(false, 4);
++	    '    /**'
++	    '     * Emits tuple.'
++	    '     * @param sTuple the tuple to be emitted'
++	    '     */'
++        'public void emitTuple(ISwitchTuple sTuple) {' | 4;
++        	String ifName = "I" + fmName;
++   			String ifInputName = "I" + ifName;
++    		String tupleName;
++    		String outputInfName;
++			String inputInfName;
++			String fImpInputName;
++    		for(Tuple t : tuples) {
++				//get the tuple name
++				tupleName = t.name;
++				
++				//get input interface name
++				inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
++				//get input imp name
++				fImpInputName= 	ifName + "${firstToUpperCase(tupleName)}Input";
++				//get output interface name	
++				if(inputToOutputMapping.containsKey(t))	{
++		  			sequenceOf(Tuple) outputs = inputToOutputMapping.get(t);
++		  			String number;
++			  		Integer size = outputs.size();
++			  		Integer count = 0;
++			  		for(Tuple tuple : outputs) {
++			  	  		count = count + 1;
++			  	  		outputInfName = nameToOutputMap.get(tuple);
++					  	if(size > 1) {
++						    number = "$count";
++						} else {
++						  	number = "";
++						}
++				  
++					  'if(sTuple.getValue(0) instanceof $outputInfName) {' | 8;
++						'iTuple${firstToUpperCase(tupleName)} = ($outputInfName)sTuple.getValue(0);' | 12;
++						'input${firstToUpperCase(tupleName)} = new $fmName.$fImpInputName();' | 12;
++			 			for(Field f : t.fields) {
++				 			String fname = toIdentifier("${f.name}");
++				 			String mname = firstToUpperCase(fname);
++		         			'input${firstToUpperCase(tupleName)}.set${mname}(iTuple${firstToUpperCase(tupleName)}.get${mname}());' | 12;
++			 			}
++	    				'msgId = sTuple.getId();' | 12;
++	    				'if(msgId.equals(0L)) {//do not enable the acknowledgement' | 12;
++            				'_collector.emit(streamId, new Values(input${firstToUpperCase(tupleName)}));' | 16;
++            			'} else {//pass down a message id for acknowledgement' | 12;
++	    					'_collector.emit(streamId, new Values(input${firstToUpperCase(tupleName)}), msgId);' | 16;
++	    				'}' | 12;
++	    			'}' | 8;
++    			
++				  }
++				} 
++				
++    		}
++        '}' | 4;
++		    	/****************************/
++		    	/*     nextTuple method     */  
++		    	/****************************/        
++        '    @Override'
++        '    public void nextTuple() {'
++        		/* 
++        		'if(!isActiveSpout) {' | 8;
++        			'if(outQueue.isEmpty()&&omitOnce && isPassivate) { //clean the outQueue' | 12;
++		                'omitOnce = false;' | 16;
++		                if(isHwAlg) {
++		                	if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--outQueue is empty and sending the omit signal to the hardware bolt.");' | 16;
++			                'out.flush();' | 16;
++			                }
++			                'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++			                        "$topoName", "${algClsName}hardwareConnectionBolt", "omit", true, null);' | 16;
++			                  'try {' | 16;
++			                    'sendSignal(paraSignal);' | 20;
++			                '} catch (SignalException e) {' | 16;
++			                    'e.printStackTrace();' | 20;
++			                '}' | 16;
++		                } else {
++			                if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--outQueue is empty and sending the emit signal to the original Spout.");' | 16;
++			                'out.flush();' | 16;
++			                }
++			                'ParameterChangeSignal paraSignalId = new ParameterChangeSignal(
++			                        "$topoName", targetAlg+"EndBolt", "emit", true, null);' | 16;
++			                  'try {' | 16;
++			                    'sendSignal(paraSignalId);' | 20;
++			                '} catch (SignalException e) {' | 16;
++			                    'e.printStackTrace();' | 20;
++			                '}' | 16;
++		                }
++			        '}' | 12;
++			        '}' | 8;
++			        if(isHwAlg) {
++			        	'else if(outQueue.isEmpty() && lastIdOnce && isPassivate){ //another entrance to send the last processed id if the active alg is hardare algorithm' | 8;
++			        		'lastProcessedId = lastFamilyId;' | 12;
++			        		'try {' | 12;
++								'ParameterChangeSignal paraSignal = new ParameterChangeSignal("$topoName", targetAlg+"Intermediary", "lastProcessedId", lastProcessedId, null);' | 16;
++		                		'sendSignal(paraSignal);' | 16;
++		                		'lastIdOnce = false;' | 16;
++		            		'} catch (SignalException e) {' | 12;
++					            'e.printStackTrace();' | 16;
++					        '}' | 12;
++					        'goToPassive();' | 12;
++					        if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal lastProcessedId to target intermediary!" + lastProcessedId);' | 12;
++				                'out.flush();' | 12;
++				            }
++			        	'}' | 8;
++			        }
++			        * 
++			        */
++	        	'if((isTransferring) || (!tmpQueue.isEmpty()) && (!isPassivate)) {' | 8;
++	                'if(!tmpQueue.isEmpty()) {' | 12;
++	                'sTuple = consume(tmpQueue);' | 16;
++	                'emitTuple(sTuple);' | 16;
++	                if(newSwitchLog) {
++	                    'out.println(Calendar.getInstance().getTimeInMillis() + "$name--Emitting the tuple from transferred queue:" + sTuple.getId() + ", queue size:" + tmpQueue.size());' | 16;
++	                    'out.flush();' | 16;
++	                }
++	                '}' | 12;
++		        '} else if(/*(QUEUE_SIZE > outQueue.size()) && */(!inQueue.isEmpty()) && (!isPassivate)) {' | 8; //TODO: Limitation to QUEUE_SIZE creates problem
++		            'sTuple = consume(inQueue);' | 12;
++		            'if(sTuple.getId() != 0L) {//queue only during the switch' | 12;
++		            	'outQueue.offer(sTuple);' | 16;
++		            '}' | 12;
++        			'emitTuple(sTuple);' | 12;
++		            if(newSwitchLog) {
++		                'out.println(Calendar.getInstance().getTimeInMillis() + "$name--Emitting the tuple:" + sTuple.getId() + ", queue size:" + inQueue.size());' | 12;
++		                'out.flush();' | 12;
++		            }
++		        '}'	 | 8;	        	
++    	'}' | 4;
++    	''
++    	'    /**' 
++	    '     * Consumes data from the queue.' 
++	    '     * @param queue the queue to be consumed'
++	    '     */' 
++    	'private ISwitchTuple consume(Queue<ISwitchTuple> queue) {' | 4;
++	        '//wait if queue is empty'	 | 8;
++	        'while (queue.isEmpty()) {'	 | 8;
++	            'synchronized (queue) {' | 12;
++	            if(newSwitchLog) {
++	                'out.println("Queue is empty " + Thread.currentThread().getName()
++	                                    + " is waiting , size: " + queue.size());' | 16;
++	            }
++	                'try {' | 16;
++	                    'queue.wait();' | 20;
++	                '} catch (InterruptedException e) {' | 16;
++	                    'e.printStackTrace();' | 20;
++	                '}' | 16;
++	            '}' | 12;
++	        '}' | 8;
++	        '//Otherwise consume element and notify waiting producer' | 8;
++	        'synchronized (queue) {' | 8;
++	            'queue.notifyAll();' | 12;
++	            'return queue.poll();' | 12;
++	        '}' | 8;
++    '}' | 4;
++    		    /****************/
++		    	/** ack method **/  
++		    	/****************/
++		'@Override' | 4;
++		'public void ack(Object msgId) {' | 4;  
++			'boolean flag;' | 8;
++    		'ISwitchTuple ackItem = outQueue.peek();' | 8;
++    		'if(null != ackItem) {' | 8;
++    			'if(msgId.equals(ackItem.getId())) {' | 12;
++	    			'ackItem = outQueue.remove();' | 12;
++	    			if(newSwitchLog) {
++	                'out.println(System.currentTimeMillis() + "First: Acked the tuple with the msgId: " + msgId + " removed: " + ackItem.getId());' | 12;
++	                'out.flush();' | 12;
++	                }
++	    		'} else {' | 12;
++					'iterator = outQueue.descendingIterator();' | 16;
++		        	'while(iterator.hasNext()) {' | 16;
++		            	'ackItem = iterator.next();' | 20;
++		            	'if(msgId.equals(ackItem.getId())) {' | 20;
++			                'lastProcessedId = ackItem.getId();' | 24;
++			                'flag = outQueue.remove(ackItem);' | 24;
++			                if(newSwitchLog) {
++			                    'out.println(System.currentTimeMillis() + " Acked the tuple with the msgId: " + msgId + " removed: " + flag);' | 24;
++			                    'out.flush();' | 24;
++			                }
++			                'break;' | 24;
++			            '}' | 20;
++			        '}' | 16; 
++		        '}' | 12;
++	        '}' | 8;
++	        if(isHwAlg and switchInvolvesHW) {
++	        	'if(outQueue.isEmpty() && omitOnce && isPassivate) {' | 8;
++	        		if(newSwitchLog) {
++	                'out.println(Calendar.getInstance().getTimeInMillis() + ", Ack--outQueue is empty and sending the flush signal to the hardware bolt.");' | 12;
++	                'out.flush();' | 12;
++	                }
++	                'omitOnce = false;' | 12;
++	                'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++	                        getNamespace(), "${algClsName}hardwareConnectionBolt", "omit", true, null);' | 12; //"$topoName"
++	                  'try {' | 12;
++	                    'sendSignal(paraSignal);' | 16;
++	                '} catch (SignalException e) {' | 12;
++	                    'e.printStackTrace();' | 16;
++	                '}' | 12;
++	        	'}' | 8;
++	        } else {//TODO: check whether this is still needed
++	        	/* 
++	        	'if(outQueue.isEmpty()&&omitOnce && isPassivate) { //clean the outQueue' | 8;
++			                'omitOnce = false;' | 12;
++			                if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + ", Ack--outQueue is empty and sending the emit signal to the original Spout.");' | 12;
++			                'out.flush();' | 12;
++			                }
++			                'String targetPip = "$topoName";' | 12;
++				            if(looseSub) {
++				            	'if(algToSub.containsKey(targetAlg)) {' | 12;
++				            		'targetPip = algToSub.get(targetAlg);' | 16;
++				            	'}' | 12;
++				            }
++			                'ParameterChangeSignal paraSignalId = new ParameterChangeSignal(
++			                        getNamespace(), targetAlg+"EndBolt", "emit", true, null);' | 12; //targetPip
++			                  'try {' | 12;
++			                    'sendSignal(paraSignalId);' | 16;
++			                '} catch (SignalException e) {' | 12;
++			                    'e.printStackTrace();' | 16;
++			                '}' | 12;
++			                'completingSynchronization();' | 12;
++			        '}' | 8;
++			        * 
++			        */
++	        }             
++	    '}' | 4;
++    ''
++        		/****************/
++		    	/** fail method **/  
++		    	/****************/
++		'@Override' | 4;
++		'public void fail(Object msgId) {' | 4; 
++		/* for now, we sacrifice the tuples in the output queue which are waiting for acknowledgement  
++			if(isHwAlg) {
++				if(newSwitchLog) {
++	            'out.println(Calendar.getInstance().getTimeInMillis() + ", Fail--sending again the failed tuple." +msgId);'
++	            'out.flush();'
++	            }
++	            if(fastQueueOperation) {
++					'iterator = outQueue.descendingIterator();' | 8;
++				} else {
++		        	'iterator = outQueue.iterator();' | 8;
++		        }
++		        	'while(iterator.hasNext()) {' | 8;
++		            	'ISwitchTuple ackItem = iterator.next();' | 12;
++		            	'if(msgId.equals(ackItem.getId())) {' | 12;
++							'emitTuple(ackItem);' | 12;			                
++			                'break;' | 16;
++			            '}' | 12;
++			        '}' | 8;
++			}
++	         '//QUEUE_SIZE = QUEUE_SIZE + 5; //5 more tuples per one failed tuple for the outQueue' | 8;   
++	         * 
++	         */    
++	         if(newSwitchLog) {
++	            'out.println(Calendar.getInstance().getTimeInMillis() + ", Failing the tuple " + msgId + " push all tuples in the output queue into tmp queue and send again.");' | 8; 
++	            'out.flush();' | 8; 
++	            }
++	         'outQueue.clear();' | 8;    
++	    '}' | 4;
++	    ''
++    if(switchInvolvesHW) {
++    '/**'   | 4;
++    '* Returns the minimum id in the outQueue.' | 4;
++    '*/'	 | 4;
++    'public long minIdFromOutQueue() {' | 4;
++    	'long minId = 0;' | 8;
++		'iterator = outQueue.descendingIterator();' | 8; 
++		'if(!outQueue.isEmpty()) {' | 8;
++		'minId = outQueue.peek().getId();' | 12;
++		'}' | 8;
++		'while (iterator.hasNext()) {' | 8;
++			'ISwitchTuple ackItem = iterator.next();' | 12;
++			'if(ackItem.getId() < minId) {' | 12;
++				'minId = ackItem.getId();' | 16;
++			'}' | 12;
++		'}' | 8;
++		'return minId;' | 8;
++	'}' | 4;
++	}
++	''
++	String synPip = topoName;
++	if(looseSub) {
++		synPip = topLevelPip;
++	}
++	'    /**' 
++    '     * Sends synchronized signal to the preceding family element.' 
++    '     */'
++	'public void sendSynchronizedState() {' | 4;
++		'try {' | 8;
++			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(),
++					"$fmVarName", "synchronized", true, null);' | 12; //"synPip"
++			'sendSignal(paraSignal);' | 12;
++		'} catch (SignalException e) {' | 8;
++			'e.printStackTrace();' | 12;
++		'}' | 8;
++	'}' | 4;
++	''
++	'    /**' 
++    '     * Completing the synchronization phase.'
++    '     */' 
++	'public void completingSynchronization() { //used by passive algorithm'  | 4;
++		if(isHwAlg and switchInvolvesHW) {
++        	'if(outQueue.isEmpty() && omitOnce && isPassivate) {' | 8;
++        		if(newSwitchLog) {
++                'out.println(Calendar.getInstance().getTimeInMillis() + ", lastProcessedId--outQueue is empty and sending the omit signal to the hardware bolt.");' | 12;
++                'out.flush();' | 12;
++                }
++                'omitOnce = false;' | 12;
++                'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                        getNamespace(), "${algClsName}hardwareConnectionBolt", "omit", true, null);' | 12; //"$topoName"
++                  'try {' | 12;
++                    'sendSignal(paraSignal);' | 16;
++                '} catch (SignalException e) {' | 12;
++                    'e.printStackTrace();' | 16;
++                '}' | 12;
++        	'}' | 8;        	
++        }  
++		'//isPassivate = false;' | 8;
++		if(switchInvolvesHW) {
++			'isCompleting = true;' | 8;
++		}
++		'isTransferring = false;' | 8;
++		'isActiveSpout = true;' | 8;
++		'firstId = 0;' | 8;
++		'omitOnce = true;' | 8;
++		'synOnce = true;' | 8;
++		'sendSynchronizedState();'	 | 8;
++		'if(!isPassivate) {' | 8;
++			'goToActive();' | 12;
++		'}' | 8;
++		
++	'}' | 4;
++	''
++	'    /**' 
++    '     * Goes to active state, i.e., the target algorithm is activating.' 
++    '     */' 
++	'public void goToActive() {' | 4;		
++		'//isPassivate = false;' | 8;
++		'isTransferring = false;' | 8;
++		'isActiveSpout = true;' | 8;
++		'firstId = 0;' | 8;
++		'omitOnce = true;' | 8;
++		'synOnce = true;' | 8;
++		if(switchInvolvesHW) {
++			'lastIdOnce = true;' | 8;
++			'isCompleting = false;' | 8;
++		}
++		if(newSwitchLog) {
++        'out.println(Calendar.getInstance().getTimeInMillis() + ", Go to active and inform the end bolt.");' | 8;
++        'out.flush();' | 8;
++        }
++        'String targetPip = "$topoName";' | 8;
++        if(looseSub) {
++        	'if(algToSub.containsKey(targetAlg)) {' | 8;
++        		'targetPip = algToSub.get(targetAlg);' | 12;
++        	'}' | 8;
++        }
++        'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                getNamespace(), targetAlg+"EndBolt", "goToActive", true, null);' | 8;//targetPip
++          'try {' | 8;
++            'sendSignal(paraSignal);' | 12;
++        '} catch (SignalException e) {' | 8;
++            'e.printStackTrace();' | 12;
++        '}' | 8;
++
++	'}' | 4;
++	''
++	'    /**' 
++    '     * Goes to passive state, i.e., the original algorithm is disactivating.' 
++    '     */' 
++	'public void goToPassive() {' | 4;	
++		'outQueue.clear();' | 8;	
++		'isPassivate = false;' | 8;
++		'isTransferring = false;' | 8;
++		'isActiveSpout = false;' | 8;
++		'firstId = 0;' | 8;
++		'omitOnce = true;' | 8;
++		'synOnce = true;' | 8;
++		if(switchInvolvesHW) {
++			'lastIdOnce = true;' | 8;
++		}
++		if(newSwitchLog) {
++        'out.println(Calendar.getInstance().getTimeInMillis() + ", Go to passive and inform the end bolt.");' | 8;
++        'out.flush();' | 8;
++        }
++        'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                getNamespace(), originalAlg+"EndBolt", "goToPassive", true, null);' | 8;//"$topoName"
++          'try {' | 8;
++            'sendSignal(paraSignal);' | 12;
++        '} catch (SignalException e) {' | 8;
++            'e.printStackTrace();' | 12;
++        '}' | 8;
++	'}' | 4;
++    			/********************************/
++		    	/* notifyParameterChange method */  
++		    	/********************************/	    	           
++        if(newSwitch and hasDistAlgorithm(fm)) {
++			'@Override' | 4;
++			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
++			'long minId;' | 8;
++			'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
++			'ParameterChange para = signal.getChange(i);' | 12;			
++			'switch (para.getName()) {' | 12;			
++				'case "passivate"://ACTIVE and PASSIVE' | 16; 
++	                'isPassivate = true;' | 20;
++	                'String msg = para.getStringValue();' | 20;
++	                'String[] parts = msg.split(",");' | 20;
++	                'lastFamilyId = Integer.parseInt(parts[0]);' | 20;
++	                'originalAlg = parts[1];' | 20;
++	                'targetAlg = parts[2];' | 20;
++	                if(newSwitchLog) {
++		                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal passivate!" + " Original alg: " + originalAlg + ", Target alg: " + targetAlg + ", LastFamilyId: " + lastFamilyId);' | 20;
++		                'out.flush();' | 20;
++		            }
++	                'if(isActiveSpout) {' | 20;
++	                if(isHwAlg) {
++	                    'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++				                        getNamespace(), "${algClsName}hardwareConnectionBolt", "flush", true, null);' | 24;
++	                  'try {' | 24;
++		                    'sendSignal(paraSignal);' | 28;
++		                '} catch (SignalException e) {' | 24;
++		                    'e.printStackTrace();' | 28;
++		                '}' | 24;
++		                if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal flush to ${algClsName}hardwareConnectionBolt!");' | 24;
++			                'out.flush();' | 24;
++		            	}
++	                } else {
++		                'try {' | 24;
++							'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), "${algName}EndBolt", "disable", true, null);' | 28;
++	                		'sendSignal(paraSignal);' | 28;
++	            		'} catch (SignalException e) {' | 24;
++				            'e.printStackTrace();' | 28;
++				        '}' | 24;
++				        if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal disable to ${algName}EndBolt!");' | 24;
++			                'out.flush();' | 24;
++		            	}
++		            	}
++			        '}' | 20;
++	                'break;' | 20;
++	            'case "stopped"://ACTIVE' | 16; 
++				if(newSwitchLog) {
++	                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal stopped!");' | 20;
++	                'out.flush();' | 20;
++	            }
++	            if(switchInvolvesHW) {
++	            	'if(lastIdOnce && isPassivate) {' | 20;
++	            	'minId = minIdFromOutQueue();' | 24;
++	            	'if(minId == 0) {' | 24;
++	            		'lastProcessedId = lastFamilyId;' | 28;
++	            		'goToPassive();' | 28;
++	            	'} else {' | 24;
++	            		'lastProcessedId = minId - 1;' | 28;
++	            	'}' | 24;
++	            }
++	            	'try {' | 20;
++	            		'String targetPip = "$topoName";' | 24;
++				            if(looseSub) {
++				            	'if(algToSub.containsKey(targetAlg)) {' | 24;
++				            		'targetPip = algToSub.get(targetAlg);' | 28;
++				            	'}' | 24;
++				            }
++						'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), targetAlg+"Intermediary", "lastProcessedId", lastProcessedId, null);' | 24;//targetPip
++                		'sendSignal(paraSignal);' | 24;
++            		'} catch (SignalException e) {' | 20;
++			            'e.printStackTrace();' | 24;
++			        '}' | 20;
++			        if(newSwitchLog) {
++		                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal lastProcessedId to target intermediary!" + lastProcessedId);' | 20;
++		                'out.flush();' | 20;
++		            }
++		            if(switchInvolvesHW) {
++		            '}' | 20;
++		            }
++	                'break;' | 20;
++	            'case "headId": //ACTIVE' | 16; 
++	            	'try {' | 20;
++	            		'long headId = para.getIntValue();' | 24;
++	            		if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal headId!" + headId);' | 20;
++			                'out.flush();' | 20;
++			            }
++	            		'transferMissingItems(headId);' | 20;
++	            	'} catch (ValueFormatException e) {' | 20;
++			            'e.printStackTrace();' | 24;
++			        '}' | 20;
++			        'goToPassive();' | 20;
++	                'break;' | 20;
++	            'case "transfer": //ACTIVE' | 16; 
++				if(newSwitchLog) {
++	                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal transfer!");' | 20;
++	                'out.flush();' | 20;
++	            }
++	            	'isTransferring = true;' | 20;
++	            	'try {' | 20;
++	            	'transferAll();' | 24;
++	            	'} catch (SignalException e) {' | 20;
++			            'e.printStackTrace();' | 24;
++			        '}' | 20;
++			        if(!looseSub) {
++			        	'goToPassive();' | 20;
++			        }
++	                'break;' | 20;
++	            'case "lastProcessedId"://PASSIVE' | 16; 
++	            	'try {' | 20;
++	            		'lastProcessedId = para.getIntValue();' | 24;
++	            		if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal lastProcessedId!" + lastProcessedId + ", currently the outQueue size: " + outQueue.size());' | 24;
++			                'out.flush();' | 24;
++			            }
++	            	'} catch (ValueFormatException e) {' | 20;
++			            'e.printStackTrace();' | 24;
++			        '}' | 20;
++			        'if(lastProcessedId == lastFamilyId || outQueue.size() > OVERLOAD_SIZE || (lastFamilyId-lastProcessedId) > OVERLOAD_SIZE) {' | 20;
++			        if(isHwAlg and switchInvolvesHW) {
++			        	'if(/*outQueue.isEmpty() && */omitOnce && isPassivate) {' | 24;
++			        		if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + ", lastProcessedId--outQueue is empty and sending the omit signal to the hardware bolt.");' | 24;
++			                'out.flush();' | 24;
++			                }
++			                'omitOnce = false;' | 24;
++			                'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++			                        getNamespace(), "${algClsName}hardwareConnectionBolt", "omit", true, null);' | 24;//"$topoName"
++			                  'try {' | 24;
++			                    'sendSignal(paraSignal);' | 28;
++			                '} catch (SignalException e) {' | 24;
++			                    'e.printStackTrace();' | 28;
++			                '}' | 24;
++			        	'}' | 20;
++			        } else {
++			        	if(newSwitchLog) {
++		                'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--completing the synchronization.");' | 24;
++		                'out.flush();' | 24;
++		                }
++		                /* for now, we sacrifice the tuples waiting for acknowledgement in the output queue */
++		                'outQueue.clear();' | 24;
++		                'isPassivate = false;' | 24;
++		                if(newSwitchLog) {
++		                'out.println(Calendar.getInstance().getTimeInMillis() + ", lastProcessedId--sending the emit signal to the target end Bolt.");' | 24;
++		                'out.flush();' | 24;
++		                }
++		                'String targetPip = "$topoName";' | 24;
++				            if(looseSub) {
++				            	'if(algToSub.containsKey(targetAlg)) {' | 24;
++				            		'targetPip = algToSub.get(targetAlg);' | 28;
++				            	'}' | 24;
++				            }
++		                'ParameterChangeSignal paraSignalId = new ParameterChangeSignal(
++		                        getNamespace(), targetAlg+"EndBolt", "emit", true, null);' | 24; //targetPip
++		                  'try {' | 24;
++		                    'sendSignal(paraSignalId);' | 28;
++		                '} catch (SignalException e) {' | 24;
++		                    'e.printStackTrace();' | 28;
++		                '}' | 24;
++			        }
++			        	'completingSynchronization();' | 24;
++			        '} else {' | 20;
++			        'try {' | 20;
++			        	'isTransferring = true; //it is in the transferring phase' | 24;
++			        	'synchronizeItems();' | 24;
++	                '} catch (SignalException e) {' | 20;
++			            'e.printStackTrace();' | 24;
++			        '}' | 20; 
++			        '}' | 20;
++			        'break;' | 20; 
++	            'case "transferred": //PASSIVE' | 16; 
++	            	'try {' | 20;
++	            		'long value = para.getIntValue();' | 24;
++	            		if(newSwitchLog) {
++			                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal transferred!" + value);' | 20;
++			                'out.flush();' | 20;
++			            }
++	            		'if(value == 0) { //both queues are empty' | 24;
++	            		/* 
++                        'isTransferring = false;' | 24;
++                        'isActiveSpout = true;' | 24;
++                        'firstId = 0;' | 24;
++                        * 
++                        */
++                        if(newSwitchLog) {
++                        'out.println(Calendar.getInstance().getTimeInMillis() + ", notifyParameterChange--$name--Sending the synchronized signal from the $fmVarName.");' | 28;
++                        'out.flush();' | 28;
++                        }
++                        'completingSynchronization();' | 28;
++                        /* 
++                        'try {' | 20;
++                        	'ParameterChangeSignal paraSignal = new ParameterChangeSignal("$topoName", "$fmVarName", "synchronized", true);' | 24;
++                        	'sendSignal(paraSignal);' | 24;
++                        '} catch (SignalException e) {' | 20;
++			            'e.printStackTrace();' | 24;
++			        	'}' | 20;
++			        	* 
++			        	*/
++                    '}' | 24;
++                    if(switchInvolvesHW) {
++                    	'else {' | 24;
++                    		'firstId = transferredId;' | 28;
++                    	'}' | 24;
++                    }
++	            	'} catch (ValueFormatException e) {' | 20;
++			            'e.printStackTrace();' | 24;
++			        '}' | 20;
++			        
++	                'break;' | 20;
++	            'case "ready"://PASSIVE' | 16; 
++				if(newSwitchLog) {
++	                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal ready!");' | 20;
++	                'out.flush();' | 20;
++	            }
++	            	if(!isHwAlg) {
++	            	'isPassivate = false;' | 20;
++	            	'//isTransferring = true;' | 20;
++	            	}
++	            	if(isHwAlg and switchInvolvesHW){
++	            		'isPassivate = false;' | 20;
++	            		'if(isCompleting) {' | 20;
++	            		'goToActive();' | 24;
++	            		'}' | 20;
++	            	}
++	                'break;' | 20;
++			'}' | 12;
++			'}' | 8;
++			'}' |4;		
++		}
++		''
++				/************************************/
++				/*   declareOutputFields method     */
++				/************************************/     	
++    	'public void declareOutputFields(OutputFieldsDeclarer declarer) {' | 4;
++        	'declarer.declareStream(streamId, new Fields("tuple"));' | 8;
++    	'}' | 4;  	
++		''
++				/************************************/
++				/*   SychronizeItems              */
++				/************************************/ 
++				'    /**' 
++			    '     * Synchronizes the data items.' 
++			    '     */' 
++				'public void synchronizeItems() throws SignalException { //called by passive Spout' | 4;
++				if(newSwitchLog) {
++			        'out.println(Calendar.getInstance().getTimeInMillis() + ", $name --Sychronizing output, inQueue: " + inQueue.size() + ", outQueue: " + outQueue.size());' | 8;
++			        'out.flush();' | 8;
++		        }
++			        'if(inQueue.isEmpty()) { //request the Spout1 to transfer all tuples' | 8;
++			            if(newSwitchLog) {
++				            'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--Sending the transfer signal to Spout1.");' | 12;
++				            'out.flush();' | 12;
++			            }
++			            'firstId = lastFamilyId;' | 12;
++			            '//isTransferredData = true;' | 12;	
++			            'String origPip = "$topoName";' | 12;
++			            if(looseSub) {
++			            	'if(algToSub.containsKey(originalAlg)) {' | 12;
++			            		'origPip = algToSub.get(originalAlg);' | 16;
++			            	'}' | 12;
++			            }		            
++			            'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), originalAlg+"Intermediary", "transfer", true, null);' | 12;//origPip
++			            'try {' | 12;
++			                'sendSignal(paraSignal);' | 16;
++			            '} catch (SignalException e) {' | 12;
++			                'e.printStackTrace();' | 16;
++			            '}' | 12;
++			        '} else {' | 8;
++			            'long id = lastProcessedId;' | 12;
++			            'if (!inQueue.isEmpty()) {' | 12;
++			                'id = inQueue.peek().getId();' | 16;
++			            '}' | 12;
++			            if(newSwitchLog) {
++				            'out.println(Calendar.getInstance().getTimeInMillis() + "$name--Synchronizing the last id of the current alg: " + id + " with the last processed id of the previous alg:" + lastProcessedId);' | 12;
++				            'out.flush();' | 12;
++			            }
++			            'if(id > lastProcessedId) { //the current alg is faster than the previous alg, to infrom the previous alg to send the missing items' | 12;
++			                if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--Sending the headId signal to the original Spout with id:" + id);' | 16;
++				                'out.flush();' | 16;
++			                }
++			                'firstId = id-1;' | 16;
++			                '//isTransferredData = true;' | 16;
++			                 'String targetPip = "$topoName";' | 16;
++				            if(looseSub) {
++				            	'if(algToSub.containsKey(targetAlg)) {' | 16;
++				            		'targetPip = algToSub.get(targetAlg);' | 20;
++				            	'}' | 16;
++				            }
++			                'ParameterChangeSignal paraSignalId = new ParameterChangeSignal(getNamespace(), targetAlg+"Intermediary", "headId", id, null);' | 16;//targetPip
++			                'try {' | 16;
++			                    'sendSignal(paraSignalId);' | 20;
++			                '} catch (SignalException e) {' | 16;
++			                    'e.printStackTrace();' | 20;
++			                '}' | 16;
++			            '} else {' | 12;
++			                'while(id < lastProcessedId && !inQueue.isEmpty()) {' | 16;
++			                    'id = inQueue.poll().getId();' | 20;
++			                '}' | 16;
++			                /* 
++			                'isPassivate = false;'
++			                * 
++			                */
++			                if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + "Skipped tuples until the id:" + id);' | 16;
++				                'out.flush();' | 16;
++			                }
++			                //'isTransferring = false;'
++			                if(newSwitchLog) {
++				                'out.println(Calendar.getInstance().getTimeInMillis() + ", synchronizeItems--$name--Sending the synchronized signal from the switch family."); ' | 16;
++				                'out.flush();' | 16;
++			                }
++			                'completingSynchronization();' | 16;
++			                /* 
++			                'ParameterChangeSignal paraSignal = new ParameterChangeSignal("$topoName", "$fmVarName", "synchronized", true);'
++			                'sendSignal(paraSignal);'
++			                * 
++			                */
++			            '}' | 12;
++			        '}' | 8;
++    			'}' | 4;
++    			''
++    			'    /**' 
++			    '     * Transfers the missing data items.' 
++			    '     */'
++    			'public void transferMissingItems(long endId) { //ACTIVE: transferring tuples from lastProcessedId to endId' | 4;
++			        'long id;' | 8;
++			        if(newSwitchLog) {
++				        'out.println("Transferring missing items with outQueue: " + outQueue.size() + ", inQueue:" + inQueue.size());' | 8;
++				        'out.flush();' | 8;
++			        }
++			        'while (!outQueue.isEmpty()) {' | 8;
++			            'ISwitchTuple item = outQueue.poll();' | 12;
++			            'id = item.getId();' | 12;
++			            
++			            'if (id > lastProcessedId && id < endId && connectTargetAlg()) {' | 12;
++			                    if(newSwitchLog) {
++			                        'out.println(System.currentTimeMillis() + "outQueue--Transferring the missing items "+ id);' | 16;
++			                        'out.flush();' | 16;
++			                    }
++			                    'sendToTarget(item);' | 16; 
++			            '}' | 12;
++			            'if(id == endId) break;' | 12;
++			        '}' | 8;
++			            'if (!inQueue.isEmpty()) {' | 8;
++			                'id = inQueue.peek().getId();' | 12;
++			                'while (id < endId) {' | 12;
++			                    'ISwitchTuple item = outQueue.poll();' | 16;
++			                    'if (id > lastProcessedId && connectTargetAlg()) {' | 16;
++			                            if(newSwitchLog) {
++			                                'out.println(System.currentTimeMillis() + "inQueue--Transferring the missing items " + id);' | 20;
++			                                'out.flush();' | 20;
++			                            }
++			                            'sendToTarget(item);' | 20;
++			                    '}' | 16;
++			                    'id = item.getId();' | 16;
++			                '}' | 12;
++			            '}' | 8;
++			    '}' | 4;
++			    ''
++			    '    /**' 
++			    '     * Transfers all data items.' 
++			    '     */' 
++			    'public void transferAll() throws SignalException { //ACTIVE TODO: consider the case that there are some un-acked items' | 4;
++			        'long topId = 0;' | 8;
++			        'long tmpId = 0;' | 8;
++			        'long transferredId = 0;' | 8;
++			        'if(!outQueue.isEmpty()) {' | 8;
++			            'topId = outQueue.peek().getId();' | 12;
++			        '} else if(!inQueue.isEmpty()) {' | 8;
++			            'topId= inQueue.peek().getId();' | 12;
++			        '}' | 8;
++			        if(newSwitchLog) {
++				        'out.println("Transfer all items to the target Spout. with outQueue size:" + outQueue.size() + ", inQueue size:" + inQueue.size() + " Top id:" + topId);' | 8;
++				        'out.flush(); ' | 8;
++			        }
++			        '//transferring data from the outQueue' | 8;
++			        'while (!outQueue.isEmpty()) {' | 8;
++			            'ISwitchTuple item = outQueue.poll();' | 12;
++			            'tmpId = item.getId();' | 12;
++			            'if (tmpId > lastProcessedId) {' | 12;
++			                        if (newSwitchLog) {
++			                            'out.println(System.currentTimeMillis()
++			                                    + " Transferring the out queue to the target Spout."
++			                                    + item.getId());' | 16;
++			                            'out.flush();' | 16;
++			                        }
++			                            'sendToTarget(item);' | 16;
++			                            'transferredId = tmpId;' | 16;			                        			                   
++			            '}' | 12;
++			        '}' | 8;
++			        '//transferring data from the inQueue' | 8;
++			        'while (!inQueue.isEmpty()) {' | 8;
++			            'ISwitchTuple item = inQueue.poll();' | 8;
++			            'tmpId = item.getId();' | 8;
++			            'if (tmpId > lastProcessedId) {' | 8;
++			                        if (newSwitchLog) {
++			                            'out.println(System.currentTimeMillis()
++			                                    + " Transferring the in queue to the target Spout."
++			                                    + item.getId());' | 12;
++			                            'out.flush();' | 12;
++			                        }
++			                        'sendToTarget(item);' | 12;
++			                        'transferredId = tmpId;' | 12;
++			                '}' | 8;
++			        '}' | 8;
++			        if(!switchInvolvesHW) {
++			        'if(transferredId == 0) {' | 8;
++			        }
++			        if(newSwitchLog) {
++			            'out.println(Calendar.getInstance().getTimeInMillis() + ", transferAll --$name--Sending transferred signal with the last transferred Id: " + transferredId);' | 12;
++			            'out.flush();' | 12;
++			        }
++			        'String targetPip = "$topoName";' | 12;
++			            if(looseSub) {
++			            	'if(algToSub.containsKey(targetAlg)) {' | 12;
++			            		'targetPip = algToSub.get(targetAlg);' | 16;
++			            	'}' | 12;
++			            }
++			            'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++			                    getNamespace(), targetAlg+"Intermediary", "transferred", transferredId, null);' | 12;//targetPip
++			            'sendSignal(paraSignal);' | 12;
++			        if(!switchInvolvesHW) {
++			        '}' | 8;
++			        }
++			    '}' | 4;
++			    ''
++			    '    /**' 
++			    '     * Connects to the intermediary node of the target algorithm.' 
++			    '     */' 
++			    'public boolean connectTargetAlg() { //ACTIVE' | 4;
++			        'Socket s = null;' | 8;			        
++			        'int targetPort = 6027;' | 8;
++			        'if(null == socketTarget) {' | 8;
++			            'try {' | 12;
++			            	'String host = "localhost";' | 16;
++			            	if(looseSub) {//for loose pipeline
++			            		'PortManager portManager = getPortManager();' | 20;
++			        			'PortAssignment assignment = null;' |20;
++			        			'while(assignment == null && portManager.isConnected()) {' | 20;
++					        		'try {' | 24;
++					        			'assignment = portManager.getPortAssignment(getPipeline(), targetAlg+"Intermediary", 0, null);' | 28;
++									'} catch (SignalException e) {' | 24;
++										'e.printStackTrace();' | 28;
++									'}' | 24;
++			        			'}' | 20;
++			        			'if(assignment != null) {' | 20;
++						 			'host = assignment.getHost();' | 24;
++						 			'targetPort = assignment.getPort();' | 24;
++						 		'}' | 20;
++							 	if(newSwitchLog) {
++							 		'LOGGER.info("Connecting to the host : " + host + ", the port: " + targetPort);' | 20;
++						        	'out.println("Connecting to the host : " + host + ", the port: " + targetPort);' | 20;
++						        	'out.flush();' | 20;
++						        }
++			            	} else {
++				                'host = new CollectingTopologyInfo("$topoName", targetAlg+"Intermediary", nimbus_host, thrift_port).getExecutorHost();' | 16;
++				                'if(algNameToPort.containsKey(targetAlg)) {' | 16;
++				                	'targetPort = algNameToPort.get(targetAlg);' | 20;
++				                '}' | 16;
++			                }
++			                's = new Socket(host,targetPort);' | 16;
++			                if(newSwitchLog) {
++			                	'out.println("Connecting to : " + host + ":" + targetPort);' | 16;
++			                	'out.flush();' | 16;
++			                }
++			                'outputTarget = new Output(s.getOutputStream());' | 16;
++			                'socketTarget = s;' | 16;
++			            '} catch (UnknownHostException e) {' | 12;
++			                'e.printStackTrace();' | 16;
++			            '} catch (IOException e) {' | 12;
++			                'if (null != s) {' | 16;
++			                    'try {' | 20;
++			                        's.close();' | 24;
++			                    '} catch (IOException e1) {' | 20;
++			                        'e1.printStackTrace();' | 24;
++			                    '}' | 20;
++			                '}' | 16;
++			                'e.printStackTrace();' | 16;
++			            '}' | 12;
++			        '}' | 8;
++			        'return null != socketTarget;' | 8;
++			    '}' | 4;
++			    ''
++			    '    /**' 
++			    '     * Sends data items to the target algorithm.' 
++			    '     */'
++			    'public void sendToTarget(ISwitchTuple item) {' | 4;
++			    	'if(connectTargetAlg()) {' | 8;
++				    	'byte[] bytes = kryoSer.serialize(item);' | 12;
++						'outputTarget.writeInt(bytes.length);' | 12;
++			            'outputTarget.writeBytes(bytes);' | 12;
++			            'outputTarget.flush();' | 12;
++		            '}' | 8;
++			    '}' | 4;
++				/************************************/
++				/*   FillInQueueServer              */
++				/************************************/ 	
++		'    /**' 
++	    '     * Creates a server receiving data items.' 
++	    '     */' 
++		'public class FillInQueueServer implements Runnable {' | 4;
++        	'private ServerSocket serverSocket;' | 8;
++        	'private FillInQueueHandler handler;' | 8;
++        	'private boolean cont = true;' | 8;
++        	'private Map conf;' | 8;
++        	''
++        	'public FillInQueueServer(Map conf) throws IOException {' | 8;
++        		'this.conf = conf;' | 12;
++            	'serverSocket = new ServerSocket(port);' | 12; 
++//            serverSocket.setSoTimeout(10000);
++				if(newSwitchLog) {
++					'out.println("Server socket created on " + port);' | 12;
++					'out.flush();' | 12;
++				}
++            	'LOGGER.info("Server socket created on " + port); ' | 12;
++        	'}' | 8;
++        	''
++        	'public void start() {' | 8;
++            	'new Thread(this).start();' | 12;
++           		'LOGGER.info("Server thread started " + port);' | 12;
++        	'}' | 8;
++        	''
++        	'public void run() {' | 8;
++            	'while (cont) {' | 12;
++                	'try {' | 16;
++                    	'LOGGER.info("Accepting the socket connection....");' | 20;
++                    	'Socket socket = serverSocket.accept();' | 20;
++                    	'LOGGER.info("Socket connection accepted " + port);' | 20;
++                    	'handler = new FillInQueueHandler(conf, socket);' | 20;
++                    	'new Thread(handler).start();' | 20;
++                	'} catch (IOException e) {' | 16;
++                    	'e.printStackTrace();' | 20;
++                '}' | 16;
++            '}' | 12;
++        '}' | 8;
++        ''
++        'public void stop() throws IOException {' | 8;
++            'LOGGER.info("Stopping server");  ' | 12;
++            'cont = false;' | 12;
++            'handler.stop(); ' | 12;          
++            'serverSocket.close();' | 12;
++            'LOGGER.info("Stopped server");' | 12;
++        '}' | 8;
++        
++    '}' | 4;
++    ''
++    '    /**' 
++    '     * Creates a handler to receive data items.' 
++    '     */' 
++    'private class FillInQueueHandler implements Runnable {' | 4;
++        'private Socket socket;' | 8;
++        'private InputStream in; ' | 8;
++        'Input kryoInput = null;' | 8;
++        'private boolean cont = true;' | 8;
++        'KryoSwitchTupleSerializer serializer;' | 8;
++        ''
++        'private FillInQueueHandler(Map conf, Socket socket) throws IOException {' | 8;
++            'this.socket = socket;' | 12;
++            'in = socket.getInputStream();' | 12;
++            'kryoInput = new Input(in);' | 12;
++            'serializer = new KryoSwitchTupleSerializer(conf);' | 12;
++        '}' | 8;
++        ''
++        'public void run() {' | 8;
++            'while(cont) {' | 12;
++            'try {' | 16;
++                'int len = kryoInput.readInt();' | 16;
++                'byte[] ser = new byte[len];' | 16;
++                'kryoInput.readBytes(ser);' | 16;
++                'ISwitchTuple switchTuple = serializer.deserialize(ser); ' | 16; 
++                'if(switchTuple != null) {' | 16;
++                if(newSwitchLog) {
++                    'out.println( Calendar.getInstance().getTimeInMillis() + "$name--FillInQueueHandler -- Received the data with id :" + switchTuple.getId() + ", firstId: " + firstId + "is transferred data? " + (switchTuple.getId() > firstId));' | 20;
++                    'out.flush();' | 20;
++                }
++	                'if(isActiveSpout) {//when the spout is the active one, only need to fill data into inQueue.' | 16;
++	                	'produce(inQueue, switchTuple);' | 20;
++	                '} else {//when the spout is the passive one, transferred data to tmpQueue and other data to inQueue' | 16;
++	                	'if(switchTuple.getId() > firstId || switchTuple.getId() == 0) {' | 20;
++                            'produce(inQueue, switchTuple);' | 24;
++                        '} else {' | 20;
++                        	'produce(tmpQueue, switchTuple);' | 24;
++                            if(newSwitchLog) {
++                                'out.println(Calendar.getInstance().getTimeInMillis() + "$name--data id: " + switchTuple.getId() + ", firstId:" + firstId);' | 24;
++                                'out.flush();' | 24;
++                            }
++                            'if(synOnce) {' | 24;
++                                'synOnce = false;' | 28;
++                                if(newSwitchLog) {
++                                    'out.println(Calendar.getInstance().getTimeInMillis() + ", FillInQueueHandler--$name--Sending the synchronized signal from the $fmVarName.");' | 28;
++                                    'out.flush();' | 28;
++                                }
++                                'sendSynchronizedState();' | 28;
++                            '}' | 24;
++                            'if(switchTuple.getId() == firstId) {' | 24;
++                            if(newSwitchLog) {
++                                'out.println(Calendar.getInstance().getTimeInMillis() + ", reached the last transferred data, firstId:" + firstId);' | 28;
++                                'out.flush();' | 28;
++                            }
++                            'goToActive();' | 28;
++                            '}' | 24;
++                        '}' | 20;
++	                '}' | 16;
++                '}' | 12;  
++                '} catch (KryoException e) {' | 12;   
++                	'e.printStackTrace();' | 16;
++                '}' | 12;
++            '}' | 8;
++        '}' | 4;       
++        ''
++        'private void produce(Queue<ISwitchTuple> queue, ISwitchTuple data) {' | 4;
++            '//wait if queue is full' | 8;
++            'while (queue.size() == LOWER_SIZE) {' | 8;
++                'synchronized (queue) {' | 12;
++                if(newSwitchLog) {
++                    'out.println("Queue is full " + Thread.currentThread().getName()
++                                        + " is waiting , size: " + queue.size());' | 16;
++                }                        
++                    'try {' | 16;
++                        'queue.wait();' | 20;
++                    '} catch (InterruptedException e) {' | 16;
++                        'e.printStackTrace();' | 20;
++                    '}' | 16;
++                '}' | 12;
++            '}' | 8;
++            '//producing element and notify consumers' | 8;
++            'synchronized (queue) {' | 8;
++                'queue.offer(data);' | 12;
++                'queue.notifyAll();' | 12;
++            '}' | 8;
++        '}' | 4;
++        ''
++        'public void stop() throws IOException {' | 8;
++        	'LOGGER.info("Stopping handler");' | 16;
++        	'cont = false;' | 16;   
++            'if (null != socket) {' | 12;
++                'socket.close();' | 16;
++                'socket = null;' | 16;
++            '}' | 12;
++            'if (null != kryoInput) {' | 12;
++            	'kryoInput.close();' | 16;
++                'kryoInput = null;' | 16;
++            '}' | 12;
++            'if (null != in) {' | 12;
++            	'in.close();' | 16;
++                'in = null;' | 16;
++            '}' | 12;
++            'LOGGER.info("Stopped handler");' | 16;
++        '}' | 8;
++    	'}' | 4;
++    	''
++		/********************************* */
++    	/*******Prepare shut down signal** */
++    	/********************************* */
++    	'@Override' | 4;
++    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
++        	'super.prepareShutdown(signal);' | 8;
++        	'try {' | 8;
++        		'server.stop();' | 12;
++        	'} catch(IOException e) {' | 8;
++        		'e.printStackTrace();' | 12;
++        	'}' | 8;
++    	'}' | 4;
++    	''
++	'}'
++		
++	}
++	
++	def setOf(String) coreTupleInputType (String fmName, Algorithm algorithm) {
++		setOf(String) listTupleTypes = {};
++		String tupleName = null;
++		sequenceOf(Tuple) tuples = algorithm.input;
++		for(Tuple t : tuples) { //TODO: multiple tuples!!
++			tupleName = t.name;
++			tupleName = tupleName.firstToUpperCase().toIdentifier();
++			listTupleTypes.add("${fmName}${tupleName}Input");
++		}
++		listTupleTypes;
++	}
++	
++	def setOf(String) lastTupleTypes(DecisionVariable elt, sequenceOf(Tuple) inputTuples, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, Tuple)) globalMap) {
++	    setOf(String) lastTypes = {};
++	    //get the inputToOutputMapping of this family element
++		String eltName = elt.varName().firstToUpperCase();
++		mapOf(Tuple, Tuple) inputToOutputMapping = {};
++		if(globalMap.containsKey(eltName)){
++			inputToOutputMapping = globalMap.get(eltName);
++		}
++		String tupleName;
++		String outputInfName;
++	    for(Tuple t : inputTuples) {
++			tupleName = t.name;
++			//get output interface name	
++			if(inputToOutputMapping.containsKey(t))	{
++			  Tuple output = inputToOutputMapping.get(t);
++			  outputInfName = nameToOutputMap.get(output);
++			  lastTypes.add(outputInfName);				
++			} 
++	    }
++	    lastTypes;
++	}
++	
++	def String subPipelineName(Family fm, String algorithm) {
++		String subPipName = null;
++		for(Algorithm alg : fm.members) {
++			if(alg.name == algorithm) {
++				SubPipelineAlgorithm subAlg = alg;
++				subPipName = subAlg.subPipeline.name;
++			}
++			
++		}
++		subPipName;
++	}
++	
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpoutSubPipeline.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpoutSubPipeline.vtl
+new file mode 100644
+index 0000000..a376141
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpoutSubPipeline.vtl
+@@ -0,0 +1,192 @@
++import commonVTLMethods;
++@advice(QM)
++template stormIntermediarySpoutSubPipeline(Configuration config, FileArtifact target, String topoName, Algorithm algorithm) {
++	def main(Configuration config, FileArtifact target, String topoName, Algorithm algorithm) {
++
++		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
++    	''
++    	/****************************/
++    	/*        Imports           */  
++    	/****************************/ 
++		'import java.util.Calendar;'
++		'import java.util.Map;'
++		'import java.util.Queue;'
++		'import java.util.LinkedList;'
++		'import java.util.concurrent.ConcurrentLinkedQueue;'
++		'import java.net.InetAddress;'
++		'import java.net.UnknownHostException;'
++		'import org.apache.log4j.Logger;'
++		'import java.io.IOException;'
++
++		'import backtype.storm.Config;'
++		'import backtype.storm.spout.SpoutOutputCollector;'
++		'import backtype.storm.task.TopologyContext;'
++		'import backtype.storm.topology.OutputFieldsDeclarer;'
++		'import backtype.storm.tuple.Fields;'
++		'import backtype.storm.tuple.Values;'
++		'import eu.qualimaster.base.algorithm.IGeneralTuple;'
++		'import eu.qualimaster.base.algorithm.ISwitchTuple;'
++		'import eu.qualimaster.base.pipeline.CollectingTopologyInfo;'
++		'import eu.qualimaster.common.signal.BaseSignalSpout;'
++		'import eu.qualimaster.common.signal.ParameterChange;'
++		'import eu.qualimaster.common.signal.ParameterChangeSignal;'
++		'import eu.qualimaster.common.signal.ShutdownSignal;'
++		'import eu.qualimaster.common.signal.SignalException;'
++		'import eu.qualimaster.common.signal.ValueFormatException;'
++		'import eu.qualimaster.common.switching.*;'
++		'import eu.qualimaster.common.switching.IState.SwitchState;'
++		'import eu.qualimaster.families.imp.*;'
++		'import eu.qualimaster.families.inf.*;'
++		'import eu.qualimaster.common.signal.PortManager.*;'
++		'import eu.qualimaster.common.signal.PortManager;'
++		if(newSwitchLog) {
++			'import java.io.PrintWriter;'
++			'import eu.qualimaster.common.logging.DataLogger;'
++			'import java.util.Calendar;'
++		}
++ 
++		/****************************/
++    	/*        Spout class        */  
++    	/****************************/    	
++    	'/**'
++    	'* Define the intermediary Spout class.'
++    	'* @generated'
++    	'**/'
++    	'@SuppressWarnings({ "rawtypes", "serial" })'
++    	String name = formulateString(algorithm.name) + "Intermediary";
++    	'public class $name extends BaseSwitchSpout {'
++    		'private static final Logger LOGGER = Logger.getLogger($name.class);' | 4;
++    		'private static int QUEUE_SIZE = 100;' | 4;
++    		'private transient SpoutOutputCollector _collector;' | 4;
++    		'private String streamId;' | 4;
++    		'private String nimbus_host = "localhost";' | 4;
++    		'private int thrift_port = 6027;' | 4;
++    		'private int port;' | 4;
++			'private transient AbstractSwitchMechanism mechanism;' | 4;
++			'private transient AbstractSwitchStrategy strategy;' | 4;
++    		'private transient TupleReceiverServer server;' | 4;
++    		'private Object msgId;' | 4;  
++    		'private boolean isClosed = false;' | 4;		
++	    	if(newSwitchLog) {
++				'private transient PrintWriter out = null;' | 4;
++			}
++    		''
++    		/****************************/
++		    /*    Class constructor     */  
++		    /****************************/  
++    		'public $name(String name, String namespace, String streamId) {' | 4;
++        		'super(name, namespace,$genMonitoringProbes);' | 8; 
++        		'this.streamId = streamId;' | 8;
++    		'}' | 4;
++    		''
++    		    /****************************/
++		    	/*     open method          */  
++		    	/****************************/    	
++    	'    @Override'
++        '    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {'
++        '		 super.open(conf, context, collector);'
++        '        _collector = collector;' 
++        		if(newSwitchLog) {
++        			'String logDir = (String) conf.get("LOG.DIRECTORY");' | 8;
++        			'out = DataLogger.getPrintWriter(logDir + "${name}.log");' | 8;
++				}
++        		'nimbus_host = (String) conf.get(Config.NIMBUS_HOST);' | 8;
++        		'thrift_port = (int) conf.get(Config.NIMBUS_THRIFT_PORT);' | 8;        		
++        		'strategy = new SeparateIntermediaryStrategy(conf, SwitchState.ACTIVE_DEFAULT);' | 8; //TODO:Determine the default state from the configuration
++        		'mechanism = new ParallelTrackSwitchMechanism(strategy);' | 8;
++        		'setSwitchMechanism(mechanism);' | 8;
++        		'String localhost = "localhost";' | 8;
++        		'try {' | 8;
++					'localhost = InetAddress.getLocalHost().getCanonicalHostName();' | 12;
++				'} catch (UnknownHostException e1) {' | 8;
++					'e1.printStackTrace();' | 12;
++				'}' | 8;
++        		'PortAssignmentRequest portRequest = new PortAssignmentRequest(getPipeline(), getName(), 0, localhost, null);' | 8;
++        		'PortManager portManager = getPortManager();' | 8;
++        		'try {' | 8;
++					'PortAssignment assignment = portManager.registerPortAssignment(portRequest);' | 12;
++					'port = assignment.getPort();' | 12;
++					if(newSwitchLog) {
++					'LOGGER.info("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
++					'out.println("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
++					'out.flush();' | 12;
++					}
++					'} catch (SignalException e) {' | 8;
++						'e.printStackTrace();' | 12;
++				'}' | 8;
++            	'server = new TupleReceiverServer(strategy.getTupleReceiverHandler(), port);' | 8;
++        		'server.start();' | 8;
++        		'initMonitor();' | 8;
++        '	 }'
++        ''     
++        //override the initial monitor
++	    produceInitMonitor(false, 4);
++	    ''  
++		    	/****************************/
++		    	/*     nextTuple method     */  
++		    	/****************************/        
++        '    @Override'
++        '    public void nextTuple() {'
++        		'IGeneralTuple tuple = mechanism.getNextTuple();' | 8;
++        		'if(tuple != null) {' | 8;
++        			'if(tuple.isGeneralTuple()) {' | 12;
++		        		if(newSwitchLog) {
++		        			'out.println("Received GENERAL data and emitting...");' | 16;
++		        			'out.flush();' | 16;
++		        		}
++		        			'_collector.emit(streamId, tuple.getValues());' | 16;
++		        	'} else {' | 12;
++		        		if(newSwitchLog) {
++		        			'out.println("Received SWITCH data and emitting...");' | 16;
++		        			'out.flush();' | 16;
++		        		}
++		        			'ISwitchTuple swiTuple = (ISwitchTuple)tuple;' | 16;
++	            			'Object msgId = swiTuple.getId();' | 16;
++		        			'_collector.emit(streamId, tuple.getValues(), msgId);' | 16;
++		        	'}' | 12;
++        		'}' | 8;
++    	'}' | 4;
++    			''
++				/************************************/
++				/**********   ack method     ********/
++				/************************************/         			
++    			'@Override' | 4;
++    			'public void ack(Object msgId) {' | 4;
++        			'LOGGER.info("Acking the processed tuple: " + msgId);' | 8;
++        			'super.ack(msgId);' | 8;
++    			'}' | 4;
++    			''
++				/************************************/
++				/*   declareOutputFields method     */
++				/************************************/     	
++    	'public void declareOutputFields(OutputFieldsDeclarer declarer) {' | 4;
++        	'declarer.declareStream(streamId, new Fields("tuple"));' | 8;
++    	'}' | 4;  	
++		''  
++				/************************************/
++				/*   close method     */
++				/************************************/ 
++		'@Override' | 4;
++    	'public void close() {' | 4;
++        'super.close();' | 8;
++        'isClosed = true;' | 8;
++        'try {' | 8;
++            'server.stop();' | 12;
++        '} catch (IOException e) {' | 8;
++            'e.printStackTrace();' | 12;
++        '}' | 8;
++    	'}' | 4;
++    ''
++    '@Override' | 4;
++    'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
++        'super.close();' | 8;
++        'isClosed = true;' | 8;
++        'try {' | 8;
++            'server.stop();' | 12;
++        '} catch (IOException e) {' | 8;
++            'e.printStackTrace();' | 12;
++        '}' | 8;
++    '}' | 4;
++	'}'
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormPipeline.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormPipeline.vtl
+new file mode 100644
+index 0000000..a851036
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormPipeline.vtl
+@@ -0,0 +1,711 @@
++import commonVTLMethods;
++@advice(QM)
++template stormPipeline(Configuration config, FileArtifact target, Pipeline pipeline, String algName, mapOf(String, setOf(DecisionVariable)) familiesInPipeline, mapOf(String, setOf(DecisionVariable)) lastElementMap) { 
++	setOf(String) bolts = {}; //collect the generated bolt name
++	setOf(String) flows = {}; //collect the passed flow name(varname)
++	setOf(String) produced = {}; //collect the produced element(for only generating the spout/Bolt definition once) 
++	mapOf(String, Integer) nodeToRepeatNumMap = {};
++	String pipName = pipeline.name;
++    // check for endless recursions    
++    def main(Configuration config, FileArtifact target, Pipeline pip, String algName, mapOf(String, setOf(DecisionVariable)) familiesInPipeline, mapOf(String, setOf(DecisionVariable)) lastElementMap) {    	
++    	String pipName = pip.name.toIdentifier();
++    	Integer numworkers=pip.numworkers;
++    	Boolean fastSerialization=pip.fastSerialization;
++    	//Integer numworkers=1;
++    	Integer timeout = pip.timeout;
++    	//get all families used in this pipeline
++    	setOf(DecisionVariable) families = {};
++    	if(familiesInPipeline.containsKey(pipName)) {
++    		families = familiesInPipeline.get(pipName);
++    	}
++    	'package eu.qualimaster.$pipName.topology;'
++    	''
++    	'import org.apache.log4j.Logger;'    	
++    	'import backtype.storm.*;'
++    	'import backtype.storm.topology.*;'
++    	'import eu.qualimaster.Configuration;'
++    	'import eu.qualimaster.base.algorithm.*;'
++    	'import eu.qualimaster.infrastructure.PipelineOptions;'
++    	'import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;'
++    	for(Family fm : families) {
++    		produceAlgorithmImports(fm);
++    	}
++    	
++    	''
++    	'/**'
++    	'* Define the main topology class(GEN).'
++    	'**/'
++    	'public class Topology{'
++    	'    final static Logger logger = Logger.getLogger(Topology.class);'
++    	'    static final String TOPOLOGY_NAME = "$pipName";'
++//    	'    private static int numWorkers = 0; //numWorkers to be configured'
++    	'    private static int maxNumWorkers = 1; //initialized by default value'
++    	'    private static int maxTaskParallelism = 1; //initialized by default value'
++    	'    private static PipelineOptions options = null; //initialized by default value'
++//    	'    private transient Config config = new Config();'
++//        '    private transient TopologyBuilder builder = new TopologyBuilder();'
++    	''
++    	'    /**'
++    	'     * Define a class for creating the main topology.'
++    	'     */'
++    	'    public static class MainTopologyCreator implements IMainTopologyCreate {'
++    	'        /**'
++    	'         * Create a main topology.'
++    	'         * @return a TopologyOutput carring the storm config and TopologyBuilder information'
++    	'         */'
++    	'        public TopologyOutput createMainTopology() {'
++    	'            int numWorkers = $numworkers; //initialized by the pipeline configuration'
++    	'            Config config = new Config();'
++    	'            config.setMessageTimeoutSecs($timeout);'
++    	'            config.setDebug(false);'
++    	'            config.put("windowSize", 1 * 30);  // Window size (in secs)'
++        '            config.put("windowAdvance", 1);  // Advance of the window (in secs)'
++        'if(options.isSubPipeline()) {' | 12;
++            	'config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());' | 16;
++            '} else {' | 12;
++        '            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace'
++        '}' | 12;
++        '			//The settings to optimize the storm performance.'
++        '			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);'
++		'			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);'
++		'			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);'
++		'			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);'
++//    	''
++//    	'        if (args != null && args.length > 0) {'
++    	'            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());'
++        '            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());'
++        '            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());'
++        '			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());'
++        if(newSwitchLog) {
++        '			 config.put("LOG.DIRECTORY", "/var/nfs/spass/");'
++        }
++//                   TODO switch to Configuration.transferConfiguraitonTo(config);
++//    	'        }'
++        if (fastSerialization) {
++        	'            eu.qualimaster.families.imp.SerializationRegistry.registerKryoSerializers(config);'
++        }
++        '            options.toConf(config);' // before first algorithm/sub-topology!!!
++    	''
++    	'            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);'
++    	
++    	if(pip.type() == "SubPipeline") { //when it is a sub-pipeline
++    		'builder.setSpout("${algName}Intermediary", new ${algName}Intermediary("${algName}Intermediary", "$pipName", "${algName}IntermediaryStreamId"), 1);' | 12; //the intermediary spout 
++			String topologyCls = "${formulateString(pipName)}SubTopology";
++			String snkBolt = pipName.firstToUpperCase() + "SubOutput";
++			'            SubTopologyOutput $snkBolt = new $topologyCls().createSubTopology(builder,config,"$algName", "${algName}Intermediary", "${algName}IntermediaryStreamId");'
++			'BoltDeclarer ${algName}EndBolt = builder.setBolt("${algName}EndBolt", new ${algName}EndBolt("${algName}EndBolt", "$pipName", $snkBolt.getStreamId()), 1);' | 12; 
++			'${algName}EndBolt.shuffleGrouping($snkBolt.getBoltName(), $snkBolt.getStreamId());' | 12;
++    	} else {
++	    	for (DecisionVariable r : pip.sources) {
++	    		if(genMultiTupleTypes) {
++	    			Tuple t;
++	    			processElement(r, Grouping.shuffleGrouping, t, r, r, true, false);
++	    		} else {
++		    		setOf(String) s1 = {};
++		    		setOf(String) s2 = {};
++		    		setOf(String) outputTupleNames = {};
++		    		processElement(r, Grouping.shuffleGrouping, s1, s2, true, outputTupleNames);
++	    		}
++	    	} 
++    	}
++    	'            builder.close(TOPOLOGY_NAME, config);'  
++    	'            return new TopologyOutput(config, builder, numWorkers);'  	
++    	'        }'
++    	''
++    	'    }'
++    	'    /**'
++    	'     * Main method.'
++    	'     */'
++    	'    public static void main(String[] args) throws Exception {'
++    	'        //create the main topology.'
++    	'        options = new PipelineOptions(args);'
++    	'        MainTopologyCreator topoCreator = new MainTopologyCreator();'
++ 		'        TopologyOutput topo = topoCreator.createMainTopology();'
++ 		'        //get the topology information'
++ 		'        Config config = topo.getConfig();'
++ 		'        TopologyBuilder builder = topo.getBuilder();'
++ 		'        int defNumWorkers = topo.getNumWorkers();'
++        '        int numWorkers = options.getNumberOfWorkers(defNumWorkers);'
++ 		''
++ 		//'System.out.println("Calling the main class with" + java.util.Arrays.toString(args));'
++    	'        //submit the topology in the real cluster' 
++    	'        if (args != null && args.length > 0) {'
++    	'if(!options.isInProfilingMode()) {' |12; 
++    	'if(maxNumWorkers > numWorkers) {' |16;
++    	'logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");' | 20;
++    	'}' | 16;
++    	'}' |12;
++    	//'System.out.println("Starting pipelines");'
++    	'            config.setNumWorkers(numWorkers);'
++        '            StormSubmitter.submitTopology(args[0], config, builder.createTopology());'
++    	'        }'
++    	'        else{ //submit the topology locally' 
++    	'           config.setMaxTaskParallelism(maxTaskParallelism);'
++    	'           final LocalCluster cluster = new LocalCluster();'
++		'           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());'		
++		'        }'
++    	'    }'
++    	'}'
++    }
++     
++    def processElement(DecisionVariable elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {
++		'// unhandled type ${elt.type()}' | 8;
++    }
++
++	def processElement(DataManagementElement elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {
++        // currently the same as FamilyElement -> infer grouping to fieldsGrouping?
++    	setOf(String) listName = {};        
++    	String name = elt.varName();
++    	Integer outputSize = elt.output.size();
++    	    	
++    	setOf(String) outputTupleNames = {};
++    	outputTupleNames = lastOutputTupleNames;
++    	
++    	if(newFlow){
++     	    produceStatement(elt, grouping, preLastName, lastName, true, isLastElementDM, lastOutputTupleNames);    	
++		} 
++		if(isStringExisted(name, produced)){			
++		}else {
++    	    listName.add(name);
++    	    produced.add(name);   		
++    	}
++        Boolean nFlow;
++		for (Flow flow : elt.output) {
++			String flowName = flow.varName();
++			if(isStringExisted(flowName, flows)){
++				nFlow = false;
++			} else {
++				nFlow = true;
++				flows.add(flowName);
++			}
++			if(nFlow) {//only when the flow is not visited
++				processElement(flow.destination, flow.grouping, lastName, listName, nFlow, true, outputTupleNames);
++			}			
++		}
++    }
++
++    def processElement(FamilyElement elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {
++        // currently the same as DataManagementElement -> infer grouping to shuffleGrouping?
++    	setOf(String) listName = {}; 
++    	String nameVar = elt.varName();  
++    	Integer outputSize = elt.output.size();
++    	Family fm = elt.family;
++    	//collect the output tuple names from the current element
++    	setOf(String) outputTupleNames = {};
++    	for(Tuple t : fm.output) {
++    		String tupleName = t.name;
++    		outputTupleNames.add(tupleName);
++    	}
++        if(newFlow){
++    	    produceStatement(elt, grouping, preLastName, lastName, true, isLastElementDM, lastOutputTupleNames);
++    	}
++    	if(isStringExisted(nameVar, produced)){
++    		//do nothing    		
++    	}
++    	else{//the current element is not produced    		
++		    String snkBolt = "";
++		    String subTopoCreator = "";
++		    Family fm = elt.family;
++		    Integer topoCount = 1;		
++    	    for (Algorithm alg : fm.members) {
++			    if(isDistAlgorithm(alg)) { //produce the subTopology statement			    	
++				    snkBolt = nameVar.firstToUpperCase() + "${topoCount}SubOutput";
++                    subTopoCreator = nameVar.firstToUpperCase() + "${topoCount}SubCreator";
++				    String algCls = algQualifiedClsName(alg);//qualified class name	
++					String streamId = nameVar + "${topoCount}TopoStream";	
++					String topologyCls = algImplName(alg);//implementation name
++			   		String algName = alg.name.firstToUpperCase().toIdentifier();
++			   		
++			    	'            //generate the Storm-based algorithm topology name:$algClsName'
++			    	if (isManualSubtopology(alg)) {
++			    		produceConfInitAlgorithm(alg, algName);
++			    	}
++			    	if(newSwitch and fm.members.size() > 1) {
++		    			'builder.setSpout("${algName}Intermediary", new ${algName}Intermediary("${algName}Intermediary", "$pipName", "${algName}IntermediaryStreamId"), 1);' | 12; //set the default spout parallelism 
++			   			'            builder.startRecording("$algClsName");'
++			   			'            ITopologyCreate ${subTopoCreator} = new $topologyCls();'
++			   			'            SubTopologyOutput $snkBolt = ${subTopoCreator}.createSubTopology(builder,config,"$algName", "${algName}Intermediary", "${algName}IntermediaryStreamId");'
++			   			'            builder.endRecording(${subTopoCreator});'
++			   			'BoltDeclarer ${algName}EndBolt = builder.setBolt("${algName}EndBolt", new ${algName}EndBolt("${algName}EndBolt", "$pipName", $snkBolt.getStreamId()), 1);' | 12; 
++			   			'${algName}EndBolt.shuffleGrouping($snkBolt.getBoltName(), $snkBolt.getStreamId());' | 12;
++			   		} else {
++			   			'            builder.startRecording("$algClsName");'
++                        '            ITopologyCreate ${subTopoCreator} = new $topologyCls();'
++			    		'            SubTopologyOutput $snkBolt = ${subTopoCreator}.createSubTopology(builder,config,"$algName", "$nameVar", "$streamId");'
++			    		'            builder.endRecording(${subTopoCreator});'
++			    	}
++			    	
++			    	'maxNumWorkers = Math.max(maxNumWorkers, $snkBolt.getNumWorkers());' | 12;
++			    	'maxTaskParallelism = Math.max(maxTaskParallelism, $snkBolt.getMaxTaskParallelism());' | 12;	
++			    	listName.add(snkBolt);
++			    	topoCount = topoCount + 1;		    	    
++		    	} else { //for non-subTopology algorithm
++		    		if(isStringExisted(nameVar, listName)){		    			
++		    		} else {
++		    			listName.add(nameVar);
++		    		}		     		
++		    	}					 
++    	 	} 
++    	 	produced.add(nameVar); //added the current element to produced(mark it is produced)       	
++        }
++		Boolean nFlow;		   	
++		for (Flow flow : elt.output) {
++			String flowName = flow.varName();
++			if(isStringExisted(flowName, flows)){
++				nFlow = false;
++			} else {
++				nFlow = true;
++				flows.add(flowName);
++			}	
++			if(nFlow) {//only when the flow is not visited					
++				processElement(flow.destination, flow.grouping, lastName, listName, nFlow, false, outputTupleNames);
++			}
++		}
++    }
++    
++    def produceConfInitAlgorithm(Algorithm alg, String algName) {
++    }
++
++    def produceConfInitAlgorithm(SoftwareAlgorithm alg, String algName) {
++        'if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("$algName"))) {' | 12;
++        'config.put(PipelineOptions.getExecutorParallelismKey("$algName"), ${alg.parallelism});' | 16;
++        '}' | 12;
++        if (alg.numtasks > 0) {
++        'if (!config.containsKey(PipelineOptions.getTaskParallelismKey("$algName"))) {' | 12;
++        'config.put(PipelineOptions.getTaskParallelismKey("$algName"), ${alg.numtasks});' | 16;
++        '}' | 12;
++        }
++    }
++    
++    /*
++     * Processes the element along the pipeline topology.
++     * @param elt the Source variable
++     * @param grouping the grouping type 
++     * @param preNameForTopo  
++     */
++    def processElement(Source elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, setOf(String) lastOutputTupleNames) {
++    	setOf(String) listName = {};//collect the name of the current element as the last element that linked to the next element
++    	String name = elt.varName(); 
++//    	Integer outputSize = elt.output.size();    	
++    	//get DataSource variable
++    	DataSource dataSrc = elt.source;
++    	//collect the output tuple names from the current element
++    	setOf(String) outputTupleNames = {};
++    	for(Tuple t : dataSrc.input) {
++    		String tupleName = t.name;
++    		outputTupleNames.add(tupleName);
++    	}
++    	
++    	if(newFlow){ //if the flow has not been passed (the flow is new), in Source it starts with true to produce the spout definition
++     		produceStatement(elt, grouping, preLastName, lastName, false, false, lastOutputTupleNames);    	
++		} 
++		if(isStringExisted(name, produced)){			
++		}else {//the elt is not produced
++    	    listName.add(name);
++    	    produced.add(name);   		
++    	}
++	    Boolean nFlow;
++	    //go through the flow outputs
++		for (Flow flow : elt.output) {
++			String flowName = flow.varName();
++			if(isStringExisted(flowName, flows)){ //check if the flow has been passed
++				nFlow = false; //the flow is not new
++			} else {
++				nFlow = true; //the flow is new
++				flows.add(flowName); //added the current flow to the set flows
++			}
++			if(nFlow) {//only when the flow is not visited
++				processElement(flow.destination, flow.grouping, lastName, listName, nFlow, false, outputTupleNames);
++			}
++		}
++    }
++    
++    def processElement(Sink elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {   	
++    	if(newFlow){
++    	    produceStatement(elt, grouping, preLastName, lastName, true, isLastElementDM, lastOutputTupleNames);	
++    	}
++    	
++    }
++    
++    def produceStatement(DecisionVariable elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean bolt, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {
++    	//name for Spout/Bolt
++    	String name = elt.varName();
++    	//Spout/Bolt class name
++    	String clsName = className(elt);
++    	//get the parallelism
++    	Integer parallelism = elt.byName("parallelism"); 
++    	//collect the tuple names from the current element input
++    	setOf(String) inputTupleNames = {};
++    	//obtain the meaningful display name of the element 
++    	String eltType = elt.type();
++    	String displayName;
++    	if(eltType == "Source") {
++    		//cast the elt to Source
++    		Source source = elt;
++    		//get the display name
++    		displayName = source.name;
++    		//no input tuple
++    	} else if (eltType == "FamilyElement") {
++    		//cast the elt to FamilyElement
++    		FamilyElement familyElt = elt;
++    		//get the display name
++    		displayName = familyElt.name;
++    		//collect the tuple names from the current element input
++    		Family fm = familyElt.family;
++    		for(Tuple t : fm.input) {
++    			String tupleName = t.name;
++    			inputTupleNames.add(tupleName);
++    		}    		
++    	} else if(eltType == "Sink") {
++    		//cast the elt to Sink
++    		Sink sink = elt;
++    		//get the display name
++    		displayName = sink.name;
++    		//collect the tuple names from the current element input
++    		DataSink dataSnk = sink.sink;
++    		for(Tuple t : dataSnk.output) {
++    			String tupleName = t.name;
++    			inputTupleNames.add(tupleName);
++    		}
++    	} else if(eltType == "DataManagementElement") {
++    		DataManagementElement dmElt = elt;
++    		displayName = dmElt.name;
++    		inputTupleNames = lastOutputTupleNames;
++    	}    			   	
++    	
++        if (bolt) {    	    
++    	    if(isStringExisted(name, bolts)){ 
++ 	    	} else {
++ 	    	  '// Declare a Bolt "$displayName"' | 12;
++ 	          'BoltDeclarer $name = builder.setBolt("$name", new $clsName("$name", "$pipName"), $parallelism)${produceNumTasks(elt)};' | 12;  
++    	      bolts.add(name); 
++ 	    	}
++ 	    		    	
++	    	'$name' | 12;   	    	    	    
++	    	if(isLastElementDM) { //if the last element is a DataManagementElement, then grouping to the element before the DME	        		
++			    grouping(elt, grouping, preLastName, lastOutputTupleNames, inputTupleNames);
++			} else {
++			    grouping(elt, grouping, lastName, lastOutputTupleNames, inputTupleNames);
++			}		        		               	  	    
++        } else {
++        	'// Declare a Spout "$displayName"' | 12;
++		    'builder.setSpout("$name", new $clsName("$name", "$pipName"), $parallelism)${produceNumTasks(elt)};' | 12;
++        }
++    }
++    
++    def grouping(DecisionVariable elt, Grouping grouping, setOf(String) lastName, setOf(String) lastOutputTupleNames, setOf(String) inputTupleNames) {  	   	
++        String sname;
++        String varName = elt.varName();
++        mapOf(String, String) nameToAlg = {};  
++        if(newSwitch) {
++        	setOf(DecisionVariable) lastElts= {};
++        	if(lastElementMap.containsKey(varName)) {
++        		lastElts = lastElementMap.get(varName);
++        	}
++        	mappingSubInstanceNameToAlgName(lastElts, nameToAlg); 
++        }     
++//    	if (elt.varName().length() > 0) {
++    		for(String last : lastName) {   						
++    		    if(containsEnding(last,"SubOutput")) { // for topo
++    		    	if(newSwitch) {
++    		    		String algName;
++    		    		if(nameToAlg.containsKey(last)) {
++    		    			algName = nameToAlg.get(last);
++    		    		}
++    		    		'.$grouping("${algName}EndBolt", $last.getStreamId())' | 16;
++    		    	} else {
++    			    	'.$grouping($last.getBoltName(), $last.getStreamId())' | 16; 	
++    			    }		
++    		    } else { // for non-topo 	   		    	
++    		    	for(String input : inputTupleNames) {
++    		           for(String output : lastOutputTupleNames) {
++    					  if(input == output) {
++    				          sname = last + "Stream${firstToUpperCase(input)}";   				    
++    				          '.$grouping("$last", "$sname")' | 16;
++    				      }
++    		           }
++    	            }   		    		    	
++    				
++    		    }     			
++    		}
++    		';' | 16; 		  	 
++//    	}    	   	
++    }    
++        
++    def Boolean containsEnding(String str, String subString) {
++    	Integer strLen = str.length();
++    	Integer subStringLen = subString.length();   	
++    	if(subStringLen > strLen){
++    		false;
++    	} else {
++    		String sub = str.substring(strLen-subStringLen, strLen);
++    		if(sub == subString) {
++    			true;
++    		} else {
++    			false;
++    		}
++    	}   	
++    }
++    
++    def mappingSubInstanceNameToAlgName(setOf(DecisionVariable) lastElts, mapOf(String, String) nameToAlg) {
++    	Integer counter = 1;
++        	for(DecisionVariable dv : lastElts) {
++	        	if(dv.type() == "FamilyElement") {
++	        		String dVarName = dv.varName();
++	        		Family fm = dv.byName("family");
++	        		for(Algorithm alg : fm.members) {
++	        			String algName = alg.name.firstToUpperCase().toIdentifier();
++	        			if(isDistAlgorithm(alg)) {
++	        				String VarSubName = dVarName+counter+"SubOutput";
++	        				nameToAlg.add(VarSubName, algName);
++	        				counter = counter + 1;
++	        			}
++	        		}
++	        	}
++	        	if(dv.type() == "DataManagementElement") {
++	        		String dVarName = dv.varName();	        		
++	        		if(lastElementMap.containsKey(dVarName)) {
++			    		setOf(DecisionVariable) lastElts = lastElementMap.get(dVarName);
++			    		mappingSubInstanceNameToAlgName(lastElts, nameToAlg);
++			    	}
++	        	}
++        	}
++    }
++
++    /**
++     *  The following methods are used for integrating the tuple type of the flow to the main pipeline generation.
++     */   
++    def processElement(DecisionVariable elt, Grouping grouping, Tuple tupleType, DecisionVariable preElt, DecisionVariable prePreElt, Boolean newFlow, Boolean isLastElementDM) {
++    	'//unhandled type ${elt.type()}'
++    }
++    def processElement(Source elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
++    	String nameVar = elt.varName(); 
++    	DataSource dataSrc = elt.source;    	
++ 		
++        if(newFlow){
++    	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, false, false);
++    	}
++    	
++    	if(isStringExisted(nameVar, produced)){			
++		}else {//the elt is not produced
++    	    produced.add(nameVar);   		
++    	}
++    	
++		Boolean nFlow;	   	
++		for (Flow flow : elt.output) {
++			String flowName = flow.varName();
++			if(isStringExisted(flowName, flows)){
++				nFlow = false;
++			} else {
++				nFlow = true;
++				flows.add(flowName);
++			}
++			if(nFlow) {//only when the flow is not visited					
++				processElement(flow.destination, flow.grouping, flow.tupleType, elt, preElt, nFlow, false);
++			}
++		}
++    }
++    
++    def processElement(Sink elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
++        if(newFlow){
++    	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, true, isLastElementDM);
++    	}    		
++    }
++    
++    def processElement(ReplaySink elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
++        if(newFlow){
++    	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, true, isLastElementDM);
++    	}    		
++    }
++    
++    def processElement(DataManagementElement elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
++        // currently the same as FamilyElement -> infer grouping to fieldsGrouping?
++    	String nameVar = elt.varName();
++    	
++    	if(newFlow){
++     	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, true, isLastElementDM);    	
++		} 
++		if(isStringExisted(nameVar, produced)){			
++		} else {
++    	    produced.add(nameVar);   		
++    	}
++        Boolean nFlow;
++		for (Flow flow : elt.output) {
++			String flowName = flow.varName();
++			if(isStringExisted(flowName, flows)){
++				nFlow = false;
++			} else {
++				nFlow = true;
++				flows.add(flowName);
++			}
++			if(nFlow) {//only when the flow is not visited
++				processElement(flow.destination, flow.grouping, flow.tupleType, elt, preElt, nFlow, true);
++			}	
++		}
++    }
++    
++    def processElement(FamilyElement elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
++    	String nameVar = elt.varName(); 
++ 		String name = elt.name;
++ 		
++        if(newFlow){
++    	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, true, isLastElementDM);
++    	}
++    	if(isStringExisted(nameVar, produced)){
++    		//do nothing    		
++    	} else {//the current element is not produced    		
++		    String snkBolt = "";
++            String subTopoCreator = "";
++		    Family fm = elt.family;
++		    Integer topoCount = 1;		
++    	    for (Algorithm alg : fm.members) {
++			    if(isDistAlgorithm(alg) and !looseSub) { //produce the subTopology statement			    	
++				    snkBolt = nameVar.firstToUpperCase() + "${topoCount}SubOutput";
++				    subTopoCreator = nameVar.firstToUpperCase() + "${topoCount}SubCreator";
++				    String algCls = algQualifiedClsName(alg);
++				    String algClsName = algImplName(alg);
++					String streamId = formulateString(nameVar) + formulateString(alg.name);	
++					String topologyCls = algImplName(alg);
++			   		String algName = formulateString(alg.name);
++			    	'            //generate the Storm-based algorithm topology name:$algClsName'
++			    	if (isManualSubtopology(alg)) {
++			    		produceConfInitAlgorithm(alg, alg.name);
++			    	}
++			    	if(newSwitch and fm.members.size() > 1) {
++		    			'builder.setSpout("${algName}Intermediary", new ${algName}Intermediary("${algName}Intermediary", "$pipName", "${algName}IntermediaryStreamId"), 1);' | 12; //set the default spout parallelism 
++			   			if(!isGenSubtopology(alg) and !isHardwareAlgorithm(alg)) {
++				   		'            builder.startRecording("$algClsName");'
++				   		}
++				   		'            ITopologyCreate ${subTopoCreator} = new $topologyCls();'
++			   			'            SubTopologyOutput $snkBolt = ${subTopoCreator}.createSubTopology(builder,config,"$algName", "${algName}Intermediary", "${algName}IntermediaryStreamId");'
++			   			if(!isGenSubtopology(alg) and !isHardwareAlgorithm(alg)) {
++				    	'            builder.endRecording(${subTopoCreator});'
++				    	}
++			   			'BoltDeclarer ${algName}EndBolt = builder.setBolt("${algName}EndBolt", new ${algName}EndBolt("${algName}EndBolt", "$pipName", $snkBolt.getStreamId()), 1);' | 12; 
++			   			'${algName}EndBolt.shuffleGrouping($snkBolt.getBoltName(), $snkBolt.getStreamId());' | 12;
++			   		} else {
++			   			if(!isGenSubtopology(alg) and !isHardwareAlgorithm(alg)) {
++				   		'            builder.startRecording("$algClsName");'
++				   		}
++				   		'            ITopologyCreate ${subTopoCreator} = new $algClsName();'
++			    		'            SubTopologyOutput $snkBolt = ${subTopoCreator}.createSubTopology(builder,config,"$algName", "$nameVar", "$streamId");'
++			    		if(!isGenSubtopology(alg) and !isHardwareAlgorithm(alg)) {
++				    	'            builder.endRecording(${subTopoCreator});'
++				    	}
++			    	}
++			    	
++			    	'maxNumWorkers = Math.max(maxNumWorkers, $snkBolt.getNumWorkers());' | 12;
++			    	'maxTaskParallelism = Math.max(maxTaskParallelism, $snkBolt.getMaxTaskParallelism());' | 12;	
++			    	topoCount = topoCount + 1;		    	    
++		    	} else { //for non-subTopology algorithm
++		    				     		
++		    	}					 
++    	 	} 
++    	 	produced.add(nameVar); //added the current element to produced(mark it is produced)       	
++        }
++		Boolean nFlow;	   	
++		for (Flow flow : elt.output) {
++			String flowName = flow.varName();
++			if(isStringExisted(flowName, flows)){
++				nFlow = false;
++			} else {
++				nFlow = true;
++				flows.add(flowName);
++			}
++			if(nFlow) {//only when the flow is not visited
++				processElement(flow.destination, flow.grouping, flow.tupleType, elt, preElt, nFlow, false);
++			}	
++		}
++    }
++    
++    def produceStatement(DecisionVariable elt, Grouping grouping, Tuple tupleType, DecisionVariable preElt, DecisionVariable prePreElt, Boolean bolt, Boolean isLastElementDM) {
++    	//name for Spout/Bolt
++    	String name = elt.varName();
++    	//Spout/Bolt class name
++    	String clsName = className(elt); 
++    	//get the parallelism
++    	Integer parallelism = elt.byName("parallelism"); 
++    	
++    	//obtain the meaningful display name of the element 
++    	String eltType = elt.type();
++    	String displayName;
++    	setOf(Flow) flows;
++    	Parameters parameters;
++    	if(eltType == "Source") {
++    		//cast the elt to Source
++    		Source source = elt;
++    		//get the display name
++    		displayName = source.name;
++    		//get the flows
++    		flows = source.output;
++    		parameters = source.source.parameters;
++    	} else if (eltType == "FamilyElement") {
++    		//cast the elt to FamilyElement
++    		FamilyElement familyElt = elt;
++    		//get the display name
++    		displayName = familyElt.name;
++    		//get the flows
++    		flows = familyElt.output;
++    		parameters = familyElt.family.parameters;
++    	} else if (eltType == "Sink" or eltType == "ReplaySink") {
++    		//cast the elt to Source
++    		Sink sink = elt;
++    		//get the display name
++    		displayName = sink.name;
++    		//get the parameters
++    		parameters = sink.sink.parameters;
++    	} else if(eltType == "DataManagementElement") {
++    		DataManagementElement dmElt = elt;
++    		displayName = dmElt.name;
++    	}			   	
++    	
++        if (bolt) {    	    
++    	    if(isStringExisted(name, bolts)){ //no node to be produced but the grouping statement 
++ 	    	} else {
++ 	    	    '// Declare a Bolt "$displayName"' | 12;
++ 	            'BoltDeclarer ${formulateString(name)}=builder.setBolt("${formulateString(name)}", new $clsName("${formulateString(name)}", "$pipName"), $parallelism)${produceNumTasks(elt)};' | 12;  
++	    	    bolts.add(name); 
++	 	    } 	    	
++        } else {
++        	'// Declare a Spout "$displayName"' | 12;
++		    'builder.setSpout("${formulateString(name)}", new $clsName("${formulateString(name)}", "$pipName"), $parallelism)${produceNumTasks(elt)};' | 12;
++        }
++        
++        if(isLastElementDM) { //if the last element is a DataManagementElement, then grouping to the element before the DME	        		
++			grouping(name, grouping, tupleType, prePreElt);
++		} else {
++		    grouping(name, grouping, tupleType, preElt);
++		}
++    }
++
++    def grouping(String eltName, Grouping grouping, Tuple tupleType, DecisionVariable preElt) {
++    	String preEltName = preElt.varName(); 
++		String streamId = formulateString(preEltName) + formulateString(tupleType.name);    	
++		'$eltName.$grouping("${formulateString(preEltName)}", "$streamId");' | 12;
++    }   
++    
++    def grouping(String eltName, Grouping grouping, Tuple tupleType, FamilyElement preElt) {
++    	String preEltName = preElt.varName(); 
++		Family fm = preElt.byName("family");
++		Integer topoCount = 1;
++		Boolean once = true;
++    	for(Algorithm alg : fm.members) {	    			    		
++    		if(isDistAlgorithm(alg) and !looseSub) {
++    			String nodeName;
++    			String endBolt = formulateString(alg.name) + "EndBolt";
++    			String sub = formulateString(preEltName) + "${topoCount}SubOutput";
++    			if(newSwitch) {
++    				nodeName = "\"" + endBolt + "\"";
++    			} else {
++    				nodeName = sub + ".getBoltName()";
++    			}
++    			'$eltName.$grouping($nodeName, $sub.getStreamId());' | 12;
++    			topoCount = topoCount + 1;
++    		} else if(once) {
++    			once = false;
++				String streamId = formulateString(preElt.varName()) + formulateString(tupleType.name);    	
++				'$eltName.$grouping("${formulateString(preEltName)}", "$streamId");' | 12;
++    		}
++    	}
++    }                
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSink.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSink.vtl
+new file mode 100644
+index 0000000..962ba3b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSink.vtl
+@@ -0,0 +1,496 @@
++import commonVTLMethods;
++@advice(QM)
++template stormSink(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap, Boolean debug) {
++    Boolean isReplay = false;
++    Boolean lastHasSubPipeline = false; //indicates whether the last elements have sub-pipeline-based algorithm	
++	Boolean loadShedding = false;
++	def produceInputVariable(sequenceOf(Tuple) tuples, Boolean variable, String fName) {
++		String ifInputName = "I" + fName;
++		String tupleName;
++
++		for(Tuple t : tuples) {
++			//get the tuple name
++			tupleName = t.name;
++			//change the first letter to upper letter
++			tupleName = firstToUpperCase(tupleName);
++			String inputInfName = ifInputName + "${tupleName}Input";
++			String fImpInputName = 	fName + "${tupleName}Input";
++			if(variable) {
++				'    transient ${toIdentifier(inputInfName)} input${tupleName} = null;'
++			} else {
++				'        input${tupleName} = new ${toIdentifier(fName)}.${toIdentifier(fImpInputName)}();'
++			}			
++		}
++	}
++	
++	def registerSerializer(sequenceOf(Tuple) tuples,  String fName) {
++		String ifInputName = "I" + fName;
++		String tupleName;
++
++		for(Tuple t : tuples) {
++			//get the tuple name
++			tupleName = t.name;
++			//change the first letter to upper letter
++			tupleName = firstToUpperCase(tupleName);
++			String inputInfName = ifInputName + "${tupleName}Input";
++			String fImpInputName = 	fName + "${tupleName}Input";
++			'        new ${toIdentifier(fName)}.${toIdentifier(fImpInputName)}();'
++		}
++	}
++	
++	/*
++	 * Produces the casting statement from tuple value to right tuple type.
++	 */	
++    def produceInputForTuples(mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping, mapOf(Tuple,String) nameToOutputMap, DecisionVariable elt) {
++		String familyName = elt.byName("sink").varName().firstToUpperCase();	
++		String outputInfName; //output interface name	
++		String inputInfName; //input interface name		
++        Sink snk = elt;
++        DataSink dataSnk = snk.sink;
++		String snkName =dataSnk.name;
++		String inputName = snkName.firstToUpperCase();
++		String ifInputName = "I" + inputName; 
++		String inputImpName;       
++
++		String qualifiedClsName = dataSnk.sinkCls;
++		JavaPath javaPath = qualifiedClsName;
++		String impClassName = javaPath.getName(); //the class name of the sink implementation
++        
++        String tupleName;		
++		Boolean multiStream = false;
++		Integer indent = 4;
++		sequenceOf(Tuple) tuples = dataSnk.output;
++		Integer tuplesSize = tuples.size();
++		for(Tuple t : tuples) {
++			if(tuplesSize > 1){
++				multiStream = true;
++				indent = 8;
++			}
++			//get the tuple name
++			tupleName = t.name;
++			//change the first letter to upper letter
++			tupleName = firstToUpperCase(tupleName);
++			//get input interface name
++			inputInfName = ifInputName + "${tupleName}Input";
++			
++			inputImpName = inputName +"${tupleName}Input";
++					
++			//get output interface name	
++			if(inputToOutputMapping.containsKey(t))	{
++			  sequenceOf(Tuple) outputs = inputToOutputMapping.get(t);
++			  String number;
++			  Integer size = outputs.size();
++			  Integer count = 0;
++			  for(Tuple tuple : outputs) {
++			  	  count = count + 1;
++			  	  outputInfName = nameToOutputMap.get(tuple);
++			  	  if(size > 1) {
++				      number = "$count";
++				  } else {
++				  	  number = "";
++				  }
++				  
++				'if(tupleItem instanceof $outputInfName) {' | indent;
++				'iTuple${tupleName}$number = ($outputInfName)tupleItem;' | indent+4;
++				if(genInstance) {
++					'input${tupleName} = new ${toIdentifier(inputName)}.${toIdentifier(inputImpName)}();' | indent+4;
++				}
++				 for(Field f : t.fields) {
++					 String fname = toIdentifier("${f.name}");
++	    			 String mname = firstToUpperCase(fname);
++	    	         'input${tupleName}.set${mname}(iTuple${tupleName}$number.get${mname}());' | indent+4;
++				 }
++				 if(isReplay) {
++				 	'store(input${tupleName});' | indent+4;
++				 } else {
++				 	'sinkHandler.postData${tupleName}(input${tupleName});' | indent+4;
++				 }
++				 if (genMonitoringProbes) {
++				     'emitted(input${tupleName});' | indent+4;
++				 }
++				 '}' | indent;
++				 ''	
++			  }			  			
++
++			 }						 
++		}							
++	}
++	
++	/**
++	 * Returns the base class, for Sink or ReplaySink. 
++	 */
++	def String baseClass(DecisionVariable elt) {
++		if(elt.type() == "ReplaySink") {
++			'AbstractReplaySink';
++		} else {
++			'BaseSignalBolt';
++		}		
++	}
++	
++	/**
++	 * Produce emitters per tuple type for replay sink.
++	 */
++	def produceEmitters(String snkName, Tuples tuples) {
++		String ifInputName = "I" + formulateString(snkName);
++		String inputInfName;
++		for (Tuple t : tuples) {
++			inputInfName = ifInputName + formulateString(t.name) + "Input";
++			'public class ${inputInfName}Emitter<$inputInfName> implements AbstractReplaySink.ITupleEmitter<$inputInfName> {' | 4;
++	        	'@Override' | 8;
++        		'public void emit(int ticket, $inputInfName tuple) {' | 8;
++					'//call from sink implementation' | 12;  
++					'sinkHandler.emit(ticket, (I${toIdentifier(snkName)}.$inputInfName)tuple);' | 12;         
++        		'}' | 8;
++        
++    		'}' | 4;
++		}
++	}
++	
++	def produceRegister(DataSink dataSnk) {
++		String strategyStr = obtainManagementStrategyInstance(dataSnk);
++		String ifInputName = "I" + formulateString(dataSnk.name);
++		String inputInfName;
++		String inputImpName;
++		'@Override' | 4;
++    	'protected void registerHandlers(Map conf, TopologyContext context) {' | 4;
++    		'eu.qualimaster.dataManagement.common.replay.Tuple schema;' | 8;
++    		for(Tuple t : dataSnk.output) {
++    			inputInfName = ifInputName + formulateString(t.name) + "Input";
++    			inputImpName = formulateString(dataSnk.name) + formulateString(t.name) + "Input";
++    			'schema = new eu.qualimaster.dataManagement.common.replay.Tuple("${t.name}");' | 8;
++    			for(Field f : t.fields) {
++    				'schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("${f.name}", ${f.type.class}.class, ${key(f)}, ${f.type.isTimestamp}));' | 8;
++    			}
++        		'addTupleHandler(${inputImpName}.class, schema, "${dataSnk.storageLocation}", $strategyStr, new ${inputInfName}Emitter());' | 8;
++        	}
++    	'}'
++    	''
++	}	
++	
++    def main(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap, Boolean debug) {
++        if(elt.type() == "ReplaySink") {
++        	isReplay = true;
++        }
++        String name = elt.varName().firstToUpperCase() + elt.type();
++        String preIfName = "I" + preElt.byName("family").varName().firstToUpperCase();
++		String streamId = elt.varName() + "Stream";
++		Sink snk = elt;
++		loadShedding = snk.loadShedding;
++		DataSink dataSnk = snk.sink;
++		String qualifiedClsName = dataSnk.sinkCls;
++		JavaPath javaPath = qualifiedClsName;
++		String impClassName = javaPath.getName(); //the class name of the sink implementation	
++			
++		String fmVarName = elt.varName().firstToUpperCase();
++		setOf(DecisionVariable) lastElt = {};
++		if(lastElementMap.containsKey(fmVarName)) {
++			lastElt = lastElementMap.get(fmVarName); //last elements linked to the current element	
++		}
++		
++		//determine whether the last elements have sub-pipeline-based algorithm
++		for(DecisionVariable elt : lastElt) {
++			if(elt.type() == "FamilyElement") {
++				FamilyElement fe = elt;
++				Family fm = fe.family;
++				if(looseSub and hasGenAlgorithm(fm)) {
++					lastHasSubPipeline = true;
++				}
++			}
++		}
++		
++		String snkName =dataSnk.name;
++		String inputName = snkName.firstToUpperCase();	
++		
++		String eltName = elt.varName().firstToUpperCase();
++		mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping = {};
++		if(globalMap.containsKey(eltName)){
++			inputToOutputMapping = globalMap.get(eltName);
++		}		
++		
++        'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
++    	''
++    	/****************************/
++    	/*        Imports           */  
++    	/****************************/     	
++    	'import java.util.*;'
++    	'import java.io.IOException;'
++    	'import java.net.InetAddress;'
++		'import java.net.UnknownHostException;'
++    	'import org.apache.log4j.Logger;'
++    	'import backtype.storm.tuple.*;'
++    	'import backtype.storm.task.*;'
++    	'import backtype.storm.topology.*;'
++    	'import eu.qualimaster.common.signal.*;'
++    	'import eu.qualimaster.base.algorithm.*;'
++    	'import eu.qualimaster.dataManagement.strategies.*;'
++    	'import eu.qualimaster.infrastructure.PipelineOptions;'
++    	'import eu.qualimaster.events.EventManager;'
++		'import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;' 
++    	'import eu.qualimaster.data.inf.I${toIdentifier(snkName)};'
++    	'import eu.qualimaster.data.inf.I${toIdentifier(snkName)}.*;'
++    	'import eu.qualimaster.data.imp.${toIdentifier(snkName)};'
++    	'import eu.qualimaster.data.imp.${toIdentifier(snkName)}.*;'
++    	//'import $qualifiedClsName;'
++		'import eu.qualimaster.dataManagement.strategies.*;'
++		'import eu.qualimaster.dataManagement.DataManager;'
++    	produceImportsFromLastElements(lastElt, lastElementMap, topoName);
++    	if(newSwitchLog) {
++			'import java.io.PrintWriter;'
++			'import eu.qualimaster.common.logging.DataLogger;'
++			'import java.util.Calendar;'
++		}
++		if(lastHasSubPipeline) {
++			'import com.esotericsoftware.kryo.KryoException;'
++    		'import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;'
++			'import eu.qualimaster.base.serializer.KryoGeneralTupleSerializer;'
++			'import eu.qualimaster.common.switching.*;'
++			'import java.util.concurrent.ConcurrentLinkedQueue;'
++			'import eu.qualimaster.common.signal.PortManager.*;'
++			'import eu.qualimaster.common.signal.PortManager;'
++		}
++    	''
++    	/****************************/
++    	/*        Sink class        */  
++    	/****************************/    	
++    	'/**'
++    	'* Defines the Sink class(GEN).'
++    	'**/'
++    	'@SuppressWarnings({ "rawtypes", "serial" })'
++    	'public class $name extends ${baseClass(elt)} {'
++    	''
++		    	/****************************/
++		    	/*     Class variables      */  
++		    	/****************************/     	
++    	'    final static Logger logger = Logger.getLogger($name.class);'    	
++    	'    transient OutputCollector _collector;'
++    	'    transient I${toIdentifier(snkName)} sinkHandler;'
++    	'private int counter = 0;'
++    	produceOutputVariable(dataSnk.output, inputToOutputMapping, nameToOutputMap, inputName);
++    	produceInputVariable(dataSnk.output, true, inputName);
++    	if(newSwitchLog){
++				'private transient PrintWriter out = null;' | 4;
++		}
++			
++		if(lastHasSubPipeline) {
++			'private int port;' | 4;
++    		'private static int QUEUE_SIZE = 100;' | 4;
++    		'private transient TupleReceiverServer server = null;' | 4;
++    		'private transient Queue<IGeneralTuple> queue = new ConcurrentLinkedQueue<IGeneralTuple>();//receiving tuples' | 4;
++    		'private transient SynchronizedQueue<IGeneralTuple> syn = null;' | 4;
++    	}
++    	''
++		    	/****************************/
++		    	/*    Class constructor     */  
++		    	/****************************/   		  	
++    	'	public $name(String name, String namespace) {'
++    	'        super(name, namespace, $genMonitoringProbes);'
++    	'    }'
++    	''
++    	if(isReplay) {
++    	//generate emitters 
++    	produceEmitters(snkName, dataSnk.output);
++    	
++    	//register tuple handler
++    	produceRegister(dataSnk);
++    	}
++    			/***********************************/
++		    	/* sendAlgorithmChangeEvent method */  
++		    	/***********************************/
++    	''
++		'    /**'
++		'     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct' 
++		'     * testing.'
++		'     * @param algorithm the new algorithm'
++		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
++		'     */'
++		'    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {'
++		'        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));'
++		'    }' 
++		''   	
++		    	/****************************/
++		    	/*     execute method       */  
++		    	/****************************/     
++		if(lastHasSubPipeline) {
++		'/**' | 4;
++		' * A thread executes tuples.' | 4;
++		' */' | 4;
++		'public class ExecuteTuple implements Runnable {' | 4;
++			'@Override' | 8;
++    		'public void run() {' | 8;
++				'while(true) {' | 12;
++					'forwardTuple(syn.consume().getValue(0));' | 16;
++				'}' | 12;
++			'}' | 8;
++		'}' | 4;
++		}
++		''
++		'public void forwardTuple(Object tupleItem) {' | 4; 
++			if(newSwitchLog) {
++				'counter++;'
++				'out.println(Calendar.getInstance().getTimeInMillis() + " , " + counter);'
++				'out.flush();'
++			}
++	        if (genMonitoringProbes) {		
++			'        startMonitoring();'
++			}
++			'        //for now, sink just emits the tuple that get from last familyelement'		
++			 //produce input -- output casting statement
++			produceInputForTuples(inputToOutputMapping, nameToOutputMap, elt);	
++			if(debug) {	
++			'        logger.info("Received data in Sink:" + tuple);'
++			}
++			if (genMonitoringProbes) {
++			'        endMonitoring();'
++			}			
++		'}' | 4;	
++		''
++		'    @Override'
++        if (loadShedding) {
++		'    protected void doExecute(Tuple tuple) {'
++		} else {
++        '    public void execute(Tuple tuple) {'
++		}
++			'forwardTuple(tuple.getValue(0));' | 8;
++			if(newSwitch) {
++				'_collector.ack(tuple);' | 8;
++			}
++		'    }'
++	    ''
++		    	/****************************/
++		    	/*     prepare method       */  
++		    	/****************************/ 	    
++		'    @Override'
++		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
++		'		super.prepare(map, topologyContext, collector);'
++		'        _collector = collector;'
++		if(newSwitchLog) {
++					'String logDir = (String) map.get("LOG.DIRECTORY");' | 8;
++        			'out = DataLogger.getPrintWriter(logDir + "sink.csv");' | 8;
++        			'counter = 0;' | 8;
++        	}
++		if(!genInstance) {
++			produceInputVariable(dataSnk.output, false, inputName);
++		}
++		registerSerializer(dataSnk.output, inputName);
++		String ifName = "I${toIdentifier(snkName)}";
++		'        try {'
++		'            @SuppressWarnings("unchecked")'
++		'            Class<? extends $ifName> cls = (Class<? extends $ifName>)Class.forName("$qualifiedClsName");'
++		String strategyStr = obtainManagementStrategyInstance(dataSnk);		
++		'			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));'
++		'			if(autoConnect) {'
++        '            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, $strategyStr);'
++		'			} else {'
++		'            	sinkHandler = cls.newInstance();'
++		'			}'
++		setDefaultParameterValue(dataSnk.parameters, "map", "sinkHandler", 12);
++		'			if (!autoConnect) {'
++		'		    	sinkHandler.connect();'
++		'			}'	
++		if (initByAdaptation) {
++		'		    sendAlgorithmChangeEvent("$impClassName", null);'	
++		}
++		'        } catch (ClassNotFoundException e) {'
++		'            e.printStackTrace();'
++		'        } catch (InstantiationException e) {'
++		'            e.printStackTrace();'
++		'        } catch (IllegalAccessException e) {'
++		'            e.printStackTrace();'
++		'        } catch (ClassCastException e) {'
++		'            e.printStackTrace();'
++		'        }'			
++        		
++        	if(lastHasSubPipeline) {
++			 	'queue = new ConcurrentLinkedQueue<IGeneralTuple>();' | 8;
++			 	'syn = new SynchronizedQueue<IGeneralTuple>(queue, QUEUE_SIZE);' | 8;
++    			'IGeneralTupleSerializerCreator serCreator = new KryoGeneralTupleSerializerCreator(map);' | 8;
++    			'ITupleReceiveCreator creator = new TupleReceiverHandlerCreator(serCreator, syn);' | 8;
++    			produceDynamicPortObtainment();
++        		'server = new TupleReceiverServer(creator, port);' | 8;
++        		'server.start();' | 8;
++        		''
++        		'Thread exeTupleThread = new Thread(new ExecuteTuple());' | 8;
++        		'exeTupleThread.start();' | 8;
++			}
++			'initMonitor();' | 8;
++			'logger.info("The end of the prepare method.");' | 8;
++		'    }'
++	    ''
++	    //override the initial monitor
++	    produceInitMonitor(true, 4);
++	    ''
++		    	/****************************/
++		    	/*     cleanup method       */  
++		    	/****************************/ 	    
++	    '    @Override'
++        '    public void cleanup() {'
++        '        super.cleanup();'
++        '		 sinkHandler.disconnect();'
++        '    }'
++        ''
++				/************************************/
++				/*   declareOutputFields method     */
++				/************************************/         
++		'    @Override'
++		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'
++		if(genMultiTupleTypes) {
++			produceStreamIdDeclaration(elt, false, 8);
++		} else {
++		'        declarer.declareStream("$streamId", new Fields("sinkData"));'
++		}
++		'    }'
++    	''
++        '@Override' | 4;
++        'public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {' | 4;
++        // don't just ignore this, relevant for figuring out when enactment is completed!
++        '    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());' | 4;
++        '    super.notifyAlgorithmChange(signal);' | 4;
++        '}'    	
++    	
++    			/********************************/
++		    	/* notifyParameterChange method */  
++		    	/********************************/    	       
++        if(dataSnk.parameters.isConfigured()) {
++			'@Override' | 4;
++			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
++			'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
++			'ParameterChange para = signal.getChange(i);' | 12;			
++			'switch (para.getName()) {' | 12;
++			sequenceOf(Parameter) parameters = dataSnk.parameters;
++			for(Parameter p : parameters) {
++				String paraName = p.name;
++				String type = parameterTypeName(p);								
++				'case "$paraName" :' | 16;
++				Integer indent = 16;
++				if(formatException(type)) {
++					indent = 20;
++					'try {' | indent;
++				}
++				'logger.info("Received the parameter $paraName!");' | indent+4;
++				'sinkHandler.setParameter${paraName.firstToUpperCase()}(para.get${type.firstToUpperCase()}Value()); ' | indent+4;
++				if(formatException(type)) {
++					'} catch (ValueFormatException e) {' | indent;
++						'e.printStackTrace();' | indent+4;
++					'}' | indent;
++				} else {
++					indent = indent+4;
++				}
++				'break;' | indent;
++				}
++			'}' | 12;
++			'}' | 8;
++			'}' |4;		
++		}
++		''
++		/********************************* */
++    	/*******Prepare shut down signal** */
++    	/********************************* */
++    	'@Override' | 4;
++    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
++        	'super.prepareShutdown(signal);' | 8;
++        	'sinkHandler.disconnect();' | 8;
++    	'}' | 4;
++    	''
++    	'}'
++    }    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSource.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSource.vtl
+new file mode 100644
+index 0000000..db586cd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSource.vtl
+@@ -0,0 +1,481 @@
++import commonVTLMethods;
++@advice(QM)
++template stormSource(Configuration config, FileArtifact target, DecisionVariable elt, String topoName, Boolean debug) {
++    Boolean loadShedding = false;
++	/*
++	 * Produces the variables of the output tuples.
++	 */	
++	def produceInOrOutputVariable(sequenceOf(Tuple) tuples, Boolean output, String srcName) {
++		String tupleName;
++		String ending;
++		if(output) {
++			ending = "Output";
++		} else{
++			ending = "Input";
++		}
++		for(Tuple t : tuples) {
++			//get the tuple name
++			tupleName = t.name;
++			//change the first letter to upper letter
++			tupleName = firstToUpperCase(tupleName);
++			String srcInfName = "I" + srcName.firstToUpperCase() + "${tupleName}${ending}";
++			'    transient ${toIdentifier(srcInfName)} dataItem${tupleName} = null;'
++		}
++	}
++	    
++    def main(Configuration config, FileArtifact target, DecisionVariable elt, String topoName, Boolean debug) {
++    	//name for the Spout class name
++        String name = elt.varName().firstToUpperCase() + elt.type();
++        //ending for the streamId
++        String nontopoStream = "Stream";
++        String topoStream = "TopoStream";
++        //casting the decisionVariable to Source
++        Source src = elt;  
++        loadShedding = src.loadShedding; 
++        DataSource dataSrc = src.source;
++        String srcName = dataSrc.name;        
++        String qualifiedClsName = dataSrc.sourceCls; //dataSrc.sourceCls().firstToUpperCase() leads to a problem!! 
++        JavaPath clsNamePath = qualifiedClsName;
++        String srcClsName = clsNamePath.getName();
++        String srcInfName;
++        String tupleName;
++ 	
++        String streamId = elt.varName() + nontopoStream;
++        String topoStreamId = elt.varName() + topoStream;
++        String ifacePackageName;
++		if (dataSrc.profilingSource) {
++			ifacePackageName = "eu.qualimaster.${toIdentifier(topoName)}.topology";
++		} else {
++			ifacePackageName = "eu.qualimaster.data";
++		}
++        'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
++    	''
++    	/****************************/
++    	/*        Imports           */  
++    	/****************************/    	
++    	'import java.util.*;'
++    	'import java.io.Serializable;'
++    	'import org.apache.log4j.Logger;'
++    	'import backtype.storm.topology.*;'
++    	'import backtype.storm.task.*;'
++    	'import backtype.storm.spout.*;'
++    	'import backtype.storm.tuple.*;'
++    	'import ${ifacePackageName}.inf.I${toIdentifier(srcName)};'
++        'import ${ifacePackageName}.inf.I${toIdentifier(srcName)}.*;'
++        'import ${ifacePackageName}.imp.${toIdentifier(srcName)};'
++		 if (!dataSrc.profilingSource) { // done through the import above
++        'import $qualifiedClsName;'
++        }
++        'import eu.qualimaster.common.signal.*;'
++        'import eu.qualimaster.events.EventManager;'
++    	'import eu.qualimaster.infrastructure.PipelineOptions;'
++        'import eu.qualimaster.pipeline.DefaultModeException;'
++    	'import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;'
++		'import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;'
++		'import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;'
++		'import eu.qualimaster.dataManagement.sources.*;'
++		'import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;'
++		'import eu.qualimaster.dataManagement.strategies.*;'
++		'import eu.qualimaster.dataManagement.DataManager;'
++    	''
++    	if(logData) {
++    		'import java.io.BufferedOutputStream;'
++			'import java.io.File;'
++			'import java.io.FileNotFoundException;'
++			'import java.io.FileOutputStream;'
++			'import java.io.PrintStream;'
++    	}
++    	/****************************/
++    	/*        Spout class        */  
++    	/****************************/    	
++    	'/**'
++    	'* Define the source Spout class(GEN).'
++    	'**/'
++    	'@SuppressWarnings({ "rawtypes", "serial" })'
++    	'public class $name extends BaseSignalSourceSpout implements IDataSourceListener {'
++    	''
++		    	/****************************/
++		    	/*     Class variables      */  
++		    	/****************************/    	
++    	'    final static Logger logger = Logger.getLogger($name.class);'
++    	'    transient SpoutOutputCollector _collector;'
++    	'    transient I${toIdentifier(srcName)} sourceData;'  
++    	if(logData) {
++    		'transient PrintStream out = System.out;'    
++			'int counter = 0;'
++			'long record;'
++    	}  	
++    	//generates the variables of the output tuples
++    	if(!genInstance) {
++    	produceInOrOutputVariable(dataSrc.input, true, srcName);
++    	}
++		    	/****************************/
++		    	/*    Class constructor     */  
++		    	/****************************/    	
++	    ''
++	    '    public $name(String name, String namespace) {'
++    	'        super(name, namespace, $genMonitoringProbes);'
++    	'    }'
++    	''
++    			/***********************************/
++		    	/* sendAlgorithmChangeEvent method */  
++		    	/***********************************/
++    	''
++		'    /**'
++		'     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct' 
++		'     * testing.'
++		'     * @param algorithm the new algorithm'
++		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
++		'     */'
++		'    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {'
++		'        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));'
++		'    }'  
++		''  
++    			/***********************************/
++		    	/* sendParameterChangeEvent method */  
++		    	/***********************************/
++    	''
++		'    /**'
++		'     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct' 
++		'     * testing.'
++		'     * @param parameter the parameter to be changed'
++		'     * @param value the new value'
++		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
++		'     */'
++		'    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {'
++		'        EventManager.send(new ParameterChangedMonitoringEvent("$topoName", "${elt.varName()}", parameter, value, causeMsgId));'
++		'    }' 
++        ''
++        '    /**'
++        '     * Sends an event for registering the historical data provider of a data source.'
++        '     * @param source the data source'
++        '     */'
++        '    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {'
++        '        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));'
++        '    }' 
++		''
++		'    protected void configure(SourceMonitor monitor) {'
++		Integer freq = dataSrc.aggregationFrequency;
++		'        monitor.setAggregationInterval($freq);'
++		for(Tuple t : dataSrc.input){
++		    tupleName = t.name;
++            tupleName = firstToUpperCase(tupleName);
++		    srcInfName = toIdentifier("I" + srcName.firstToUpperCase() + "${tupleName}Output");
++        '        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<$srcInfName>($srcInfName.class) {'
++        '            @Override'
++        '            public String getAggregationKey($srcInfName tuple) {'
++        '                return sourceData.getAggregationKey(tuple);'
++        '            }'
++        '        });'		    
++		}
++        '    }'		
++		''	
++		    	/****************************/
++		    	/*     open method          */  
++		    	/****************************/    	
++    	'    @Override'
++        '    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {'
++        '		 super.open(conf, context, collector);'
++        '        _collector = collector;'
++        if(logData) {
++        	'try {'
++		            'File file = new File("/var/nfs/spass");'
++		            'if (!file.exists()) {'
++		                'String userhome = System.getProperty("user.home");'
++		                'file = new File(userhome);'
++		            '}'
++		            'FileOutputStream fos = new FileOutputStream(new File(file, "source.csv"));'
++		            'BufferedOutputStream bos = new BufferedOutputStream(fos);'
++		            'out = new PrintStream(bos);'
++		        '} catch (FileNotFoundException e) {'
++		            'logger.error(e.getMessage(), e);'
++		        '}'
++			'counter = 0;'
++			'record = System.currentTimeMillis();'
++        }
++        String strategyStr = obtainManagementStrategyInstance(dataSrc); 
++        String ifName = 'I${toIdentifier(srcName)}';
++        '        try {'
++        if(safeCast) {
++        '            @SuppressWarnings("unchecked")'
++        '            Class<? extends $ifName> cls = (Class<? extends $ifName>) Class.forName("$qualifiedClsName");'
++        } else {
++        '            Class cls = Class.forName("$qualifiedClsName");'
++        }
++		'			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));'
++		'			if(autoConnect) {'
++        '            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, $strategyStr);'
++        if (dataSrc.profilingSource) {
++        '               sourceData.forceAutoconnect();'
++        }
++        '			} else {'
++	    	if(safeCast) {
++		'            	sourceData = cls.newInstance();'
++			} else {
++		'            	sourceData = (I${toIdentifier(srcName)}) cls.newInstance();'
++			}
++		'			}'
++		'			sendHistoricalDataProviderRegistrationEvent(sourceData);'
++		if (initByAdaptation) {
++		'		    sendAlgorithmChangeEvent("$srcClsName", null);'	
++		}
++		setDefaultParameterValue(dataSrc.parameters, "conf", "sourceData", 12);
++        '			if(!autoConnect) {'
++		'		    	sourceData.connect();'
++		'			}'
++		'        } catch (ClassNotFoundException e) {'
++		'            e.printStackTrace();'
++		'        } catch (InstantiationException e) {'
++		'            e.printStackTrace();'
++		'        } catch (IllegalAccessException e) {'
++		'            e.printStackTrace();'
++		if(safeCast) {
++		'        } catch (ClassCastException e) {'
++		'            e.printStackTrace();'
++		}
++		'        }'
++		if(separateSourceThread) {
++			'Thread emitThread = new Thread(new EmitTuple());'
++			'emitThread.start();'
++		}
++		'initMonitor();' | 8;
++		'logger.info("The end of the open method.");' | 8;
++        '    }'
++        ''
++        if(separateSourceThread) {
++        '/**' | 4;
++		' * A thread emits tuples.' | 4;
++		' */' | 4;
++		'public class EmitTuple implements Runnable {' | 4;
++			'private Boolean cont = true;' | 8;
++			'public EmitTuple() {'
++				'cont = true;'
++			'}'
++			'@Override' | 8;
++    		'public void run() {' | 8;
++				'while(cont) {' | 12;
++        if (genMonitoringProbes) {
++            '        startMonitoring();'
++        }
++//        '        boolean emitted = false;'
++        for(Tuple t : dataSrc.input){
++			//get the tuple name
++			tupleName = t.name;
++			//change the first letter to upper letter
++			tupleName = firstToUpperCase(tupleName);
++			String srcImpName = toIdentifier(srcName.firstToUpperCase()) + "${tupleName}Output";
++        	srcInfName = "I" + srcName.firstToUpperCase() + "${tupleName}Output";
++        '        // Emitting stream "${streamId}${tupleName}".'
++        if(genInstance) {
++        '        ${toIdentifier(srcInfName)} dataItem${tupleName} = new ${toIdentifier(srcName.firstToUpperCase())}.$srcImpName();'
++        } else {
++        	'        dataItem${tupleName} = new ${toIdentifier(srcName.firstToUpperCase())}.$srcImpName();'
++        }
++        '        try {'
++	    '            dataItem${tupleName} = sourceData.get${tupleName}();'
++	    '        } catch(DefaultModeException e) {'	
++	        for(Field f : t.fields) {
++	        	String fieldName = toIdentifier("${f.name}"); 
++				String upFieldName = firstToUpperCase(fieldName);
++				FieldType fdType = f.type;				
++				'dataItem${tupleName}.set${upFieldName}(${obtainDefaultValue(fdType)});' | 12;	
++	        }
++	        'sendDefaultModeMonitoringEvent(e);' | 12;
++	    '        }'
++	    String shedCode = "";
++	    if (loadShedding) {
++	        shedCode = " && isEnabled(dataItem${tupleName})";
++	    }
++	    '        if(dataItem${tupleName}!=null${shedCode}){'	
++	    if(logData) {
++	    	'long now = System.currentTimeMillis();'
++		    'if ((now - record) > 1000) {'
++			'record = now;'
++			'out.println(now + ":" + counter);'
++			'out.flush();'
++			'counter = 0;'
++		    '} else {'
++			'counter++;'
++		    '}'
++	    }
++	        if(debug){   		  
++		'            logger.info("Get data tuple for data source Spout:" + dataItem${tupleName});'
++		    }
++		    if(genMultiTupleTypes) {
++		    	streamId = formulateString(elt.varName());
++		    }		
++		'            _collector.emit("${streamId}${tupleName}", new Values(dataItem${tupleName}));' /*,dataItem${tupleName} */
++	    '        }'
++	    ''
++        }
++        if (genMonitoringProbes) { // doNextTuple/nextTuple contains endMonitoring
++		  '        endMonitoring();'
++        }
++        '        '					
++				'}' | 12;
++			'}' | 8;
++			''
++			'public void stop() {'
++			'cont = false;'
++			'}'
++		'}' | 4;
++		}
++        //override the initial monitor
++	    produceInitMonitor(false, 4);
++	    ''
++    			/*****************************************/
++		    	/* sendDefaultModeMonitoringEvent method */  
++		    	/*****************************************/
++		'    /**'
++		'     * Sends an a default mode monitoring event with a DefaultModeException case.' 
++		'     * @param exceptionCase the DefaultModeException case'
++		'     */'
++		'    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {'
++		'        EventManager.send(new DefaultModeMonitoringEvent("$topoName", "${elt.varName()}", exceptionCase));'
++		'    }'        
++		    	/****************************/
++		    	/*     nextTuple method     */  
++		    	/****************************/        
++        '    @Override'
++        '    public void nextTuple() {'
++if(!separateSourceThread) {
++        if (genMonitoringProbes) {
++            '        startMonitoring();'
++        }
++//        '        boolean emitted = false;'
++        for(Tuple t : dataSrc.input){
++			//get the tuple name
++			tupleName = t.name;
++			//change the first letter to upper letter
++			tupleName = firstToUpperCase(tupleName);
++			String srcImpName = toIdentifier(srcName.firstToUpperCase()) + "${tupleName}Output";
++        	srcInfName = "I" + srcName.firstToUpperCase() + "${tupleName}Output";
++        '        // Emitting stream "${streamId}${tupleName}".'
++        if(genInstance) {
++        '        ${toIdentifier(srcInfName)} dataItem${tupleName} = new ${toIdentifier(srcName.firstToUpperCase())}.$srcImpName();'
++        } else {
++        	'        dataItem${tupleName} = new ${toIdentifier(srcName.firstToUpperCase())}.$srcImpName();'
++        }
++        '        try {'
++	    '            dataItem${tupleName} = sourceData.get${tupleName}();'
++	    '        } catch(DefaultModeException e) {'	
++	        for(Field f : t.fields) {
++	        	String fieldName = toIdentifier("${f.name}"); 
++				String upFieldName = firstToUpperCase(fieldName);
++				FieldType fdType = f.type;				
++				'dataItem${tupleName}.set${upFieldName}(${obtainDefaultValue(fdType)});' | 12;	
++	        }
++	        'sendDefaultModeMonitoringEvent(e);' | 12;
++	    '        }'
++	    String shedCode = "";
++	    if (loadShedding) {
++	        shedCode = " && isEnabled(dataItem${tupleName})";
++	    }
++	    '        if(dataItem${tupleName}!=null${shedCode}){'	
++	        if(debug){   		  
++		'            logger.info("Get data tuple for data source Spout:" + dataItem${tupleName});'
++		    }
++		    if(genMultiTupleTypes) {
++		    	streamId = formulateString(elt.varName());
++		    }		
++		'            _collector.emit("${streamId}${tupleName}", new Values(dataItem${tupleName}));' /*,dataItem${tupleName} */
++	    '        }'
++	    ''
++        }
++        if (genMonitoringProbes) { // doNextTuple/nextTuple contains endMonitoring
++		  '        endMonitoring();'
++        }
++        '        '
++        }
++        '    }'
++        ''
++        
++        '@Override' | 4;
++        'public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {' | 4;
++        // don't just ignore this, relevant for figuring out when enactment is completed!
++        '    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());' | 4;
++        '    super.notifyAlgorithmChange(signal);' | 4;
++        '}'
++        
++    			/********************************/
++		    	/* notifyParameterChange method */  
++		    	/********************************/               
++        if(dataSrc.parameters.isConfigured()) {
++			'@Override' | 4;
++			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
++			'logger.info("Received the parameter change signal!");' | 4;
++			'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
++			'logger.info("For-loop: Checking each parameter!");' | 8;
++			'ParameterChange para = signal.getChange(i);' | 12;			
++			'switch (para.getName()) {' | 12;			
++			sequenceOf(Parameter) parameters = dataSrc.parameters;
++			for(Parameter p : parameters) {
++				String paraName = p.name;
++				String type = parameterTypeName(p);				
++				'case "$paraName" :' | 16;
++				Integer indent = 16;
++				if(formatException(type)) {
++					indent = 20;
++					'try {' | indent;
++				}
++				'logger.info("Received the parameter $paraName!");' | indent+4;
++				'sourceData.setParameter${paraName.firstToUpperCase()}(para.get${type.firstToUpperCase()}Value()); ' | indent + 4;
++				'sendParameterChangeEvent("$paraName", para.get${type.firstToUpperCase()}Value(), signal.getCauseMessageId());' | indent+4;
++				if(formatException(type)) {
++					'} catch (ValueFormatException e) {' | indent;
++						'e.printStackTrace();' | indent+4;
++					'}' | indent;
++				} else {
++					indent = indent+4;
++				}
++				'break;' | indent;
++				}
++			'}' | 12;
++			'}' | 8;
++			'}' |4;	
++		}        
++        ''
++        '    @Override'
++        '    public void notifyIdsNamesMapChanged() {'
++        '        sendHistoricalDataProviderRegistrationEvent(sourceData);'
++        '    }'
++        ''
++				/****************************/
++				/*       close method       */
++				/****************************/             
++        '    @Override'
++        '    public void close() {'
++        '        super.close();'
++        '		 sourceData.disconnect();'
++        '    }'
++        ''
++				/************************************/
++				/*   declareOutputFields method     */
++				/************************************/        
++        '	@Override'
++		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'
++		if(genMultiTupleTypes) {//use the tuple type to conduct the stream id, the stream id is in the form of "EltVarName+TupleName+AlgName"
++			produceStreamIdDeclaration(elt, false, 8);
++		} else {
++			for(Tuple t : dataSrc.input){
++			//get the tuple name
++			tupleName = t.name;
++			//change the first letter to upper letter
++			tupleName = firstToUpperCase(tupleName);
++			'        declarer.declareStream("${streamId}${tupleName}", new Fields("datastream${tupleName}"));'        	     				
++			}
++		}
++		'    }'
++		''
++		/********************************* */
++    	/*******Prepare shut down signal** */
++    	/********************************* */
++    	'@Override' | 4;
++    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
++        	'super.prepareShutdown(signal);' | 8;
++        	'sourceData.disconnect();' | 8;
++    	'}' | 4;
++    	''
++    	'}'
++    }    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSubPipeline.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSubPipeline.vtl
+new file mode 100644
+index 0000000..56b8ab7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSubPipeline.vtl
+@@ -0,0 +1,237 @@
++import commonVTLMethods;
++@advice(QM)
++template stormSubPipeline(Configuration config, FileArtifact target, SubPipeline pipeline, Family family, String algName) {
++	setOf(String) bolts = {}; //collect the generated bolt name
++	setOf(String) flows = {}; //collect the passed flow name(varname)
++	setOf(String) produced = {}; //collect the produced element(for only generating the spout/Bolt definition once) 
++	mapOf(String, Integer) nodeToRepeatNumMap = {};
++	mapOf(String, String) parameterToNode = {};
++	String pipName = pipeline.name;
++	String fName = family.name;
++	String lastFamilyElementTmp;
++	String lastFamilyElement;
++	Integer maxParallelism = 0;
++	
++	def processElement(Source elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, Boolean newFlow, Boolean connector) {
++    	String nameVar = elt.varName(); 
++    	String name = elt.name; 
++    	DataSource dataSrc = elt.source;    	
++ 		
++        if(newFlow){
++    	    produceStatement(elt, grouping, tupleType, preElt, false, connector);
++    	}
++    	
++		Boolean nFlow;	   	
++		for (Flow flow : elt.output) {
++			String flowName = flow.varName();
++			if(isStringExisted(flowName, flows)){
++				nFlow = false;
++			} else {
++				nFlow = true;
++				flows.add(flowName);
++			}					
++			processElement(flow.destination, flow.grouping, flow.tupleType, elt, nFlow, false);
++		}
++    }
++    
++    def processElement(Sink elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, Boolean newFlow, Boolean connector) {
++        if(newFlow){
++    	    produceStatement(elt, grouping, tupleType, preElt, true, connector);
++    	}    		
++    }
++    
++    def collectParameters(sequenceOf(Parameter) parameters, String name) {
++    	for(Parameter p : parameters) {
++    		parameterToNode.add(p.name, name);
++    	}
++    }
++    
++    def processElement(FamilyElement elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, Boolean newFlow, Boolean connector) {
++    	String nameVar = elt.varName(); 
++    	String name = elt.name; 
++
++        lastFamilyElementTmp = name;
++ 		
++        if(newFlow){
++    	    produceStatement(elt, grouping, tupleType, preElt, true, connector);
++    	}
++    	
++		Boolean nFlow;	   	
++		for (Flow flow : elt.output) {
++			String flowName = flow.varName();
++			if(isStringExisted(flowName, flows)){
++				nFlow = false;
++			} else {
++				nFlow = true;
++				flows.add(flowName);
++			}					
++			processElement(flow.destination, flow.grouping, flow.tupleType, elt, nFlow, false);
++		}
++    }
++    
++    def produceStatement(DecisionVariable elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, Boolean bolt, Boolean connector) {
++    	//name of the pre-element
++    	String eltNameVar = preElt.name;
++    	//name for Spout/Bolt
++    	String name = elt.varName();
++    	//Spout/Bolt class name
++    	String clsName = className(elt); 
++    	//get the parallelism
++    	Integer parallelism = elt.byName("parallelism"); 
++    	//obtain the maximum parallelism
++    	if(parallelism > maxParallelism) {
++ 			maxParallelism = parallelism;
++ 		}
++    	//obtain the meaningful display name of the element 
++    	String eltType = elt.type();
++    	String displayName;
++    	setOf(Flow) flows;
++    	Parameters parameters;
++    	if(eltType == "Source") {
++    		//cast the elt to Source
++    		Source source = elt;
++    		//get the display name
++    		displayName = source.name;
++    		//get the flows
++    		flows = source.output;
++    		parameters = source.source.parameters;
++    	} else if (eltType == "FamilyElement") {
++    		//cast the elt to FamilyElement
++    		FamilyElement familyElt = elt;
++    		//get the display name
++    		displayName = familyElt.name;
++    		//get the flows
++    		flows = familyElt.output;
++    		parameters = familyElt.family.parameters;
++    	} else if (eltType == "Sink") {
++    		//cast the elt to Source
++    		Sink sink = elt;
++    		//get the display name
++    		displayName = sink.name;
++    		//get the parameters
++    		parameters = sink.sink.parameters;
++    	}			   	
++    	
++        if (bolt) {    	    
++    	    if(isStringExisted(name, bolts)){ //no node to be produced but the grouping statement 
++    	    	grouping(name, grouping, tupleType, eltNameVar);
++ 	    	} else {
++ 	    	  collectParameters(parameters, displayName);
++ 	    	  '// Declare a Bolt "$displayName"' | 8;
++ 	          'BoltDeclarer $name =builder.setBolt(prefix+"${firstToUpperCase(displayName)}", new $clsName(prefix+"${firstToUpperCase(displayName)}", namespace), $parallelism)${produceNumTasks(elt)};' | 8;  
++    	      if(connector) {
++ 	    		'$name.$grouping(input, streamId);' | 8;
++ 	    	  } else {	    	
++		    	'//$name subscribing streams:' | 8;
++		    	//special grouping statement for the nodes which are not as connectors 
++		    	grouping(name, grouping, tupleType, eltNameVar);  	    	    	    	    	
++			  }
++    	      bolts.add(name); 
++ 	    	} 	    	
++        } else {
++        	'// Declare a Spout "$displayName"' | 8;
++		    'builder.setSpout(prefix+"${firstToUpperCase(displayName)}", new $clsName("${firstToUpperCase(displayName)}", namespace), $parallelism)${produceNumTasks(elt)};' | 8;
++        }
++    }
++
++    def grouping(String eltName, Grouping grouping, Tuple tupleType, String preEltName) { 
++    	String tName = tupleType.name.firstToUpperCase();
++    	String streamId = preEltName.firstToUpperCase() + tName;    	
++		'$eltName.$grouping(prefix+"${firstToUpperCase(preEltName)}", "$streamId");' | 8;		  	 	   	
++    }
++       
++	def createSubPipeline(SubPipeline pipeline) {
++		Tuple t;
++		//considering [Source, FamilyElement]
++		//start from the connectors
++		for (DecisionVariable r : pipeline.connectors) {
++    		processElement(r, Grouping.shuffleGrouping, t, r, true, true);
++    	}
++    	lastFamilyElement = lastFamilyElementTmp;//save the recorded last family element.
++ 		//check from the sources
++		for (DecisionVariable r : pipeline.sources) {
++    		processElement(r, Grouping.shuffleGrouping, t, r, true, false);
++    	}
++
++	}
++	def main(Configuration config, FileArtifact target, SubPipeline pipeline, Family family, String algName) {		
++		Integer numWorkers = pipeline.numworkers;
++		String pipName = pipeline.name;
++		algName = algName.toIdentifier();
++		fName = fName.firstToUpperCase();
++		'package eu.qualimaster.$algName.topology;'
++		''
++		'import org.apache.log4j.Logger;'
++		'import backtype.storm.Config;'
++		'import backtype.storm.topology.TopologyBuilder;'
++		'import eu.qualimaster.base.algorithm.ITopologyCreate;'
++		'import eu.qualimaster.base.algorithm.SubTopologyOutput;'
++		'import backtype.storm.topology.BoltDeclarer;'
++		'import eu.qualimaster.common.signal.ParameterChangeSignal;'
++		'import eu.qualimaster.common.signal.SignalException;'
++		'import eu.qualimaster.observables.IObservable;'
++		'import eu.qualimaster.families.inf.I$fName;'
++		''
++		'public class ${firstToUpperCase(toIdentifier(pipName))}SubTopology implements I$fName, ITopologyCreate {'
++		'    final static Logger logger = Logger.getLogger(${firstToUpperCase(toIdentifier(pipName))}SubTopology.class);'
++			for (Parameter p : family.parameters) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++    			'private ${parameterTypeName(p)} $paramName;' | 4;
++	    	}
++	    	'private transient State state;' | 4;
++	    	''
++			'public void switchState(State arg0) {' | 4;
++				'this.state = arg0;	' | 8;	
++			'}' | 4;
++			''
++			'public Double getMeasurement(IObservable observable) {' | 4;
++				'return null;' | 8;
++			'}' | 4;
++			''
++			'public SubTopologyOutput createSubTopology(TopologyBuilder builder,
++			Config config, String prefix, String input, String streamId) {' | 4;
++				'String namespace = "$pipName";' | 8;
++				'if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {' | 8;
++					'namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);' | 12;
++				'}' | 8;
++			createSubPipeline(pipeline);
++			Tuple t = family.output[0];//TODO:consider multiple outputs of the family
++			String tupleName = t.name;
++			'return new SubTopologyOutput(prefix+"${firstToUpperCase(lastFamilyElement)}", "${firstToUpperCase(lastFamilyElement)}${firstToUpperCase(tupleName)}", $numWorkers, $maxParallelism); //TODO: consider PipelineOptions to change the parallelisms' | 8;//This is based on the assumption that we only have on algorithm for the family in the subpipeline.
++			'}' | 4;
++			''
++			//produce the calculate statement based on the input-output pairs
++			produceForCalculate(family, false);
++			''
++			if (family.byName("parameters").variables().size()>0) {
++	        ''
++	        for (Parameter p : family.parameters) {
++	        	String paramName = p.name;
++    			String mname = firstToUpperCase(toIdentifier(paramName));
++    			String nodeName = parameterToNode.get(paramName);
++	        	'    /**'
++	        	'     * Sets the algorithm parameter "${paramName}". Note that the actual parameter change will be dynamically'
++	        	'     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the'
++	        	'     * sub-topology.'
++	        	'     *'
++	        	'     * @param value the new value of the algorithm parameter'
++	        	'     */'
++	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
++	        	'        this.$paramName = $paramName;'
++	        	'        try {'
++                '            logger.info("sending new ${mname} signal " + value + "!");'
++                '            ParameterChangeSignal signal = new ParameterChangeSignal("${pipeline.name}", '
++                '                    "${firstToUpperCase(algName)}${firstToUpperCase(nodeName)}", "$paramName", value, null);'
++      		    '            signal.sendSignal();'
++    			'        } catch (Exception e) {'
++      			'            logger.error("Signal not sent!");'
++     			'            e.printStackTrace();'
++    			'        }'
++	        	'    }'
++	        	''      	
++	    	}
++    	}
++'}'
++	}
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/tupleSerialization.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/tupleSerialization.vtl
+new file mode 100644
+index 0000000..d92a935
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/tupleSerialization.vtl
+@@ -0,0 +1,249 @@
++import commonVTLMethods;
++@advice(QM)
++template tupleSerialization(Configuration config, FileArtifact target, DecisionVariable elt, String pkg) {
++	def String kryoName(DecisionVariable f) {
++		// arrays would go to "Ints" etc., further Java basic types 
++		// are currently not defined in Basics and go as wrappers, boxing/unboxing 
++    	switch(fieldTypeName(f)) {
++    		"int" : "Int",
++    		"long" : "Long",
++    		"String" : "String",
++    		"boolean" : "Boolean",
++    		"float" : "Float",
++    		"double" : "Double",
++    		default : ""
++    	}
++    }
++	
++    def produceForTuples(Tuples tuples, Boolean output, Boolean family, String fName, Integer indent) {
++	    String type;
++	    String nestType;
++	    String infType;
++	    String infNestType;
++	    String serializerType;
++	    String typeName;
++    	String tupleName;
++    	String ifName;
++    	if(family) {
++    		ifName = "I" + fName;
++    	} else  {
++    		ifName = fName;
++    	}
++    	for (Tuple t : tuples) {
++    		Boolean flag1 = true;
++    		Boolean flag2 = false;
++    		tupleName = t.name;
++    		tupleName = firstToUpperCase(tupleName);
++	        if (output) {
++    		    nestType = "${ifName}${tupleName}Output";
++    		    infNestType = "I${ifName}${tupleName}Output";
++    		    typeName = "output";
++    	    } else {
++    		    nestType = "${ifName}${tupleName}Input";
++    		    infNestType = "I${ifName}${tupleName}Input";
++    		    typeName = "input";   		
++    	    }
++    	    serializerType = nestType + "Serializer";
++    	    type = "${fName}.${nestType}"; // qualify inner classes
++    	    infType = "${ifName}.${infNestType}";	//qualify inner interfaces	  	    	   		   
++		    '/**' | indent;
++            '* Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data ${typeName} for the {@link ${infType}} algorithm.' | indent + 1;
++		    '*/' | indent + 1;
++    	    'public static class $serializerType extends Serializer<${type}> implements ISerializer<${infType}> {' | indent;
++    	    ''
++    	    '@Override' | indent + 4;
++    	    'public void serializeTo($infType object, OutputStream out) throws IOException {' | indent + 4;    			
++	    		for (Field f : t.fields) {	
++	    			if(isBasicType(f.type)) {
++						if(flag1){
++			    			'S$nestType tmp = S$nestType.newBuilder()' | indent + 8; 
++			    			flag1 = false; //generate once
++			    			flag2 = true;
++		    			}   			
++		    			String fname = toIdentifier("${f.name}");
++		    			String mname = firstToUpperCase(fname);		    			
++		    			'.set${mname}(object.get${mname}())' | indent + 12; 	    			
++	    			}  			   			
++	    		}
++	    		if(flag2) {
++	    			'.build();' | indent + 12;
++	    			'tmp.writeDelimitedTo(out);' | indent + 8;  
++	    			flag2 = false; //generate once
++    			}
++    			for (Field f : t.fields) {
++    				String fname = toIdentifier("${f.name}");
++    				String mname = firstToUpperCase(fname);     				  				
++    				if(!isBasicType(f.type)) {   					
++    					if(!isListType(f.type)){
++	    					'SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).serializeTo(object.get${mname}(), out);' | indent + 8;    					
++    					} else {
++    						String innertype = obtainInnerType(f.type.class);
++    						'SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).serializeTo(object.get${mname}(), out);' | indent + 8;
++    					}
++    				}
++    			} 	    
++    	    '}' | indent + 4;
++    	    ''
++
++            produceDataInputSerialization(t, infType, indent + 4);
++    	    /*'@Override' | indent + 4;
++    	    'public void serializeTo($infType object, IDataOutput out) throws IOException {' | indent + 4;
++	    		for (Field f : t.fields) {	
++		    		String fname = toIdentifier("${f.name}");
++		    		String mname = firstToUpperCase(fname);		    			
++	    			if(isBasicType(f.type)) {
++	    				String tname = firstToUpperCase(fieldTypeName(f));
++		    			'out.write${tname}(object.get${mname}());' | indent + 8;
++	    			} else {
++    					if(!isListType(f.type)){
++	    					'SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).serializeTo(object.get${mname}(), out);' | indent + 8;
++    					} else {
++    						String innertype = obtainInnerType(f.type.class);
++    						'SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).serializeTo(object.get${mname}(), out);' | indent + 8;
++    					}
++	    			}
++	    		}
++    	    '}' | indent + 4;
++    	    ''*/
++    	    
++    	    '@Override' | indent + 4;
++    	    'public $infType deserializeFrom(InputStream in) throws IOException {' | indent + 4;
++    			'$type result = new $type();' | indent + 8;
++    			flag1 = true;			
++	    		for (Field f : t.fields) {
++	    			String fname = toIdentifier("${f.name}");
++	    			String mname = firstToUpperCase(fname);
++	    			if(isBasicType(f.type)) {
++	    				if(flag1) {
++	    					'S$nestType tmp = S$nestType.parseDelimitedFrom(in);' | indent + 8; 
++	    					flag1 = false; //only generate once
++	    				} 
++	    				'result.set${mname}(tmp.get${mname}());'	| indent + 8;    			
++	    			} else {	    				
++    					if(!isListType(f.type)){
++	    					'result.set${mname}(SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).deserializeFrom(in));' | indent + 8;
++    					} else {
++    						String innertype = obtainInnerType(f.type.class);
++    						'result.set${mname}(SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).deserializeFrom(in));' | indent + 8;
++    					}
++	    				
++	    			}	    			
++	    		} 
++    		'return result;' | indent + 8;  	    
++    	    '}' | indent + 4;
++    	    ''
++
++            produceDataInputDeserialization(t, infType, type, indent + 4);
++    	    /*'@Override' | indent + 4;
++    	    'public $infType deserializeFrom(IDataInput in) throws IOException {' | indent + 4;
++    			'$type result = new $type();' | indent + 8;
++	    		for (Field f : t.fields) {
++		    		String fname = toIdentifier("${f.name}");
++		    		String mname = firstToUpperCase(fname);		    			
++	    			if(isBasicType(f.type)) {
++	    				String tname = firstToUpperCase(fieldTypeName(f));
++		    			'result.set${mname}(in.next${tname}());' | indent + 8; 	    			
++	    			} else {
++     					if(!isListType(f.type)){
++	    					'result.set${mname}(SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).deserializeFrom(in));' | indent + 8;
++    					} else {
++    						String innertype = obtainInnerType(f.type.class);
++    						'result.set${mname}(SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).deserializeFrom(in));' | indent + 8;
++    					}
++	    			}
++	    		}
++    		'return result;' | indent + 8;  	    
++    	    '}' | indent + 4;
++    	    ''*/
++    	    
++    	    '@Override' | indent + 4;
++    	    'public void write(Kryo kryo, Output output, $type object) {' | indent + 4;
++    		for (Field f : t.fields) {
++    			String fname = toIdentifier("${f.name}");
++    			String mname = firstToUpperCase(fname);
++    			String kname = kryoName(f);
++    			if (kname == "") {
++    				'kryo.writeObject(output, object.get${mname}());' | indent + 8;
++    			} else {
++    			    'output.write${kname}(object.get${mname}());' | indent + 8;
++    			}
++    		}
++    	    
++    	    '}' | indent + 4;
++    	    ''
++    	    '@Override' | indent + 4;
++    	    'public $type read(Kryo kryo, Input input, Class<$type> type) {' | indent + 4;
++    	    '$type result = new $type();' | indent + 8;
++    		for (Field f : t.fields) {
++    			String fname = toIdentifier("${f.name}");
++    			String mname = firstToUpperCase(fname);
++    			String kname = kryoName(f);
++    			String tname = stripTemplates(fieldTypeName(f));
++    			if (kname == "") {
++    				'result.set${mname}(kryo.readObject(input, ${tname}.class));' | indent + 8;
++    			} else {
++    			    'result.set${mname}(input.read${kname}());' | indent + 8;
++    			}
++    		}
++    	    'return result;' | indent + 8;
++    	    '}' | indent + 4;
++    	   
++    	'}' | indent;
++    	''	   		   	       	
++      }
++    }
++	def produceFor(DecisionVariable elt) {
++		'//unhandled type ${elt.type()}'
++	}
++	def produceFor(Family elt) {
++		produceForTuples(elt.input, false, true, formulateString(elt.name), 0);
++		produceForTuples(elt.output, true, true, formulateString(elt.name), 0);
++	}
++	
++	def produceFor(DataSource elt) {
++		produceForTuples(elt.input, true, false, formulateString(elt.name), 0);
++	}
++	def produceFor(DataSink elt) {
++		produceForTuples(elt.output, false, false, formulateString(elt.name), 0);
++	}
++	
++    def main(Configuration config, FileArtifact target, DecisionVariable elt, String pkg) {
++    	
++    	'package $pkg.imp;'
++    	''
++    	'import java.io.IOException;'
++    	'import java.io.InputStream;'
++		'import java.io.OutputStream;'
++    	'import javax.annotation.Generated;'
++    	'import com.esotericsoftware.kryo.io.Output;'
++    	'import com.esotericsoftware.kryo.io.Input;'
++    	'import com.esotericsoftware.kryo.Serializer;'
++    	'import com.esotericsoftware.kryo.Kryo;'
++    	'import eu.qualimaster.dataManagement.serialization.ISerializer;'
++    	'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
++    	'import eu.qualimaster.dataManagement.serialization.IDataInput;'
++    	'import eu.qualimaster.dataManagement.serialization.IDataOutput;'
++    	'import $pkg.imp.${formulateString(eltName(elt))};'
++    	'import $pkg.inf.*;'
++    	''
++    	'import eu.qualimaster.protos.${formulateString(eltName(elt))}Protos.*;'
++   		String comment;
++   		if(elt.type() == "Family") {
++   			comment = "the algorithm family \"I${formulateString(eltName(elt))}\"";
++   		} else {
++   			comment = "the data element \"${formulateString(eltName(elt))}\"";
++   		}
++    	'/**'
++    	' * The implementation of the serializers for $comment (GEN).'
++    	' */'
++    	'@Generated(value="EASy-Producer")'
++    	'public class ${formulateString(eltName(elt))}Serializers {'
++    	''
++    	produceFor(elt);
++//    	produceForTuples(family.input, false, true, fName, 4);
++//    	produceForTuples(family.output, true, true, fName, 4);
++    		
++        '}'
++    }
++    
++}
+\ No newline at end of file
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/GenTopoHardwareCorrelationFinancialSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/GenTopoHardwareCorrelationFinancialSubTopology.java
+new file mode 100644
+index 0000000..9bf7b74
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/GenTopoHardwareCorrelationFinancialSubTopology.java
+@@ -0,0 +1,68 @@
++package eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial;
++
++import eu.qualimaster.base.algorithm.ITopologyCreate;
++import eu.qualimaster.base.algorithm.SubTopologyOutput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial;
++import eu.qualimaster.observables.IObservable;
++import backtype.storm.topology.TopologyBuilder;
++import backtype.storm.Config;
++import eu.qualimaster.infrastructure.PipelineOptions;
++
++public class GenTopoHardwareCorrelationFinancialSubTopology implements ITopologyCreate, IFCorrelationFinancial {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(GenTopoHardwareCorrelationFinancialSubTopology.class);
++    private String pipelineName = "TimeTravelSimPip";
++
++    public SubTopologyOutput createSubTopology(TopologyBuilder topologyBuilder,
++                Config config, String prefix, String input, String streamId) {
++        String keyPrefix = prefix + ".GenTopoHardwareCorrelationFinancial.";
++        String senderKey = keyPrefix + "sender";
++        String receiverKey = keyPrefix + "receiver";
++        int senderParallelism = PipelineOptions.getExecutorParallelism(config, senderKey, 1);
++        int senderTasks = PipelineOptions.getTaskParallelism(config, senderKey, 1);
++        int receiverParallelism = PipelineOptions.getExecutorParallelism(config, receiverKey, 12);
++        int receiverTasks = PipelineOptions.getTaskParallelism(config, receiverKey, 12);
++        int totalParallelism = Math.max(senderParallelism, receiverParallelism);
++        topologyBuilder.setSpout(prefix + "HardwareConnectionSpout", new HardwareConnectionSpout(prefix + "HardwareConnectionSpout",
++                                pipelineName, streamId), receiverParallelism).setNumTasks(receiverTasks);
++        topologyBuilder.setBolt(prefix + "HardwareConnectionBolt", new HardwareConnectionBolt(prefix + "HardwareConnectionBolt",
++                                pipelineName), senderParallelism).setNumTasks(senderTasks).shuffleGrouping(input, streamId);
++        return new SubTopologyOutput(prefix + "HardwareConnectionSpout", streamId, 1, totalParallelism);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    @Override
++    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    @Override
++    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    public Double getMeasurement(IObservable observable) {
++        return null; 
++    }
++
++    @Override
++    public void switchState(State state) {
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionBolt.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionBolt.java
+new file mode 100644
+index 0000000..9bd0d82
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionBolt.java
+@@ -0,0 +1,257 @@
++package eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial;
++
++import java.io.IOException;
++import java.io.ByteArrayOutputStream;
++import java.util.Map;
++import backtype.storm.task.OutputCollector;
++import backtype.storm.task.TopologyContext;
++import backtype.storm.topology.OutputFieldsDeclarer;
++import backtype.storm.tuple.Tuple;
++import eu.qualimaster.common.signal.AbstractMonitor;
++import eu.qualimaster.common.signal.BaseSignalBolt;
++import eu.qualimaster.base.algorithm.HardwareTransmitter;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.base.serializer.Parameters.*;
++import eu.qualimaster.common.signal.ShutdownSignal;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.ParameterChange;
++import eu.qualimaster.common.signal.ValueFormatException;
++import eu.qualimaster.observables.ResourceUsage;
++import java.util.Queue;
++import java.util.concurrent.ConcurrentLinkedQueue;
++import eu.qualimaster.common.switching.SynchronizedQueue;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.FCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialSymbolListInput;
++
++public class HardwareConnectionBolt extends BaseSignalBolt {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionBolt.class);
++    private transient OutputCollector collector;
++    private String ip;
++    private int port = 0;
++    private boolean ready = false;
++    private transient Queue<Tuple> queueTuple = new ConcurrentLinkedQueue<Tuple>();
++    private transient HardwareTransmitter hardwareConnection;
++    private transient ByteArrayOutputStream output = null;
++    private transient ByteArrayOutputStream paraOutput = null;
++    private String separator;
++    private transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    private transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++    private int size;
++    private transient DataAcker dataAcker;
++    private transient Queue<Tuple> queue = new ConcurrentLinkedQueue<Tuple>();
++    private transient SynchronizedQueue<Tuple> syn = null;
++
++    public HardwareConnectionBolt(String name, String namespace) {
++        super(name, namespace, true); 
++    }
++
++    @SuppressWarnings("rawtypes")
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
++        super.prepare(map, topologyContext, outputCollector);
++        collector = outputCollector;
++        ip = "147.27.39.13";
++        ready = false;
++        queueTuple = new ConcurrentLinkedQueue<Tuple>();
++        output = new ByteArrayOutputStream();
++        paraOutput = new ByteArrayOutputStream();
++        new IFCorrelationFinancialPreprocessedStreamInput();
++        new IFCorrelationFinancialSymbolListInput();
++        queue = new ConcurrentLinkedQueue<Tuple>();
++        size = 50;
++        syn = new SynchronizedQueue<Tuple>(queue, size);
++        try {
++            dataAcker = new DataAcker();
++        } catch (Exception e) {
++            logger.error("", e);
++        }
++        Thread dataAckerThread = new Thread(dataAcker);
++        dataAckerThread.start();
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++    public class DataAcker implements Runnable {
++        private boolean cont = false;
++
++        public DataAcker() {
++            cont = true;
++        }
++
++        @Override
++        public void run() {
++            while(cont) {
++                collector.ack(syn.consume());
++            }
++        }
++
++        public void stop() {
++            cont = false;
++        }
++    }
++
++
++    public void execute(Tuple tuple) {
++        queueTuple.offer(tuple);
++        if(ready) {
++            sendTuple();
++        }
++    }
++
++    protected void sendTuple() {
++        AbstractMonitor monitor = createThreadMonitor();
++        Tuple tuple = queueTuple.poll();
++    if(tuple != null) {
++        if(tuple.getValue(0) instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
++if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
++            separator = "da";
++            inputPreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tuple.getValue(0);
++            try {
++                output.reset();
++                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPreprocessedStreamInput", IIFCorrelationFinancialPreprocessedStreamInput.class).serializeTo(inputPreprocessedStream, output);
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++}
++        }
++
++        if(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput) {
++if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
++            separator = "db";
++            inputSymbolList = (IIFCorrelationFinancialSymbolListInput)tuple.getValue(0);
++            try {
++                output.reset();
++                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialSymbolListInput", IIFCorrelationFinancialSymbolListInput.class).serializeTo(inputSymbolList, output);
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++}
++        }
++
++        syn.produce(tuple);
++        if (connect()) {
++            if(output != null && separator != null) {
++                monitor.startMonitoring();
++                hardwareConnection.sendSeparator(separator);
++                hardwareConnection.sendData(output.toByteArray());
++                monitor.endMonitoring(tuple);
++                }
++            }
++    }
++    }
++    private boolean connect() {
++        if (null == hardwareConnection) {
++            try {
++                hardwareConnection = new HardwareTransmitter(ip, port);
++                logger.info("Created a transmitter connection.");
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++        }
++        return null != hardwareConnection;
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        logger.info("Received the parameter change signal!");
++        String paraSeparator = null;
++        try {
++            for(int i = 0; i < signal.getChangeCount(); i++) {
++                ParameterChange para = signal.getChange(i);
++                paraOutput.reset();
++                switch (para.getName()) {
++                    case "windowSize" :
++                        logger.info("Received parameter changing signal windowSize");
++                        IntegerParameter windowSizePara = new IntegerParameter();
++                        windowSizePara.setName("windowSize");
++                        windowSizePara.setValue(para.getIntValue());
++                        SerializerRegistry.getSerializerSafe("IntegerParameter", IntegerParameter.class).serializeTo(windowSizePara, paraOutput);
++                        paraSeparator = "pa";
++                        if (connect()) {
++                            if(paraOutput != null && paraSeparator != null) {
++                                hardwareConnection.sendSeparator(paraSeparator);
++                                hardwareConnection.sendData(paraOutput.toByteArray());
++                            }
++                        }
++                        break;
++                    case "port": 
++                        logger.info("Received signal port!"); 
++                        port = para.getIntValue();
++                        ready = true;
++                        logger.info("Received signal port!" + port); 
++                        recordOnce(ResourceUsage.USED_CPUS, 1);
++                        recordOnce(ResourceUsage.USED_DFES, 1);
++                        break;
++                    case "omit": 
++                        logger.info("Received signal omit, sending the omit message to hardware!!");
++                        paraSeparator = "cc";
++                        if (connect()) {
++                                hardwareConnection.sendSeparator(paraSeparator);
++                        }
++                    break;
++                    case "flush": 
++                        logger.info("Received signal flush, sending the flush message to hardware!!");
++                        if (connect()) {
++                                hardwareConnection.sendFlushMessage();
++                        }
++                    break;
++                }
++            }
++        } catch (ValueFormatException e) {
++            e.printStackTrace();
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        dataAcker.stop();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(output != null) {
++                output.close();
++            }
++            if(paraOutput != null) {
++                paraOutput.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++        recordOnce(ResourceUsage.USED_CPUS, 0);
++        recordOnce(ResourceUsage.USED_DFES, 0);
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(output != null) {
++                output.close();
++            }
++            if(paraOutput != null) {
++                paraOutput.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionSpout.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionSpout.java
+new file mode 100644
+index 0000000..500a478
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionSpout.java
+@@ -0,0 +1,220 @@
++package eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial;
++
++import java.io.IOException;
++import java.io.ByteArrayOutputStream;
++import java.io.ByteArrayInputStream;
++import java.util.ArrayList;
++import java.util.List;
++import java.util.Map;
++import java.util.HashMap;
++import backtype.storm.spout.SpoutOutputCollector;
++import backtype.storm.task.TopologyContext;
++import backtype.storm.topology.OutputFieldsDeclarer;
++import backtype.storm.tuple.Tuple;
++import backtype.storm.tuple.Fields;
++import backtype.storm.tuple.Values;
++import eu.qualimaster.common.signal.BaseSignalSpout;
++import eu.qualimaster.base.algorithm.HardwareTransmitter;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.ShutdownSignal;
++import eu.qualimaster.common.signal.ParameterChange;
++import eu.qualimaster.common.signal.ValueFormatException;
++import eu.qualimaster.common.signal.SignalException;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import java.util.Queue;
++import java.util.concurrent.ConcurrentLinkedQueue;
++import eu.qualimaster.common.switching.SynchronizedQueue;
++import eu.qualimaster.families.imp.FCorrelationFinancial.*;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput;
++
++public class HardwareConnectionSpout extends BaseSignalSpout {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionSpout.class);
++    private transient SpoutOutputCollector collector;
++    private String streamId;
++    private int MAXDATASIZE;
++    private int taskId;
++    private int taskNum;
++    private int taskIndex;
++    private boolean ready = false;
++    private String ip;
++    private int port = 0;
++    private byte [] msg = null;
++    private transient HardwareTransmitter hardwareConnection;
++    private transient ByteArrayInputStream in = null;
++    private transient IIFCorrelationFinancialPairwiseFinancialOutput outputPairwiseFinancial = null;
++    private transient Queue<IIFCorrelationFinancialPairwiseFinancialOutput> queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
++    private transient SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput> synPairwiseFinancial = null;
++    private int size;
++    private transient DataEmitter dataEmitter;
++    public HardwareConnectionSpout(String name, String namespace, String streamId) {
++        super(name, namespace, true); 
++        this.streamId = streamId;
++    }
++
++    @SuppressWarnings("rawtypes")
++    public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutputCollector) {
++        super.open(map, topologyContext, spoutputCollector);
++        collector = spoutputCollector;
++        taskId = topologyContext.getThisTaskId();
++        taskNum = topologyContext.getThisWorkerTasks().size();
++        taskIndex = topologyContext.getThisTaskIndex();
++        queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
++        size = 50;
++        synPairwiseFinancial = new SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>(queuePairwiseFinancial, size);
++        ip = "147.27.39.13";
++        ready = false;
++        msg = new byte[MAXDATASIZE];
++        MAXDATASIZE = 16384;
++        new IFCorrelationFinancialPairwiseFinancialOutput();
++        try {
++            dataEmitter = new DataEmitter();
++        } catch (Exception e) {
++            logger.error("", e);
++        }
++        Thread dataEmitterThread = new Thread(dataEmitter);
++        dataEmitterThread.start();
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++    public class DataEmitter implements Runnable {
++        private boolean cont = false;
++
++        public DataEmitter() {
++            cont = true;
++        }
++
++        @Override
++        public void run() {
++            while(cont) {
++                collector.emit(streamId, new Values(synPairwiseFinancial.consume()));
++            }
++        }
++
++        public void stop() {
++            cont = false;
++        }
++    }
++
++    public void nextTuple() {
++        if(ready) {
++        if (connect()) {
++            try {
++                in = null;
++                msg = hardwareConnection.receiveData();
++                if(msg != null) {
++                    if (msg[0] == 'd') {
++                    in = new ByteArrayInputStream(msg, 1, msg.length-1);
++                        if (in != null) {
++                            startMonitoring();
++                            outputPairwiseFinancial = null;
++                            outputPairwiseFinancial = SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPairwiseFinancialOutput", IIFCorrelationFinancialPairwiseFinancialOutput.class).deserializeFrom(in);
++                            if(outputPairwiseFinancial != null) {
++                                synPairwiseFinancial.produce(outputPairwiseFinancial);
++                                endMonitoring();
++                            }
++                        }
++                    } else if (msg[0] == 'o') {
++                            /* HERE PUT THE CODE FOR THE FLUSH PROCESS */
++                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                        				                        "TimeTravelSimPip", "GenTopoHardwareCorrelationFinancialEndBolt", "emit", true, null);
++                        try {
++                            sendSignal(paraSignal);
++                        } catch (SignalException e) {
++                            e.printStackTrace();
++                        }
++                    } else if (msg[0] == 'f') {
++                        /* HERE PUT THE CODE FOR THE OMIT PROCESS */
++                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                        				                        "TimeTravelSimPip", "GenTopoHardwareCorrelationFinancialEndBolt", "disable", true, null);
++                        try {
++                            sendSignal(paraSignal);
++                        } catch (SignalException e) {
++                            e.printStackTrace();
++                        }
++                    }
++                }
++            } catch (IOException e) {
++                logger.info("IOException : " + e.getMessage());
++            }
++        }
++        }
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "port": 
++                    String value = para.getStringValue();
++                    logger.info("Received signal port!" + value + ", taskId: " + taskId); 
++                    String[] portList = value.split(",");
++                    port = assignPort(portList, taskIndex);
++                    ready = true;
++                    logger.info("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex);
++                    break;
++              }
++        }
++    }
++
++    private boolean connect() {
++        if (null == hardwareConnection) {
++            try {
++                hardwareConnection = new HardwareTransmitter(ip, port);
++                logger.info("Created a receiver connection.");
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++        }
++        return null != hardwareConnection;
++    }
++    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
++        outputFieldsDeclarer.declareStream(streamId, false, new Fields("hardwareOutput"));
++    }
++
++    @Override
++    public void close() {
++        super.close();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(in != null) {
++                in.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        dataEmitter.stop();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(in != null) {
++                in.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    protected int assignPort(String[] ports, int index) {
++        //int mode = index % ports.length;
++        return Integer.parseInt(ports[index]);
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/mapping.xml
+new file mode 100644
+index 0000000..28d1bee
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/mapping.xml
+@@ -0,0 +1,11 @@
++<mapping>
++  <pipeline name="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
++      <node name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" type="family">
++             <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="PriorityPip" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </node>
++      <node name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" type="source">
++             <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="PriorityPip" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
++      </node>
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/pom.xml
+new file mode 100644
+index 0000000..aae4761
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/pom.xml
+@@ -0,0 +1,92 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <build>
++    <sourceDirectory>${basedir}/</sourceDirectory>
++    <plugins>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-source-plugin</artifactId>
++				<version>2.2.1</version>
++				<executions>
++					<execution>
++						<id>attach-sources</id>
++						<phase>verify</phase>
++						<goals>
++							<goal>jar</goal>
++						</goals>
++					</execution>
++				</executions>
++			</plugin>
++    </plugins>
++  </build>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++	     <groupId>org.apache.storm</groupId>
++	     <artifactId>storm-core</artifactId>
++	   </dependency>
++   <dependency>
++	     <groupId>eu.qualimaster</groupId>
++	     <artifactId>StormCommons</artifactId>
++	   </dependency>
++    <dependency>
++			<groupId>eu.qualimaster</groupId>
++			<artifactId>PriorityPipelineInterfaces</artifactId>
++			<version>0.5.0-SNAPSHOT</version>
++		</dependency>
++   <dependency>
++     	<groupId>eu.qualimaster</groupId>
++     	<artifactId>QualiMaster.Events</artifactId>
++   	</dependency>
++   <dependency>
++	     <groupId>eu.qualimaster</groupId>
++	     <artifactId>DataManagementLayer</artifactId>
++	   </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/profiling/profile.ctl
+new file mode 100644
+index 0000000..2e431ba
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/profiling/profile.ctl
+@@ -0,0 +1 @@
++import eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionBolt.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionBolt.java
+new file mode 100644
+index 0000000..9dea416
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionBolt.java
+@@ -0,0 +1,257 @@
++package eu.qualimaster.algorithms.MutualInformationHardware;
++
++import java.io.IOException;
++import java.io.ByteArrayOutputStream;
++import java.util.Map;
++import backtype.storm.task.OutputCollector;
++import backtype.storm.task.TopologyContext;
++import backtype.storm.topology.OutputFieldsDeclarer;
++import backtype.storm.tuple.Tuple;
++import eu.qualimaster.common.signal.AbstractMonitor;
++import eu.qualimaster.common.signal.BaseSignalBolt;
++import eu.qualimaster.base.algorithm.HardwareTransmitter;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.base.serializer.Parameters.*;
++import eu.qualimaster.common.signal.ShutdownSignal;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.ParameterChange;
++import eu.qualimaster.common.signal.ValueFormatException;
++import eu.qualimaster.observables.ResourceUsage;
++import java.util.Queue;
++import java.util.concurrent.ConcurrentLinkedQueue;
++import eu.qualimaster.common.switching.SynchronizedQueue;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.FCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialSymbolListInput;
++
++public class HardwareConnectionBolt extends BaseSignalBolt {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionBolt.class);
++    private transient OutputCollector collector;
++    private String ip;
++    private int port = 0;
++    private boolean ready = false;
++    private transient Queue<Tuple> queueTuple = new ConcurrentLinkedQueue<Tuple>();
++    private transient HardwareTransmitter hardwareConnection;
++    private transient ByteArrayOutputStream output = null;
++    private transient ByteArrayOutputStream paraOutput = null;
++    private String separator;
++    private transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    private transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++    private int size;
++    private transient DataAcker dataAcker;
++    private transient Queue<Tuple> queue = new ConcurrentLinkedQueue<Tuple>();
++    private transient SynchronizedQueue<Tuple> syn = null;
++
++    public HardwareConnectionBolt(String name, String namespace) {
++        super(name, namespace, true); 
++    }
++
++    @SuppressWarnings("rawtypes")
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
++        super.prepare(map, topologyContext, outputCollector);
++        collector = outputCollector;
++        ip = "147.27.39.12";
++        ready = false;
++        queueTuple = new ConcurrentLinkedQueue<Tuple>();
++        output = new ByteArrayOutputStream();
++        paraOutput = new ByteArrayOutputStream();
++        new IFCorrelationFinancialPreprocessedStreamInput();
++        new IFCorrelationFinancialSymbolListInput();
++        queue = new ConcurrentLinkedQueue<Tuple>();
++        size = 50;
++        syn = new SynchronizedQueue<Tuple>(queue, size);
++        try {
++            dataAcker = new DataAcker();
++        } catch (Exception e) {
++            logger.error("", e);
++        }
++        Thread dataAckerThread = new Thread(dataAcker);
++        dataAckerThread.start();
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++    public class DataAcker implements Runnable {
++        private boolean cont = false;
++
++        public DataAcker() {
++            cont = true;
++        }
++
++        @Override
++        public void run() {
++            while(cont) {
++                collector.ack(syn.consume());
++            }
++        }
++
++        public void stop() {
++            cont = false;
++        }
++    }
++
++
++    public void execute(Tuple tuple) {
++        queueTuple.offer(tuple);
++        if(ready) {
++            sendTuple();
++        }
++    }
++
++    protected void sendTuple() {
++        AbstractMonitor monitor = createThreadMonitor();
++        Tuple tuple = queueTuple.poll();
++    if(tuple != null) {
++        if(tuple.getValue(0) instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
++if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
++            separator = "da";
++            inputPreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tuple.getValue(0);
++            try {
++                output.reset();
++                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPreprocessedStreamInput", IIFCorrelationFinancialPreprocessedStreamInput.class).serializeTo(inputPreprocessedStream, output);
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++}
++        }
++
++        if(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput) {
++if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
++            separator = "db";
++            inputSymbolList = (IIFCorrelationFinancialSymbolListInput)tuple.getValue(0);
++            try {
++                output.reset();
++                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialSymbolListInput", IIFCorrelationFinancialSymbolListInput.class).serializeTo(inputSymbolList, output);
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++}
++        }
++
++        syn.produce(tuple);
++        if (connect()) {
++            if(output != null && separator != null) {
++                monitor.startMonitoring();
++                hardwareConnection.sendSeparator(separator);
++                hardwareConnection.sendData(output.toByteArray());
++                monitor.endMonitoring(tuple);
++                }
++            }
++    }
++    }
++    private boolean connect() {
++        if (null == hardwareConnection) {
++            try {
++                hardwareConnection = new HardwareTransmitter(ip, port);
++                logger.info("Created a transmitter connection.");
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++        }
++        return null != hardwareConnection;
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        logger.info("Received the parameter change signal!");
++        String paraSeparator = null;
++        try {
++            for(int i = 0; i < signal.getChangeCount(); i++) {
++                ParameterChange para = signal.getChange(i);
++                paraOutput.reset();
++                switch (para.getName()) {
++                    case "windowSize" :
++                        logger.info("Received parameter changing signal windowSize");
++                        IntegerParameter windowSizePara = new IntegerParameter();
++                        windowSizePara.setName("windowSize");
++                        windowSizePara.setValue(para.getIntValue());
++                        SerializerRegistry.getSerializerSafe("IntegerParameter", IntegerParameter.class).serializeTo(windowSizePara, paraOutput);
++                        paraSeparator = "pa";
++                        if (connect()) {
++                            if(paraOutput != null && paraSeparator != null) {
++                                hardwareConnection.sendSeparator(paraSeparator);
++                                hardwareConnection.sendData(paraOutput.toByteArray());
++                            }
++                        }
++                        break;
++                    case "port": 
++                        logger.info("Received signal port!"); 
++                        port = para.getIntValue();
++                        ready = true;
++                        logger.info("Received signal port!" + port); 
++                        recordOnce(ResourceUsage.USED_CPUS, 1);
++                        recordOnce(ResourceUsage.USED_DFES, 1);
++                        break;
++                    case "omit": 
++                        logger.info("Received signal omit, sending the omit message to hardware!!");
++                        paraSeparator = "cc";
++                        if (connect()) {
++                                hardwareConnection.sendSeparator(paraSeparator);
++                        }
++                    break;
++                    case "flush": 
++                        logger.info("Received signal flush, sending the flush message to hardware!!");
++                        if (connect()) {
++                                hardwareConnection.sendFlushMessage();
++                        }
++                    break;
++                }
++            }
++        } catch (ValueFormatException e) {
++            e.printStackTrace();
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        dataAcker.stop();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(output != null) {
++                output.close();
++            }
++            if(paraOutput != null) {
++                paraOutput.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++        recordOnce(ResourceUsage.USED_CPUS, 0);
++        recordOnce(ResourceUsage.USED_DFES, 0);
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(output != null) {
++                output.close();
++            }
++            if(paraOutput != null) {
++                paraOutput.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionSpout.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionSpout.java
+new file mode 100644
+index 0000000..631de69
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionSpout.java
+@@ -0,0 +1,220 @@
++package eu.qualimaster.algorithms.MutualInformationHardware;
++
++import java.io.IOException;
++import java.io.ByteArrayOutputStream;
++import java.io.ByteArrayInputStream;
++import java.util.ArrayList;
++import java.util.List;
++import java.util.Map;
++import java.util.HashMap;
++import backtype.storm.spout.SpoutOutputCollector;
++import backtype.storm.task.TopologyContext;
++import backtype.storm.topology.OutputFieldsDeclarer;
++import backtype.storm.tuple.Tuple;
++import backtype.storm.tuple.Fields;
++import backtype.storm.tuple.Values;
++import eu.qualimaster.common.signal.BaseSignalSpout;
++import eu.qualimaster.base.algorithm.HardwareTransmitter;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.ShutdownSignal;
++import eu.qualimaster.common.signal.ParameterChange;
++import eu.qualimaster.common.signal.ValueFormatException;
++import eu.qualimaster.common.signal.SignalException;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import java.util.Queue;
++import java.util.concurrent.ConcurrentLinkedQueue;
++import eu.qualimaster.common.switching.SynchronizedQueue;
++import eu.qualimaster.families.imp.FCorrelationFinancial.*;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput;
++
++public class HardwareConnectionSpout extends BaseSignalSpout {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionSpout.class);
++    private transient SpoutOutputCollector collector;
++    private String streamId;
++    private int MAXDATASIZE;
++    private int taskId;
++    private int taskNum;
++    private int taskIndex;
++    private boolean ready = false;
++    private String ip;
++    private int port = 0;
++    private byte [] msg = null;
++    private transient HardwareTransmitter hardwareConnection;
++    private transient ByteArrayInputStream in = null;
++    private transient IIFCorrelationFinancialPairwiseFinancialOutput outputPairwiseFinancial = null;
++    private transient Queue<IIFCorrelationFinancialPairwiseFinancialOutput> queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
++    private transient SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput> synPairwiseFinancial = null;
++    private int size;
++    private transient DataEmitter dataEmitter;
++    public HardwareConnectionSpout(String name, String namespace, String streamId) {
++        super(name, namespace, true); 
++        this.streamId = streamId;
++    }
++
++    @SuppressWarnings("rawtypes")
++    public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutputCollector) {
++        super.open(map, topologyContext, spoutputCollector);
++        collector = spoutputCollector;
++        taskId = topologyContext.getThisTaskId();
++        taskNum = topologyContext.getThisWorkerTasks().size();
++        taskIndex = topologyContext.getThisTaskIndex();
++        queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
++        size = 50;
++        synPairwiseFinancial = new SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>(queuePairwiseFinancial, size);
++        ip = "147.27.39.12";
++        ready = false;
++        msg = new byte[MAXDATASIZE];
++        MAXDATASIZE = 16384;
++        new IFCorrelationFinancialPairwiseFinancialOutput();
++        try {
++            dataEmitter = new DataEmitter();
++        } catch (Exception e) {
++            logger.error("", e);
++        }
++        Thread dataEmitterThread = new Thread(dataEmitter);
++        dataEmitterThread.start();
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++    public class DataEmitter implements Runnable {
++        private boolean cont = false;
++
++        public DataEmitter() {
++            cont = true;
++        }
++
++        @Override
++        public void run() {
++            while(cont) {
++                collector.emit(streamId, new Values(synPairwiseFinancial.consume()));
++            }
++        }
++
++        public void stop() {
++            cont = false;
++        }
++    }
++
++    public void nextTuple() {
++        if(ready) {
++        if (connect()) {
++            try {
++                in = null;
++                msg = hardwareConnection.receiveData();
++                if(msg != null) {
++                    if (msg[0] == 'd') {
++                    in = new ByteArrayInputStream(msg, 1, msg.length-1);
++                        if (in != null) {
++                            startMonitoring();
++                            outputPairwiseFinancial = null;
++                            outputPairwiseFinancial = SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPairwiseFinancialOutput", IIFCorrelationFinancialPairwiseFinancialOutput.class).deserializeFrom(in);
++                            if(outputPairwiseFinancial != null) {
++                                synPairwiseFinancial.produce(outputPairwiseFinancial);
++                                endMonitoring();
++                            }
++                        }
++                    } else if (msg[0] == 'o') {
++                            /* HERE PUT THE CODE FOR THE FLUSH PROCESS */
++                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                        				                        "TimeTravelSimPip", "MutualInformationHardwareEndBolt", "emit", true, null);
++                        try {
++                            sendSignal(paraSignal);
++                        } catch (SignalException e) {
++                            e.printStackTrace();
++                        }
++                    } else if (msg[0] == 'f') {
++                        /* HERE PUT THE CODE FOR THE OMIT PROCESS */
++                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                        				                        "TimeTravelSimPip", "MutualInformationHardwareEndBolt", "disable", true, null);
++                        try {
++                            sendSignal(paraSignal);
++                        } catch (SignalException e) {
++                            e.printStackTrace();
++                        }
++                    }
++                }
++            } catch (IOException e) {
++                logger.info("IOException : " + e.getMessage());
++            }
++        }
++        }
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "port": 
++                    String value = para.getStringValue();
++                    logger.info("Received signal port!" + value + ", taskId: " + taskId); 
++                    String[] portList = value.split(",");
++                    port = assignPort(portList, taskIndex);
++                    ready = true;
++                    logger.info("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex);
++                    break;
++              }
++        }
++    }
++
++    private boolean connect() {
++        if (null == hardwareConnection) {
++            try {
++                hardwareConnection = new HardwareTransmitter(ip, port);
++                logger.info("Created a receiver connection.");
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++        }
++        return null != hardwareConnection;
++    }
++    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
++        outputFieldsDeclarer.declareStream(streamId, false, new Fields("hardwareOutput"));
++    }
++
++    @Override
++    public void close() {
++        super.close();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(in != null) {
++                in.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        dataEmitter.stop();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(in != null) {
++                in.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    protected int assignPort(String[] ports, int index) {
++        //int mode = index % ports.length;
++        return Integer.parseInt(ports[index]);
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/MutualInformationHardwareSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/MutualInformationHardwareSubTopology.java
+new file mode 100644
+index 0000000..b6205e8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/MutualInformationHardwareSubTopology.java
+@@ -0,0 +1,68 @@
++package eu.qualimaster.algorithms.MutualInformationHardware;
++
++import eu.qualimaster.base.algorithm.ITopologyCreate;
++import eu.qualimaster.base.algorithm.SubTopologyOutput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial;
++import eu.qualimaster.observables.IObservable;
++import backtype.storm.topology.TopologyBuilder;
++import backtype.storm.Config;
++import eu.qualimaster.infrastructure.PipelineOptions;
++
++public class MutualInformationHardwareSubTopology implements ITopologyCreate, IFCorrelationFinancial {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(MutualInformationHardwareSubTopology.class);
++    private String pipelineName = "TimeTravelSimPip";
++
++    public SubTopologyOutput createSubTopology(TopologyBuilder topologyBuilder,
++                Config config, String prefix, String input, String streamId) {
++        String keyPrefix = prefix + ".MutualInformationHardware.";
++        String senderKey = keyPrefix + "sender";
++        String receiverKey = keyPrefix + "receiver";
++        int senderParallelism = PipelineOptions.getExecutorParallelism(config, senderKey, 1);
++        int senderTasks = PipelineOptions.getTaskParallelism(config, senderKey, 1);
++        int receiverParallelism = PipelineOptions.getExecutorParallelism(config, receiverKey, 1);
++        int receiverTasks = PipelineOptions.getTaskParallelism(config, receiverKey, 1);
++        int totalParallelism = Math.max(senderParallelism, receiverParallelism);
++        topologyBuilder.setSpout(prefix + "HardwareConnectionSpout", new HardwareConnectionSpout(prefix + "HardwareConnectionSpout",
++                                pipelineName, streamId), receiverParallelism).setNumTasks(receiverTasks);
++        topologyBuilder.setBolt(prefix + "HardwareConnectionBolt", new HardwareConnectionBolt(prefix + "HardwareConnectionBolt",
++                                pipelineName), senderParallelism).setNumTasks(senderTasks).shuffleGrouping(input, streamId);
++        return new SubTopologyOutput(prefix + "HardwareConnectionSpout", streamId, 1, totalParallelism);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    @Override
++    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    @Override
++    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    public Double getMeasurement(IObservable observable) {
++        return null; 
++    }
++
++    @Override
++    public void switchState(State state) {
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/mapping.xml
+new file mode 100644
+index 0000000..621dd3a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/mapping.xml
+@@ -0,0 +1,11 @@
++<mapping>
++  <pipeline name="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
++      <node name="MutualInformationHardwareHardwareConnectionBolt" type="family">
++             <component name="MutualInformationHardwareHardwareConnectionBolt" container="PriorityPip" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </node>
++      <node name="MutualInformationHardwareHardwareConnectionSpout" type="source">
++             <component name="MutualInformationHardwareHardwareConnectionSpout" container="PriorityPip" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </node>
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/pom.xml
+new file mode 100644
+index 0000000..ace0142
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/pom.xml
+@@ -0,0 +1,92 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>MutualInformationHardware</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <build>
++    <sourceDirectory>${basedir}/</sourceDirectory>
++    <plugins>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-source-plugin</artifactId>
++				<version>2.2.1</version>
++				<executions>
++					<execution>
++						<id>attach-sources</id>
++						<phase>verify</phase>
++						<goals>
++							<goal>jar</goal>
++						</goals>
++					</execution>
++				</executions>
++			</plugin>
++    </plugins>
++  </build>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++	     <groupId>org.apache.storm</groupId>
++	     <artifactId>storm-core</artifactId>
++	   </dependency>
++   <dependency>
++	     <groupId>eu.qualimaster</groupId>
++	     <artifactId>StormCommons</artifactId>
++	   </dependency>
++    <dependency>
++			<groupId>eu.qualimaster</groupId>
++			<artifactId>PriorityPipelineInterfaces</artifactId>
++			<version>0.5.0-SNAPSHOT</version>
++		</dependency>
++   <dependency>
++     	<groupId>eu.qualimaster</groupId>
++     	<artifactId>QualiMaster.Events</artifactId>
++   	</dependency>
++   <dependency>
++	     <groupId>eu.qualimaster</groupId>
++	     <artifactId>DataManagementLayer</artifactId>
++	   </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/profiling/profile.ctl
+new file mode 100644
+index 0000000..2e431ba
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/profiling/profile.ctl
+@@ -0,0 +1 @@
++import eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionBolt.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionBolt.java
+new file mode 100644
+index 0000000..5750b10
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionBolt.java
+@@ -0,0 +1,257 @@
++package eu.qualimaster.algorithms.TransferEntropyHardware;
++
++import java.io.IOException;
++import java.io.ByteArrayOutputStream;
++import java.util.Map;
++import backtype.storm.task.OutputCollector;
++import backtype.storm.task.TopologyContext;
++import backtype.storm.topology.OutputFieldsDeclarer;
++import backtype.storm.tuple.Tuple;
++import eu.qualimaster.common.signal.AbstractMonitor;
++import eu.qualimaster.common.signal.BaseSignalBolt;
++import eu.qualimaster.base.algorithm.HardwareTransmitter;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.base.serializer.Parameters.*;
++import eu.qualimaster.common.signal.ShutdownSignal;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.ParameterChange;
++import eu.qualimaster.common.signal.ValueFormatException;
++import eu.qualimaster.observables.ResourceUsage;
++import java.util.Queue;
++import java.util.concurrent.ConcurrentLinkedQueue;
++import eu.qualimaster.common.switching.SynchronizedQueue;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.FCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialSymbolListInput;
++
++public class HardwareConnectionBolt extends BaseSignalBolt {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionBolt.class);
++    private transient OutputCollector collector;
++    private String ip;
++    private int port = 0;
++    private boolean ready = false;
++    private transient Queue<Tuple> queueTuple = new ConcurrentLinkedQueue<Tuple>();
++    private transient HardwareTransmitter hardwareConnection;
++    private transient ByteArrayOutputStream output = null;
++    private transient ByteArrayOutputStream paraOutput = null;
++    private String separator;
++    private transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    private transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++    private int size;
++    private transient DataAcker dataAcker;
++    private transient Queue<Tuple> queue = new ConcurrentLinkedQueue<Tuple>();
++    private transient SynchronizedQueue<Tuple> syn = null;
++
++    public HardwareConnectionBolt(String name, String namespace) {
++        super(name, namespace, true); 
++    }
++
++    @SuppressWarnings("rawtypes")
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
++        super.prepare(map, topologyContext, outputCollector);
++        collector = outputCollector;
++        ip = "147.27.39.12";
++        ready = false;
++        queueTuple = new ConcurrentLinkedQueue<Tuple>();
++        output = new ByteArrayOutputStream();
++        paraOutput = new ByteArrayOutputStream();
++        new IFCorrelationFinancialPreprocessedStreamInput();
++        new IFCorrelationFinancialSymbolListInput();
++        queue = new ConcurrentLinkedQueue<Tuple>();
++        size = 50;
++        syn = new SynchronizedQueue<Tuple>(queue, size);
++        try {
++            dataAcker = new DataAcker();
++        } catch (Exception e) {
++            logger.error("", e);
++        }
++        Thread dataAckerThread = new Thread(dataAcker);
++        dataAckerThread.start();
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++    public class DataAcker implements Runnable {
++        private boolean cont = false;
++
++        public DataAcker() {
++            cont = true;
++        }
++
++        @Override
++        public void run() {
++            while(cont) {
++                collector.ack(syn.consume());
++            }
++        }
++
++        public void stop() {
++            cont = false;
++        }
++    }
++
++
++    public void execute(Tuple tuple) {
++        queueTuple.offer(tuple);
++        if(ready) {
++            sendTuple();
++        }
++    }
++
++    protected void sendTuple() {
++        AbstractMonitor monitor = createThreadMonitor();
++        Tuple tuple = queueTuple.poll();
++    if(tuple != null) {
++        if(tuple.getValue(0) instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
++if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
++            separator = "da";
++            inputPreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tuple.getValue(0);
++            try {
++                output.reset();
++                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPreprocessedStreamInput", IIFCorrelationFinancialPreprocessedStreamInput.class).serializeTo(inputPreprocessedStream, output);
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++}
++        }
++
++        if(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput) {
++if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
++            separator = "db";
++            inputSymbolList = (IIFCorrelationFinancialSymbolListInput)tuple.getValue(0);
++            try {
++                output.reset();
++                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialSymbolListInput", IIFCorrelationFinancialSymbolListInput.class).serializeTo(inputSymbolList, output);
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++}
++        }
++
++        syn.produce(tuple);
++        if (connect()) {
++            if(output != null && separator != null) {
++                monitor.startMonitoring();
++                hardwareConnection.sendSeparator(separator);
++                hardwareConnection.sendData(output.toByteArray());
++                monitor.endMonitoring(tuple);
++                }
++            }
++    }
++    }
++    private boolean connect() {
++        if (null == hardwareConnection) {
++            try {
++                hardwareConnection = new HardwareTransmitter(ip, port);
++                logger.info("Created a transmitter connection.");
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++        }
++        return null != hardwareConnection;
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        logger.info("Received the parameter change signal!");
++        String paraSeparator = null;
++        try {
++            for(int i = 0; i < signal.getChangeCount(); i++) {
++                ParameterChange para = signal.getChange(i);
++                paraOutput.reset();
++                switch (para.getName()) {
++                    case "windowSize" :
++                        logger.info("Received parameter changing signal windowSize");
++                        IntegerParameter windowSizePara = new IntegerParameter();
++                        windowSizePara.setName("windowSize");
++                        windowSizePara.setValue(para.getIntValue());
++                        SerializerRegistry.getSerializerSafe("IntegerParameter", IntegerParameter.class).serializeTo(windowSizePara, paraOutput);
++                        paraSeparator = "pa";
++                        if (connect()) {
++                            if(paraOutput != null && paraSeparator != null) {
++                                hardwareConnection.sendSeparator(paraSeparator);
++                                hardwareConnection.sendData(paraOutput.toByteArray());
++                            }
++                        }
++                        break;
++                    case "port": 
++                        logger.info("Received signal port!"); 
++                        port = para.getIntValue();
++                        ready = true;
++                        logger.info("Received signal port!" + port); 
++                        recordOnce(ResourceUsage.USED_CPUS, 1);
++                        recordOnce(ResourceUsage.USED_DFES, 1);
++                        break;
++                    case "omit": 
++                        logger.info("Received signal omit, sending the omit message to hardware!!");
++                        paraSeparator = "cc";
++                        if (connect()) {
++                                hardwareConnection.sendSeparator(paraSeparator);
++                        }
++                    break;
++                    case "flush": 
++                        logger.info("Received signal flush, sending the flush message to hardware!!");
++                        if (connect()) {
++                                hardwareConnection.sendFlushMessage();
++                        }
++                    break;
++                }
++            }
++        } catch (ValueFormatException e) {
++            e.printStackTrace();
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        dataAcker.stop();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(output != null) {
++                output.close();
++            }
++            if(paraOutput != null) {
++                paraOutput.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++        recordOnce(ResourceUsage.USED_CPUS, 0);
++        recordOnce(ResourceUsage.USED_DFES, 0);
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(output != null) {
++                output.close();
++            }
++            if(paraOutput != null) {
++                paraOutput.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionSpout.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionSpout.java
+new file mode 100644
+index 0000000..0f45b56
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionSpout.java
+@@ -0,0 +1,220 @@
++package eu.qualimaster.algorithms.TransferEntropyHardware;
++
++import java.io.IOException;
++import java.io.ByteArrayOutputStream;
++import java.io.ByteArrayInputStream;
++import java.util.ArrayList;
++import java.util.List;
++import java.util.Map;
++import java.util.HashMap;
++import backtype.storm.spout.SpoutOutputCollector;
++import backtype.storm.task.TopologyContext;
++import backtype.storm.topology.OutputFieldsDeclarer;
++import backtype.storm.tuple.Tuple;
++import backtype.storm.tuple.Fields;
++import backtype.storm.tuple.Values;
++import eu.qualimaster.common.signal.BaseSignalSpout;
++import eu.qualimaster.base.algorithm.HardwareTransmitter;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.ShutdownSignal;
++import eu.qualimaster.common.signal.ParameterChange;
++import eu.qualimaster.common.signal.ValueFormatException;
++import eu.qualimaster.common.signal.SignalException;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import java.util.Queue;
++import java.util.concurrent.ConcurrentLinkedQueue;
++import eu.qualimaster.common.switching.SynchronizedQueue;
++import eu.qualimaster.families.imp.FCorrelationFinancial.*;
++import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput;
++
++public class HardwareConnectionSpout extends BaseSignalSpout {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionSpout.class);
++    private transient SpoutOutputCollector collector;
++    private String streamId;
++    private int MAXDATASIZE;
++    private int taskId;
++    private int taskNum;
++    private int taskIndex;
++    private boolean ready = false;
++    private String ip;
++    private int port = 0;
++    private byte [] msg = null;
++    private transient HardwareTransmitter hardwareConnection;
++    private transient ByteArrayInputStream in = null;
++    private transient IIFCorrelationFinancialPairwiseFinancialOutput outputPairwiseFinancial = null;
++    private transient Queue<IIFCorrelationFinancialPairwiseFinancialOutput> queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
++    private transient SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput> synPairwiseFinancial = null;
++    private int size;
++    private transient DataEmitter dataEmitter;
++    public HardwareConnectionSpout(String name, String namespace, String streamId) {
++        super(name, namespace, true); 
++        this.streamId = streamId;
++    }
++
++    @SuppressWarnings("rawtypes")
++    public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutputCollector) {
++        super.open(map, topologyContext, spoutputCollector);
++        collector = spoutputCollector;
++        taskId = topologyContext.getThisTaskId();
++        taskNum = topologyContext.getThisWorkerTasks().size();
++        taskIndex = topologyContext.getThisTaskIndex();
++        queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
++        size = 50;
++        synPairwiseFinancial = new SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>(queuePairwiseFinancial, size);
++        ip = "147.27.39.12";
++        ready = false;
++        msg = new byte[MAXDATASIZE];
++        MAXDATASIZE = 16384;
++        new IFCorrelationFinancialPairwiseFinancialOutput();
++        try {
++            dataEmitter = new DataEmitter();
++        } catch (Exception e) {
++            logger.error("", e);
++        }
++        Thread dataEmitterThread = new Thread(dataEmitter);
++        dataEmitterThread.start();
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++    public class DataEmitter implements Runnable {
++        private boolean cont = false;
++
++        public DataEmitter() {
++            cont = true;
++        }
++
++        @Override
++        public void run() {
++            while(cont) {
++                collector.emit(streamId, new Values(synPairwiseFinancial.consume()));
++            }
++        }
++
++        public void stop() {
++            cont = false;
++        }
++    }
++
++    public void nextTuple() {
++        if(ready) {
++        if (connect()) {
++            try {
++                in = null;
++                msg = hardwareConnection.receiveData();
++                if(msg != null) {
++                    if (msg[0] == 'd') {
++                    in = new ByteArrayInputStream(msg, 1, msg.length-1);
++                        if (in != null) {
++                            startMonitoring();
++                            outputPairwiseFinancial = null;
++                            outputPairwiseFinancial = SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPairwiseFinancialOutput", IIFCorrelationFinancialPairwiseFinancialOutput.class).deserializeFrom(in);
++                            if(outputPairwiseFinancial != null) {
++                                synPairwiseFinancial.produce(outputPairwiseFinancial);
++                                endMonitoring();
++                            }
++                        }
++                    } else if (msg[0] == 'o') {
++                            /* HERE PUT THE CODE FOR THE FLUSH PROCESS */
++                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                        				                        "TimeTravelSimPip", "TransferEntropyHardwareEndBolt", "emit", true, null);
++                        try {
++                            sendSignal(paraSignal);
++                        } catch (SignalException e) {
++                            e.printStackTrace();
++                        }
++                    } else if (msg[0] == 'f') {
++                        /* HERE PUT THE CODE FOR THE OMIT PROCESS */
++                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
++                        				                        "TimeTravelSimPip", "TransferEntropyHardwareEndBolt", "disable", true, null);
++                        try {
++                            sendSignal(paraSignal);
++                        } catch (SignalException e) {
++                            e.printStackTrace();
++                        }
++                    }
++                }
++            } catch (IOException e) {
++                logger.info("IOException : " + e.getMessage());
++            }
++        }
++        }
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "port": 
++                    String value = para.getStringValue();
++                    logger.info("Received signal port!" + value + ", taskId: " + taskId); 
++                    String[] portList = value.split(",");
++                    port = assignPort(portList, taskIndex);
++                    ready = true;
++                    logger.info("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex);
++                    break;
++              }
++        }
++    }
++
++    private boolean connect() {
++        if (null == hardwareConnection) {
++            try {
++                hardwareConnection = new HardwareTransmitter(ip, port);
++                logger.info("Created a receiver connection.");
++            } catch (IOException e) {
++                e.printStackTrace();
++            }
++        }
++        return null != hardwareConnection;
++    }
++    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
++        outputFieldsDeclarer.declareStream(streamId, false, new Fields("hardwareOutput"));
++    }
++
++    @Override
++    public void close() {
++        super.close();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(in != null) {
++                in.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        dataEmitter.stop();
++        try {
++            if(hardwareConnection != null) {
++                hardwareConnection.sendCloseMessage();
++                hardwareConnection.close();
++            }
++            if(in != null) {
++                in.close();
++            }
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++    }
++
++    protected int assignPort(String[] ports, int index) {
++        //int mode = index % ports.length;
++        return Integer.parseInt(ports[index]);
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/TransferEntropyHardwareSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/TransferEntropyHardwareSubTopology.java
+new file mode 100644
+index 0000000..eb606fa
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/TransferEntropyHardwareSubTopology.java
+@@ -0,0 +1,68 @@
++package eu.qualimaster.algorithms.TransferEntropyHardware;
++
++import eu.qualimaster.base.algorithm.ITopologyCreate;
++import eu.qualimaster.base.algorithm.SubTopologyOutput;
++import eu.qualimaster.families.inf.IFCorrelationFinancial;
++import eu.qualimaster.observables.IObservable;
++import backtype.storm.topology.TopologyBuilder;
++import backtype.storm.Config;
++import eu.qualimaster.infrastructure.PipelineOptions;
++
++public class TransferEntropyHardwareSubTopology implements ITopologyCreate, IFCorrelationFinancial {
++    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(TransferEntropyHardwareSubTopology.class);
++    private String pipelineName = "TimeTravelSimPip";
++
++    public SubTopologyOutput createSubTopology(TopologyBuilder topologyBuilder,
++                Config config, String prefix, String input, String streamId) {
++        String keyPrefix = prefix + ".TransferEntropyHardware.";
++        String senderKey = keyPrefix + "sender";
++        String receiverKey = keyPrefix + "receiver";
++        int senderParallelism = PipelineOptions.getExecutorParallelism(config, senderKey, 1);
++        int senderTasks = PipelineOptions.getTaskParallelism(config, senderKey, 1);
++        int receiverParallelism = PipelineOptions.getExecutorParallelism(config, receiverKey, 1);
++        int receiverTasks = PipelineOptions.getTaskParallelism(config, receiverKey, 1);
++        int totalParallelism = Math.max(senderParallelism, receiverParallelism);
++        topologyBuilder.setSpout(prefix + "HardwareConnectionSpout", new HardwareConnectionSpout(prefix + "HardwareConnectionSpout",
++                                pipelineName, streamId), receiverParallelism).setNumTasks(receiverTasks);
++        topologyBuilder.setBolt(prefix + "HardwareConnectionBolt", new HardwareConnectionBolt(prefix + "HardwareConnectionBolt",
++                                pipelineName), senderParallelism).setNumTasks(senderTasks).shuffleGrouping(input, streamId);
++        return new SubTopologyOutput(prefix + "HardwareConnectionSpout", streamId, 1, totalParallelism);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    @Override
++    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    @Override
++    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    public Double getMeasurement(IObservable observable) {
++        return null; 
++    }
++
++    @Override
++    public void switchState(State state) {
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/mapping.xml
+new file mode 100644
+index 0000000..02bdb4f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/mapping.xml
+@@ -0,0 +1,11 @@
++<mapping>
++  <pipeline name="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
++      <node name="TransferEntropyHardwareHardwareConnectionBolt" type="family">
++             <component name="TransferEntropyHardwareHardwareConnectionBolt" container="PriorityPip" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </node>
++      <node name="TransferEntropyHardwareHardwareConnectionSpout" type="source">
++             <component name="TransferEntropyHardwareHardwareConnectionSpout" container="PriorityPip" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </node>
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/pom.xml
+new file mode 100644
+index 0000000..393b6ee
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/pom.xml
+@@ -0,0 +1,92 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>TransferEntropyHardware</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <build>
++    <sourceDirectory>${basedir}/</sourceDirectory>
++    <plugins>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-source-plugin</artifactId>
++				<version>2.2.1</version>
++				<executions>
++					<execution>
++						<id>attach-sources</id>
++						<phase>verify</phase>
++						<goals>
++							<goal>jar</goal>
++						</goals>
++					</execution>
++				</executions>
++			</plugin>
++    </plugins>
++  </build>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++	     <groupId>org.apache.storm</groupId>
++	     <artifactId>storm-core</artifactId>
++	   </dependency>
++   <dependency>
++	     <groupId>eu.qualimaster</groupId>
++	     <artifactId>StormCommons</artifactId>
++	   </dependency>
++    <dependency>
++			<groupId>eu.qualimaster</groupId>
++			<artifactId>PriorityPipelineInterfaces</artifactId>
++			<version>0.5.0-SNAPSHOT</version>
++		</dependency>
++   <dependency>
++     	<groupId>eu.qualimaster</groupId>
++     	<artifactId>QualiMaster.Events</artifactId>
++   	</dependency>
++   <dependency>
++	     <groupId>eu.qualimaster</groupId>
++	     <artifactId>DataManagementLayer</artifactId>
++	   </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/profiling/profile.ctl
+new file mode 100644
+index 0000000..2e431ba
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/profiling/profile.ctl
+@@ -0,0 +1 @@
++import eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/receiver.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/receiver.cpp
+new file mode 100644
+index 0000000..7714e77
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/receiver.cpp
+@@ -0,0 +1,192 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <strings.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <string>
++#include <iostream>
++#include <google/protobuf/io/coded_stream.h>
++#include <google/protobuf/generated_message_util.h>
++#include <google/protobuf/message.h>
++#include <google/protobuf/extension_set.h>
++#include <google/protobuf/unknown_field_set.h>
++#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
++
++#include "SerializeServerTemplateCpuCode.h"
++#include "parameters.pb.h"
++#include "FCorrelationFinancial.pb.h"
++#include "stringlist.pb.h"
++using namespace std;
++
++void receiver(parm *arg)
++{
++    struct sockaddr_in server_addr;
++    int receiver_socket;
++    int true_var=1;
++    struct sockaddr_in receiver_addr;
++    socklen_t sin_size;
++
++    if ((receiver_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
++    {
++        perror("Socket");
++        exit(1);
++    }
++
++    if (setsockopt(receiver_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
++    {
++        perror("Setsockopt");
++        exit(1);
++    }
++
++    server_addr.sin_family = AF_INET;
++    server_addr.sin_port = htons(2400);
++    server_addr.sin_addr.s_addr = INADDR_ANY;
++    bzero(&(server_addr.sin_zero),8);
++
++    if (bind(receiver_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
++    {
++        perror("Unable to bind");
++        exit(1);
++    }
++
++    if (listen(receiver_socket, 5) == -1)
++    {
++        perror("Listen failed");
++        exit(1);
++    }
++
++    printf("TCPServer Waiting for client on port 2400\n");
++
++    sin_size = (socklen_t)sizeof(receiver_addr);
++    int receiver_socket_connected = accept(receiver_socket, (struct sockaddr *)&receiver_addr,&sin_size);
++    printf("Got a connection from (%s , %d)\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port));
++    printf("Connection with Bolt\n");
++
++    eu::qualimaster::families::protobuf::SIFCorrelationFinancialpreprocessedStreamInput preprocessedStreamInput;
++    eu::qualimaster::base::protos::SStringList stringList;
++    eu::qualimaster::base::protos::SIntegerParameter IntegerParameter;
++
++    google::protobuf::uint32 size;
++    google::protobuf::io::CodedInputStream::Limit msgLimit;
++    unsigned char buffer[MAXDATASIZE];
++    unsigned char temp[10];
++    int numbytes = 0;
++    int internal_size = 0;
++    int pointer = 0;
++    int j, i;
++    bzero(buffer,0);
++
++    struct message_receiver_processor msg;
++    while(1)
++    {
++        numbytes = 0;
++        while(pointer < MESSAGE_HEADER)
++        {
++            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
++            if(numbytes > 0)
++                pointer = pointer + numbytes;
++        }
++
++        google::protobuf::io::CodedInputStream codedIn1(&arrayIn);
++
++        codedIn1.ReadRaw(temp, 2); // Read the protocol Message type
++        codedIn1.ReadVarint32(&size);
++        if((size & 0x7f800000) > 0)
++        {
++            message_size = 4 + (size + 2); //size of size variable in the message + size Bytes + 2 Bytes protocol
++        }
++        else if((size & 0x7f8000) > 0)
++        {
++            message_size = 3 + (size + 2);
++        }
++        else if((size & 0x7f80) > 0)
++        {
++            message_size = 2 + (size + 2);
++        }
++        else
++        {
++            message_size = 1 + (size + 2);
++        }
++        //Read the remaining Bytes from the incoming message from TCP buffer
++        while(pointer < message_size)
++        {
++            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
++            if(numbytes > 0)
++                pointer = pointer + numbytes;
++        }
++        //Deserialize the complete incoming message
++        google::protobuf::io::CodedInputStream codedIn(buffer, message_size);
++
++        // Omit the first two Bytes (Message ID)
++        codedIn.Skip(2);
++
++            if(temp[0] == 'd') { //Data
++                if(temp[1] == 'a') { //1st Data Type
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    preprocessedStreamInput.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    // Parse the message data
++                    msg.type = 0;
++                    msg.data = preprocessedStreamInput.randominteger();
++
++                    //Push data into the lockfree structure
++                    while(!arg->queue_receiver_processor->push(msg))
++                    {
++                        ;
++                    }
++                }
++                if(temp[1] == 'b') { //2st Data Type
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    stringList.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    // Parse the message data
++                    msg.type = 0;
++                    msg.data = stringList.randominteger();
++
++                    //Push data into the lockfree structure
++                    while(!arg->queue_receiver_processor->push(msg))
++                    {
++                        ;
++                    }
++                }
++            }
++            else if(temp[0] == 'p') { //Parameters
++                if(temp[1] == 'a')  {//int Parameter
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    IntegerParameter.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    if((size & 0x7f800000) > 0)
++                    {
++                        internal_size = internal_size + size + 4;
++                    }
++                    else if((size & 0x7f8000) > 0)
++                    {
++                        internal_size = internal_size + size + 3;
++                    }
++                    else if((size & 0x7f80) > 0)
++                    {
++                        internal_size = internal_size + size + 2;
++                    }
++                    else
++                    {
++                        internal_size = internal_size + size + 1;
++                    }
++                }
++            }
++            else if(temp[0] == 'c')
++            {
++                printf("Connection closed\n");
++                return;
++            }
++
++    }
++    close(receiver_socket_connected);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/sender.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/sender.cpp
+new file mode 100644
+index 0000000..f1364be
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/sender.cpp
+@@ -0,0 +1,98 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <strings.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <string>
++#include <iostream>
++#include <netdb.h>
++#include <netinet/in.h>
++#include <string.h>
++#include <google/protobuf/io/coded_stream.h>
++#include <google/protobuf/generated_message_util.h>
++#include <google/protobuf/message.h>
++#include <google/protobuf/extension_set.h>
++#include <google/protobuf/unknown_field_set.h>
++#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
++
++#include "SerializeServerTemplateCpuCode.h"
++#include "FCorrelationFinancial.pb.h"
++
++void sender(parm *arg)
++{
++    struct sockaddr_in server_addr;
++    int transmitter_socket;
++    socklen_t sin_size;
++    int true_var=1;
++    struct sockaddr_in transmitter_addr;
++
++    if ((transmitter_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
++    {
++        perror("Socket");
++        exit(1);
++    }
++
++    if (setsockopt(transmitter_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
++    {
++        perror("Setsockopt");
++        exit(1);
++    }
++
++    server_addr.sin_family = AF_INET;
++    server_addr.sin_port = htons(2401);
++    server_addr.sin_addr.s_addr = INADDR_ANY;
++    bzero(&(server_addr.sin_zero),8);
++
++    if (bind(transmitter_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
++    {
++        perror("Unable to bind");
++        exit(1);
++    }
++
++    if (listen(transmitter_socket, 5) == -1)
++    {
++        perror("Listen failed");
++        exit(1);
++    }
++
++    printf("TCPServer Waiting for client on port 2401\n");
++
++    sin_size = sizeof(transmitter_addr);
++    int transmitter_socket_connected = accept(transmitter_socket, (struct sockaddr *)&transmitter_addr,&sin_size);
++    printf("Got a connection from (%s , %d)\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));
++    printf("Connection with Spout\n");
++
++    eu::qualimaster::families::protobuf::SIFCorrelationFinancialPairwiseFinancialOutput to;
++
++    struct message_processor_sender msg;
++    while(1)
++    {
++        while(!arg->queue_processor_sender->pop(msg))
++        {
++            ;
++        }
++        to.set_randominteger(msg.data);
++        //already set up a message object called serverAck
++        //make a buffer that can hold message + room for a 32bit delimiter
++        int ackSize=to.ByteSize()+ google::protobuf::io::CodedOutputStream::VarintSize32(to.ByteSize());
++        char* ackBuf=new char[ackSize];
++
++        //write varint delimiter to buffer
++        google::protobuf::io::ArrayOutputStream arrayOut(ackBuf, ackSize);
++        google::protobuf::io::CodedOutputStream codedOut(&arrayOut);
++
++        //write protobuf ack to buffer
++        codedOut.WriteVarint32(to.ByteSize());
++        to.SerializeToCodedStream(&codedOut);
++
++        //send buffer to client
++        send(transmitter_socket_connected, ackBuf, ackSize, 0);
++
++        delete(ackBuf);
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/receiver.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/receiver.cpp
+new file mode 100644
+index 0000000..7714e77
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/receiver.cpp
+@@ -0,0 +1,192 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <strings.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <string>
++#include <iostream>
++#include <google/protobuf/io/coded_stream.h>
++#include <google/protobuf/generated_message_util.h>
++#include <google/protobuf/message.h>
++#include <google/protobuf/extension_set.h>
++#include <google/protobuf/unknown_field_set.h>
++#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
++
++#include "SerializeServerTemplateCpuCode.h"
++#include "parameters.pb.h"
++#include "FCorrelationFinancial.pb.h"
++#include "stringlist.pb.h"
++using namespace std;
++
++void receiver(parm *arg)
++{
++    struct sockaddr_in server_addr;
++    int receiver_socket;
++    int true_var=1;
++    struct sockaddr_in receiver_addr;
++    socklen_t sin_size;
++
++    if ((receiver_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
++    {
++        perror("Socket");
++        exit(1);
++    }
++
++    if (setsockopt(receiver_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
++    {
++        perror("Setsockopt");
++        exit(1);
++    }
++
++    server_addr.sin_family = AF_INET;
++    server_addr.sin_port = htons(2400);
++    server_addr.sin_addr.s_addr = INADDR_ANY;
++    bzero(&(server_addr.sin_zero),8);
++
++    if (bind(receiver_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
++    {
++        perror("Unable to bind");
++        exit(1);
++    }
++
++    if (listen(receiver_socket, 5) == -1)
++    {
++        perror("Listen failed");
++        exit(1);
++    }
++
++    printf("TCPServer Waiting for client on port 2400\n");
++
++    sin_size = (socklen_t)sizeof(receiver_addr);
++    int receiver_socket_connected = accept(receiver_socket, (struct sockaddr *)&receiver_addr,&sin_size);
++    printf("Got a connection from (%s , %d)\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port));
++    printf("Connection with Bolt\n");
++
++    eu::qualimaster::families::protobuf::SIFCorrelationFinancialpreprocessedStreamInput preprocessedStreamInput;
++    eu::qualimaster::base::protos::SStringList stringList;
++    eu::qualimaster::base::protos::SIntegerParameter IntegerParameter;
++
++    google::protobuf::uint32 size;
++    google::protobuf::io::CodedInputStream::Limit msgLimit;
++    unsigned char buffer[MAXDATASIZE];
++    unsigned char temp[10];
++    int numbytes = 0;
++    int internal_size = 0;
++    int pointer = 0;
++    int j, i;
++    bzero(buffer,0);
++
++    struct message_receiver_processor msg;
++    while(1)
++    {
++        numbytes = 0;
++        while(pointer < MESSAGE_HEADER)
++        {
++            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
++            if(numbytes > 0)
++                pointer = pointer + numbytes;
++        }
++
++        google::protobuf::io::CodedInputStream codedIn1(&arrayIn);
++
++        codedIn1.ReadRaw(temp, 2); // Read the protocol Message type
++        codedIn1.ReadVarint32(&size);
++        if((size & 0x7f800000) > 0)
++        {
++            message_size = 4 + (size + 2); //size of size variable in the message + size Bytes + 2 Bytes protocol
++        }
++        else if((size & 0x7f8000) > 0)
++        {
++            message_size = 3 + (size + 2);
++        }
++        else if((size & 0x7f80) > 0)
++        {
++            message_size = 2 + (size + 2);
++        }
++        else
++        {
++            message_size = 1 + (size + 2);
++        }
++        //Read the remaining Bytes from the incoming message from TCP buffer
++        while(pointer < message_size)
++        {
++            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
++            if(numbytes > 0)
++                pointer = pointer + numbytes;
++        }
++        //Deserialize the complete incoming message
++        google::protobuf::io::CodedInputStream codedIn(buffer, message_size);
++
++        // Omit the first two Bytes (Message ID)
++        codedIn.Skip(2);
++
++            if(temp[0] == 'd') { //Data
++                if(temp[1] == 'a') { //1st Data Type
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    preprocessedStreamInput.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    // Parse the message data
++                    msg.type = 0;
++                    msg.data = preprocessedStreamInput.randominteger();
++
++                    //Push data into the lockfree structure
++                    while(!arg->queue_receiver_processor->push(msg))
++                    {
++                        ;
++                    }
++                }
++                if(temp[1] == 'b') { //2st Data Type
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    stringList.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    // Parse the message data
++                    msg.type = 0;
++                    msg.data = stringList.randominteger();
++
++                    //Push data into the lockfree structure
++                    while(!arg->queue_receiver_processor->push(msg))
++                    {
++                        ;
++                    }
++                }
++            }
++            else if(temp[0] == 'p') { //Parameters
++                if(temp[1] == 'a')  {//int Parameter
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    IntegerParameter.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    if((size & 0x7f800000) > 0)
++                    {
++                        internal_size = internal_size + size + 4;
++                    }
++                    else if((size & 0x7f8000) > 0)
++                    {
++                        internal_size = internal_size + size + 3;
++                    }
++                    else if((size & 0x7f80) > 0)
++                    {
++                        internal_size = internal_size + size + 2;
++                    }
++                    else
++                    {
++                        internal_size = internal_size + size + 1;
++                    }
++                }
++            }
++            else if(temp[0] == 'c')
++            {
++                printf("Connection closed\n");
++                return;
++            }
++
++    }
++    close(receiver_socket_connected);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/sender.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/sender.cpp
+new file mode 100644
+index 0000000..f1364be
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/sender.cpp
+@@ -0,0 +1,98 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <strings.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <string>
++#include <iostream>
++#include <netdb.h>
++#include <netinet/in.h>
++#include <string.h>
++#include <google/protobuf/io/coded_stream.h>
++#include <google/protobuf/generated_message_util.h>
++#include <google/protobuf/message.h>
++#include <google/protobuf/extension_set.h>
++#include <google/protobuf/unknown_field_set.h>
++#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
++
++#include "SerializeServerTemplateCpuCode.h"
++#include "FCorrelationFinancial.pb.h"
++
++void sender(parm *arg)
++{
++    struct sockaddr_in server_addr;
++    int transmitter_socket;
++    socklen_t sin_size;
++    int true_var=1;
++    struct sockaddr_in transmitter_addr;
++
++    if ((transmitter_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
++    {
++        perror("Socket");
++        exit(1);
++    }
++
++    if (setsockopt(transmitter_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
++    {
++        perror("Setsockopt");
++        exit(1);
++    }
++
++    server_addr.sin_family = AF_INET;
++    server_addr.sin_port = htons(2401);
++    server_addr.sin_addr.s_addr = INADDR_ANY;
++    bzero(&(server_addr.sin_zero),8);
++
++    if (bind(transmitter_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
++    {
++        perror("Unable to bind");
++        exit(1);
++    }
++
++    if (listen(transmitter_socket, 5) == -1)
++    {
++        perror("Listen failed");
++        exit(1);
++    }
++
++    printf("TCPServer Waiting for client on port 2401\n");
++
++    sin_size = sizeof(transmitter_addr);
++    int transmitter_socket_connected = accept(transmitter_socket, (struct sockaddr *)&transmitter_addr,&sin_size);
++    printf("Got a connection from (%s , %d)\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));
++    printf("Connection with Spout\n");
++
++    eu::qualimaster::families::protobuf::SIFCorrelationFinancialPairwiseFinancialOutput to;
++
++    struct message_processor_sender msg;
++    while(1)
++    {
++        while(!arg->queue_processor_sender->pop(msg))
++        {
++            ;
++        }
++        to.set_randominteger(msg.data);
++        //already set up a message object called serverAck
++        //make a buffer that can hold message + room for a 32bit delimiter
++        int ackSize=to.ByteSize()+ google::protobuf::io::CodedOutputStream::VarintSize32(to.ByteSize());
++        char* ackBuf=new char[ackSize];
++
++        //write varint delimiter to buffer
++        google::protobuf::io::ArrayOutputStream arrayOut(ackBuf, ackSize);
++        google::protobuf::io::CodedOutputStream codedOut(&arrayOut);
++
++        //write protobuf ack to buffer
++        codedOut.WriteVarint32(to.ByteSize());
++        to.SerializeToCodedStream(&codedOut);
++
++        //send buffer to client
++        send(transmitter_socket_connected, ackBuf, ackSize, 0);
++
++        delete(ackBuf);
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/receiver.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/receiver.cpp
+new file mode 100644
+index 0000000..7714e77
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/receiver.cpp
+@@ -0,0 +1,192 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <strings.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <string>
++#include <iostream>
++#include <google/protobuf/io/coded_stream.h>
++#include <google/protobuf/generated_message_util.h>
++#include <google/protobuf/message.h>
++#include <google/protobuf/extension_set.h>
++#include <google/protobuf/unknown_field_set.h>
++#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
++
++#include "SerializeServerTemplateCpuCode.h"
++#include "parameters.pb.h"
++#include "FCorrelationFinancial.pb.h"
++#include "stringlist.pb.h"
++using namespace std;
++
++void receiver(parm *arg)
++{
++    struct sockaddr_in server_addr;
++    int receiver_socket;
++    int true_var=1;
++    struct sockaddr_in receiver_addr;
++    socklen_t sin_size;
++
++    if ((receiver_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
++    {
++        perror("Socket");
++        exit(1);
++    }
++
++    if (setsockopt(receiver_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
++    {
++        perror("Setsockopt");
++        exit(1);
++    }
++
++    server_addr.sin_family = AF_INET;
++    server_addr.sin_port = htons(2400);
++    server_addr.sin_addr.s_addr = INADDR_ANY;
++    bzero(&(server_addr.sin_zero),8);
++
++    if (bind(receiver_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
++    {
++        perror("Unable to bind");
++        exit(1);
++    }
++
++    if (listen(receiver_socket, 5) == -1)
++    {
++        perror("Listen failed");
++        exit(1);
++    }
++
++    printf("TCPServer Waiting for client on port 2400\n");
++
++    sin_size = (socklen_t)sizeof(receiver_addr);
++    int receiver_socket_connected = accept(receiver_socket, (struct sockaddr *)&receiver_addr,&sin_size);
++    printf("Got a connection from (%s , %d)\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port));
++    printf("Connection with Bolt\n");
++
++    eu::qualimaster::families::protobuf::SIFCorrelationFinancialpreprocessedStreamInput preprocessedStreamInput;
++    eu::qualimaster::base::protos::SStringList stringList;
++    eu::qualimaster::base::protos::SIntegerParameter IntegerParameter;
++
++    google::protobuf::uint32 size;
++    google::protobuf::io::CodedInputStream::Limit msgLimit;
++    unsigned char buffer[MAXDATASIZE];
++    unsigned char temp[10];
++    int numbytes = 0;
++    int internal_size = 0;
++    int pointer = 0;
++    int j, i;
++    bzero(buffer,0);
++
++    struct message_receiver_processor msg;
++    while(1)
++    {
++        numbytes = 0;
++        while(pointer < MESSAGE_HEADER)
++        {
++            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
++            if(numbytes > 0)
++                pointer = pointer + numbytes;
++        }
++
++        google::protobuf::io::CodedInputStream codedIn1(&arrayIn);
++
++        codedIn1.ReadRaw(temp, 2); // Read the protocol Message type
++        codedIn1.ReadVarint32(&size);
++        if((size & 0x7f800000) > 0)
++        {
++            message_size = 4 + (size + 2); //size of size variable in the message + size Bytes + 2 Bytes protocol
++        }
++        else if((size & 0x7f8000) > 0)
++        {
++            message_size = 3 + (size + 2);
++        }
++        else if((size & 0x7f80) > 0)
++        {
++            message_size = 2 + (size + 2);
++        }
++        else
++        {
++            message_size = 1 + (size + 2);
++        }
++        //Read the remaining Bytes from the incoming message from TCP buffer
++        while(pointer < message_size)
++        {
++            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
++            if(numbytes > 0)
++                pointer = pointer + numbytes;
++        }
++        //Deserialize the complete incoming message
++        google::protobuf::io::CodedInputStream codedIn(buffer, message_size);
++
++        // Omit the first two Bytes (Message ID)
++        codedIn.Skip(2);
++
++            if(temp[0] == 'd') { //Data
++                if(temp[1] == 'a') { //1st Data Type
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    preprocessedStreamInput.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    // Parse the message data
++                    msg.type = 0;
++                    msg.data = preprocessedStreamInput.randominteger();
++
++                    //Push data into the lockfree structure
++                    while(!arg->queue_receiver_processor->push(msg))
++                    {
++                        ;
++                    }
++                }
++                if(temp[1] == 'b') { //2st Data Type
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    stringList.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    // Parse the message data
++                    msg.type = 0;
++                    msg.data = stringList.randominteger();
++
++                    //Push data into the lockfree structure
++                    while(!arg->queue_receiver_processor->push(msg))
++                    {
++                        ;
++                    }
++                }
++            }
++            else if(temp[0] == 'p') { //Parameters
++                if(temp[1] == 'a')  {//int Parameter
++                    codedIn.ReadVarint32(&size);
++                    msgLimit = codedIn.PushLimit(size);
++                    IntegerParameter.ParseFromCodedStream(&codedIn);
++                    codedIn.PopLimit(msgLimit);
++                    if((size & 0x7f800000) > 0)
++                    {
++                        internal_size = internal_size + size + 4;
++                    }
++                    else if((size & 0x7f8000) > 0)
++                    {
++                        internal_size = internal_size + size + 3;
++                    }
++                    else if((size & 0x7f80) > 0)
++                    {
++                        internal_size = internal_size + size + 2;
++                    }
++                    else
++                    {
++                        internal_size = internal_size + size + 1;
++                    }
++                }
++            }
++            else if(temp[0] == 'c')
++            {
++                printf("Connection closed\n");
++                return;
++            }
++
++    }
++    close(receiver_socket_connected);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/sender.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/sender.cpp
+new file mode 100644
+index 0000000..f1364be
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/sender.cpp
+@@ -0,0 +1,98 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <strings.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <string>
++#include <iostream>
++#include <netdb.h>
++#include <netinet/in.h>
++#include <string.h>
++#include <google/protobuf/io/coded_stream.h>
++#include <google/protobuf/generated_message_util.h>
++#include <google/protobuf/message.h>
++#include <google/protobuf/extension_set.h>
++#include <google/protobuf/unknown_field_set.h>
++#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
++
++#include "SerializeServerTemplateCpuCode.h"
++#include "FCorrelationFinancial.pb.h"
++
++void sender(parm *arg)
++{
++    struct sockaddr_in server_addr;
++    int transmitter_socket;
++    socklen_t sin_size;
++    int true_var=1;
++    struct sockaddr_in transmitter_addr;
++
++    if ((transmitter_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
++    {
++        perror("Socket");
++        exit(1);
++    }
++
++    if (setsockopt(transmitter_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
++    {
++        perror("Setsockopt");
++        exit(1);
++    }
++
++    server_addr.sin_family = AF_INET;
++    server_addr.sin_port = htons(2401);
++    server_addr.sin_addr.s_addr = INADDR_ANY;
++    bzero(&(server_addr.sin_zero),8);
++
++    if (bind(transmitter_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
++    {
++        perror("Unable to bind");
++        exit(1);
++    }
++
++    if (listen(transmitter_socket, 5) == -1)
++    {
++        perror("Listen failed");
++        exit(1);
++    }
++
++    printf("TCPServer Waiting for client on port 2401\n");
++
++    sin_size = sizeof(transmitter_addr);
++    int transmitter_socket_connected = accept(transmitter_socket, (struct sockaddr *)&transmitter_addr,&sin_size);
++    printf("Got a connection from (%s , %d)\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));
++    printf("Connection with Spout\n");
++
++    eu::qualimaster::families::protobuf::SIFCorrelationFinancialPairwiseFinancialOutput to;
++
++    struct message_processor_sender msg;
++    while(1)
++    {
++        while(!arg->queue_processor_sender->pop(msg))
++        {
++            ;
++        }
++        to.set_randominteger(msg.data);
++        //already set up a message object called serverAck
++        //make a buffer that can hold message + room for a 32bit delimiter
++        int ackSize=to.ByteSize()+ google::protobuf::io::CodedOutputStream::VarintSize32(to.ByteSize());
++        char* ackBuf=new char[ackSize];
++
++        //write varint delimiter to buffer
++        google::protobuf::io::ArrayOutputStream arrayOut(ackBuf, ackSize);
++        google::protobuf::io::CodedOutputStream codedOut(&arrayOut);
++
++        //write protobuf ack to buffer
++        codedOut.WriteVarint32(to.ByteSize());
++        to.SerializeToCodedStream(&codedOut);
++
++        //send buffer to client
++        send(transmitter_socket_connected, ackBuf, ackSize, 0);
++
++        delete(ackBuf);
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSink.java
+new file mode 100644
+index 0000000..e13afb0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSink.java
+@@ -0,0 +1,72 @@
++package eu.qualimaster.data.imp;
++
++import eu.qualimaster.data.inf.IDynamicGraphSink;
++import eu.qualimaster.data.inf.IDynamicGraphSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++* Define the data source class(GEN).
++**/
++public class DynamicGraphSink implements IDynamicGraphSink{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class DynamicGraphSinkHubStreamInput implements IDynamicGraphSinkHubStreamInput {
++        private String hubList;
++        /**
++        * Returns the input value for tuple field "hubList".
++        * @return the tuple value
++        */
++        @Override
++        public String getHubList() {
++            return hubList;
++        }
++
++        /**
++        * Sets the output value for tuple field "hubList".
++        * @param hubList the field value
++        */
++        @Override
++        public void setHubList(String hubList) {
++            this.hubList = hubList;
++        }
++        static {
++            SerializerRegistry.register("DynamicGraphSinkHubStreamInput", DynamicGraphSinkSerializers.DynamicGraphSinkHubStreamInputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data DynamicGraphSinkHubStreamInput
++    **/
++    @Override
++    public void postDataHubStream(IDynamicGraphSinkHubStreamInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IDynamicGraphSinkHubStreamInput to be emitted 
++    **/
++    public void emit(int ticket, IDynamicGraphSinkHubStreamInput tuple) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSinkSerializers.java
+new file mode 100644
+index 0000000..f2ab2af
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSinkSerializers.java
+@@ -0,0 +1,71 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.DynamicGraphSink;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.DynamicGraphSinkProtos.*;
++/**
++ * The implementation of the serializers for the data element "DynamicGraphSink" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class DynamicGraphSinkSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link DynamicGraphSink.IDynamicGraphSinkHubStreamInput} algorithm.
++ */
++public static class DynamicGraphSinkHubStreamInputSerializer extends Serializer<DynamicGraphSink.DynamicGraphSinkHubStreamInput> implements ISerializer<DynamicGraphSink.IDynamicGraphSinkHubStreamInput> {
++
++    @Override
++    public void serializeTo(DynamicGraphSink.IDynamicGraphSinkHubStreamInput object, OutputStream out) throws IOException {
++        SDynamicGraphSinkHubStreamInput tmp = SDynamicGraphSinkHubStreamInput.newBuilder()
++            .setHubList(object.getHubList())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(DynamicGraphSink.IDynamicGraphSinkHubStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getHubList());
++        }
++
++    @Override
++    public DynamicGraphSink.IDynamicGraphSinkHubStreamInput deserializeFrom(InputStream in) throws IOException {
++        DynamicGraphSink.DynamicGraphSinkHubStreamInput result = new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
++        SDynamicGraphSinkHubStreamInput tmp = SDynamicGraphSinkHubStreamInput.parseDelimitedFrom(in);
++        result.setHubList(tmp.getHubList());
++        return result;
++    }
++
++        @Override
++        public DynamicGraphSink.IDynamicGraphSinkHubStreamInput deserializeFrom(IDataInput in) throws IOException {
++            DynamicGraphSink.DynamicGraphSinkHubStreamInput result = new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
++            result.setHubList(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, DynamicGraphSink.DynamicGraphSinkHubStreamInput object) {
++        output.writeString(object.getHubList());
++    }
++
++    @Override
++    public DynamicGraphSink.DynamicGraphSinkHubStreamInput read(Kryo kryo, Input input, Class<DynamicGraphSink.DynamicGraphSinkHubStreamInput> type) {
++        DynamicGraphSink.DynamicGraphSinkHubStreamInput result = new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
++        result.setHubList(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialData.java
+new file mode 100644
+index 0000000..6bf4306
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialData.java
+@@ -0,0 +1,136 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData;
++import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class FixedRateSimulatedFinancialData implements IFixedRateSimulatedFinancialData{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class FixedRateSimulatedFinancialDataSymbolListOutput implements IFixedRateSimulatedFinancialDataSymbolListOutput {
++        private java.util.List<String> allSymbols;
++        /**
++        * Returns the input value for tuple field "allSymbols".
++        * @return the tuple value
++        */
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        /**
++        * Sets the output value for tuple field "allSymbols".
++        * @param allSymbols the field value
++        */
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("FixedRateSimulatedFinancialDataSymbolListOutput", FixedRateSimulatedFinancialDataSerializers.FixedRateSimulatedFinancialDataSymbolListOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class FixedRateSimulatedFinancialDataSpringStreamOutput implements IFixedRateSimulatedFinancialDataSpringStreamOutput {
++        private String symbolTuple;
++        /**
++        * Returns the input value for tuple field "symbolTuple".
++        * @return the tuple value
++        */
++        @Override
++        public String getSymbolTuple(){
++            return symbolTuple;
++        }
++
++        /**
++        * Sets the output value for tuple field "symbolTuple".
++        * @param symbolTuple the field value
++        */
++        @Override
++        public void setSymbolTuple(String symbolTuple){
++            this.symbolTuple = symbolTuple;
++        }
++        static {
++            SerializerRegistry.register("FixedRateSimulatedFinancialDataSpringStreamOutput", FixedRateSimulatedFinancialDataSerializers.FixedRateSimulatedFinancialDataSpringStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return FixedRateSimulatedFinancialDataSymbolListOutput the source data
++    **/
++    @Override
++    public FixedRateSimulatedFinancialDataSymbolListOutput getSymbolList() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(IFixedRateSimulatedFinancialDataSymbolListOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return FixedRateSimulatedFinancialDataSpringStreamOutput the source data
++    **/
++    @Override
++    public FixedRateSimulatedFinancialDataSpringStreamOutput getSpringStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(IFixedRateSimulatedFinancialDataSpringStreamOutput tuple) {
++        return null;
++    }
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialDataSerializers.java
+new file mode 100644
+index 0000000..1a52b63
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialDataSerializers.java
+@@ -0,0 +1,113 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.FixedRateSimulatedFinancialData;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.FixedRateSimulatedFinancialDataProtos.*;
++/**
++ * The implementation of the serializers for the data element "FixedRateSimulatedFinancialData" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FixedRateSimulatedFinancialDataSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput} algorithm.
++ */
++public static class FixedRateSimulatedFinancialDataSymbolListOutputSerializer extends Serializer<FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput> implements ISerializer<FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput> {
++
++    @Override
++    public void serializeTo(FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
++        FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
++            FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput> type) {
++        FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput} algorithm.
++ */
++public static class FixedRateSimulatedFinancialDataSpringStreamOutputSerializer extends Serializer<FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput> implements ISerializer<FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput> {
++
++    @Override
++    public void serializeTo(FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
++        SFixedRateSimulatedFinancialDataSpringStreamOutput tmp = SFixedRateSimulatedFinancialDataSpringStreamOutput.newBuilder()
++            .setSymbolTuple(object.getSymbolTuple())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolTuple());
++        }
++
++    @Override
++    public FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput();
++        SFixedRateSimulatedFinancialDataSpringStreamOutput tmp = SFixedRateSimulatedFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolTuple(tmp.getSymbolTuple());
++        return result;
++    }
++
++        @Override
++        public FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput();
++            result.setSymbolTuple(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput object) {
++        output.writeString(object.getSymbolTuple());
++    }
++
++    @Override
++    public FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput> type) {
++        FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput();
++        result.setSymbolTuple(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialData.java
+new file mode 100644
+index 0000000..c0245cb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialData.java
+@@ -0,0 +1,147 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.IFocusFincancialData;
++import eu.qualimaster.data.inf.IFocusFincancialData.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class FocusFincancialData implements IFocusFincancialData{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class FocusFincancialDataSymbolListOutput implements IFocusFincancialDataSymbolListOutput {
++        private java.util.List<String> allSymbols;
++        /**
++        * Returns the input value for tuple field "allSymbols".
++        * @return the tuple value
++        */
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        /**
++        * Sets the output value for tuple field "allSymbols".
++        * @param allSymbols the field value
++        */
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("FocusFincancialDataSymbolListOutput", FocusFincancialDataSerializers.FocusFincancialDataSymbolListOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class FocusFincancialDataSpringStreamOutput implements IFocusFincancialDataSpringStreamOutput {
++        private String symbolTuple;
++        /**
++        * Returns the input value for tuple field "symbolTuple".
++        * @return the tuple value
++        */
++        @Override
++        public String getSymbolTuple(){
++            return symbolTuple;
++        }
++
++        /**
++        * Sets the output value for tuple field "symbolTuple".
++        * @param symbolTuple the field value
++        */
++        @Override
++        public void setSymbolTuple(String symbolTuple){
++            this.symbolTuple = symbolTuple;
++        }
++        static {
++            SerializerRegistry.register("FocusFincancialDataSpringStreamOutput", FocusFincancialDataSerializers.FocusFincancialDataSpringStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return FocusFincancialDataSymbolListOutput the source data
++    **/
++    @Override
++    public FocusFincancialDataSymbolListOutput getSymbolList() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(IFocusFincancialDataSymbolListOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return FocusFincancialDataSpringStreamOutput the source data
++    **/
++    @Override
++    public FocusFincancialDataSpringStreamOutput getSpringStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(IFocusFincancialDataSpringStreamOutput tuple) {
++        return null;
++    }
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "playerList".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterPlayerList(String value) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialDataSerializers.java
+new file mode 100644
+index 0000000..fdbd7ce
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialDataSerializers.java
+@@ -0,0 +1,113 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.FocusFincancialData;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.FocusFincancialDataProtos.*;
++/**
++ * The implementation of the serializers for the data element "FocusFincancialData" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FocusFincancialDataSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link FocusFincancialData.IFocusFincancialDataSymbolListOutput} algorithm.
++ */
++public static class FocusFincancialDataSymbolListOutputSerializer extends Serializer<FocusFincancialData.FocusFincancialDataSymbolListOutput> implements ISerializer<FocusFincancialData.IFocusFincancialDataSymbolListOutput> {
++
++    @Override
++    public void serializeTo(FocusFincancialData.IFocusFincancialDataSymbolListOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(FocusFincancialData.IFocusFincancialDataSymbolListOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public FocusFincancialData.IFocusFincancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
++        FocusFincancialData.FocusFincancialDataSymbolListOutput result = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public FocusFincancialData.IFocusFincancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
++            FocusFincancialData.FocusFincancialDataSymbolListOutput result = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FocusFincancialData.FocusFincancialDataSymbolListOutput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public FocusFincancialData.FocusFincancialDataSymbolListOutput read(Kryo kryo, Input input, Class<FocusFincancialData.FocusFincancialDataSymbolListOutput> type) {
++        FocusFincancialData.FocusFincancialDataSymbolListOutput result = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link FocusFincancialData.IFocusFincancialDataSpringStreamOutput} algorithm.
++ */
++public static class FocusFincancialDataSpringStreamOutputSerializer extends Serializer<FocusFincancialData.FocusFincancialDataSpringStreamOutput> implements ISerializer<FocusFincancialData.IFocusFincancialDataSpringStreamOutput> {
++
++    @Override
++    public void serializeTo(FocusFincancialData.IFocusFincancialDataSpringStreamOutput object, OutputStream out) throws IOException {
++        SFocusFincancialDataSpringStreamOutput tmp = SFocusFincancialDataSpringStreamOutput.newBuilder()
++            .setSymbolTuple(object.getSymbolTuple())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(FocusFincancialData.IFocusFincancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolTuple());
++        }
++
++    @Override
++    public FocusFincancialData.IFocusFincancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FocusFincancialData.FocusFincancialDataSpringStreamOutput result = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
++        SFocusFincancialDataSpringStreamOutput tmp = SFocusFincancialDataSpringStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolTuple(tmp.getSymbolTuple());
++        return result;
++    }
++
++        @Override
++        public FocusFincancialData.IFocusFincancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FocusFincancialData.FocusFincancialDataSpringStreamOutput result = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
++            result.setSymbolTuple(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FocusFincancialData.FocusFincancialDataSpringStreamOutput object) {
++        output.writeString(object.getSymbolTuple());
++    }
++
++    @Override
++    public FocusFincancialData.FocusFincancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<FocusFincancialData.FocusFincancialDataSpringStreamOutput> type) {
++        FocusFincancialData.FocusFincancialDataSpringStreamOutput result = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
++        result.setSymbolTuple(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSink.java
+new file mode 100644
+index 0000000..2e47081
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSink.java
+@@ -0,0 +1,114 @@
++package eu.qualimaster.data.imp;
++
++import eu.qualimaster.data.inf.IFocusSink;
++import eu.qualimaster.data.inf.IFocusSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++* Define the data source class(GEN).
++**/
++public class FocusSink implements IFocusSink{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class FocusSinkRecommendationStreamInput implements IFocusSinkRecommendationStreamInput {
++        private String recommendations;
++        /**
++        * Returns the input value for tuple field "recommendations".
++        * @return the tuple value
++        */
++        @Override
++        public String getRecommendations() {
++            return recommendations;
++        }
++
++        /**
++        * Sets the output value for tuple field "recommendations".
++        * @param recommendations the field value
++        */
++        @Override
++        public void setRecommendations(String recommendations) {
++            this.recommendations = recommendations;
++        }
++        static {
++            SerializerRegistry.register("FocusSinkRecommendationStreamInput", FocusSinkSerializers.FocusSinkRecommendationStreamInputSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class FocusSinkEdgeStreamInput implements IFocusSinkEdgeStreamInput {
++        private String edge;
++        /**
++        * Returns the input value for tuple field "edge".
++        * @return the tuple value
++        */
++        @Override
++        public String getEdge() {
++            return edge;
++        }
++
++        /**
++        * Sets the output value for tuple field "edge".
++        * @param edge the field value
++        */
++        @Override
++        public void setEdge(String edge) {
++            this.edge = edge;
++        }
++        static {
++            SerializerRegistry.register("FocusSinkEdgeStreamInput", FocusSinkSerializers.FocusSinkEdgeStreamInputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data FocusSinkRecommendationStreamInput
++    **/
++    @Override
++    public void postDataRecommendationStream(IFocusSinkRecommendationStreamInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IFocusSinkRecommendationStreamInput to be emitted 
++    **/
++    public void emit(int ticket, IFocusSinkRecommendationStreamInput tuple) {
++    }
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data FocusSinkEdgeStreamInput
++    **/
++    @Override
++    public void postDataEdgeStream(IFocusSinkEdgeStreamInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IFocusSinkEdgeStreamInput to be emitted 
++    **/
++    public void emit(int ticket, IFocusSinkEdgeStreamInput tuple) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSinkSerializers.java
+new file mode 100644
+index 0000000..c097bf3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSinkSerializers.java
+@@ -0,0 +1,117 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.FocusSink;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.FocusSinkProtos.*;
++/**
++ * The implementation of the serializers for the data element "FocusSink" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FocusSinkSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link FocusSink.IFocusSinkRecommendationStreamInput} algorithm.
++ */
++public static class FocusSinkRecommendationStreamInputSerializer extends Serializer<FocusSink.FocusSinkRecommendationStreamInput> implements ISerializer<FocusSink.IFocusSinkRecommendationStreamInput> {
++
++    @Override
++    public void serializeTo(FocusSink.IFocusSinkRecommendationStreamInput object, OutputStream out) throws IOException {
++        SFocusSinkRecommendationStreamInput tmp = SFocusSinkRecommendationStreamInput.newBuilder()
++            .setRecommendations(object.getRecommendations())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(FocusSink.IFocusSinkRecommendationStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getRecommendations());
++        }
++
++    @Override
++    public FocusSink.IFocusSinkRecommendationStreamInput deserializeFrom(InputStream in) throws IOException {
++        FocusSink.FocusSinkRecommendationStreamInput result = new FocusSink.FocusSinkRecommendationStreamInput();
++        SFocusSinkRecommendationStreamInput tmp = SFocusSinkRecommendationStreamInput.parseDelimitedFrom(in);
++        result.setRecommendations(tmp.getRecommendations());
++        return result;
++    }
++
++        @Override
++        public FocusSink.IFocusSinkRecommendationStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FocusSink.FocusSinkRecommendationStreamInput result = new FocusSink.FocusSinkRecommendationStreamInput();
++            result.setRecommendations(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FocusSink.FocusSinkRecommendationStreamInput object) {
++        output.writeString(object.getRecommendations());
++    }
++
++    @Override
++    public FocusSink.FocusSinkRecommendationStreamInput read(Kryo kryo, Input input, Class<FocusSink.FocusSinkRecommendationStreamInput> type) {
++        FocusSink.FocusSinkRecommendationStreamInput result = new FocusSink.FocusSinkRecommendationStreamInput();
++        result.setRecommendations(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link FocusSink.IFocusSinkEdgeStreamInput} algorithm.
++ */
++public static class FocusSinkEdgeStreamInputSerializer extends Serializer<FocusSink.FocusSinkEdgeStreamInput> implements ISerializer<FocusSink.IFocusSinkEdgeStreamInput> {
++
++    @Override
++    public void serializeTo(FocusSink.IFocusSinkEdgeStreamInput object, OutputStream out) throws IOException {
++        SFocusSinkEdgeStreamInput tmp = SFocusSinkEdgeStreamInput.newBuilder()
++            .setEdge(object.getEdge())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(FocusSink.IFocusSinkEdgeStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getEdge());
++        }
++
++    @Override
++    public FocusSink.IFocusSinkEdgeStreamInput deserializeFrom(InputStream in) throws IOException {
++        FocusSink.FocusSinkEdgeStreamInput result = new FocusSink.FocusSinkEdgeStreamInput();
++        SFocusSinkEdgeStreamInput tmp = SFocusSinkEdgeStreamInput.parseDelimitedFrom(in);
++        result.setEdge(tmp.getEdge());
++        return result;
++    }
++
++        @Override
++        public FocusSink.IFocusSinkEdgeStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FocusSink.FocusSinkEdgeStreamInput result = new FocusSink.FocusSinkEdgeStreamInput();
++            result.setEdge(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FocusSink.FocusSinkEdgeStreamInput object) {
++        output.writeString(object.getEdge());
++    }
++
++    @Override
++    public FocusSink.FocusSinkEdgeStreamInput read(Kryo kryo, Input input, Class<FocusSink.FocusSinkEdgeStreamInput> type) {
++        FocusSink.FocusSinkEdgeStreamInput result = new FocusSink.FocusSinkEdgeStreamInput();
++        result.setEdge(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_Sink.java
+new file mode 100644
+index 0000000..4c29745
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_Sink.java
+@@ -0,0 +1,126 @@
++package eu.qualimaster.data.imp;
++
++import eu.qualimaster.data.inf.IMI_data_Sink;
++import eu.qualimaster.data.inf.IMI_data_Sink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++* Define the data source class(GEN).
++**/
++public class MI_data_Sink implements IMI_data_Sink{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class MI_data_SinkPairwiseFinancialInput implements IMI_data_SinkPairwiseFinancialInput {
++        private String id0;
++        private String id1;
++        private String date;
++        private double value;
++        /**
++        * Returns the input value for tuple field "id0".
++        * @return the tuple value
++        */
++        @Override
++        public String getId0() {
++            return id0;
++        }
++
++        /**
++        * Sets the output value for tuple field "id0".
++        * @param id0 the field value
++        */
++        @Override
++        public void setId0(String id0) {
++            this.id0 = id0;
++        }
++        /**
++        * Returns the input value for tuple field "id1".
++        * @return the tuple value
++        */
++        @Override
++        public String getId1() {
++            return id1;
++        }
++
++        /**
++        * Sets the output value for tuple field "id1".
++        * @param id1 the field value
++        */
++        @Override
++        public void setId1(String id1) {
++            this.id1 = id1;
++        }
++        /**
++        * Returns the input value for tuple field "date".
++        * @return the tuple value
++        */
++        @Override
++        public String getDate() {
++            return date;
++        }
++
++        /**
++        * Sets the output value for tuple field "date".
++        * @param date the field value
++        */
++        @Override
++        public void setDate(String date) {
++            this.date = date;
++        }
++        /**
++        * Returns the input value for tuple field "value".
++        * @return the tuple value
++        */
++        @Override
++        public double getValue() {
++            return value;
++        }
++
++        /**
++        * Sets the output value for tuple field "value".
++        * @param value the field value
++        */
++        @Override
++        public void setValue(double value) {
++            this.value = value;
++        }
++        static {
++            SerializerRegistry.register("MI_data_SinkPairwiseFinancialInput", MI_data_SinkSerializers.MI_data_SinkPairwiseFinancialInputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data MI_data_SinkPairwiseFinancialInput
++    **/
++    @Override
++    public void postDataPairwiseFinancial(IMI_data_SinkPairwiseFinancialInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IMI_data_SinkPairwiseFinancialInput to be emitted 
++    **/
++    public void emit(int ticket, IMI_data_SinkPairwiseFinancialInput tuple) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_SinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_SinkSerializers.java
+new file mode 100644
+index 0000000..67a0809
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_SinkSerializers.java
+@@ -0,0 +1,89 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.MI_data_Sink;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.MI_data_SinkProtos.*;
++/**
++ * The implementation of the serializers for the data element "MI_data_Sink" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class MI_data_SinkSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link MI_data_Sink.IMI_data_SinkPairwiseFinancialInput} algorithm.
++ */
++public static class MI_data_SinkPairwiseFinancialInputSerializer extends Serializer<MI_data_Sink.MI_data_SinkPairwiseFinancialInput> implements ISerializer<MI_data_Sink.IMI_data_SinkPairwiseFinancialInput> {
++
++    @Override
++    public void serializeTo(MI_data_Sink.IMI_data_SinkPairwiseFinancialInput object, OutputStream out) throws IOException {
++        SMI_data_SinkPairwiseFinancialInput tmp = SMI_data_SinkPairwiseFinancialInput.newBuilder()
++            .setId0(object.getId0())
++            .setId1(object.getId1())
++            .setDate(object.getDate())
++            .setValue(object.getValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(MI_data_Sink.IMI_data_SinkPairwiseFinancialInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getId0());
++            out.writeString(object.getId1());
++            out.writeString(object.getDate());
++            out.writeDouble(object.getValue());
++        }
++
++    @Override
++    public MI_data_Sink.IMI_data_SinkPairwiseFinancialInput deserializeFrom(InputStream in) throws IOException {
++        MI_data_Sink.MI_data_SinkPairwiseFinancialInput result = new MI_data_Sink.MI_data_SinkPairwiseFinancialInput();
++        SMI_data_SinkPairwiseFinancialInput tmp = SMI_data_SinkPairwiseFinancialInput.parseDelimitedFrom(in);
++        result.setId0(tmp.getId0());
++        result.setId1(tmp.getId1());
++        result.setDate(tmp.getDate());
++        result.setValue(tmp.getValue());
++        return result;
++    }
++
++        @Override
++        public MI_data_Sink.IMI_data_SinkPairwiseFinancialInput deserializeFrom(IDataInput in) throws IOException {
++            MI_data_Sink.MI_data_SinkPairwiseFinancialInput result = new MI_data_Sink.MI_data_SinkPairwiseFinancialInput();
++            result.setId0(in.nextString());
++            result.setId1(in.nextString());
++            result.setDate(in.nextString());
++            result.setValue(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, MI_data_Sink.MI_data_SinkPairwiseFinancialInput object) {
++        output.writeString(object.getId0());
++        output.writeString(object.getId1());
++        output.writeString(object.getDate());
++        output.writeDouble(object.getValue());
++    }
++
++    @Override
++    public MI_data_Sink.MI_data_SinkPairwiseFinancialInput read(Kryo kryo, Input input, Class<MI_data_Sink.MI_data_SinkPairwiseFinancialInput> type) {
++        MI_data_Sink.MI_data_SinkPairwiseFinancialInput result = new MI_data_Sink.MI_data_SinkPairwiseFinancialInput();
++        result.setId0(input.readString());
++        result.setId1(input.readString());
++        result.setDate(input.readString());
++        result.setValue(input.readDouble());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSource.java
+new file mode 100644
+index 0000000..b3de089
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSource.java
+@@ -0,0 +1,183 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.INewTwitterStreamDataSource;
++import eu.qualimaster.data.inf.INewTwitterStreamDataSource.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class NewTwitterStreamDataSource implements INewTwitterStreamDataSource{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class NewTwitterStreamDataSourceAnalysisOutput implements INewTwitterStreamDataSourceAnalysisOutput {
++        private twitter4j.Status status;
++        /**
++        * Returns the input value for tuple field "status".
++        * @return the tuple value
++        */
++        @Override
++        public twitter4j.Status getStatus(){
++            return status;
++        }
++
++        /**
++        * Sets the output value for tuple field "status".
++        * @param status the field value
++        */
++        @Override
++        public void setStatus(twitter4j.Status status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("NewTwitterStreamDataSourceAnalysisOutput", NewTwitterStreamDataSourceSerializers.NewTwitterStreamDataSourceAnalysisOutputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return NewTwitterStreamDataSourceAnalysisOutput the source data
++    **/
++    @Override
++    public NewTwitterStreamDataSourceAnalysisOutput getAnalysis() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(INewTwitterStreamDataSourceAnalysisOutput tuple) {
++        return null;
++    }
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "consumerKey".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterConsumerKey(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "consumerSecret".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterConsumerSecret(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "accessToken".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterAccessToken(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "accessTokenSecret".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterAccessTokenSecret(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "queueSize".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterQueueSize(int value) {
++    }
++
++    /**
++     * Sets the data source parameter "tweetDirectory".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterTweetDirectory(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "speedFactor".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterSpeedFactor(double value) {
++    }
++
++    /**
++     * Sets the data source parameter "runLocally".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterRunLocally(boolean value) {
++    }
++
++    /**
++     * Sets the data source parameter "adjustTimeToNow".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterAdjustTimeToNow(boolean value) {
++    }
++
++    /**
++     * Sets the data source parameter "realLoops".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterRealLoops(boolean value) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSourceSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSourceSerializers.java
+new file mode 100644
+index 0000000..d04ab1c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSourceSerializers.java
+@@ -0,0 +1,67 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.NewTwitterStreamDataSource;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.NewTwitterStreamDataSourceProtos.*;
++/**
++ * The implementation of the serializers for the data element "NewTwitterStreamDataSource" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class NewTwitterStreamDataSourceSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput} algorithm.
++ */
++public static class NewTwitterStreamDataSourceAnalysisOutputSerializer extends Serializer<NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput> implements ISerializer<NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput> {
++
++    @Override
++    public void serializeTo(NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput deserializeFrom(InputStream in) throws IOException {
++        NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput result = new NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
++            NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput result = new NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput read(Kryo kryo, Input input, Class<NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput> type) {
++        NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput result = new NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput();
++        result.setStatus(kryo.readObject(input, twitter4j.Status.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSink.java
+new file mode 100644
+index 0000000..6c962fd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSink.java
+@@ -0,0 +1,222 @@
++package eu.qualimaster.data.imp;
++
++import eu.qualimaster.data.inf.IPriorityDataSink;
++import eu.qualimaster.data.inf.IPriorityDataSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++* Define the data source class(GEN).
++**/
++public class PriorityDataSink implements IPriorityDataSink{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class PriorityDataSinkPairwiseFinancialInput implements IPriorityDataSinkPairwiseFinancialInput {
++        private String id0;
++        private String id1;
++        private String date;
++        private double value;
++        /**
++        * Returns the input value for tuple field "id0".
++        * @return the tuple value
++        */
++        @Override
++        public String getId0() {
++            return id0;
++        }
++
++        /**
++        * Sets the output value for tuple field "id0".
++        * @param id0 the field value
++        */
++        @Override
++        public void setId0(String id0) {
++            this.id0 = id0;
++        }
++        /**
++        * Returns the input value for tuple field "id1".
++        * @return the tuple value
++        */
++        @Override
++        public String getId1() {
++            return id1;
++        }
++
++        /**
++        * Sets the output value for tuple field "id1".
++        * @param id1 the field value
++        */
++        @Override
++        public void setId1(String id1) {
++            this.id1 = id1;
++        }
++        /**
++        * Returns the input value for tuple field "date".
++        * @return the tuple value
++        */
++        @Override
++        public String getDate() {
++            return date;
++        }
++
++        /**
++        * Sets the output value for tuple field "date".
++        * @param date the field value
++        */
++        @Override
++        public void setDate(String date) {
++            this.date = date;
++        }
++        /**
++        * Returns the input value for tuple field "value".
++        * @return the tuple value
++        */
++        @Override
++        public double getValue() {
++            return value;
++        }
++
++        /**
++        * Sets the output value for tuple field "value".
++        * @param value the field value
++        */
++        @Override
++        public void setValue(double value) {
++            this.value = value;
++        }
++        static {
++            SerializerRegistry.register("PriorityDataSinkPairwiseFinancialInput", PriorityDataSinkSerializers.PriorityDataSinkPairwiseFinancialInputSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class PriorityDataSinkAnalyzedStreamInput implements IPriorityDataSinkAnalyzedStreamInput {
++        private String symbolId;
++        private long timestamp;
++        private double value;
++        private int volume;
++        /**
++        * Returns the input value for tuple field "symbolId".
++        * @return the tuple value
++        */
++        @Override
++        public String getSymbolId() {
++            return symbolId;
++        }
++
++        /**
++        * Sets the output value for tuple field "symbolId".
++        * @param symbolId the field value
++        */
++        @Override
++        public void setSymbolId(String symbolId) {
++            this.symbolId = symbolId;
++        }
++        /**
++        * Returns the input value for tuple field "timestamp".
++        * @return the tuple value
++        */
++        @Override
++        public long getTimestamp() {
++            return timestamp;
++        }
++
++        /**
++        * Sets the output value for tuple field "timestamp".
++        * @param timestamp the field value
++        */
++        @Override
++        public void setTimestamp(long timestamp) {
++            this.timestamp = timestamp;
++        }
++        /**
++        * Returns the input value for tuple field "value".
++        * @return the tuple value
++        */
++        @Override
++        public double getValue() {
++            return value;
++        }
++
++        /**
++        * Sets the output value for tuple field "value".
++        * @param value the field value
++        */
++        @Override
++        public void setValue(double value) {
++            this.value = value;
++        }
++        /**
++        * Returns the input value for tuple field "volume".
++        * @return the tuple value
++        */
++        @Override
++        public int getVolume() {
++            return volume;
++        }
++
++        /**
++        * Sets the output value for tuple field "volume".
++        * @param volume the field value
++        */
++        @Override
++        public void setVolume(int volume) {
++            this.volume = volume;
++        }
++        static {
++            SerializerRegistry.register("PriorityDataSinkAnalyzedStreamInput", PriorityDataSinkSerializers.PriorityDataSinkAnalyzedStreamInputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data PriorityDataSinkPairwiseFinancialInput
++    **/
++    @Override
++    public void postDataPairwiseFinancial(IPriorityDataSinkPairwiseFinancialInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IPriorityDataSinkPairwiseFinancialInput to be emitted 
++    **/
++    public void emit(int ticket, IPriorityDataSinkPairwiseFinancialInput tuple) {
++    }
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data PriorityDataSinkAnalyzedStreamInput
++    **/
++    @Override
++    public void postDataAnalyzedStream(IPriorityDataSinkAnalyzedStreamInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IPriorityDataSinkAnalyzedStreamInput to be emitted 
++    **/
++    public void emit(int ticket, IPriorityDataSinkAnalyzedStreamInput tuple) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSinkSerializers.java
+new file mode 100644
+index 0000000..713e9a2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSinkSerializers.java
+@@ -0,0 +1,153 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.PriorityDataSink;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.PriorityDataSinkProtos.*;
++/**
++ * The implementation of the serializers for the data element "PriorityDataSink" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class PriorityDataSinkSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput} algorithm.
++ */
++public static class PriorityDataSinkPairwiseFinancialInputSerializer extends Serializer<PriorityDataSink.PriorityDataSinkPairwiseFinancialInput> implements ISerializer<PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput> {
++
++    @Override
++    public void serializeTo(PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput object, OutputStream out) throws IOException {
++        SPriorityDataSinkPairwiseFinancialInput tmp = SPriorityDataSinkPairwiseFinancialInput.newBuilder()
++            .setId0(object.getId0())
++            .setId1(object.getId1())
++            .setDate(object.getDate())
++            .setValue(object.getValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getId0());
++            out.writeString(object.getId1());
++            out.writeString(object.getDate());
++            out.writeDouble(object.getValue());
++        }
++
++    @Override
++    public PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput deserializeFrom(InputStream in) throws IOException {
++        PriorityDataSink.PriorityDataSinkPairwiseFinancialInput result = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++        SPriorityDataSinkPairwiseFinancialInput tmp = SPriorityDataSinkPairwiseFinancialInput.parseDelimitedFrom(in);
++        result.setId0(tmp.getId0());
++        result.setId1(tmp.getId1());
++        result.setDate(tmp.getDate());
++        result.setValue(tmp.getValue());
++        return result;
++    }
++
++        @Override
++        public PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput deserializeFrom(IDataInput in) throws IOException {
++            PriorityDataSink.PriorityDataSinkPairwiseFinancialInput result = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++            result.setId0(in.nextString());
++            result.setId1(in.nextString());
++            result.setDate(in.nextString());
++            result.setValue(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, PriorityDataSink.PriorityDataSinkPairwiseFinancialInput object) {
++        output.writeString(object.getId0());
++        output.writeString(object.getId1());
++        output.writeString(object.getDate());
++        output.writeDouble(object.getValue());
++    }
++
++    @Override
++    public PriorityDataSink.PriorityDataSinkPairwiseFinancialInput read(Kryo kryo, Input input, Class<PriorityDataSink.PriorityDataSinkPairwiseFinancialInput> type) {
++        PriorityDataSink.PriorityDataSinkPairwiseFinancialInput result = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++        result.setId0(input.readString());
++        result.setId1(input.readString());
++        result.setDate(input.readString());
++        result.setValue(input.readDouble());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput} algorithm.
++ */
++public static class PriorityDataSinkAnalyzedStreamInputSerializer extends Serializer<PriorityDataSink.PriorityDataSinkAnalyzedStreamInput> implements ISerializer<PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput> {
++
++    @Override
++    public void serializeTo(PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput object, OutputStream out) throws IOException {
++        SPriorityDataSinkAnalyzedStreamInput tmp = SPriorityDataSinkAnalyzedStreamInput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .setVolume(object.getVolume())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++            out.writeInt(object.getVolume());
++        }
++
++    @Override
++    public PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput deserializeFrom(InputStream in) throws IOException {
++        PriorityDataSink.PriorityDataSinkAnalyzedStreamInput result = new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++        SPriorityDataSinkAnalyzedStreamInput tmp = SPriorityDataSinkAnalyzedStreamInput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        result.setVolume(tmp.getVolume());
++        return result;
++    }
++
++        @Override
++        public PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput deserializeFrom(IDataInput in) throws IOException {
++            PriorityDataSink.PriorityDataSinkAnalyzedStreamInput result = new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            result.setVolume(in.nextInt());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, PriorityDataSink.PriorityDataSinkAnalyzedStreamInput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++        output.writeInt(object.getVolume());
++    }
++
++    @Override
++    public PriorityDataSink.PriorityDataSinkAnalyzedStreamInput read(Kryo kryo, Input input, Class<PriorityDataSink.PriorityDataSinkAnalyzedStreamInput> type) {
++        PriorityDataSink.PriorityDataSinkAnalyzedStreamInput result = new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        result.setVolume(input.readInt());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSink.java
+new file mode 100644
+index 0000000..6adc15b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSink.java
+@@ -0,0 +1,90 @@
++package eu.qualimaster.data.imp;
++
++import eu.qualimaster.data.inf.IRandomSink;
++import eu.qualimaster.data.inf.IRandomSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++* Define the data source class(GEN).
++**/
++public class RandomSink implements IRandomSink{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class RandomSinkRandomDataInput implements IRandomSinkRandomDataInput {
++        private int randomInteger;
++        private long timestamp;
++        /**
++        * Returns the input value for tuple field "randomInteger".
++        * @return the tuple value
++        */
++        @Override
++        public int getRandomInteger() {
++            return randomInteger;
++        }
++
++        /**
++        * Sets the output value for tuple field "randomInteger".
++        * @param randomInteger the field value
++        */
++        @Override
++        public void setRandomInteger(int randomInteger) {
++            this.randomInteger = randomInteger;
++        }
++        /**
++        * Returns the input value for tuple field "timestamp".
++        * @return the tuple value
++        */
++        @Override
++        public long getTimestamp() {
++            return timestamp;
++        }
++
++        /**
++        * Sets the output value for tuple field "timestamp".
++        * @param timestamp the field value
++        */
++        @Override
++        public void setTimestamp(long timestamp) {
++            this.timestamp = timestamp;
++        }
++        static {
++            SerializerRegistry.register("RandomSinkRandomDataInput", RandomSinkSerializers.RandomSinkRandomDataInputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data RandomSinkRandomDataInput
++    **/
++    @Override
++    public void postDataRandomData(IRandomSinkRandomDataInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IRandomSinkRandomDataInput to be emitted 
++    **/
++    public void emit(int ticket, IRandomSinkRandomDataInput tuple) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSinkSerializers.java
+new file mode 100644
+index 0000000..46115f2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSinkSerializers.java
+@@ -0,0 +1,77 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.RandomSink;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.RandomSinkProtos.*;
++/**
++ * The implementation of the serializers for the data element "RandomSink" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class RandomSinkSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link RandomSink.IRandomSinkRandomDataInput} algorithm.
++ */
++public static class RandomSinkRandomDataInputSerializer extends Serializer<RandomSink.RandomSinkRandomDataInput> implements ISerializer<RandomSink.IRandomSinkRandomDataInput> {
++
++    @Override
++    public void serializeTo(RandomSink.IRandomSinkRandomDataInput object, OutputStream out) throws IOException {
++        SRandomSinkRandomDataInput tmp = SRandomSinkRandomDataInput.newBuilder()
++            .setRandomInteger(object.getRandomInteger())
++            .setTimestamp(object.getTimestamp())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(RandomSink.IRandomSinkRandomDataInput object, IDataOutput out) throws IOException {
++            out.writeInt(object.getRandomInteger());
++            out.writeLong(object.getTimestamp());
++        }
++
++    @Override
++    public RandomSink.IRandomSinkRandomDataInput deserializeFrom(InputStream in) throws IOException {
++        RandomSink.RandomSinkRandomDataInput result = new RandomSink.RandomSinkRandomDataInput();
++        SRandomSinkRandomDataInput tmp = SRandomSinkRandomDataInput.parseDelimitedFrom(in);
++        result.setRandomInteger(tmp.getRandomInteger());
++        result.setTimestamp(tmp.getTimestamp());
++        return result;
++    }
++
++        @Override
++        public RandomSink.IRandomSinkRandomDataInput deserializeFrom(IDataInput in) throws IOException {
++            RandomSink.RandomSinkRandomDataInput result = new RandomSink.RandomSinkRandomDataInput();
++            result.setRandomInteger(in.nextInt());
++            result.setTimestamp(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, RandomSink.RandomSinkRandomDataInput object) {
++        output.writeInt(object.getRandomInteger());
++        output.writeLong(object.getTimestamp());
++    }
++
++    @Override
++    public RandomSink.RandomSinkRandomDataInput read(Kryo kryo, Input input, Class<RandomSink.RandomSinkRandomDataInput> type) {
++        RandomSink.RandomSinkRandomDataInput result = new RandomSink.RandomSinkRandomDataInput();
++        result.setRandomInteger(input.readInt());
++        result.setTimestamp(input.readLong());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSource.java
+new file mode 100644
+index 0000000..91b6070
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSource.java
+@@ -0,0 +1,120 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.IRandomSource;
++import eu.qualimaster.data.inf.IRandomSource.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class RandomSource implements IRandomSource{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class RandomSourceRandomDataOutput implements IRandomSourceRandomDataOutput {
++        private int randomInteger;
++        private long timestamp;
++        /**
++        * Returns the input value for tuple field "randomInteger".
++        * @return the tuple value
++        */
++        @Override
++        public int getRandomInteger(){
++            return randomInteger;
++        }
++
++        /**
++        * Sets the output value for tuple field "randomInteger".
++        * @param randomInteger the field value
++        */
++        @Override
++        public void setRandomInteger(int randomInteger){
++            this.randomInteger = randomInteger;
++        }
++        /**
++        * Returns the input value for tuple field "timestamp".
++        * @return the tuple value
++        */
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        /**
++        * Sets the output value for tuple field "timestamp".
++        * @param timestamp the field value
++        */
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        static {
++            SerializerRegistry.register("RandomSourceRandomDataOutput", RandomSourceSerializers.RandomSourceRandomDataOutputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return RandomSourceRandomDataOutput the source data
++    **/
++    @Override
++    public RandomSourceRandomDataOutput getRandomData() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(IRandomSourceRandomDataOutput tuple) {
++        return null;
++    }
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "delay".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterDelay(int value) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSourceSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSourceSerializers.java
+new file mode 100644
+index 0000000..135df8e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSourceSerializers.java
+@@ -0,0 +1,77 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.RandomSource;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.RandomSourceProtos.*;
++/**
++ * The implementation of the serializers for the data element "RandomSource" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class RandomSourceSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link RandomSource.IRandomSourceRandomDataOutput} algorithm.
++ */
++public static class RandomSourceRandomDataOutputSerializer extends Serializer<RandomSource.RandomSourceRandomDataOutput> implements ISerializer<RandomSource.IRandomSourceRandomDataOutput> {
++
++    @Override
++    public void serializeTo(RandomSource.IRandomSourceRandomDataOutput object, OutputStream out) throws IOException {
++        SRandomSourceRandomDataOutput tmp = SRandomSourceRandomDataOutput.newBuilder()
++            .setRandomInteger(object.getRandomInteger())
++            .setTimestamp(object.getTimestamp())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(RandomSource.IRandomSourceRandomDataOutput object, IDataOutput out) throws IOException {
++            out.writeInt(object.getRandomInteger());
++            out.writeLong(object.getTimestamp());
++        }
++
++    @Override
++    public RandomSource.IRandomSourceRandomDataOutput deserializeFrom(InputStream in) throws IOException {
++        RandomSource.RandomSourceRandomDataOutput result = new RandomSource.RandomSourceRandomDataOutput();
++        SRandomSourceRandomDataOutput tmp = SRandomSourceRandomDataOutput.parseDelimitedFrom(in);
++        result.setRandomInteger(tmp.getRandomInteger());
++        result.setTimestamp(tmp.getTimestamp());
++        return result;
++    }
++
++        @Override
++        public RandomSource.IRandomSourceRandomDataOutput deserializeFrom(IDataInput in) throws IOException {
++            RandomSource.RandomSourceRandomDataOutput result = new RandomSource.RandomSourceRandomDataOutput();
++            result.setRandomInteger(in.nextInt());
++            result.setTimestamp(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, RandomSource.RandomSourceRandomDataOutput object) {
++        output.writeInt(object.getRandomInteger());
++        output.writeLong(object.getTimestamp());
++    }
++
++    @Override
++    public RandomSource.RandomSourceRandomDataOutput read(Kryo kryo, Input input, Class<RandomSource.RandomSourceRandomDataOutput> type) {
++        RandomSource.RandomSourceRandomDataOutput result = new RandomSource.RandomSourceRandomDataOutput();
++        result.setRandomInteger(input.readInt());
++        result.setTimestamp(input.readLong());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialData.java
+new file mode 100644
+index 0000000..d615000
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialData.java
+@@ -0,0 +1,147 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.ISimulatedFinancialData;
++import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class SimulatedFinancialData implements ISimulatedFinancialData{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class SimulatedFinancialDataSymbolListOutput implements ISimulatedFinancialDataSymbolListOutput {
++        private java.util.List<String> allSymbols;
++        /**
++        * Returns the input value for tuple field "allSymbols".
++        * @return the tuple value
++        */
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        /**
++        * Sets the output value for tuple field "allSymbols".
++        * @param allSymbols the field value
++        */
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("SimulatedFinancialDataSymbolListOutput", SimulatedFinancialDataSerializers.SimulatedFinancialDataSymbolListOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class SimulatedFinancialDataSpringStreamOutput implements ISimulatedFinancialDataSpringStreamOutput {
++        private String symbolTuple;
++        /**
++        * Returns the input value for tuple field "symbolTuple".
++        * @return the tuple value
++        */
++        @Override
++        public String getSymbolTuple(){
++            return symbolTuple;
++        }
++
++        /**
++        * Sets the output value for tuple field "symbolTuple".
++        * @param symbolTuple the field value
++        */
++        @Override
++        public void setSymbolTuple(String symbolTuple){
++            this.symbolTuple = symbolTuple;
++        }
++        static {
++            SerializerRegistry.register("SimulatedFinancialDataSpringStreamOutput", SimulatedFinancialDataSerializers.SimulatedFinancialDataSpringStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return SimulatedFinancialDataSymbolListOutput the source data
++    **/
++    @Override
++    public SimulatedFinancialDataSymbolListOutput getSymbolList() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ISimulatedFinancialDataSymbolListOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return SimulatedFinancialDataSpringStreamOutput the source data
++    **/
++    @Override
++    public SimulatedFinancialDataSpringStreamOutput getSpringStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ISimulatedFinancialDataSpringStreamOutput tuple) {
++        return null;
++    }
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "speedFactor".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterSpeedFactor(double value) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialDataSerializers.java
+new file mode 100644
+index 0000000..2c7ac5a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialDataSerializers.java
+@@ -0,0 +1,113 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.SimulatedFinancialData;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.SimulatedFinancialDataProtos.*;
++/**
++ * The implementation of the serializers for the data element "SimulatedFinancialData" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class SimulatedFinancialDataSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput} algorithm.
++ */
++public static class SimulatedFinancialDataSymbolListOutputSerializer extends Serializer<SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput> implements ISerializer<SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput> {
++
++    @Override
++    public void serializeTo(SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
++        SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput result = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
++            SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput result = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput> type) {
++        SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput result = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput} algorithm.
++ */
++public static class SimulatedFinancialDataSpringStreamOutputSerializer extends Serializer<SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput> implements ISerializer<SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput> {
++
++    @Override
++    public void serializeTo(SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
++        SSimulatedFinancialDataSpringStreamOutput tmp = SSimulatedFinancialDataSpringStreamOutput.newBuilder()
++            .setSymbolTuple(object.getSymbolTuple())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolTuple());
++        }
++
++    @Override
++    public SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
++        SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput result = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
++        SSimulatedFinancialDataSpringStreamOutput tmp = SSimulatedFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolTuple(tmp.getSymbolTuple());
++        return result;
++    }
++
++        @Override
++        public SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput result = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
++            result.setSymbolTuple(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput object) {
++        output.writeString(object.getSymbolTuple());
++    }
++
++    @Override
++    public SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput> type) {
++        SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput result = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
++        result.setSymbolTuple(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialData.java
+new file mode 100644
+index 0000000..e0e8ed9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialData.java
+@@ -0,0 +1,156 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.ISimulatedFocusFinancialData;
++import eu.qualimaster.data.inf.ISimulatedFocusFinancialData.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class SimulatedFocusFinancialData implements ISimulatedFocusFinancialData{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class SimulatedFocusFinancialDataSymbolListOutput implements ISimulatedFocusFinancialDataSymbolListOutput {
++        private java.util.List<String> allSymbols;
++        /**
++        * Returns the input value for tuple field "allSymbols".
++        * @return the tuple value
++        */
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        /**
++        * Sets the output value for tuple field "allSymbols".
++        * @param allSymbols the field value
++        */
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("SimulatedFocusFinancialDataSymbolListOutput", SimulatedFocusFinancialDataSerializers.SimulatedFocusFinancialDataSymbolListOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class SimulatedFocusFinancialDataSpringStreamOutput implements ISimulatedFocusFinancialDataSpringStreamOutput {
++        private String symbolTuple;
++        /**
++        * Returns the input value for tuple field "symbolTuple".
++        * @return the tuple value
++        */
++        @Override
++        public String getSymbolTuple(){
++            return symbolTuple;
++        }
++
++        /**
++        * Sets the output value for tuple field "symbolTuple".
++        * @param symbolTuple the field value
++        */
++        @Override
++        public void setSymbolTuple(String symbolTuple){
++            this.symbolTuple = symbolTuple;
++        }
++        static {
++            SerializerRegistry.register("SimulatedFocusFinancialDataSpringStreamOutput", SimulatedFocusFinancialDataSerializers.SimulatedFocusFinancialDataSpringStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return SimulatedFocusFinancialDataSymbolListOutput the source data
++    **/
++    @Override
++    public SimulatedFocusFinancialDataSymbolListOutput getSymbolList() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ISimulatedFocusFinancialDataSymbolListOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return SimulatedFocusFinancialDataSpringStreamOutput the source data
++    **/
++    @Override
++    public SimulatedFocusFinancialDataSpringStreamOutput getSpringStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ISimulatedFocusFinancialDataSpringStreamOutput tuple) {
++        return null;
++    }
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "speedFactor".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterSpeedFactor(double value) {
++    }
++
++    /**
++     * Sets the data source parameter "playerList".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterPlayerList(String value) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialDataSerializers.java
+new file mode 100644
+index 0000000..4557f3e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialDataSerializers.java
+@@ -0,0 +1,113 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.SimulatedFocusFinancialData;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.SimulatedFocusFinancialDataProtos.*;
++/**
++ * The implementation of the serializers for the data element "SimulatedFocusFinancialData" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class SimulatedFocusFinancialDataSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput} algorithm.
++ */
++public static class SimulatedFocusFinancialDataSymbolListOutputSerializer extends Serializer<SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput> implements ISerializer<SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput> {
++
++    @Override
++    public void serializeTo(SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
++        SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
++            SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput> type) {
++        SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput} algorithm.
++ */
++public static class SimulatedFocusFinancialDataSpringStreamOutputSerializer extends Serializer<SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput> implements ISerializer<SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput> {
++
++    @Override
++    public void serializeTo(SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
++        SSimulatedFocusFinancialDataSpringStreamOutput tmp = SSimulatedFocusFinancialDataSpringStreamOutput.newBuilder()
++            .setSymbolTuple(object.getSymbolTuple())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolTuple());
++        }
++
++    @Override
++    public SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
++        SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput();
++        SSimulatedFocusFinancialDataSpringStreamOutput tmp = SSimulatedFocusFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolTuple(tmp.getSymbolTuple());
++        return result;
++    }
++
++        @Override
++        public SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput();
++            result.setSymbolTuple(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput object) {
++        output.writeString(object.getSymbolTuple());
++    }
++
++    @Override
++    public SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput> type) {
++        SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput();
++        result.setSymbolTuple(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphData.java
+new file mode 100644
+index 0000000..21a36be
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphData.java
+@@ -0,0 +1,91 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.ISimulatedGraphData;
++import eu.qualimaster.data.inf.ISimulatedGraphData.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class SimulatedGraphData implements ISimulatedGraphData{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class SimulatedGraphDataEdgeStreamOutput implements ISimulatedGraphDataEdgeStreamOutput {
++        private String edge;
++        /**
++        * Returns the input value for tuple field "edge".
++        * @return the tuple value
++        */
++        @Override
++        public String getEdge(){
++            return edge;
++        }
++
++        /**
++        * Sets the output value for tuple field "edge".
++        * @param edge the field value
++        */
++        @Override
++        public void setEdge(String edge){
++            this.edge = edge;
++        }
++        static {
++            SerializerRegistry.register("SimulatedGraphDataEdgeStreamOutput", SimulatedGraphDataSerializers.SimulatedGraphDataEdgeStreamOutputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return SimulatedGraphDataEdgeStreamOutput the source data
++    **/
++    @Override
++    public SimulatedGraphDataEdgeStreamOutput getEdgeStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ISimulatedGraphDataEdgeStreamOutput tuple) {
++        return null;
++    }
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphDataSerializers.java
+new file mode 100644
+index 0000000..c319a0f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphDataSerializers.java
+@@ -0,0 +1,71 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.SimulatedGraphData;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.SimulatedGraphDataProtos.*;
++/**
++ * The implementation of the serializers for the data element "SimulatedGraphData" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class SimulatedGraphDataSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput} algorithm.
++ */
++public static class SimulatedGraphDataEdgeStreamOutputSerializer extends Serializer<SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput> implements ISerializer<SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput> {
++
++    @Override
++    public void serializeTo(SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput object, OutputStream out) throws IOException {
++        SSimulatedGraphDataEdgeStreamOutput tmp = SSimulatedGraphDataEdgeStreamOutput.newBuilder()
++            .setEdge(object.getEdge())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getEdge());
++        }
++
++    @Override
++    public SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput deserializeFrom(InputStream in) throws IOException {
++        SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput result = new SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput();
++        SSimulatedGraphDataEdgeStreamOutput tmp = SSimulatedGraphDataEdgeStreamOutput.parseDelimitedFrom(in);
++        result.setEdge(tmp.getEdge());
++        return result;
++    }
++
++        @Override
++        public SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput result = new SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput();
++            result.setEdge(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput object) {
++        output.writeString(object.getEdge());
++    }
++
++    @Override
++    public SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput read(Kryo kryo, Input input, Class<SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput> type) {
++        SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput result = new SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput();
++        result.setEdge(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialData.java
+new file mode 100644
+index 0000000..393a13c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialData.java
+@@ -0,0 +1,136 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.ISpringFinancialData;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class SpringFinancialData implements ISpringFinancialData{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class SpringFinancialDataSymbolListOutput implements ISpringFinancialDataSymbolListOutput {
++        private java.util.List<String> allSymbols;
++        /**
++        * Returns the input value for tuple field "allSymbols".
++        * @return the tuple value
++        */
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        /**
++        * Sets the output value for tuple field "allSymbols".
++        * @param allSymbols the field value
++        */
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("SpringFinancialDataSymbolListOutput", SpringFinancialDataSerializers.SpringFinancialDataSymbolListOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class SpringFinancialDataSpringStreamOutput implements ISpringFinancialDataSpringStreamOutput {
++        private String symbolTuple;
++        /**
++        * Returns the input value for tuple field "symbolTuple".
++        * @return the tuple value
++        */
++        @Override
++        public String getSymbolTuple(){
++            return symbolTuple;
++        }
++
++        /**
++        * Sets the output value for tuple field "symbolTuple".
++        * @param symbolTuple the field value
++        */
++        @Override
++        public void setSymbolTuple(String symbolTuple){
++            this.symbolTuple = symbolTuple;
++        }
++        static {
++            SerializerRegistry.register("SpringFinancialDataSpringStreamOutput", SpringFinancialDataSerializers.SpringFinancialDataSpringStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return SpringFinancialDataSymbolListOutput the source data
++    **/
++    @Override
++    public SpringFinancialDataSymbolListOutput getSymbolList() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return SpringFinancialDataSpringStreamOutput the source data
++    **/
++    @Override
++    public SpringFinancialDataSpringStreamOutput getSpringStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple) {
++        return null;
++    }
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialDataSerializers.java
+new file mode 100644
+index 0000000..cfff958
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialDataSerializers.java
+@@ -0,0 +1,113 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.SpringFinancialData;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.SpringFinancialDataProtos.*;
++/**
++ * The implementation of the serializers for the data element "SpringFinancialData" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class SpringFinancialDataSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SpringFinancialData.ISpringFinancialDataSymbolListOutput} algorithm.
++ */
++public static class SpringFinancialDataSymbolListOutputSerializer extends Serializer<SpringFinancialData.SpringFinancialDataSymbolListOutput> implements ISerializer<SpringFinancialData.ISpringFinancialDataSymbolListOutput> {
++
++    @Override
++    public void serializeTo(SpringFinancialData.ISpringFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(SpringFinancialData.ISpringFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public SpringFinancialData.ISpringFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
++        SpringFinancialData.SpringFinancialDataSymbolListOutput result = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public SpringFinancialData.ISpringFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
++            SpringFinancialData.SpringFinancialDataSymbolListOutput result = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SpringFinancialData.SpringFinancialDataSymbolListOutput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public SpringFinancialData.SpringFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<SpringFinancialData.SpringFinancialDataSymbolListOutput> type) {
++        SpringFinancialData.SpringFinancialDataSymbolListOutput result = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SpringFinancialData.ISpringFinancialDataSpringStreamOutput} algorithm.
++ */
++public static class SpringFinancialDataSpringStreamOutputSerializer extends Serializer<SpringFinancialData.SpringFinancialDataSpringStreamOutput> implements ISerializer<SpringFinancialData.ISpringFinancialDataSpringStreamOutput> {
++
++    @Override
++    public void serializeTo(SpringFinancialData.ISpringFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
++        SSpringFinancialDataSpringStreamOutput tmp = SSpringFinancialDataSpringStreamOutput.newBuilder()
++            .setSymbolTuple(object.getSymbolTuple())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(SpringFinancialData.ISpringFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolTuple());
++        }
++
++    @Override
++    public SpringFinancialData.ISpringFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
++        SpringFinancialData.SpringFinancialDataSpringStreamOutput result = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
++        SSpringFinancialDataSpringStreamOutput tmp = SSpringFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolTuple(tmp.getSymbolTuple());
++        return result;
++    }
++
++        @Override
++        public SpringFinancialData.ISpringFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            SpringFinancialData.SpringFinancialDataSpringStreamOutput result = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
++            result.setSymbolTuple(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SpringFinancialData.SpringFinancialDataSpringStreamOutput object) {
++        output.writeString(object.getSymbolTuple());
++    }
++
++    @Override
++    public SpringFinancialData.SpringFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<SpringFinancialData.SpringFinancialDataSpringStreamOutput> type) {
++        SpringFinancialData.SpringFinancialDataSpringStreamOutput result = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
++        result.setSymbolTuple(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSource.java
+new file mode 100644
+index 0000000..0fd80cd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSource.java
+@@ -0,0 +1,244 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.ITimeGraphQueriesSource;
++import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class TimeGraphQueriesSource implements ITimeGraphQueriesSource{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class TimeGraphQueriesSourceSnapshotQueryStreamOutput implements ITimeGraphQueriesSourceSnapshotQueryStreamOutput {
++        private long start;
++        private long end;
++        /**
++        * Returns the input value for tuple field "start".
++        * @return the tuple value
++        */
++        @Override
++        public long getStart(){
++            return start;
++        }
++
++        /**
++        * Sets the output value for tuple field "start".
++        * @param start the field value
++        */
++        @Override
++        public void setStart(long start){
++            this.start = start;
++        }
++        /**
++        * Returns the input value for tuple field "end".
++        * @return the tuple value
++        */
++        @Override
++        public long getEnd(){
++            return end;
++        }
++
++        /**
++        * Sets the output value for tuple field "end".
++        * @param end the field value
++        */
++        @Override
++        public void setEnd(long end){
++            this.end = end;
++        }
++        static {
++            SerializerRegistry.register("TimeGraphQueriesSourceSnapshotQueryStreamOutput", TimeGraphQueriesSourceSerializers.TimeGraphQueriesSourceSnapshotQueryStreamOutputSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class TimeGraphQueriesSourcePathQueryStreamOutput implements ITimeGraphQueriesSourcePathQueryStreamOutput {
++        private long start;
++        private long end;
++        private String vertexA;
++        private String vertexB;
++        private String type;
++        /**
++        * Returns the input value for tuple field "start".
++        * @return the tuple value
++        */
++        @Override
++        public long getStart(){
++            return start;
++        }
++
++        /**
++        * Sets the output value for tuple field "start".
++        * @param start the field value
++        */
++        @Override
++        public void setStart(long start){
++            this.start = start;
++        }
++        /**
++        * Returns the input value for tuple field "end".
++        * @return the tuple value
++        */
++        @Override
++        public long getEnd(){
++            return end;
++        }
++
++        /**
++        * Sets the output value for tuple field "end".
++        * @param end the field value
++        */
++        @Override
++        public void setEnd(long end){
++            this.end = end;
++        }
++        /**
++        * Returns the input value for tuple field "vertexA".
++        * @return the tuple value
++        */
++        @Override
++        public String getVertexA(){
++            return vertexA;
++        }
++
++        /**
++        * Sets the output value for tuple field "vertexA".
++        * @param vertexA the field value
++        */
++        @Override
++        public void setVertexA(String vertexA){
++            this.vertexA = vertexA;
++        }
++        /**
++        * Returns the input value for tuple field "vertexB".
++        * @return the tuple value
++        */
++        @Override
++        public String getVertexB(){
++            return vertexB;
++        }
++
++        /**
++        * Sets the output value for tuple field "vertexB".
++        * @param vertexB the field value
++        */
++        @Override
++        public void setVertexB(String vertexB){
++            this.vertexB = vertexB;
++        }
++        /**
++        * Returns the input value for tuple field "type".
++        * @return the tuple value
++        */
++        @Override
++        public String getType(){
++            return type;
++        }
++
++        /**
++        * Sets the output value for tuple field "type".
++        * @param type the field value
++        */
++        @Override
++        public void setType(String type){
++            this.type = type;
++        }
++        static {
++            SerializerRegistry.register("TimeGraphQueriesSourcePathQueryStreamOutput", TimeGraphQueriesSourceSerializers.TimeGraphQueriesSourcePathQueryStreamOutputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return TimeGraphQueriesSourceSnapshotQueryStreamOutput the source data
++    **/
++    @Override
++    public TimeGraphQueriesSourceSnapshotQueryStreamOutput getSnapshotQueryStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ITimeGraphQueriesSourceSnapshotQueryStreamOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return TimeGraphQueriesSourcePathQueryStreamOutput the source data
++    **/
++    @Override
++    public TimeGraphQueriesSourcePathQueryStreamOutput getPathQueryStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ITimeGraphQueriesSourcePathQueryStreamOutput tuple) {
++        return null;
++    }
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "snapshotQuery".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterSnapshotQuery(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "pathQuery".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterPathQuery(String value) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSourceSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSourceSerializers.java
+new file mode 100644
+index 0000000..d1e9a47
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSourceSerializers.java
+@@ -0,0 +1,147 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.TimeGraphQueriesSource;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.TimeGraphQueriesSourceProtos.*;
++/**
++ * The implementation of the serializers for the data element "TimeGraphQueriesSource" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class TimeGraphQueriesSourceSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput} algorithm.
++ */
++public static class TimeGraphQueriesSourceSnapshotQueryStreamOutputSerializer extends Serializer<TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput> implements ISerializer<TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput> {
++
++    @Override
++    public void serializeTo(TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput object, OutputStream out) throws IOException {
++        STimeGraphQueriesSourceSnapshotQueryStreamOutput tmp = STimeGraphQueriesSourceSnapshotQueryStreamOutput.newBuilder()
++            .setStart(object.getStart())
++            .setEnd(object.getEnd())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getStart());
++            out.writeLong(object.getEnd());
++        }
++
++    @Override
++    public TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput deserializeFrom(InputStream in) throws IOException {
++        TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
++        STimeGraphQueriesSourceSnapshotQueryStreamOutput tmp = STimeGraphQueriesSourceSnapshotQueryStreamOutput.parseDelimitedFrom(in);
++        result.setStart(tmp.getStart());
++        result.setEnd(tmp.getEnd());
++        return result;
++    }
++
++        @Override
++        public TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
++            result.setStart(in.nextLong());
++            result.setEnd(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput object) {
++        output.writeLong(object.getStart());
++        output.writeLong(object.getEnd());
++    }
++
++    @Override
++    public TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput read(Kryo kryo, Input input, Class<TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput> type) {
++        TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
++        result.setStart(input.readLong());
++        result.setEnd(input.readLong());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput} algorithm.
++ */
++public static class TimeGraphQueriesSourcePathQueryStreamOutputSerializer extends Serializer<TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput> implements ISerializer<TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput> {
++
++    @Override
++    public void serializeTo(TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput object, OutputStream out) throws IOException {
++        STimeGraphQueriesSourcePathQueryStreamOutput tmp = STimeGraphQueriesSourcePathQueryStreamOutput.newBuilder()
++            .setStart(object.getStart())
++            .setEnd(object.getEnd())
++            .setVertexA(object.getVertexA())
++            .setVertexB(object.getVertexB())
++            .setType(object.getType())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getStart());
++            out.writeLong(object.getEnd());
++            out.writeString(object.getVertexA());
++            out.writeString(object.getVertexB());
++            out.writeString(object.getType());
++        }
++
++    @Override
++    public TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput deserializeFrom(InputStream in) throws IOException {
++        TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
++        STimeGraphQueriesSourcePathQueryStreamOutput tmp = STimeGraphQueriesSourcePathQueryStreamOutput.parseDelimitedFrom(in);
++        result.setStart(tmp.getStart());
++        result.setEnd(tmp.getEnd());
++        result.setVertexA(tmp.getVertexA());
++        result.setVertexB(tmp.getVertexB());
++        result.setType(tmp.getType());
++        return result;
++    }
++
++        @Override
++        public TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
++            result.setStart(in.nextLong());
++            result.setEnd(in.nextLong());
++            result.setVertexA(in.nextString());
++            result.setVertexB(in.nextString());
++            result.setType(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput object) {
++        output.writeLong(object.getStart());
++        output.writeLong(object.getEnd());
++        output.writeString(object.getVertexA());
++        output.writeString(object.getVertexB());
++        output.writeString(object.getType());
++    }
++
++    @Override
++    public TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput read(Kryo kryo, Input input, Class<TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput> type) {
++        TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
++        result.setStart(input.readLong());
++        result.setEnd(input.readLong());
++        result.setVertexA(input.readString());
++        result.setVertexB(input.readString());
++        result.setType(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSink.java
+new file mode 100644
+index 0000000..a3082e1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSink.java
+@@ -0,0 +1,114 @@
++package eu.qualimaster.data.imp;
++
++import eu.qualimaster.data.inf.ITimeTravelSink;
++import eu.qualimaster.data.inf.ITimeTravelSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++* Define the data source class(GEN).
++**/
++public class TimeTravelSink implements ITimeTravelSink{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class TimeTravelSinkSnapshotStreamInput implements ITimeTravelSinkSnapshotStreamInput {
++        private String snapshot;
++        /**
++        * Returns the input value for tuple field "snapshot".
++        * @return the tuple value
++        */
++        @Override
++        public String getSnapshot() {
++            return snapshot;
++        }
++
++        /**
++        * Sets the output value for tuple field "snapshot".
++        * @param snapshot the field value
++        */
++        @Override
++        public void setSnapshot(String snapshot) {
++            this.snapshot = snapshot;
++        }
++        static {
++            SerializerRegistry.register("TimeTravelSinkSnapshotStreamInput", TimeTravelSinkSerializers.TimeTravelSinkSnapshotStreamInputSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class TimeTravelSinkPathStreamInput implements ITimeTravelSinkPathStreamInput {
++        private String path;
++        /**
++        * Returns the input value for tuple field "path".
++        * @return the tuple value
++        */
++        @Override
++        public String getPath() {
++            return path;
++        }
++
++        /**
++        * Sets the output value for tuple field "path".
++        * @param path the field value
++        */
++        @Override
++        public void setPath(String path) {
++            this.path = path;
++        }
++        static {
++            SerializerRegistry.register("TimeTravelSinkPathStreamInput", TimeTravelSinkSerializers.TimeTravelSinkPathStreamInputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data TimeTravelSinkSnapshotStreamInput
++    **/
++    @Override
++    public void postDataSnapshotStream(ITimeTravelSinkSnapshotStreamInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple ITimeTravelSinkSnapshotStreamInput to be emitted 
++    **/
++    public void emit(int ticket, ITimeTravelSinkSnapshotStreamInput tuple) {
++    }
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data TimeTravelSinkPathStreamInput
++    **/
++    @Override
++    public void postDataPathStream(ITimeTravelSinkPathStreamInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple ITimeTravelSinkPathStreamInput to be emitted 
++    **/
++    public void emit(int ticket, ITimeTravelSinkPathStreamInput tuple) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSinkSerializers.java
+new file mode 100644
+index 0000000..e29ac7f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSinkSerializers.java
+@@ -0,0 +1,117 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.TimeTravelSink;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.TimeTravelSinkProtos.*;
++/**
++ * The implementation of the serializers for the data element "TimeTravelSink" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class TimeTravelSinkSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link TimeTravelSink.ITimeTravelSinkSnapshotStreamInput} algorithm.
++ */
++public static class TimeTravelSinkSnapshotStreamInputSerializer extends Serializer<TimeTravelSink.TimeTravelSinkSnapshotStreamInput> implements ISerializer<TimeTravelSink.ITimeTravelSinkSnapshotStreamInput> {
++
++    @Override
++    public void serializeTo(TimeTravelSink.ITimeTravelSinkSnapshotStreamInput object, OutputStream out) throws IOException {
++        STimeTravelSinkSnapshotStreamInput tmp = STimeTravelSinkSnapshotStreamInput.newBuilder()
++            .setSnapshot(object.getSnapshot())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(TimeTravelSink.ITimeTravelSinkSnapshotStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSnapshot());
++        }
++
++    @Override
++    public TimeTravelSink.ITimeTravelSinkSnapshotStreamInput deserializeFrom(InputStream in) throws IOException {
++        TimeTravelSink.TimeTravelSinkSnapshotStreamInput result = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
++        STimeTravelSinkSnapshotStreamInput tmp = STimeTravelSinkSnapshotStreamInput.parseDelimitedFrom(in);
++        result.setSnapshot(tmp.getSnapshot());
++        return result;
++    }
++
++        @Override
++        public TimeTravelSink.ITimeTravelSinkSnapshotStreamInput deserializeFrom(IDataInput in) throws IOException {
++            TimeTravelSink.TimeTravelSinkSnapshotStreamInput result = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
++            result.setSnapshot(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, TimeTravelSink.TimeTravelSinkSnapshotStreamInput object) {
++        output.writeString(object.getSnapshot());
++    }
++
++    @Override
++    public TimeTravelSink.TimeTravelSinkSnapshotStreamInput read(Kryo kryo, Input input, Class<TimeTravelSink.TimeTravelSinkSnapshotStreamInput> type) {
++        TimeTravelSink.TimeTravelSinkSnapshotStreamInput result = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
++        result.setSnapshot(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link TimeTravelSink.ITimeTravelSinkPathStreamInput} algorithm.
++ */
++public static class TimeTravelSinkPathStreamInputSerializer extends Serializer<TimeTravelSink.TimeTravelSinkPathStreamInput> implements ISerializer<TimeTravelSink.ITimeTravelSinkPathStreamInput> {
++
++    @Override
++    public void serializeTo(TimeTravelSink.ITimeTravelSinkPathStreamInput object, OutputStream out) throws IOException {
++        STimeTravelSinkPathStreamInput tmp = STimeTravelSinkPathStreamInput.newBuilder()
++            .setPath(object.getPath())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(TimeTravelSink.ITimeTravelSinkPathStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getPath());
++        }
++
++    @Override
++    public TimeTravelSink.ITimeTravelSinkPathStreamInput deserializeFrom(InputStream in) throws IOException {
++        TimeTravelSink.TimeTravelSinkPathStreamInput result = new TimeTravelSink.TimeTravelSinkPathStreamInput();
++        STimeTravelSinkPathStreamInput tmp = STimeTravelSinkPathStreamInput.parseDelimitedFrom(in);
++        result.setPath(tmp.getPath());
++        return result;
++    }
++
++        @Override
++        public TimeTravelSink.ITimeTravelSinkPathStreamInput deserializeFrom(IDataInput in) throws IOException {
++            TimeTravelSink.TimeTravelSinkPathStreamInput result = new TimeTravelSink.TimeTravelSinkPathStreamInput();
++            result.setPath(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, TimeTravelSink.TimeTravelSinkPathStreamInput object) {
++        output.writeString(object.getPath());
++    }
++
++    @Override
++    public TimeTravelSink.TimeTravelSinkPathStreamInput read(Kryo kryo, Input input, Class<TimeTravelSink.TimeTravelSinkPathStreamInput> type) {
++        TimeTravelSink.TimeTravelSinkPathStreamInput result = new TimeTravelSink.TimeTravelSinkPathStreamInput();
++        result.setPath(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSink.java
+new file mode 100644
+index 0000000..23c288e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSink.java
+@@ -0,0 +1,126 @@
++package eu.qualimaster.data.imp;
++
++import eu.qualimaster.data.inf.ITransferSink;
++import eu.qualimaster.data.inf.ITransferSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++* Define the data source class(GEN).
++**/
++public class TransferSink implements ITransferSink{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class TransferSinkPairwiseFinancialInput implements ITransferSinkPairwiseFinancialInput {
++        private String id0;
++        private String id1;
++        private String date;
++        private double value;
++        /**
++        * Returns the input value for tuple field "id0".
++        * @return the tuple value
++        */
++        @Override
++        public String getId0() {
++            return id0;
++        }
++
++        /**
++        * Sets the output value for tuple field "id0".
++        * @param id0 the field value
++        */
++        @Override
++        public void setId0(String id0) {
++            this.id0 = id0;
++        }
++        /**
++        * Returns the input value for tuple field "id1".
++        * @return the tuple value
++        */
++        @Override
++        public String getId1() {
++            return id1;
++        }
++
++        /**
++        * Sets the output value for tuple field "id1".
++        * @param id1 the field value
++        */
++        @Override
++        public void setId1(String id1) {
++            this.id1 = id1;
++        }
++        /**
++        * Returns the input value for tuple field "date".
++        * @return the tuple value
++        */
++        @Override
++        public String getDate() {
++            return date;
++        }
++
++        /**
++        * Sets the output value for tuple field "date".
++        * @param date the field value
++        */
++        @Override
++        public void setDate(String date) {
++            this.date = date;
++        }
++        /**
++        * Returns the input value for tuple field "value".
++        * @return the tuple value
++        */
++        @Override
++        public double getValue() {
++            return value;
++        }
++
++        /**
++        * Sets the output value for tuple field "value".
++        * @param value the field value
++        */
++        @Override
++        public void setValue(double value) {
++            this.value = value;
++        }
++        static {
++            SerializerRegistry.register("TransferSinkPairwiseFinancialInput", TransferSinkSerializers.TransferSinkPairwiseFinancialInputSerializer.class);
++        }
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data TransferSinkPairwiseFinancialInput
++    **/
++    @Override
++    public void postDataPairwiseFinancial(ITransferSinkPairwiseFinancialInput data) {
++    }
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple ITransferSinkPairwiseFinancialInput to be emitted 
++    **/
++    public void emit(int ticket, ITransferSinkPairwiseFinancialInput tuple) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSinkSerializers.java
+new file mode 100644
+index 0000000..a088a0d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSinkSerializers.java
+@@ -0,0 +1,89 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.TransferSink;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.TransferSinkProtos.*;
++/**
++ * The implementation of the serializers for the data element "TransferSink" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class TransferSinkSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link TransferSink.ITransferSinkPairwiseFinancialInput} algorithm.
++ */
++public static class TransferSinkPairwiseFinancialInputSerializer extends Serializer<TransferSink.TransferSinkPairwiseFinancialInput> implements ISerializer<TransferSink.ITransferSinkPairwiseFinancialInput> {
++
++    @Override
++    public void serializeTo(TransferSink.ITransferSinkPairwiseFinancialInput object, OutputStream out) throws IOException {
++        STransferSinkPairwiseFinancialInput tmp = STransferSinkPairwiseFinancialInput.newBuilder()
++            .setId0(object.getId0())
++            .setId1(object.getId1())
++            .setDate(object.getDate())
++            .setValue(object.getValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(TransferSink.ITransferSinkPairwiseFinancialInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getId0());
++            out.writeString(object.getId1());
++            out.writeString(object.getDate());
++            out.writeDouble(object.getValue());
++        }
++
++    @Override
++    public TransferSink.ITransferSinkPairwiseFinancialInput deserializeFrom(InputStream in) throws IOException {
++        TransferSink.TransferSinkPairwiseFinancialInput result = new TransferSink.TransferSinkPairwiseFinancialInput();
++        STransferSinkPairwiseFinancialInput tmp = STransferSinkPairwiseFinancialInput.parseDelimitedFrom(in);
++        result.setId0(tmp.getId0());
++        result.setId1(tmp.getId1());
++        result.setDate(tmp.getDate());
++        result.setValue(tmp.getValue());
++        return result;
++    }
++
++        @Override
++        public TransferSink.ITransferSinkPairwiseFinancialInput deserializeFrom(IDataInput in) throws IOException {
++            TransferSink.TransferSinkPairwiseFinancialInput result = new TransferSink.TransferSinkPairwiseFinancialInput();
++            result.setId0(in.nextString());
++            result.setId1(in.nextString());
++            result.setDate(in.nextString());
++            result.setValue(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, TransferSink.TransferSinkPairwiseFinancialInput object) {
++        output.writeString(object.getId0());
++        output.writeString(object.getId1());
++        output.writeString(object.getDate());
++        output.writeDouble(object.getValue());
++    }
++
++    @Override
++    public TransferSink.TransferSinkPairwiseFinancialInput read(Kryo kryo, Input input, Class<TransferSink.TransferSinkPairwiseFinancialInput> type) {
++        TransferSink.TransferSinkPairwiseFinancialInput result = new TransferSink.TransferSinkPairwiseFinancialInput();
++        result.setId0(input.readString());
++        result.setId1(input.readString());
++        result.setDate(input.readString());
++        result.setValue(input.readDouble());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamData.java
+new file mode 100644
+index 0000000..22ba321
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamData.java
+@@ -0,0 +1,237 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.ITwitterStreamData;
++import eu.qualimaster.data.inf.ITwitterStreamData.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class TwitterStreamData implements ITwitterStreamData{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class TwitterStreamDataSymbolListOutput implements ITwitterStreamDataSymbolListOutput {
++        private java.util.List<String> allSymbols;
++        /**
++        * Returns the input value for tuple field "allSymbols".
++        * @return the tuple value
++        */
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        /**
++        * Sets the output value for tuple field "allSymbols".
++        * @param allSymbols the field value
++        */
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("TwitterStreamDataSymbolListOutput", TwitterStreamDataSerializers.TwitterStreamDataSymbolListOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class TwitterStreamDataTwitterStreamOutput implements ITwitterStreamDataTwitterStreamOutput {
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++        /**
++        * Returns the input value for tuple field "status".
++        * @return the tuple value
++        */
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        /**
++        * Sets the output value for tuple field "status".
++        * @param status the field value
++        */
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("TwitterStreamDataTwitterStreamOutput", TwitterStreamDataSerializers.TwitterStreamDataTwitterStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return TwitterStreamDataSymbolListOutput the source data
++    **/
++    @Override
++    public TwitterStreamDataSymbolListOutput getSymbolList() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ITwitterStreamDataSymbolListOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return TwitterStreamDataTwitterStreamOutput the source data
++    **/
++    @Override
++    public TwitterStreamDataTwitterStreamOutput getTwitterStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(ITwitterStreamDataTwitterStreamOutput tuple) {
++        return null;
++    }
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "consumerKey".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterConsumerKey(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "consumerSecret".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterConsumerSecret(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "accessToken".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterAccessToken(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "accessTokenSecret".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterAccessTokenSecret(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "queueSize".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterQueueSize(int value) {
++    }
++
++    /**
++     * Sets the data source parameter "tweetDirectory".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterTweetDirectory(String value) {
++    }
++
++    /**
++     * Sets the data source parameter "speedFactor".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterSpeedFactor(double value) {
++    }
++
++    /**
++     * Sets the data source parameter "runLocally".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterRunLocally(boolean value) {
++    }
++
++    /**
++     * Sets the data source parameter "adjustTimeToNow".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterAdjustTimeToNow(boolean value) {
++    }
++
++    /**
++     * Sets the data source parameter "realLoops".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterRealLoops(boolean value) {
++    }
++
++    /**
++     * Sets the data source parameter "setAdditionalKeywords".
++     *
++     * @param value the new value of the data source parameter
++     */
++    @Override
++    public void setParameterSetAdditionalKeywords(String value) {
++    }
++
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamDataSerializers.java
+new file mode 100644
+index 0000000..650d4b2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamDataSerializers.java
+@@ -0,0 +1,109 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.TwitterStreamData;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.TwitterStreamDataProtos.*;
++/**
++ * The implementation of the serializers for the data element "TwitterStreamData" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class TwitterStreamDataSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link TwitterStreamData.ITwitterStreamDataSymbolListOutput} algorithm.
++ */
++public static class TwitterStreamDataSymbolListOutputSerializer extends Serializer<TwitterStreamData.TwitterStreamDataSymbolListOutput> implements ISerializer<TwitterStreamData.ITwitterStreamDataSymbolListOutput> {
++
++    @Override
++    public void serializeTo(TwitterStreamData.ITwitterStreamDataSymbolListOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(TwitterStreamData.ITwitterStreamDataSymbolListOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public TwitterStreamData.ITwitterStreamDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
++        TwitterStreamData.TwitterStreamDataSymbolListOutput result = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public TwitterStreamData.ITwitterStreamDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
++            TwitterStreamData.TwitterStreamDataSymbolListOutput result = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, TwitterStreamData.TwitterStreamDataSymbolListOutput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public TwitterStreamData.TwitterStreamDataSymbolListOutput read(Kryo kryo, Input input, Class<TwitterStreamData.TwitterStreamDataSymbolListOutput> type) {
++        TwitterStreamData.TwitterStreamDataSymbolListOutput result = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link TwitterStreamData.ITwitterStreamDataTwitterStreamOutput} algorithm.
++ */
++public static class TwitterStreamDataTwitterStreamOutputSerializer extends Serializer<TwitterStreamData.TwitterStreamDataTwitterStreamOutput> implements ISerializer<TwitterStreamData.ITwitterStreamDataTwitterStreamOutput> {
++
++    @Override
++    public void serializeTo(TwitterStreamData.ITwitterStreamDataTwitterStreamOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(TwitterStreamData.ITwitterStreamDataTwitterStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public TwitterStreamData.ITwitterStreamDataTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
++        TwitterStreamData.TwitterStreamDataTwitterStreamOutput result = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public TwitterStreamData.ITwitterStreamDataTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            TwitterStreamData.TwitterStreamDataTwitterStreamOutput result = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, TwitterStreamData.TwitterStreamDataTwitterStreamOutput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public TwitterStreamData.TwitterStreamDataTwitterStreamOutput read(Kryo kryo, Input input, Class<TwitterStreamData.TwitterStreamDataTwitterStreamOutput> type) {
++        TwitterStreamData.TwitterStreamDataTwitterStreamOutput result = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialData.java
+new file mode 100644
+index 0000000..827a44b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialData.java
+@@ -0,0 +1,198 @@
++package eu.qualimaster.data.imp;
++
++import java.util.Map;
++import eu.qualimaster.data.inf.IWindowedSpringFinancialData;
++import eu.qualimaster.data.inf.IWindowedSpringFinancialData.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.observables.*;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.sources.*;
++
++/**
++* Define the data source class(GEN).
++**/
++public class WindowedSpringFinancialData implements IWindowedSpringFinancialData{
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static class WindowedSpringFinancialDataSymbolListOutput implements IWindowedSpringFinancialDataSymbolListOutput {
++        private java.util.List<String> allSymbols;
++        /**
++        * Returns the input value for tuple field "allSymbols".
++        * @return the tuple value
++        */
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        /**
++        * Sets the output value for tuple field "allSymbols".
++        * @param allSymbols the field value
++        */
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("WindowedSpringFinancialDataSymbolListOutput", WindowedSpringFinancialDataSerializers.WindowedSpringFinancialDataSymbolListOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class WindowedSpringFinancialDataSpringStreamOutput implements IWindowedSpringFinancialDataSpringStreamOutput {
++        private String symbolTuple;
++        /**
++        * Returns the input value for tuple field "symbolTuple".
++        * @return the tuple value
++        */
++        @Override
++        public String getSymbolTuple(){
++            return symbolTuple;
++        }
++
++        /**
++        * Sets the output value for tuple field "symbolTuple".
++        * @param symbolTuple the field value
++        */
++        @Override
++        public void setSymbolTuple(String symbolTuple){
++            this.symbolTuple = symbolTuple;
++        }
++        static {
++            SerializerRegistry.register("WindowedSpringFinancialDataSpringStreamOutput", WindowedSpringFinancialDataSerializers.WindowedSpringFinancialDataSpringStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static class WindowedSpringFinancialDataResetWindowOutput implements IWindowedSpringFinancialDataResetWindowOutput {
++        private long windowStart;
++        private long windowEnd;
++        /**
++        * Returns the input value for tuple field "windowStart".
++        * @return the tuple value
++        */
++        @Override
++        public long getWindowStart(){
++            return windowStart;
++        }
++
++        /**
++        * Sets the output value for tuple field "windowStart".
++        * @param windowStart the field value
++        */
++        @Override
++        public void setWindowStart(long windowStart){
++            this.windowStart = windowStart;
++        }
++        /**
++        * Returns the input value for tuple field "windowEnd".
++        * @return the tuple value
++        */
++        @Override
++        public long getWindowEnd(){
++            return windowEnd;
++        }
++
++        /**
++        * Sets the output value for tuple field "windowEnd".
++        * @param windowEnd the field value
++        */
++        @Override
++        public void setWindowEnd(long windowEnd){
++            this.windowEnd = windowEnd;
++        }
++        static {
++            SerializerRegistry.register("WindowedSpringFinancialDataResetWindowOutput", WindowedSpringFinancialDataSerializers.WindowedSpringFinancialDataResetWindowOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return WindowedSpringFinancialDataSymbolListOutput the source data
++    **/
++    @Override
++    public WindowedSpringFinancialDataSymbolListOutput getSymbolList() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(IWindowedSpringFinancialDataSymbolListOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return WindowedSpringFinancialDataSpringStreamOutput the source data
++    **/
++    @Override
++    public WindowedSpringFinancialDataSpringStreamOutput getSpringStream() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(IWindowedSpringFinancialDataSpringStreamOutput tuple) {
++        return null;
++    }
++    /**
++    * Returns a specific type of data source.
++    * @return WindowedSpringFinancialDataResetWindowOutput the source data
++    **/
++    @Override
++    public WindowedSpringFinancialDataResetWindowOutput getResetWindow() {
++        return null;
++    }
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    @Override
++    public String getAggregationKey(IWindowedSpringFinancialDataResetWindowOutput tuple) {
++        return null;
++    }
++    @Override
++    public void connect() {}
++
++    @Override
++    public void disconnect(){}
++
++    @Override
++    public void setStrategy(IStorageStrategyDescriptor strategy) {}
++
++    @Override
++    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
++
++    @Override
++    public Double getMeasurement(IObservable observable) { return null;}
++
++    @Override
++    public IHistoricalDataProvider getHistoricalDataProvider() {
++        return null;
++    }
++
++    @Override
++    public Map<String, String> getIdsNamesMap() {
++        return null;
++    }
++
++    @Override
++    public void setDataSourceListener(IDataSourceListener listener) {
++        // no mapping, no listener needed
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialDataSerializers.java
+new file mode 100644
+index 0000000..7d0281b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialDataSerializers.java
+@@ -0,0 +1,165 @@
++package eu.qualimaster.data.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.data.imp.WindowedSpringFinancialData;
++import eu.qualimaster.data.inf.*;
++
++import eu.qualimaster.protos.WindowedSpringFinancialDataProtos.*;
++/**
++ * The implementation of the serializers for the data element "WindowedSpringFinancialData" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class WindowedSpringFinancialDataSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput} algorithm.
++ */
++public static class WindowedSpringFinancialDataSymbolListOutputSerializer extends Serializer<WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput> implements ISerializer<WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput> {
++
++    @Override
++    public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
++        WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
++            WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput> type) {
++        WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput} algorithm.
++ */
++public static class WindowedSpringFinancialDataSpringStreamOutputSerializer extends Serializer<WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput> implements ISerializer<WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput> {
++
++    @Override
++    public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
++        SWindowedSpringFinancialDataSpringStreamOutput tmp = SWindowedSpringFinancialDataSpringStreamOutput.newBuilder()
++            .setSymbolTuple(object.getSymbolTuple())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolTuple());
++        }
++
++    @Override
++    public WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
++        WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput();
++        SWindowedSpringFinancialDataSpringStreamOutput tmp = SWindowedSpringFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolTuple(tmp.getSymbolTuple());
++        return result;
++    }
++
++        @Override
++        public WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput();
++            result.setSymbolTuple(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput object) {
++        output.writeString(object.getSymbolTuple());
++    }
++
++    @Override
++    public WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput> type) {
++        WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput();
++        result.setSymbolTuple(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput} algorithm.
++ */
++public static class WindowedSpringFinancialDataResetWindowOutputSerializer extends Serializer<WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput> implements ISerializer<WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput> {
++
++    @Override
++    public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput object, OutputStream out) throws IOException {
++        SWindowedSpringFinancialDataResetWindowOutput tmp = SWindowedSpringFinancialDataResetWindowOutput.newBuilder()
++            .setWindowStart(object.getWindowStart())
++            .setWindowEnd(object.getWindowEnd())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getWindowStart());
++            out.writeLong(object.getWindowEnd());
++        }
++
++    @Override
++    public WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput deserializeFrom(InputStream in) throws IOException {
++        WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput();
++        SWindowedSpringFinancialDataResetWindowOutput tmp = SWindowedSpringFinancialDataResetWindowOutput.parseDelimitedFrom(in);
++        result.setWindowStart(tmp.getWindowStart());
++        result.setWindowEnd(tmp.getWindowEnd());
++        return result;
++    }
++
++        @Override
++        public WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput deserializeFrom(IDataInput in) throws IOException {
++            WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput();
++            result.setWindowStart(in.nextLong());
++            result.setWindowEnd(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput object) {
++        output.writeLong(object.getWindowStart());
++        output.writeLong(object.getWindowEnd());
++    }
++
++    @Override
++    public WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput read(Kryo kryo, Input input, Class<WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput> type) {
++        WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput();
++        result.setWindowStart(input.readLong());
++        result.setWindowEnd(input.readLong());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IDynamicGraphSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IDynamicGraphSink.java
+new file mode 100644
+index 0000000..ffd3bc2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IDynamicGraphSink.java
+@@ -0,0 +1,42 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sinks.IDataSink;
++
++/**
++* Define the data sink interface(GEN).
++**/
++public interface IDynamicGraphSink extends IDataSink {
++
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface IDynamicGraphSinkHubStreamInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "hubList".
++         * @return the tuple value
++         */
++        public String getHubList();
++
++        /**
++         * Sets the output value for tuple field "hubList".
++         * @param hubList the field value
++         */
++        public void setHubList(String hubList);
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data IDynamicGraphSinkHubStreamInput 
++    **/
++    public void postDataHubStream(IDynamicGraphSinkHubStreamInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IDynamicGraphSinkHubStreamInput to be emitted 
++    **/
++    public void emit(int ticket, IDynamicGraphSinkHubStreamInput tuple);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFixedRateSimulatedFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFixedRateSimulatedFinancialData.java
+new file mode 100644
+index 0000000..3944a20
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFixedRateSimulatedFinancialData.java
+@@ -0,0 +1,68 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface IFixedRateSimulatedFinancialData extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface IFixedRateSimulatedFinancialDataSymbolListOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Sets the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface IFixedRateSimulatedFinancialDataSpringStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "symbolTuple".
++         * @return the tuple value
++         */
++        public String getSymbolTuple();
++
++        /**
++         * Sets the output value for tuple field "symbolTuple".
++         * @param symbolTuple the field value
++         */
++        public void setSymbolTuple(String symbolTuple);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return IFixedRateSimulatedFinancialDataSymbolListOutput the source data
++    **/
++    public IFixedRateSimulatedFinancialDataSymbolListOutput getSymbolList();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(IFixedRateSimulatedFinancialDataSymbolListOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return IFixedRateSimulatedFinancialDataSpringStreamOutput the source data
++    **/
++    public IFixedRateSimulatedFinancialDataSpringStreamOutput getSpringStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(IFixedRateSimulatedFinancialDataSpringStreamOutput tuple);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusFincancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusFincancialData.java
+new file mode 100644
+index 0000000..1603871
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusFincancialData.java
+@@ -0,0 +1,77 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface IFocusFincancialData extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface IFocusFincancialDataSymbolListOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Sets the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface IFocusFincancialDataSpringStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "symbolTuple".
++         * @return the tuple value
++         */
++        public String getSymbolTuple();
++
++        /**
++         * Sets the output value for tuple field "symbolTuple".
++         * @param symbolTuple the field value
++         */
++        public void setSymbolTuple(String symbolTuple);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return IFocusFincancialDataSymbolListOutput the source data
++    **/
++    public IFocusFincancialDataSymbolListOutput getSymbolList();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(IFocusFincancialDataSymbolListOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return IFocusFincancialDataSpringStreamOutput the source data
++    **/
++    public IFocusFincancialDataSpringStreamOutput getSpringStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(IFocusFincancialDataSpringStreamOutput tuple);
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "playerList".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterPlayerList(String value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusSink.java
+new file mode 100644
+index 0000000..4fd01a3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusSink.java
+@@ -0,0 +1,71 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sinks.IDataSink;
++
++/**
++* Define the data sink interface(GEN).
++**/
++public interface IFocusSink extends IDataSink {
++
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface IFocusSinkRecommendationStreamInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "recommendations".
++         * @return the tuple value
++         */
++        public String getRecommendations();
++
++        /**
++         * Sets the output value for tuple field "recommendations".
++         * @param recommendations the field value
++         */
++        public void setRecommendations(String recommendations);
++    }
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface IFocusSinkEdgeStreamInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "edge".
++         * @return the tuple value
++         */
++        public String getEdge();
++
++        /**
++         * Sets the output value for tuple field "edge".
++         * @param edge the field value
++         */
++        public void setEdge(String edge);
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data IFocusSinkRecommendationStreamInput 
++    **/
++    public void postDataRecommendationStream(IFocusSinkRecommendationStreamInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IFocusSinkRecommendationStreamInput to be emitted 
++    **/
++    public void emit(int ticket, IFocusSinkRecommendationStreamInput tuple);
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data IFocusSinkEdgeStreamInput 
++    **/
++    public void postDataEdgeStream(IFocusSinkEdgeStreamInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IFocusSinkEdgeStreamInput to be emitted 
++    **/
++    public void emit(int ticket, IFocusSinkEdgeStreamInput tuple);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IMI_data_Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IMI_data_Sink.java
+new file mode 100644
+index 0000000..41c6366
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IMI_data_Sink.java
+@@ -0,0 +1,75 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sinks.IDataSink;
++
++/**
++* Define the data sink interface(GEN).
++**/
++public interface IMI_data_Sink extends IDataSink {
++
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface IMI_data_SinkPairwiseFinancialInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "id0".
++         * @return the tuple value
++         */
++        public String getId0();
++
++        /**
++         * Sets the output value for tuple field "id0".
++         * @param id0 the field value
++         */
++        public void setId0(String id0);
++        /**
++         * Returns the input value for tuple field "id1".
++         * @return the tuple value
++         */
++        public String getId1();
++
++        /**
++         * Sets the output value for tuple field "id1".
++         * @param id1 the field value
++         */
++        public void setId1(String id1);
++        /**
++         * Returns the input value for tuple field "date".
++         * @return the tuple value
++         */
++        public String getDate();
++
++        /**
++         * Sets the output value for tuple field "date".
++         * @param date the field value
++         */
++        public void setDate(String date);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Sets the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data IMI_data_SinkPairwiseFinancialInput 
++    **/
++    public void postDataPairwiseFinancial(IMI_data_SinkPairwiseFinancialInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IMI_data_SinkPairwiseFinancialInput to be emitted 
++    **/
++    public void emit(int ticket, IMI_data_SinkPairwiseFinancialInput tuple);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/INewTwitterStreamDataSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/INewTwitterStreamDataSource.java
+new file mode 100644
+index 0000000..e7f39a5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/INewTwitterStreamDataSource.java
+@@ -0,0 +1,113 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface INewTwitterStreamDataSource extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface INewTwitterStreamDataSourceAnalysisOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public twitter4j.Status getStatus();
++
++        /**
++         * Sets the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(twitter4j.Status status);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return INewTwitterStreamDataSourceAnalysisOutput the source data
++    **/
++    public INewTwitterStreamDataSourceAnalysisOutput getAnalysis();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(INewTwitterStreamDataSourceAnalysisOutput tuple);
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "consumerKey".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterConsumerKey(String value);
++
++    /**
++     * Sets the data source parameter "consumerSecret".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterConsumerSecret(String value);
++
++    /**
++     * Sets the data source parameter "accessToken".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterAccessToken(String value);
++
++    /**
++     * Sets the data source parameter "accessTokenSecret".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterAccessTokenSecret(String value);
++
++    /**
++     * Sets the data source parameter "queueSize".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterQueueSize(int value);
++
++    /**
++     * Sets the data source parameter "tweetDirectory".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterTweetDirectory(String value);
++
++    /**
++     * Sets the data source parameter "speedFactor".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterSpeedFactor(double value);
++
++    /**
++     * Sets the data source parameter "runLocally".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterRunLocally(boolean value);
++
++    /**
++     * Sets the data source parameter "adjustTimeToNow".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterAdjustTimeToNow(boolean value);
++
++    /**
++     * Sets the data source parameter "realLoops".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterRealLoops(boolean value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IPriorityDataSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IPriorityDataSink.java
+new file mode 100644
+index 0000000..6ad381c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IPriorityDataSink.java
+@@ -0,0 +1,137 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sinks.IDataSink;
++
++/**
++* Define the data sink interface(GEN).
++**/
++public interface IPriorityDataSink extends IDataSink {
++
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface IPriorityDataSinkPairwiseFinancialInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "id0".
++         * @return the tuple value
++         */
++        public String getId0();
++
++        /**
++         * Sets the output value for tuple field "id0".
++         * @param id0 the field value
++         */
++        public void setId0(String id0);
++        /**
++         * Returns the input value for tuple field "id1".
++         * @return the tuple value
++         */
++        public String getId1();
++
++        /**
++         * Sets the output value for tuple field "id1".
++         * @param id1 the field value
++         */
++        public void setId1(String id1);
++        /**
++         * Returns the input value for tuple field "date".
++         * @return the tuple value
++         */
++        public String getDate();
++
++        /**
++         * Sets the output value for tuple field "date".
++         * @param date the field value
++         */
++        public void setDate(String date);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Sets the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++    }
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface IPriorityDataSinkAnalyzedStreamInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Sets the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Sets the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Sets the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++        /**
++         * Returns the input value for tuple field "volume".
++         * @return the tuple value
++         */
++        public int getVolume();
++
++        /**
++         * Sets the output value for tuple field "volume".
++         * @param volume the field value
++         */
++        public void setVolume(int volume);
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data IPriorityDataSinkPairwiseFinancialInput 
++    **/
++    public void postDataPairwiseFinancial(IPriorityDataSinkPairwiseFinancialInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IPriorityDataSinkPairwiseFinancialInput to be emitted 
++    **/
++    public void emit(int ticket, IPriorityDataSinkPairwiseFinancialInput tuple);
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data IPriorityDataSinkAnalyzedStreamInput 
++    **/
++    public void postDataAnalyzedStream(IPriorityDataSinkAnalyzedStreamInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IPriorityDataSinkAnalyzedStreamInput to be emitted 
++    **/
++    public void emit(int ticket, IPriorityDataSinkAnalyzedStreamInput tuple);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSink.java
+new file mode 100644
+index 0000000..72fbcca
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSink.java
+@@ -0,0 +1,53 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sinks.IDataSink;
++
++/**
++* Define the data sink interface(GEN).
++**/
++public interface IRandomSink extends IDataSink {
++
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface IRandomSinkRandomDataInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "randomInteger".
++         * @return the tuple value
++         */
++        public int getRandomInteger();
++
++        /**
++         * Sets the output value for tuple field "randomInteger".
++         * @param randomInteger the field value
++         */
++        public void setRandomInteger(int randomInteger);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Sets the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data IRandomSinkRandomDataInput 
++    **/
++    public void postDataRandomData(IRandomSinkRandomDataInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple IRandomSinkRandomDataInput to be emitted 
++    **/
++    public void emit(int ticket, IRandomSinkRandomDataInput tuple);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSource.java
+new file mode 100644
+index 0000000..550c331
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSource.java
+@@ -0,0 +1,61 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface IRandomSource extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface IRandomSourceRandomDataOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "randomInteger".
++         * @return the tuple value
++         */
++        public int getRandomInteger();
++
++        /**
++         * Sets the output value for tuple field "randomInteger".
++         * @param randomInteger the field value
++         */
++        public void setRandomInteger(int randomInteger);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Sets the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return IRandomSourceRandomDataOutput the source data
++    **/
++    public IRandomSourceRandomDataOutput getRandomData();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(IRandomSourceRandomDataOutput tuple);
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "delay".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterDelay(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFinancialData.java
+new file mode 100644
+index 0000000..a42216f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFinancialData.java
+@@ -0,0 +1,77 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface ISimulatedFinancialData extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ISimulatedFinancialDataSymbolListOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Sets the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ISimulatedFinancialDataSpringStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "symbolTuple".
++         * @return the tuple value
++         */
++        public String getSymbolTuple();
++
++        /**
++         * Sets the output value for tuple field "symbolTuple".
++         * @param symbolTuple the field value
++         */
++        public void setSymbolTuple(String symbolTuple);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return ISimulatedFinancialDataSymbolListOutput the source data
++    **/
++    public ISimulatedFinancialDataSymbolListOutput getSymbolList();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ISimulatedFinancialDataSymbolListOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return ISimulatedFinancialDataSpringStreamOutput the source data
++    **/
++    public ISimulatedFinancialDataSpringStreamOutput getSpringStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ISimulatedFinancialDataSpringStreamOutput tuple);
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "speedFactor".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterSpeedFactor(double value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFocusFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFocusFinancialData.java
+new file mode 100644
+index 0000000..f1fdacb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFocusFinancialData.java
+@@ -0,0 +1,84 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface ISimulatedFocusFinancialData extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ISimulatedFocusFinancialDataSymbolListOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Sets the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ISimulatedFocusFinancialDataSpringStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "symbolTuple".
++         * @return the tuple value
++         */
++        public String getSymbolTuple();
++
++        /**
++         * Sets the output value for tuple field "symbolTuple".
++         * @param symbolTuple the field value
++         */
++        public void setSymbolTuple(String symbolTuple);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return ISimulatedFocusFinancialDataSymbolListOutput the source data
++    **/
++    public ISimulatedFocusFinancialDataSymbolListOutput getSymbolList();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ISimulatedFocusFinancialDataSymbolListOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return ISimulatedFocusFinancialDataSpringStreamOutput the source data
++    **/
++    public ISimulatedFocusFinancialDataSpringStreamOutput getSpringStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ISimulatedFocusFinancialDataSpringStreamOutput tuple);
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "speedFactor".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterSpeedFactor(double value);
++
++    /**
++     * Sets the data source parameter "playerList".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterPlayerList(String value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedGraphData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedGraphData.java
+new file mode 100644
+index 0000000..1291bc3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedGraphData.java
+@@ -0,0 +1,41 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface ISimulatedGraphData extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ISimulatedGraphDataEdgeStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "edge".
++         * @return the tuple value
++         */
++        public String getEdge();
++
++        /**
++         * Sets the output value for tuple field "edge".
++         * @param edge the field value
++         */
++        public void setEdge(String edge);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return ISimulatedGraphDataEdgeStreamOutput the source data
++    **/
++    public ISimulatedGraphDataEdgeStreamOutput getEdgeStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ISimulatedGraphDataEdgeStreamOutput tuple);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISpringFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISpringFinancialData.java
+new file mode 100644
+index 0000000..f42e961
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISpringFinancialData.java
+@@ -0,0 +1,68 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface ISpringFinancialData extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ISpringFinancialDataSymbolListOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Sets the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ISpringFinancialDataSpringStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "symbolTuple".
++         * @return the tuple value
++         */
++        public String getSymbolTuple();
++
++        /**
++         * Sets the output value for tuple field "symbolTuple".
++         * @param symbolTuple the field value
++         */
++        public void setSymbolTuple(String symbolTuple);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return ISpringFinancialDataSymbolListOutput the source data
++    **/
++    public ISpringFinancialDataSymbolListOutput getSymbolList();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return ISpringFinancialDataSpringStreamOutput the source data
++    **/
++    public ISpringFinancialDataSpringStreamOutput getSpringStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeGraphQueriesSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeGraphQueriesSource.java
+new file mode 100644
+index 0000000..54d8f7a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeGraphQueriesSource.java
+@@ -0,0 +1,139 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface ITimeGraphQueriesSource extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ITimeGraphQueriesSourceSnapshotQueryStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "start".
++         * @return the tuple value
++         */
++        public long getStart();
++
++        /**
++         * Sets the output value for tuple field "start".
++         * @param start the field value
++         */
++        public void setStart(long start);
++        /**
++         * Returns the input value for tuple field "end".
++         * @return the tuple value
++         */
++        public long getEnd();
++
++        /**
++         * Sets the output value for tuple field "end".
++         * @param end the field value
++         */
++        public void setEnd(long end);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ITimeGraphQueriesSourcePathQueryStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "start".
++         * @return the tuple value
++         */
++        public long getStart();
++
++        /**
++         * Sets the output value for tuple field "start".
++         * @param start the field value
++         */
++        public void setStart(long start);
++        /**
++         * Returns the input value for tuple field "end".
++         * @return the tuple value
++         */
++        public long getEnd();
++
++        /**
++         * Sets the output value for tuple field "end".
++         * @param end the field value
++         */
++        public void setEnd(long end);
++        /**
++         * Returns the input value for tuple field "vertexA".
++         * @return the tuple value
++         */
++        public String getVertexA();
++
++        /**
++         * Sets the output value for tuple field "vertexA".
++         * @param vertexA the field value
++         */
++        public void setVertexA(String vertexA);
++        /**
++         * Returns the input value for tuple field "vertexB".
++         * @return the tuple value
++         */
++        public String getVertexB();
++
++        /**
++         * Sets the output value for tuple field "vertexB".
++         * @param vertexB the field value
++         */
++        public void setVertexB(String vertexB);
++        /**
++         * Returns the input value for tuple field "type".
++         * @return the tuple value
++         */
++        public String getType();
++
++        /**
++         * Sets the output value for tuple field "type".
++         * @param type the field value
++         */
++        public void setType(String type);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return ITimeGraphQueriesSourceSnapshotQueryStreamOutput the source data
++    **/
++    public ITimeGraphQueriesSourceSnapshotQueryStreamOutput getSnapshotQueryStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ITimeGraphQueriesSourceSnapshotQueryStreamOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return ITimeGraphQueriesSourcePathQueryStreamOutput the source data
++    **/
++    public ITimeGraphQueriesSourcePathQueryStreamOutput getPathQueryStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ITimeGraphQueriesSourcePathQueryStreamOutput tuple);
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "snapshotQuery".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterSnapshotQuery(String value);
++
++    /**
++     * Sets the data source parameter "pathQuery".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterPathQuery(String value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeTravelSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeTravelSink.java
+new file mode 100644
+index 0000000..508f806
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeTravelSink.java
+@@ -0,0 +1,71 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sinks.IDataSink;
++
++/**
++* Define the data sink interface(GEN).
++**/
++public interface ITimeTravelSink extends IDataSink {
++
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface ITimeTravelSinkSnapshotStreamInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "snapshot".
++         * @return the tuple value
++         */
++        public String getSnapshot();
++
++        /**
++         * Sets the output value for tuple field "snapshot".
++         * @param snapshot the field value
++         */
++        public void setSnapshot(String snapshot);
++    }
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface ITimeTravelSinkPathStreamInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "path".
++         * @return the tuple value
++         */
++        public String getPath();
++
++        /**
++         * Sets the output value for tuple field "path".
++         * @param path the field value
++         */
++        public void setPath(String path);
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data ITimeTravelSinkSnapshotStreamInput 
++    **/
++    public void postDataSnapshotStream(ITimeTravelSinkSnapshotStreamInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple ITimeTravelSinkSnapshotStreamInput to be emitted 
++    **/
++    public void emit(int ticket, ITimeTravelSinkSnapshotStreamInput tuple);
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data ITimeTravelSinkPathStreamInput 
++    **/
++    public void postDataPathStream(ITimeTravelSinkPathStreamInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple ITimeTravelSinkPathStreamInput to be emitted 
++    **/
++    public void emit(int ticket, ITimeTravelSinkPathStreamInput tuple);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITransferSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITransferSink.java
+new file mode 100644
+index 0000000..7829e47
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITransferSink.java
+@@ -0,0 +1,75 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sinks.IDataSink;
++
++/**
++* Define the data sink interface(GEN).
++**/
++public interface ITransferSink extends IDataSink {
++
++    /**
++    * Define the sink data input interface.
++    **/
++    public static interface ITransferSinkPairwiseFinancialInput extends Serializable {
++        /**
++         * Returns the input value for tuple field "id0".
++         * @return the tuple value
++         */
++        public String getId0();
++
++        /**
++         * Sets the output value for tuple field "id0".
++         * @param id0 the field value
++         */
++        public void setId0(String id0);
++        /**
++         * Returns the input value for tuple field "id1".
++         * @return the tuple value
++         */
++        public String getId1();
++
++        /**
++         * Sets the output value for tuple field "id1".
++         * @param id1 the field value
++         */
++        public void setId1(String id1);
++        /**
++         * Returns the input value for tuple field "date".
++         * @return the tuple value
++         */
++        public String getDate();
++
++        /**
++         * Sets the output value for tuple field "date".
++         * @param date the field value
++         */
++        public void setDate(String date);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Sets the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++    }
++
++
++    /**
++    * Posts a specific type of data sink.
++    * @param data the sink data ITransferSinkPairwiseFinancialInput 
++    **/
++    public void postDataPairwiseFinancial(ITransferSinkPairwiseFinancialInput data);
++
++    /**
++    * Emits tuple along with a ticket.
++    * @param ticket the ticket to identify the responses for application
++    * @param tuple the tuple ITransferSinkPairwiseFinancialInput to be emitted 
++    **/
++    public void emit(int ticket, ITransferSinkPairwiseFinancialInput tuple);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITwitterStreamData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITwitterStreamData.java
+new file mode 100644
+index 0000000..2eaf8d4
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITwitterStreamData.java
+@@ -0,0 +1,147 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface ITwitterStreamData extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ITwitterStreamDataSymbolListOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Sets the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface ITwitterStreamDataTwitterStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Sets the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return ITwitterStreamDataSymbolListOutput the source data
++    **/
++    public ITwitterStreamDataSymbolListOutput getSymbolList();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ITwitterStreamDataSymbolListOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return ITwitterStreamDataTwitterStreamOutput the source data
++    **/
++    public ITwitterStreamDataTwitterStreamOutput getTwitterStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(ITwitterStreamDataTwitterStreamOutput tuple);
++    // data source parameters
++
++    /**
++     * Sets the data source parameter "consumerKey".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterConsumerKey(String value);
++
++    /**
++     * Sets the data source parameter "consumerSecret".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterConsumerSecret(String value);
++
++    /**
++     * Sets the data source parameter "accessToken".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterAccessToken(String value);
++
++    /**
++     * Sets the data source parameter "accessTokenSecret".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterAccessTokenSecret(String value);
++
++    /**
++     * Sets the data source parameter "queueSize".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterQueueSize(int value);
++
++    /**
++     * Sets the data source parameter "tweetDirectory".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterTweetDirectory(String value);
++
++    /**
++     * Sets the data source parameter "speedFactor".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterSpeedFactor(double value);
++
++    /**
++     * Sets the data source parameter "runLocally".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterRunLocally(boolean value);
++
++    /**
++     * Sets the data source parameter "adjustTimeToNow".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterAdjustTimeToNow(boolean value);
++
++    /**
++     * Sets the data source parameter "realLoops".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterRealLoops(boolean value);
++
++    /**
++     * Sets the data source parameter "setAdditionalKeywords".
++     *
++     * @param value the new value of the data source parameter
++     */
++    public void setParameterSetAdditionalKeywords(String value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IWindowedSpringFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IWindowedSpringFinancialData.java
+new file mode 100644
+index 0000000..05f758b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IWindowedSpringFinancialData.java
+@@ -0,0 +1,106 @@
++package eu.qualimaster.data.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.dataManagement.sources.IDataSource;
++
++/**
++* Define the data source interface(GEN).
++**/
++public interface IWindowedSpringFinancialData extends IDataSource {
++
++
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface IWindowedSpringFinancialDataSymbolListOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Sets the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface IWindowedSpringFinancialDataSpringStreamOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "symbolTuple".
++         * @return the tuple value
++         */
++        public String getSymbolTuple();
++
++        /**
++         * Sets the output value for tuple field "symbolTuple".
++         * @param symbolTuple the field value
++         */
++        public void setSymbolTuple(String symbolTuple);
++    }
++    /**
++    * Define the source data input interface.
++    **/
++    public static interface IWindowedSpringFinancialDataResetWindowOutput extends Serializable{
++        /**
++         * Returns the input value for tuple field "windowStart".
++         * @return the tuple value
++         */
++        public long getWindowStart();
++
++        /**
++         * Sets the output value for tuple field "windowStart".
++         * @param windowStart the field value
++         */
++        public void setWindowStart(long windowStart);
++        /**
++         * Returns the input value for tuple field "windowEnd".
++         * @return the tuple value
++         */
++        public long getWindowEnd();
++
++        /**
++         * Sets the output value for tuple field "windowEnd".
++         * @param windowEnd the field value
++         */
++        public void setWindowEnd(long windowEnd);
++    }
++
++
++    /**
++    * Returns a specific type of data source.
++    * @return IWindowedSpringFinancialDataSymbolListOutput the source data
++    **/
++    public IWindowedSpringFinancialDataSymbolListOutput getSymbolList();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(IWindowedSpringFinancialDataSymbolListOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return IWindowedSpringFinancialDataSpringStreamOutput the source data
++    **/
++    public IWindowedSpringFinancialDataSpringStreamOutput getSpringStream();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(IWindowedSpringFinancialDataSpringStreamOutput tuple);
++    /**
++    * Returns a specific type of data source.
++    * @return IWindowedSpringFinancialDataResetWindowOutput the source data
++    **/
++    public IWindowedSpringFinancialDataResetWindowOutput getResetWindow();
++
++    /**
++    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
++    * @return an aggregation key
++    **/
++    public String getAggregationKey(IWindowedSpringFinancialDataResetWindowOutput tuple);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancial.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancial.java
+new file mode 100644
+index 0000000..c99ad8e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancial.java
+@@ -0,0 +1,203 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFCorrelationFinancial" (GEN).
++ */
++public class FCorrelationFinancial implements IFCorrelationFinancial {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFCorrelationFinancialPreprocessedStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFCorrelationFinancialPreprocessedStreamInput implements IIFCorrelationFinancialPreprocessedStreamInput {
++
++        private String symbolId;
++        private long timestamp;
++        private double value;
++        private int volume;
++
++        @Override
++        public String getSymbolId(){
++            return symbolId;
++        }
++
++        @Override
++        public void setSymbolId(String symbolId){
++            this.symbolId = symbolId;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        @Override
++        public int getVolume(){
++            return volume;
++        }
++
++        @Override
++        public void setVolume(int volume){
++            this.volume = volume;
++        }
++        static {
++            SerializerRegistry.register("IFCorrelationFinancialPreprocessedStreamInput", FCorrelationFinancialSerializers.IFCorrelationFinancialPreprocessedStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFCorrelationFinancialSymbolListInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFCorrelationFinancialSymbolListInput implements IIFCorrelationFinancialSymbolListInput {
++
++        private java.util.List<String> allSymbols;
++
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("IFCorrelationFinancialSymbolListInput", FCorrelationFinancialSerializers.IFCorrelationFinancialSymbolListInputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFCorrelationFinancialPairwiseFinancialOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFCorrelationFinancialPairwiseFinancialOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFCorrelationFinancialPairwiseFinancialOutput> implements IIFCorrelationFinancialPairwiseFinancialOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFCorrelationFinancialPairwiseFinancialOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFCorrelationFinancialPairwiseFinancialOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFCorrelationFinancialPairwiseFinancialOutput createItem() {
++            return new IFCorrelationFinancialPairwiseFinancialOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String id0;
++        private String id1;
++        private String date;
++        private double value;
++
++        @Override
++        public String getId0(){
++            return id0;
++        }
++
++        @Override
++        public void setId0(String id0){
++            this.id0 = id0;
++        }
++        @Override
++        public String getId1(){
++            return id1;
++        }
++
++        @Override
++        public void setId1(String id1){
++            this.id1 = id1;
++        }
++        @Override
++        public String getDate(){
++            return date;
++        }
++
++        @Override
++        public void setDate(String date){
++            this.date = date;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        static {
++            SerializerRegistry.register("IFCorrelationFinancialPairwiseFinancialOutput", FCorrelationFinancialSerializers.IFCorrelationFinancialPairwiseFinancialOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancialSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancialSerializers.java
+new file mode 100644
+index 0000000..d87d31b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancialSerializers.java
+@@ -0,0 +1,195 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FCorrelationFinancial;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FCorrelationFinancialProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFCorrelationFinancial" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FCorrelationFinancialSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput} algorithm.
++ */
++public static class IFCorrelationFinancialPreprocessedStreamInputSerializer extends Serializer<FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput> implements ISerializer<IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput> {
++
++    @Override
++    public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput object, OutputStream out) throws IOException {
++        SIFCorrelationFinancialPreprocessedStreamInput tmp = SIFCorrelationFinancialPreprocessedStreamInput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .setVolume(object.getVolume())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++            out.writeInt(object.getVolume());
++        }
++
++    @Override
++    public IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput deserializeFrom(InputStream in) throws IOException {
++        FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput result = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++        SIFCorrelationFinancialPreprocessedStreamInput tmp = SIFCorrelationFinancialPreprocessedStreamInput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        result.setVolume(tmp.getVolume());
++        return result;
++    }
++
++        @Override
++        public IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput result = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            result.setVolume(in.nextInt());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++        output.writeInt(object.getVolume());
++    }
++
++    @Override
++    public FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput read(Kryo kryo, Input input, Class<FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput> type) {
++        FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput result = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        result.setVolume(input.readInt());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput} algorithm.
++ */
++public static class IFCorrelationFinancialSymbolListInputSerializer extends Serializer<FCorrelationFinancial.IFCorrelationFinancialSymbolListInput> implements ISerializer<IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput> {
++
++    @Override
++    public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput deserializeFrom(InputStream in) throws IOException {
++        FCorrelationFinancial.IFCorrelationFinancialSymbolListInput result = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput deserializeFrom(IDataInput in) throws IOException {
++            FCorrelationFinancial.IFCorrelationFinancialSymbolListInput result = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FCorrelationFinancial.IFCorrelationFinancialSymbolListInput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public FCorrelationFinancial.IFCorrelationFinancialSymbolListInput read(Kryo kryo, Input input, Class<FCorrelationFinancial.IFCorrelationFinancialSymbolListInput> type) {
++        FCorrelationFinancial.IFCorrelationFinancialSymbolListInput result = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput} algorithm.
++ */
++public static class IFCorrelationFinancialPairwiseFinancialOutputSerializer extends Serializer<FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput> implements ISerializer<IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput> {
++
++    @Override
++    public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput object, OutputStream out) throws IOException {
++        SIFCorrelationFinancialPairwiseFinancialOutput tmp = SIFCorrelationFinancialPairwiseFinancialOutput.newBuilder()
++            .setId0(object.getId0())
++            .setId1(object.getId1())
++            .setDate(object.getDate())
++            .setValue(object.getValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getId0());
++            out.writeString(object.getId1());
++            out.writeString(object.getDate());
++            out.writeDouble(object.getValue());
++        }
++
++    @Override
++    public IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput deserializeFrom(InputStream in) throws IOException {
++        FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput result = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        SIFCorrelationFinancialPairwiseFinancialOutput tmp = SIFCorrelationFinancialPairwiseFinancialOutput.parseDelimitedFrom(in);
++        result.setId0(tmp.getId0());
++        result.setId1(tmp.getId1());
++        result.setDate(tmp.getDate());
++        result.setValue(tmp.getValue());
++        return result;
++    }
++
++        @Override
++        public IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput deserializeFrom(IDataInput in) throws IOException {
++            FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput result = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++            result.setId0(in.nextString());
++            result.setId1(in.nextString());
++            result.setDate(in.nextString());
++            result.setValue(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput object) {
++        output.writeString(object.getId0());
++        output.writeString(object.getId1());
++        output.writeString(object.getDate());
++        output.writeDouble(object.getValue());
++    }
++
++    @Override
++    public FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput read(Kryo kryo, Input input, Class<FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput> type) {
++        FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput result = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        result.setId0(input.readString());
++        result.setId1(input.readString());
++        result.setDate(input.readString());
++        result.setValue(input.readDouble());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitter.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitter.java
+new file mode 100644
+index 0000000..0861f73
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitter.java
+@@ -0,0 +1,173 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFCorrelationTwitter" (GEN).
++ */
++public class FCorrelationTwitter implements IFCorrelationTwitter {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFCorrelationTwitterAnalyzedStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFCorrelationTwitterAnalyzedStreamInput implements IIFCorrelationTwitterAnalyzedStreamInput {
++
++        private String symbolId;
++        private long timestamp;
++        private double value;
++        private int volume;
++
++        @Override
++        public String getSymbolId(){
++            return symbolId;
++        }
++
++        @Override
++        public void setSymbolId(String symbolId){
++            this.symbolId = symbolId;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        @Override
++        public int getVolume(){
++            return volume;
++        }
++
++        @Override
++        public void setVolume(int volume){
++            this.volume = volume;
++        }
++        static {
++            SerializerRegistry.register("IFCorrelationTwitterAnalyzedStreamInput", FCorrelationTwitterSerializers.IFCorrelationTwitterAnalyzedStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFCorrelationTwitterSymbolListInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFCorrelationTwitterSymbolListInput implements IIFCorrelationTwitterSymbolListInput {
++
++        private java.util.List<String> allSymbols;
++
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("IFCorrelationTwitterSymbolListInput", FCorrelationTwitterSerializers.IFCorrelationTwitterSymbolListInputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFCorrelationTwitterPairwiseTwitterOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFCorrelationTwitterPairwiseTwitterOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFCorrelationTwitterPairwiseTwitterOutput> implements IIFCorrelationTwitterPairwiseTwitterOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFCorrelationTwitterPairwiseTwitterOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFCorrelationTwitterPairwiseTwitterOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFCorrelationTwitterPairwiseTwitterOutput createItem() {
++            return new IFCorrelationTwitterPairwiseTwitterOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String pairwiseCorrelationTwitter;
++
++        @Override
++        public String getPairwiseCorrelationTwitter(){
++            return pairwiseCorrelationTwitter;
++        }
++
++        @Override
++        public void setPairwiseCorrelationTwitter(String pairwiseCorrelationTwitter){
++            this.pairwiseCorrelationTwitter = pairwiseCorrelationTwitter;
++        }
++        static {
++            SerializerRegistry.register("IFCorrelationTwitterPairwiseTwitterOutput", FCorrelationTwitterSerializers.IFCorrelationTwitterPairwiseTwitterOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationTwitterAnalyzedStreamInput input, IIFCorrelationTwitterPairwiseTwitterOutput pairwiseTwitterResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationTwitterSymbolListInput input, IIFCorrelationTwitterPairwiseTwitterOutput pairwiseTwitterResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitterSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitterSerializers.java
+new file mode 100644
+index 0000000..6794342
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitterSerializers.java
+@@ -0,0 +1,177 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FCorrelationTwitter;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FCorrelationTwitterProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFCorrelationTwitter" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FCorrelationTwitterSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput} algorithm.
++ */
++public static class IFCorrelationTwitterAnalyzedStreamInputSerializer extends Serializer<FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput> implements ISerializer<IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput> {
++
++    @Override
++    public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput object, OutputStream out) throws IOException {
++        SIFCorrelationTwitterAnalyzedStreamInput tmp = SIFCorrelationTwitterAnalyzedStreamInput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .setVolume(object.getVolume())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++            out.writeInt(object.getVolume());
++        }
++
++    @Override
++    public IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput deserializeFrom(InputStream in) throws IOException {
++        FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput result = new FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput();
++        SIFCorrelationTwitterAnalyzedStreamInput tmp = SIFCorrelationTwitterAnalyzedStreamInput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        result.setVolume(tmp.getVolume());
++        return result;
++    }
++
++        @Override
++        public IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput result = new FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            result.setVolume(in.nextInt());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++        output.writeInt(object.getVolume());
++    }
++
++    @Override
++    public FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput read(Kryo kryo, Input input, Class<FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput> type) {
++        FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput result = new FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        result.setVolume(input.readInt());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput} algorithm.
++ */
++public static class IFCorrelationTwitterSymbolListInputSerializer extends Serializer<FCorrelationTwitter.IFCorrelationTwitterSymbolListInput> implements ISerializer<IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput> {
++
++    @Override
++    public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput deserializeFrom(InputStream in) throws IOException {
++        FCorrelationTwitter.IFCorrelationTwitterSymbolListInput result = new FCorrelationTwitter.IFCorrelationTwitterSymbolListInput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput deserializeFrom(IDataInput in) throws IOException {
++            FCorrelationTwitter.IFCorrelationTwitterSymbolListInput result = new FCorrelationTwitter.IFCorrelationTwitterSymbolListInput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FCorrelationTwitter.IFCorrelationTwitterSymbolListInput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public FCorrelationTwitter.IFCorrelationTwitterSymbolListInput read(Kryo kryo, Input input, Class<FCorrelationTwitter.IFCorrelationTwitterSymbolListInput> type) {
++        FCorrelationTwitter.IFCorrelationTwitterSymbolListInput result = new FCorrelationTwitter.IFCorrelationTwitterSymbolListInput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput} algorithm.
++ */
++public static class IFCorrelationTwitterPairwiseTwitterOutputSerializer extends Serializer<FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput> implements ISerializer<IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput> {
++
++    @Override
++    public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput object, OutputStream out) throws IOException {
++        SIFCorrelationTwitterPairwiseTwitterOutput tmp = SIFCorrelationTwitterPairwiseTwitterOutput.newBuilder()
++            .setPairwiseCorrelationTwitter(object.getPairwiseCorrelationTwitter())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getPairwiseCorrelationTwitter());
++        }
++
++    @Override
++    public IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput deserializeFrom(InputStream in) throws IOException {
++        FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput result = new FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput();
++        SIFCorrelationTwitterPairwiseTwitterOutput tmp = SIFCorrelationTwitterPairwiseTwitterOutput.parseDelimitedFrom(in);
++        result.setPairwiseCorrelationTwitter(tmp.getPairwiseCorrelationTwitter());
++        return result;
++    }
++
++        @Override
++        public IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput deserializeFrom(IDataInput in) throws IOException {
++            FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput result = new FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput();
++            result.setPairwiseCorrelationTwitter(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput object) {
++        output.writeString(object.getPairwiseCorrelationTwitter());
++    }
++
++    @Override
++    public FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput read(Kryo kryo, Input input, Class<FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput> type) {
++        FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput result = new FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput();
++        result.setPairwiseCorrelationTwitter(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilation.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilation.java
+new file mode 100644
+index 0000000..2c1d75b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilation.java
+@@ -0,0 +1,141 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFDynamicGraphCompilation" (GEN).
++ */
++public class FDynamicGraphCompilation implements IFDynamicGraphCompilation {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFDynamicGraphCompilationPairwiseFinancialInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFDynamicGraphCompilationPairwiseFinancialInput implements IIFDynamicGraphCompilationPairwiseFinancialInput {
++
++        private String id0;
++        private String id1;
++        private String date;
++        private double value;
++
++        @Override
++        public String getId0(){
++            return id0;
++        }
++
++        @Override
++        public void setId0(String id0){
++            this.id0 = id0;
++        }
++        @Override
++        public String getId1(){
++            return id1;
++        }
++
++        @Override
++        public void setId1(String id1){
++            this.id1 = id1;
++        }
++        @Override
++        public String getDate(){
++            return date;
++        }
++
++        @Override
++        public void setDate(String date){
++            this.date = date;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        static {
++            SerializerRegistry.register("IFDynamicGraphCompilationPairwiseFinancialInput", FDynamicGraphCompilationSerializers.IFDynamicGraphCompilationPairwiseFinancialInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFDynamicGraphCompilationEdgeStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFDynamicGraphCompilationEdgeStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFDynamicGraphCompilationEdgeStreamOutput> implements IIFDynamicGraphCompilationEdgeStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFDynamicGraphCompilationEdgeStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFDynamicGraphCompilationEdgeStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFDynamicGraphCompilationEdgeStreamOutput createItem() {
++            return new IFDynamicGraphCompilationEdgeStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String edge;
++
++        @Override
++        public String getEdge(){
++            return edge;
++        }
++
++        @Override
++        public void setEdge(String edge){
++            this.edge = edge;
++        }
++        static {
++            SerializerRegistry.register("IFDynamicGraphCompilationEdgeStreamOutput", FDynamicGraphCompilationSerializers.IFDynamicGraphCompilationEdgeStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFDynamicGraphCompilationPairwiseFinancialInput input, IIFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "correlationThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterCorrelationThreshold(double value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilationSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilationSerializers.java
+new file mode 100644
+index 0000000..2b0ec30
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilationSerializers.java
+@@ -0,0 +1,135 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FDynamicGraphCompilation;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FDynamicGraphCompilationProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFDynamicGraphCompilation" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FDynamicGraphCompilationSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput} algorithm.
++ */
++public static class IFDynamicGraphCompilationPairwiseFinancialInputSerializer extends Serializer<FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput> implements ISerializer<IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput> {
++
++    @Override
++    public void serializeTo(IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput object, OutputStream out) throws IOException {
++        SIFDynamicGraphCompilationPairwiseFinancialInput tmp = SIFDynamicGraphCompilationPairwiseFinancialInput.newBuilder()
++            .setId0(object.getId0())
++            .setId1(object.getId1())
++            .setDate(object.getDate())
++            .setValue(object.getValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getId0());
++            out.writeString(object.getId1());
++            out.writeString(object.getDate());
++            out.writeDouble(object.getValue());
++        }
++
++    @Override
++    public IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput deserializeFrom(InputStream in) throws IOException {
++        FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
++        SIFDynamicGraphCompilationPairwiseFinancialInput tmp = SIFDynamicGraphCompilationPairwiseFinancialInput.parseDelimitedFrom(in);
++        result.setId0(tmp.getId0());
++        result.setId1(tmp.getId1());
++        result.setDate(tmp.getDate());
++        result.setValue(tmp.getValue());
++        return result;
++    }
++
++        @Override
++        public IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput deserializeFrom(IDataInput in) throws IOException {
++            FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
++            result.setId0(in.nextString());
++            result.setId1(in.nextString());
++            result.setDate(in.nextString());
++            result.setValue(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput object) {
++        output.writeString(object.getId0());
++        output.writeString(object.getId1());
++        output.writeString(object.getDate());
++        output.writeDouble(object.getValue());
++    }
++
++    @Override
++    public FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput read(Kryo kryo, Input input, Class<FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput> type) {
++        FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
++        result.setId0(input.readString());
++        result.setId1(input.readString());
++        result.setDate(input.readString());
++        result.setValue(input.readDouble());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput} algorithm.
++ */
++public static class IFDynamicGraphCompilationEdgeStreamOutputSerializer extends Serializer<FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput> implements ISerializer<IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput> {
++
++    @Override
++    public void serializeTo(IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput object, OutputStream out) throws IOException {
++        SIFDynamicGraphCompilationEdgeStreamOutput tmp = SIFDynamicGraphCompilationEdgeStreamOutput.newBuilder()
++            .setEdge(object.getEdge())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getEdge());
++        }
++
++    @Override
++    public IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++        SIFDynamicGraphCompilationEdgeStreamOutput tmp = SIFDynamicGraphCompilationEdgeStreamOutput.parseDelimitedFrom(in);
++        result.setEdge(tmp.getEdge());
++        return result;
++    }
++
++        @Override
++        public IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++            result.setEdge(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput object) {
++        output.writeString(object.getEdge());
++    }
++
++    @Override
++    public FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput read(Kryo kryo, Input input, Class<FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput> type) {
++        FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++        result.setEdge(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputation.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputation.java
+new file mode 100644
+index 0000000..1d4bc2e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputation.java
+@@ -0,0 +1,119 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFDynamicHubComputation" (GEN).
++ */
++public class FDynamicHubComputation implements IFDynamicHubComputation {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFDynamicHubComputationEdgeStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFDynamicHubComputationEdgeStreamInput implements IIFDynamicHubComputationEdgeStreamInput {
++
++        private String edge;
++
++        @Override
++        public String getEdge(){
++            return edge;
++        }
++
++        @Override
++        public void setEdge(String edge){
++            this.edge = edge;
++        }
++        static {
++            SerializerRegistry.register("IFDynamicHubComputationEdgeStreamInput", FDynamicHubComputationSerializers.IFDynamicHubComputationEdgeStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFDynamicHubComputationHubStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFDynamicHubComputationHubStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFDynamicHubComputationHubStreamOutput> implements IIFDynamicHubComputationHubStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFDynamicHubComputationHubStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFDynamicHubComputationHubStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFDynamicHubComputationHubStreamOutput createItem() {
++            return new IFDynamicHubComputationHubStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String hubList;
++
++        @Override
++        public String getHubList(){
++            return hubList;
++        }
++
++        @Override
++        public void setHubList(String hubList){
++            this.hubList = hubList;
++        }
++        static {
++            SerializerRegistry.register("IFDynamicHubComputationHubStreamOutput", FDynamicHubComputationSerializers.IFDynamicHubComputationHubStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFDynamicHubComputationEdgeStreamInput input, IIFDynamicHubComputationHubStreamOutput hubStreamResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "hubListSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterHubListSize(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputationSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputationSerializers.java
+new file mode 100644
+index 0000000..e0a7d9c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputationSerializers.java
+@@ -0,0 +1,117 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FDynamicHubComputation;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FDynamicHubComputationProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFDynamicHubComputation" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FDynamicHubComputationSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput} algorithm.
++ */
++public static class IFDynamicHubComputationEdgeStreamInputSerializer extends Serializer<FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput> implements ISerializer<IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput> {
++
++    @Override
++    public void serializeTo(IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput object, OutputStream out) throws IOException {
++        SIFDynamicHubComputationEdgeStreamInput tmp = SIFDynamicHubComputationEdgeStreamInput.newBuilder()
++            .setEdge(object.getEdge())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getEdge());
++        }
++
++    @Override
++    public IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput deserializeFrom(InputStream in) throws IOException {
++        FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput result = new FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput();
++        SIFDynamicHubComputationEdgeStreamInput tmp = SIFDynamicHubComputationEdgeStreamInput.parseDelimitedFrom(in);
++        result.setEdge(tmp.getEdge());
++        return result;
++    }
++
++        @Override
++        public IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput result = new FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput();
++            result.setEdge(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput object) {
++        output.writeString(object.getEdge());
++    }
++
++    @Override
++    public FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput read(Kryo kryo, Input input, Class<FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput> type) {
++        FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput result = new FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput();
++        result.setEdge(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput} algorithm.
++ */
++public static class IFDynamicHubComputationHubStreamOutputSerializer extends Serializer<FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput> implements ISerializer<IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput> {
++
++    @Override
++    public void serializeTo(IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput object, OutputStream out) throws IOException {
++        SIFDynamicHubComputationHubStreamOutput tmp = SIFDynamicHubComputationHubStreamOutput.newBuilder()
++            .setHubList(object.getHubList())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getHubList());
++        }
++
++    @Override
++    public IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput result = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
++        SIFDynamicHubComputationHubStreamOutput tmp = SIFDynamicHubComputationHubStreamOutput.parseDelimitedFrom(in);
++        result.setHubList(tmp.getHubList());
++        return result;
++    }
++
++        @Override
++        public IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput result = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
++            result.setHubList(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput object) {
++        output.writeString(object.getHubList());
++    }
++
++    @Override
++    public FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput read(Kryo kryo, Input input, Class<FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput> type) {
++        FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput result = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
++        result.setHubList(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichment.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichment.java
+new file mode 100644
+index 0000000..409db94
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichment.java
+@@ -0,0 +1,144 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFEventEnrichment" (GEN).
++ */
++public class FEventEnrichment implements IFEventEnrichment {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFEventEnrichmentEventStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFEventEnrichmentEventStreamInput implements IIFEventEnrichmentEventStreamInput {
++
++        private eu.qualimaster.data.stream.source.LabelledTweet tweet;
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getTweet(){
++            return tweet;
++        }
++
++        @Override
++        public void setTweet(eu.qualimaster.data.stream.source.LabelledTweet tweet){
++            this.tweet = tweet;
++        }
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        static {
++            SerializerRegistry.register("IFEventEnrichmentEventStreamInput", FEventEnrichmentSerializers.IFEventEnrichmentEventStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFEventEnrichmentKeywordStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFEventEnrichmentKeywordStreamInput implements IIFEventEnrichmentKeywordStreamInput {
++
++        private java.util.List<String> keywords;
++
++        @Override
++        public java.util.List<String> getKeywords(){
++            return keywords;
++        }
++
++        @Override
++        public void setKeywords(java.util.List<String> keywords){
++            this.keywords = keywords;
++        }
++        static {
++            SerializerRegistry.register("IFEventEnrichmentKeywordStreamInput", FEventEnrichmentSerializers.IFEventEnrichmentKeywordStreamInputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFEventEnrichmentEnrichedEventsStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFEventEnrichmentEnrichedEventsStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFEventEnrichmentEnrichedEventsStreamOutput> implements IIFEventEnrichmentEnrichedEventsStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFEventEnrichmentEnrichedEventsStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFEventEnrichmentEnrichedEventsStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFEventEnrichmentEnrichedEventsStreamOutput createItem() {
++            return new IFEventEnrichmentEnrichedEventsStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        static {
++            SerializerRegistry.register("IFEventEnrichmentEnrichedEventsStreamOutput", FEventEnrichmentSerializers.IFEventEnrichmentEnrichedEventsStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFEventEnrichmentEventStreamInput input, IIFEventEnrichmentEnrichedEventsStreamOutput enrichedEventsStreamResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFEventEnrichmentKeywordStreamInput input, IIFEventEnrichmentEnrichedEventsStreamOutput enrichedEventsStreamResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichmentSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichmentSerializers.java
+new file mode 100644
+index 0000000..26a9b95
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichmentSerializers.java
+@@ -0,0 +1,157 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FEventEnrichment;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FEventEnrichmentProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFEventEnrichment" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FEventEnrichmentSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFEventEnrichment.IIFEventEnrichmentEventStreamInput} algorithm.
++ */
++public static class IFEventEnrichmentEventStreamInputSerializer extends Serializer<FEventEnrichment.IFEventEnrichmentEventStreamInput> implements ISerializer<IFEventEnrichment.IIFEventEnrichmentEventStreamInput> {
++
++    @Override
++    public void serializeTo(IFEventEnrichment.IIFEventEnrichmentEventStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getTweet(), out);
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++    }
++
++        @Override
++        public void serializeTo(IFEventEnrichment.IIFEventEnrichmentEventStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getTweet(), out);
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        }
++
++    @Override
++    public IFEventEnrichment.IIFEventEnrichmentEventStreamInput deserializeFrom(InputStream in) throws IOException {
++        FEventEnrichment.IFEventEnrichmentEventStreamInput result = new FEventEnrichment.IFEventEnrichmentEventStreamInput();
++        result.setTweet(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFEventEnrichment.IIFEventEnrichmentEventStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FEventEnrichment.IFEventEnrichmentEventStreamInput result = new FEventEnrichment.IFEventEnrichmentEventStreamInput();
++            result.setTweet(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FEventEnrichment.IFEventEnrichmentEventStreamInput object) {
++        kryo.writeObject(output, object.getTweet());
++        kryo.writeObject(output, object.getEvents());
++    }
++
++    @Override
++    public FEventEnrichment.IFEventEnrichmentEventStreamInput read(Kryo kryo, Input input, Class<FEventEnrichment.IFEventEnrichmentEventStreamInput> type) {
++        FEventEnrichment.IFEventEnrichmentEventStreamInput result = new FEventEnrichment.IFEventEnrichmentEventStreamInput();
++        result.setTweet(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput} algorithm.
++ */
++public static class IFEventEnrichmentKeywordStreamInputSerializer extends Serializer<FEventEnrichment.IFEventEnrichmentKeywordStreamInput> implements ISerializer<IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput> {
++
++    @Override
++    public void serializeTo(IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
++    }
++
++        @Override
++        public void serializeTo(IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
++        }
++
++    @Override
++    public IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput deserializeFrom(InputStream in) throws IOException {
++        FEventEnrichment.IFEventEnrichmentKeywordStreamInput result = new FEventEnrichment.IFEventEnrichmentKeywordStreamInput();
++        result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FEventEnrichment.IFEventEnrichmentKeywordStreamInput result = new FEventEnrichment.IFEventEnrichmentKeywordStreamInput();
++            result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FEventEnrichment.IFEventEnrichmentKeywordStreamInput object) {
++        kryo.writeObject(output, object.getKeywords());
++    }
++
++    @Override
++    public FEventEnrichment.IFEventEnrichmentKeywordStreamInput read(Kryo kryo, Input input, Class<FEventEnrichment.IFEventEnrichmentKeywordStreamInput> type) {
++        FEventEnrichment.IFEventEnrichmentKeywordStreamInput result = new FEventEnrichment.IFEventEnrichmentKeywordStreamInput();
++        result.setKeywords(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput} algorithm.
++ */
++public static class IFEventEnrichmentEnrichedEventsStreamOutputSerializer extends Serializer<FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput> implements ISerializer<IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput> {
++
++    @Override
++    public void serializeTo(IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++    }
++
++        @Override
++        public void serializeTo(IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        }
++
++    @Override
++    public IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput result = new FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput();
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput result = new FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput();
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput object) {
++        kryo.writeObject(output, object.getEvents());
++    }
++
++    @Override
++    public FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput read(Kryo kryo, Input input, Class<FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput> type) {
++        FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput result = new FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput();
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearch.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearch.java
+new file mode 100644
+index 0000000..7eff552
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearch.java
+@@ -0,0 +1,142 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFExpertSearch" (GEN).
++ */
++public class FExpertSearch implements IFExpertSearch {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFExpertSearchAnalysisInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFExpertSearchAnalysisInput implements IIFExpertSearchAnalysisInput {
++
++        private twitter4j.Status status;
++
++        @Override
++        public twitter4j.Status getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(twitter4j.Status status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFExpertSearchAnalysisInput", FExpertSearchSerializers.IFExpertSearchAnalysisInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFExpertSearchAnalysisOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFExpertSearchAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFExpertSearchAnalysisOutput> implements IIFExpertSearchAnalysisOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFExpertSearchAnalysisOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFExpertSearchAnalysisOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFExpertSearchAnalysisOutput createItem() {
++            return new IFExpertSearchAnalysisOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> experts;
++        private eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval;
++        private java.util.List<String> keywords;
++        private java.util.List<String> symbols;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> getExperts(){
++            return experts;
++        }
++
++        @Override
++        public void setExperts(java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> experts){
++            this.experts = experts;
++        }
++        @Override
++        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval(){
++            return timeInterval;
++        }
++
++        @Override
++        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval){
++            this.timeInterval = timeInterval;
++        }
++        @Override
++        public java.util.List<String> getKeywords(){
++            return keywords;
++        }
++
++        @Override
++        public void setKeywords(java.util.List<String> keywords){
++            this.keywords = keywords;
++        }
++        @Override
++        public java.util.List<String> getSymbols(){
++            return symbols;
++        }
++
++        @Override
++        public void setSymbols(java.util.List<String> symbols){
++            this.symbols = symbols;
++        }
++        static {
++            SerializerRegistry.register("IFExpertSearchAnalysisOutput", FExpertSearchSerializers.IFExpertSearchAnalysisOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFExpertSearchAnalysisInput input, IIFExpertSearchAnalysisOutput analysisResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearchSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearchSerializers.java
+new file mode 100644
+index 0000000..c9580d0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearchSerializers.java
+@@ -0,0 +1,127 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FExpertSearch;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FExpertSearchProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFExpertSearch" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FExpertSearchSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFExpertSearch.IIFExpertSearchAnalysisInput} algorithm.
++ */
++public static class IFExpertSearchAnalysisInputSerializer extends Serializer<FExpertSearch.IFExpertSearchAnalysisInput> implements ISerializer<IFExpertSearch.IIFExpertSearchAnalysisInput> {
++
++    @Override
++    public void serializeTo(IFExpertSearch.IIFExpertSearchAnalysisInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFExpertSearch.IIFExpertSearchAnalysisInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFExpertSearch.IIFExpertSearchAnalysisInput deserializeFrom(InputStream in) throws IOException {
++        FExpertSearch.IFExpertSearchAnalysisInput result = new FExpertSearch.IFExpertSearchAnalysisInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFExpertSearch.IIFExpertSearchAnalysisInput deserializeFrom(IDataInput in) throws IOException {
++            FExpertSearch.IFExpertSearchAnalysisInput result = new FExpertSearch.IFExpertSearchAnalysisInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FExpertSearch.IFExpertSearchAnalysisInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FExpertSearch.IFExpertSearchAnalysisInput read(Kryo kryo, Input input, Class<FExpertSearch.IFExpertSearchAnalysisInput> type) {
++        FExpertSearch.IFExpertSearchAnalysisInput result = new FExpertSearch.IFExpertSearchAnalysisInput();
++        result.setStatus(kryo.readObject(input, twitter4j.Status.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFExpertSearch.IIFExpertSearchAnalysisOutput} algorithm.
++ */
++public static class IFExpertSearchAnalysisOutputSerializer extends Serializer<FExpertSearch.IFExpertSearchAnalysisOutput> implements ISerializer<IFExpertSearch.IIFExpertSearchAnalysisOutput> {
++
++    @Override
++    public void serializeTo(IFExpertSearch.IIFExpertSearchAnalysisOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEXPERTLIST", eu.qualimaster.families.datatypes.expertsearch.IFExpert.class).serializeTo(object.getExperts(), out);
++        SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(IFExpertSearch.IIFExpertSearchAnalysisOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEXPERTLIST", eu.qualimaster.families.datatypes.expertsearch.IFExpert.class).serializeTo(object.getExperts(), out);
++            SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getSymbols(), out);
++        }
++
++    @Override
++    public IFExpertSearch.IIFExpertSearchAnalysisOutput deserializeFrom(InputStream in) throws IOException {
++        FExpertSearch.IFExpertSearchAnalysisOutput result = new FExpertSearch.IFExpertSearchAnalysisOutput();
++        result.setExperts(SerializerRegistry.getListSerializerSafe("IFEXPERTLIST", eu.qualimaster.families.datatypes.expertsearch.IFExpert.class).deserializeFrom(in));
++        result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
++        result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        result.setSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFExpertSearch.IIFExpertSearchAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
++            FExpertSearch.IFExpertSearchAnalysisOutput result = new FExpertSearch.IFExpertSearchAnalysisOutput();
++            result.setExperts(SerializerRegistry.getListSerializerSafe("IFEXPERTLIST", eu.qualimaster.families.datatypes.expertsearch.IFExpert.class).deserializeFrom(in));
++            result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
++            result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            result.setSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FExpertSearch.IFExpertSearchAnalysisOutput object) {
++        kryo.writeObject(output, object.getExperts());
++        kryo.writeObject(output, object.getTimeInterval());
++        kryo.writeObject(output, object.getKeywords());
++        kryo.writeObject(output, object.getSymbols());
++    }
++
++    @Override
++    public FExpertSearch.IFExpertSearchAnalysisOutput read(Kryo kryo, Input input, Class<FExpertSearch.IFExpertSearchAnalysisOutput> type) {
++        FExpertSearch.IFExpertSearchAnalysisOutput result = new FExpertSearch.IFExpertSearchAnalysisOutput();
++        result.setExperts(kryo.readObject(input, java.util.ArrayList.class));
++        result.setTimeInterval(kryo.readObject(input, eu.qualimaster.families.datatypes.common.IFTimeInterval.class));
++        result.setKeywords(kryo.readObject(input, java.util.ArrayList.class));
++        result.setSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtraction.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtraction.java
+new file mode 100644
+index 0000000..940dfc1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtraction.java
+@@ -0,0 +1,121 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFFinancialNetworkExtraction" (GEN).
++ */
++public class FFinancialNetworkExtraction implements IFFinancialNetworkExtraction {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFFinancialNetworkExtractionAnalysisInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFFinancialNetworkExtractionAnalysisInput implements IIFFinancialNetworkExtractionAnalysisInput {
++
++        private twitter4j.Status status;
++
++        @Override
++        public twitter4j.Status getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(twitter4j.Status status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFFinancialNetworkExtractionAnalysisInput", FFinancialNetworkExtractionSerializers.IFFinancialNetworkExtractionAnalysisInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFFinancialNetworkExtractionAnalysisOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFFinancialNetworkExtractionAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFFinancialNetworkExtractionAnalysisOutput> implements IIFFinancialNetworkExtractionAnalysisOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFFinancialNetworkExtractionAnalysisOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFFinancialNetworkExtractionAnalysisOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFFinancialNetworkExtractionAnalysisOutput createItem() {
++            return new IFFinancialNetworkExtractionAnalysisOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> edges;
++        private eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> getEdges(){
++            return edges;
++        }
++
++        @Override
++        public void setEdges(java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> edges){
++            this.edges = edges;
++        }
++        @Override
++        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval(){
++            return timeInterval;
++        }
++
++        @Override
++        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval){
++            this.timeInterval = timeInterval;
++        }
++        static {
++            SerializerRegistry.register("IFFinancialNetworkExtractionAnalysisOutput", FFinancialNetworkExtractionSerializers.IFFinancialNetworkExtractionAnalysisOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFFinancialNetworkExtractionAnalysisInput input, IIFFinancialNetworkExtractionAnalysisOutput analysisResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtractionSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtractionSerializers.java
+new file mode 100644
+index 0000000..a27e396
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtractionSerializers.java
+@@ -0,0 +1,115 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FFinancialNetworkExtraction;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FFinancialNetworkExtractionProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFFinancialNetworkExtraction" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FFinancialNetworkExtractionSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput} algorithm.
++ */
++public static class IFFinancialNetworkExtractionAnalysisInputSerializer extends Serializer<FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput> implements ISerializer<IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput> {
++
++    @Override
++    public void serializeTo(IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput deserializeFrom(InputStream in) throws IOException {
++        FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput deserializeFrom(IDataInput in) throws IOException {
++            FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput read(Kryo kryo, Input input, Class<FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput> type) {
++        FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput();
++        result.setStatus(kryo.readObject(input, twitter4j.Status.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput} algorithm.
++ */
++public static class IFFinancialNetworkExtractionAnalysisOutputSerializer extends Serializer<FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput> implements ISerializer<IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput> {
++
++    @Override
++    public void serializeTo(IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEDGETYPE", eu.qualimaster.families.datatypes.financialnetwork.IFEdge.class).serializeTo(object.getEdges(), out);
++        SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
++    }
++
++        @Override
++        public void serializeTo(IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEDGETYPE", eu.qualimaster.families.datatypes.financialnetwork.IFEdge.class).serializeTo(object.getEdges(), out);
++            SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
++        }
++
++    @Override
++    public IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput deserializeFrom(InputStream in) throws IOException {
++        FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput();
++        result.setEdges(SerializerRegistry.getListSerializerSafe("IFEDGETYPE", eu.qualimaster.families.datatypes.financialnetwork.IFEdge.class).deserializeFrom(in));
++        result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
++            FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput();
++            result.setEdges(SerializerRegistry.getListSerializerSafe("IFEDGETYPE", eu.qualimaster.families.datatypes.financialnetwork.IFEdge.class).deserializeFrom(in));
++            result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput object) {
++        kryo.writeObject(output, object.getEdges());
++        kryo.writeObject(output, object.getTimeInterval());
++    }
++
++    @Override
++    public FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput read(Kryo kryo, Input input, Class<FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput> type) {
++        FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput();
++        result.setEdges(kryo.readObject(input, java.util.ArrayList.class));
++        result.setTimeInterval(kryo.readObject(input, eu.qualimaster.families.datatypes.common.IFTimeInterval.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshida.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshida.java
+new file mode 100644
+index 0000000..505d9b9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshida.java
+@@ -0,0 +1,192 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFHayashiYoshida" (GEN).
++ */
++public class FHayashiYoshida implements IFHayashiYoshida {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFHayashiYoshidaSymbolsStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFHayashiYoshidaSymbolsStreamInput implements IIFHayashiYoshidaSymbolsStreamInput {
++
++        private String symbolId;
++        private long timestamp;
++        private double value;
++
++        @Override
++        public String getSymbolId(){
++            return symbolId;
++        }
++
++        @Override
++        public void setSymbolId(String symbolId){
++            this.symbolId = symbolId;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        static {
++            SerializerRegistry.register("IFHayashiYoshidaSymbolsStreamInput", FHayashiYoshidaSerializers.IFHayashiYoshidaSymbolsStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFHayashiYoshidaConfigurationStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFHayashiYoshidaConfigurationStreamInput implements IIFHayashiYoshidaConfigurationStreamInput {
++
++        private String pairKey;
++        private String pairValue;
++
++        @Override
++        public String getPairKey(){
++            return pairKey;
++        }
++
++        @Override
++        public void setPairKey(String pairKey){
++            this.pairKey = pairKey;
++        }
++        @Override
++        public String getPairValue(){
++            return pairValue;
++        }
++
++        @Override
++        public void setPairValue(String pairValue){
++            this.pairValue = pairValue;
++        }
++        static {
++            SerializerRegistry.register("IFHayashiYoshidaConfigurationStreamInput", FHayashiYoshidaSerializers.IFHayashiYoshidaConfigurationStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFHayashiYoshidaResetWindowStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFHayashiYoshidaResetWindowStreamInput implements IIFHayashiYoshidaResetWindowStreamInput {
++
++        private long windowStart;
++
++        @Override
++        public long getWindowStart(){
++            return windowStart;
++        }
++
++        @Override
++        public void setWindowStart(long windowStart){
++            this.windowStart = windowStart;
++        }
++        static {
++            SerializerRegistry.register("IFHayashiYoshidaResetWindowStreamInput", FHayashiYoshidaSerializers.IFHayashiYoshidaResetWindowStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFHayashiYoshidaPairwiseFinancialOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFHayashiYoshidaPairwiseFinancialOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFHayashiYoshidaPairwiseFinancialOutput> implements IIFHayashiYoshidaPairwiseFinancialOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFHayashiYoshidaPairwiseFinancialOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFHayashiYoshidaPairwiseFinancialOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFHayashiYoshidaPairwiseFinancialOutput createItem() {
++            return new IFHayashiYoshidaPairwiseFinancialOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String pairwiseCorrelationFinancial;
++
++        @Override
++        public String getPairwiseCorrelationFinancial(){
++            return pairwiseCorrelationFinancial;
++        }
++
++        @Override
++        public void setPairwiseCorrelationFinancial(String pairwiseCorrelationFinancial){
++            this.pairwiseCorrelationFinancial = pairwiseCorrelationFinancial;
++        }
++        static {
++            SerializerRegistry.register("IFHayashiYoshidaPairwiseFinancialOutput", FHayashiYoshidaSerializers.IFHayashiYoshidaPairwiseFinancialOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFHayashiYoshidaSymbolsStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFHayashiYoshidaConfigurationStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFHayashiYoshidaResetWindowStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshidaSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshidaSerializers.java
+new file mode 100644
+index 0000000..d3f19b2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshidaSerializers.java
+@@ -0,0 +1,227 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FHayashiYoshida;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FHayashiYoshidaProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFHayashiYoshida" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FHayashiYoshidaSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput} algorithm.
++ */
++public static class IFHayashiYoshidaSymbolsStreamInputSerializer extends Serializer<FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput> implements ISerializer<IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput> {
++
++    @Override
++    public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput object, OutputStream out) throws IOException {
++        SIFHayashiYoshidaSymbolsStreamInput tmp = SIFHayashiYoshidaSymbolsStreamInput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++        }
++
++    @Override
++    public IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput deserializeFrom(InputStream in) throws IOException {
++        FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput result = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
++        SIFHayashiYoshidaSymbolsStreamInput tmp = SIFHayashiYoshidaSymbolsStreamInput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        return result;
++    }
++
++        @Override
++        public IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput result = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++    }
++
++    @Override
++    public FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput read(Kryo kryo, Input input, Class<FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput> type) {
++        FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput result = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput} algorithm.
++ */
++public static class IFHayashiYoshidaConfigurationStreamInputSerializer extends Serializer<FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput> implements ISerializer<IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput> {
++
++    @Override
++    public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput object, OutputStream out) throws IOException {
++        SIFHayashiYoshidaConfigurationStreamInput tmp = SIFHayashiYoshidaConfigurationStreamInput.newBuilder()
++            .setPairKey(object.getPairKey())
++            .setPairValue(object.getPairValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getPairKey());
++            out.writeString(object.getPairValue());
++        }
++
++    @Override
++    public IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput deserializeFrom(InputStream in) throws IOException {
++        FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput result = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
++        SIFHayashiYoshidaConfigurationStreamInput tmp = SIFHayashiYoshidaConfigurationStreamInput.parseDelimitedFrom(in);
++        result.setPairKey(tmp.getPairKey());
++        result.setPairValue(tmp.getPairValue());
++        return result;
++    }
++
++        @Override
++        public IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput result = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
++            result.setPairKey(in.nextString());
++            result.setPairValue(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput object) {
++        output.writeString(object.getPairKey());
++        output.writeString(object.getPairValue());
++    }
++
++    @Override
++    public FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput read(Kryo kryo, Input input, Class<FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput> type) {
++        FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput result = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
++        result.setPairKey(input.readString());
++        result.setPairValue(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput} algorithm.
++ */
++public static class IFHayashiYoshidaResetWindowStreamInputSerializer extends Serializer<FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput> implements ISerializer<IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput> {
++
++    @Override
++    public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput object, OutputStream out) throws IOException {
++        SIFHayashiYoshidaResetWindowStreamInput tmp = SIFHayashiYoshidaResetWindowStreamInput.newBuilder()
++            .setWindowStart(object.getWindowStart())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getWindowStart());
++        }
++
++    @Override
++    public IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput deserializeFrom(InputStream in) throws IOException {
++        FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput result = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
++        SIFHayashiYoshidaResetWindowStreamInput tmp = SIFHayashiYoshidaResetWindowStreamInput.parseDelimitedFrom(in);
++        result.setWindowStart(tmp.getWindowStart());
++        return result;
++    }
++
++        @Override
++        public IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput result = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
++            result.setWindowStart(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput object) {
++        output.writeLong(object.getWindowStart());
++    }
++
++    @Override
++    public FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput read(Kryo kryo, Input input, Class<FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput> type) {
++        FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput result = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
++        result.setWindowStart(input.readLong());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput} algorithm.
++ */
++public static class IFHayashiYoshidaPairwiseFinancialOutputSerializer extends Serializer<FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput> implements ISerializer<IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput> {
++
++    @Override
++    public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput object, OutputStream out) throws IOException {
++        SIFHayashiYoshidaPairwiseFinancialOutput tmp = SIFHayashiYoshidaPairwiseFinancialOutput.newBuilder()
++            .setPairwiseCorrelationFinancial(object.getPairwiseCorrelationFinancial())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getPairwiseCorrelationFinancial());
++        }
++
++    @Override
++    public IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput deserializeFrom(InputStream in) throws IOException {
++        FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput result = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
++        SIFHayashiYoshidaPairwiseFinancialOutput tmp = SIFHayashiYoshidaPairwiseFinancialOutput.parseDelimitedFrom(in);
++        result.setPairwiseCorrelationFinancial(tmp.getPairwiseCorrelationFinancial());
++        return result;
++    }
++
++        @Override
++        public IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput deserializeFrom(IDataInput in) throws IOException {
++            FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput result = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
++            result.setPairwiseCorrelationFinancial(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput object) {
++        output.writeString(object.getPairwiseCorrelationFinancial());
++    }
++
++    @Override
++    public FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput read(Kryo kryo, Input input, Class<FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput> type) {
++        FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput result = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
++        result.setPairwiseCorrelationFinancial(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzer.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzer.java
+new file mode 100644
+index 0000000..ca18fe7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzer.java
+@@ -0,0 +1,139 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFKeywordAnalyzer" (GEN).
++ */
++public class FKeywordAnalyzer implements IFKeywordAnalyzer {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFKeywordAnalyzerTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFKeywordAnalyzerTwitterStreamInput implements IIFKeywordAnalyzerTwitterStreamInput {
++
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFKeywordAnalyzerTwitterStreamInput", FKeywordAnalyzerSerializers.IFKeywordAnalyzerTwitterStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFKeywordAnalyzerTwitterStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFKeywordAnalyzerTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFKeywordAnalyzerTwitterStreamOutput> implements IIFKeywordAnalyzerTwitterStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFKeywordAnalyzerTwitterStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFKeywordAnalyzerTwitterStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFKeywordAnalyzerTwitterStreamOutput createItem() {
++            return new IFKeywordAnalyzerTwitterStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFKeywordAnalyzerTwitterStreamOutput", FKeywordAnalyzerSerializers.IFKeywordAnalyzerTwitterStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFKeywordAnalyzerTwitterStreamInput input, IIFKeywordAnalyzerTwitterStreamOutput twitterStreamResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "threshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterThreshold(double value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "decay".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDecay(double value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzerSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzerSerializers.java
+new file mode 100644
+index 0000000..72ef755
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzerSerializers.java
+@@ -0,0 +1,121 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FKeywordAnalyzer;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FKeywordAnalyzerProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFKeywordAnalyzer" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FKeywordAnalyzerSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput} algorithm.
++ */
++public static class IFKeywordAnalyzerTwitterStreamInputSerializer extends Serializer<FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput> implements ISerializer<IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput();
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput();
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput object) {
++        kryo.writeObject(output, object.getEvents());
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput read(Kryo kryo, Input input, Class<FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput> type) {
++        FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput();
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput} algorithm.
++ */
++public static class IFKeywordAnalyzerTwitterStreamOutputSerializer extends Serializer<FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput> implements ISerializer<IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput> {
++
++    @Override
++    public void serializeTo(IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput object) {
++        kryo.writeObject(output, object.getEvents());
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput read(Kryo kryo, Input input, Class<FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput> type) {
++        FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapper.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapper.java
+new file mode 100644
+index 0000000..b096f60
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapper.java
+@@ -0,0 +1,309 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFMapper" (GEN).
++ */
++public class FMapper implements IFMapper {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFMapperPreprocessedStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFMapperPreprocessedStreamInput implements IIFMapperPreprocessedStreamInput {
++
++        private String symbolId;
++        private long timestamp;
++        private double value;
++        private int volume;
++
++        @Override
++        public String getSymbolId(){
++            return symbolId;
++        }
++
++        @Override
++        public void setSymbolId(String symbolId){
++            this.symbolId = symbolId;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        @Override
++        public int getVolume(){
++            return volume;
++        }
++
++        @Override
++        public void setVolume(int volume){
++            this.volume = volume;
++        }
++        static {
++            SerializerRegistry.register("IFMapperPreprocessedStreamInput", FMapperSerializers.IFMapperPreprocessedStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFMapperSymbolListInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFMapperSymbolListInput implements IIFMapperSymbolListInput {
++
++        private java.util.List<String> allSymbols;
++
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("IFMapperSymbolListInput", FMapperSerializers.IFMapperSymbolListInputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFMapperSymbolsStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFMapperSymbolsStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFMapperSymbolsStreamOutput> implements IIFMapperSymbolsStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFMapperSymbolsStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFMapperSymbolsStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFMapperSymbolsStreamOutput createItem() {
++            return new IFMapperSymbolsStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String symbolId;
++        private long timestamp;
++        private double value;
++
++        @Override
++        public String getSymbolId(){
++            return symbolId;
++        }
++
++        @Override
++        public void setSymbolId(String symbolId){
++            this.symbolId = symbolId;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        static {
++            SerializerRegistry.register("IFMapperSymbolsStreamOutput", FMapperSerializers.IFMapperSymbolsStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFMapperConfigurationStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFMapperConfigurationStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFMapperConfigurationStreamOutput> implements IIFMapperConfigurationStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFMapperConfigurationStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFMapperConfigurationStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFMapperConfigurationStreamOutput createItem() {
++            return new IFMapperConfigurationStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String pairKey;
++        private String pairValue;
++
++        @Override
++        public String getPairKey(){
++            return pairKey;
++        }
++
++        @Override
++        public void setPairKey(String pairKey){
++            this.pairKey = pairKey;
++        }
++        @Override
++        public String getPairValue(){
++            return pairValue;
++        }
++
++        @Override
++        public void setPairValue(String pairValue){
++            this.pairValue = pairValue;
++        }
++        static {
++            SerializerRegistry.register("IFMapperConfigurationStreamOutput", FMapperSerializers.IFMapperConfigurationStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFMapperResetWindowStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFMapperResetWindowStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFMapperResetWindowStreamOutput> implements IIFMapperResetWindowStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFMapperResetWindowStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFMapperResetWindowStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFMapperResetWindowStreamOutput createItem() {
++            return new IFMapperResetWindowStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private long windowStart;
++
++        @Override
++        public long getWindowStart(){
++            return windowStart;
++        }
++
++        @Override
++        public void setWindowStart(long windowStart){
++            this.windowStart = windowStart;
++        }
++        static {
++            SerializerRegistry.register("IFMapperResetWindowStreamOutput", FMapperSerializers.IFMapperResetWindowStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFMapperPreprocessedStreamInput input, IIFMapperSymbolsStreamOutput symbolsStreamResult, IIFMapperConfigurationStreamOutput configurationStreamResult, IIFMapperResetWindowStreamOutput resetWindowStreamResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFMapperSymbolListInput input, IIFMapperSymbolsStreamOutput symbolsStreamResult, IIFMapperConfigurationStreamOutput configurationStreamResult, IIFMapperResetWindowStreamOutput resetWindowStreamResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapperSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapperSerializers.java
+new file mode 100644
+index 0000000..8ad8754
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapperSerializers.java
+@@ -0,0 +1,287 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FMapper;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FMapperProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFMapper" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FMapperSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFMapper.IIFMapperPreprocessedStreamInput} algorithm.
++ */
++public static class IFMapperPreprocessedStreamInputSerializer extends Serializer<FMapper.IFMapperPreprocessedStreamInput> implements ISerializer<IFMapper.IIFMapperPreprocessedStreamInput> {
++
++    @Override
++    public void serializeTo(IFMapper.IIFMapperPreprocessedStreamInput object, OutputStream out) throws IOException {
++        SIFMapperPreprocessedStreamInput tmp = SIFMapperPreprocessedStreamInput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .setVolume(object.getVolume())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFMapper.IIFMapperPreprocessedStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++            out.writeInt(object.getVolume());
++        }
++
++    @Override
++    public IFMapper.IIFMapperPreprocessedStreamInput deserializeFrom(InputStream in) throws IOException {
++        FMapper.IFMapperPreprocessedStreamInput result = new FMapper.IFMapperPreprocessedStreamInput();
++        SIFMapperPreprocessedStreamInput tmp = SIFMapperPreprocessedStreamInput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        result.setVolume(tmp.getVolume());
++        return result;
++    }
++
++        @Override
++        public IFMapper.IIFMapperPreprocessedStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FMapper.IFMapperPreprocessedStreamInput result = new FMapper.IFMapperPreprocessedStreamInput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            result.setVolume(in.nextInt());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FMapper.IFMapperPreprocessedStreamInput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++        output.writeInt(object.getVolume());
++    }
++
++    @Override
++    public FMapper.IFMapperPreprocessedStreamInput read(Kryo kryo, Input input, Class<FMapper.IFMapperPreprocessedStreamInput> type) {
++        FMapper.IFMapperPreprocessedStreamInput result = new FMapper.IFMapperPreprocessedStreamInput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        result.setVolume(input.readInt());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFMapper.IIFMapperSymbolListInput} algorithm.
++ */
++public static class IFMapperSymbolListInputSerializer extends Serializer<FMapper.IFMapperSymbolListInput> implements ISerializer<IFMapper.IIFMapperSymbolListInput> {
++
++    @Override
++    public void serializeTo(IFMapper.IIFMapperSymbolListInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(IFMapper.IIFMapperSymbolListInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public IFMapper.IIFMapperSymbolListInput deserializeFrom(InputStream in) throws IOException {
++        FMapper.IFMapperSymbolListInput result = new FMapper.IFMapperSymbolListInput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFMapper.IIFMapperSymbolListInput deserializeFrom(IDataInput in) throws IOException {
++            FMapper.IFMapperSymbolListInput result = new FMapper.IFMapperSymbolListInput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FMapper.IFMapperSymbolListInput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public FMapper.IFMapperSymbolListInput read(Kryo kryo, Input input, Class<FMapper.IFMapperSymbolListInput> type) {
++        FMapper.IFMapperSymbolListInput result = new FMapper.IFMapperSymbolListInput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFMapper.IIFMapperSymbolsStreamOutput} algorithm.
++ */
++public static class IFMapperSymbolsStreamOutputSerializer extends Serializer<FMapper.IFMapperSymbolsStreamOutput> implements ISerializer<IFMapper.IIFMapperSymbolsStreamOutput> {
++
++    @Override
++    public void serializeTo(IFMapper.IIFMapperSymbolsStreamOutput object, OutputStream out) throws IOException {
++        SIFMapperSymbolsStreamOutput tmp = SIFMapperSymbolsStreamOutput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFMapper.IIFMapperSymbolsStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++        }
++
++    @Override
++    public IFMapper.IIFMapperSymbolsStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FMapper.IFMapperSymbolsStreamOutput result = new FMapper.IFMapperSymbolsStreamOutput();
++        SIFMapperSymbolsStreamOutput tmp = SIFMapperSymbolsStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        return result;
++    }
++
++        @Override
++        public IFMapper.IIFMapperSymbolsStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FMapper.IFMapperSymbolsStreamOutput result = new FMapper.IFMapperSymbolsStreamOutput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FMapper.IFMapperSymbolsStreamOutput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++    }
++
++    @Override
++    public FMapper.IFMapperSymbolsStreamOutput read(Kryo kryo, Input input, Class<FMapper.IFMapperSymbolsStreamOutput> type) {
++        FMapper.IFMapperSymbolsStreamOutput result = new FMapper.IFMapperSymbolsStreamOutput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFMapper.IIFMapperConfigurationStreamOutput} algorithm.
++ */
++public static class IFMapperConfigurationStreamOutputSerializer extends Serializer<FMapper.IFMapperConfigurationStreamOutput> implements ISerializer<IFMapper.IIFMapperConfigurationStreamOutput> {
++
++    @Override
++    public void serializeTo(IFMapper.IIFMapperConfigurationStreamOutput object, OutputStream out) throws IOException {
++        SIFMapperConfigurationStreamOutput tmp = SIFMapperConfigurationStreamOutput.newBuilder()
++            .setPairKey(object.getPairKey())
++            .setPairValue(object.getPairValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFMapper.IIFMapperConfigurationStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getPairKey());
++            out.writeString(object.getPairValue());
++        }
++
++    @Override
++    public IFMapper.IIFMapperConfigurationStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FMapper.IFMapperConfigurationStreamOutput result = new FMapper.IFMapperConfigurationStreamOutput();
++        SIFMapperConfigurationStreamOutput tmp = SIFMapperConfigurationStreamOutput.parseDelimitedFrom(in);
++        result.setPairKey(tmp.getPairKey());
++        result.setPairValue(tmp.getPairValue());
++        return result;
++    }
++
++        @Override
++        public IFMapper.IIFMapperConfigurationStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FMapper.IFMapperConfigurationStreamOutput result = new FMapper.IFMapperConfigurationStreamOutput();
++            result.setPairKey(in.nextString());
++            result.setPairValue(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FMapper.IFMapperConfigurationStreamOutput object) {
++        output.writeString(object.getPairKey());
++        output.writeString(object.getPairValue());
++    }
++
++    @Override
++    public FMapper.IFMapperConfigurationStreamOutput read(Kryo kryo, Input input, Class<FMapper.IFMapperConfigurationStreamOutput> type) {
++        FMapper.IFMapperConfigurationStreamOutput result = new FMapper.IFMapperConfigurationStreamOutput();
++        result.setPairKey(input.readString());
++        result.setPairValue(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFMapper.IIFMapperResetWindowStreamOutput} algorithm.
++ */
++public static class IFMapperResetWindowStreamOutputSerializer extends Serializer<FMapper.IFMapperResetWindowStreamOutput> implements ISerializer<IFMapper.IIFMapperResetWindowStreamOutput> {
++
++    @Override
++    public void serializeTo(IFMapper.IIFMapperResetWindowStreamOutput object, OutputStream out) throws IOException {
++        SIFMapperResetWindowStreamOutput tmp = SIFMapperResetWindowStreamOutput.newBuilder()
++            .setWindowStart(object.getWindowStart())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFMapper.IIFMapperResetWindowStreamOutput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getWindowStart());
++        }
++
++    @Override
++    public IFMapper.IIFMapperResetWindowStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FMapper.IFMapperResetWindowStreamOutput result = new FMapper.IFMapperResetWindowStreamOutput();
++        SIFMapperResetWindowStreamOutput tmp = SIFMapperResetWindowStreamOutput.parseDelimitedFrom(in);
++        result.setWindowStart(tmp.getWindowStart());
++        return result;
++    }
++
++        @Override
++        public IFMapper.IIFMapperResetWindowStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FMapper.IFMapperResetWindowStreamOutput result = new FMapper.IFMapperResetWindowStreamOutput();
++            result.setWindowStart(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FMapper.IFMapperResetWindowStreamOutput object) {
++        output.writeLong(object.getWindowStart());
++    }
++
++    @Override
++    public FMapper.IFMapperResetWindowStreamOutput read(Kryo kryo, Input input, Class<FMapper.IFMapperResetWindowStreamOutput> type) {
++        FMapper.IFMapperResetWindowStreamOutput result = new FMapper.IFMapperResetWindowStreamOutput();
++        result.setWindowStart(input.readLong());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamily.java
+new file mode 100644
+index 0000000..4c50162
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamily.java
+@@ -0,0 +1,132 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFMismatchedFamily" (GEN).
++ */
++public class FMismatchedFamily implements IFMismatchedFamily {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFMismatchedFamilyMisStringInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFMismatchedFamilyMisStringInput implements IIFMismatchedFamilyMisStringInput {
++
++        private String symbolTuple1;
++        private int volume;
++
++        @Override
++        public String getSymbolTuple1(){
++            return symbolTuple1;
++        }
++
++        @Override
++        public void setSymbolTuple1(String symbolTuple1){
++            this.symbolTuple1 = symbolTuple1;
++        }
++        @Override
++        public int getVolume(){
++            return volume;
++        }
++
++        @Override
++        public void setVolume(int volume){
++            this.volume = volume;
++        }
++        static {
++            SerializerRegistry.register("IFMismatchedFamilyMisStringInput", FMismatchedFamilySerializers.IFMismatchedFamilyMisStringInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFMismatchedFamilyMisStringOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFMismatchedFamilyMisStringOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFMismatchedFamilyMisStringOutput> implements IIFMismatchedFamilyMisStringOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFMismatchedFamilyMisStringOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFMismatchedFamilyMisStringOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFMismatchedFamilyMisStringOutput createItem() {
++            return new IFMismatchedFamilyMisStringOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String streamID1;
++        private int timestamp;
++        private double quote;
++
++        @Override
++        public String getStreamID1(){
++            return streamID1;
++        }
++
++        @Override
++        public void setStreamID1(String streamID1){
++            this.streamID1 = streamID1;
++        }
++        @Override
++        public int getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(int timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getQuote(){
++            return quote;
++        }
++
++        @Override
++        public void setQuote(double quote){
++            this.quote = quote;
++        }
++        static {
++            SerializerRegistry.register("IFMismatchedFamilyMisStringOutput", FMismatchedFamilySerializers.IFMismatchedFamilyMisStringOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFMismatchedFamilyMisStringInput input, IIFMismatchedFamilyMisStringOutput misStringResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamilySerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamilySerializers.java
+new file mode 100644
+index 0000000..07f9813
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamilySerializers.java
+@@ -0,0 +1,135 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FMismatchedFamily;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FMismatchedFamilyProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFMismatchedFamily" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FMismatchedFamilySerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFMismatchedFamily.IIFMismatchedFamilyMisStringInput} algorithm.
++ */
++public static class IFMismatchedFamilyMisStringInputSerializer extends Serializer<FMismatchedFamily.IFMismatchedFamilyMisStringInput> implements ISerializer<IFMismatchedFamily.IIFMismatchedFamilyMisStringInput> {
++
++    @Override
++    public void serializeTo(IFMismatchedFamily.IIFMismatchedFamilyMisStringInput object, OutputStream out) throws IOException {
++        SIFMismatchedFamilyMisStringInput tmp = SIFMismatchedFamilyMisStringInput.newBuilder()
++            .setSymbolTuple1(object.getSymbolTuple1())
++            .setVolume(object.getVolume())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFMismatchedFamily.IIFMismatchedFamilyMisStringInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolTuple1());
++            out.writeInt(object.getVolume());
++        }
++
++    @Override
++    public IFMismatchedFamily.IIFMismatchedFamilyMisStringInput deserializeFrom(InputStream in) throws IOException {
++        FMismatchedFamily.IFMismatchedFamilyMisStringInput result = new FMismatchedFamily.IFMismatchedFamilyMisStringInput();
++        SIFMismatchedFamilyMisStringInput tmp = SIFMismatchedFamilyMisStringInput.parseDelimitedFrom(in);
++        result.setSymbolTuple1(tmp.getSymbolTuple1());
++        result.setVolume(tmp.getVolume());
++        return result;
++    }
++
++        @Override
++        public IFMismatchedFamily.IIFMismatchedFamilyMisStringInput deserializeFrom(IDataInput in) throws IOException {
++            FMismatchedFamily.IFMismatchedFamilyMisStringInput result = new FMismatchedFamily.IFMismatchedFamilyMisStringInput();
++            result.setSymbolTuple1(in.nextString());
++            result.setVolume(in.nextInt());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FMismatchedFamily.IFMismatchedFamilyMisStringInput object) {
++        output.writeString(object.getSymbolTuple1());
++        output.writeInt(object.getVolume());
++    }
++
++    @Override
++    public FMismatchedFamily.IFMismatchedFamilyMisStringInput read(Kryo kryo, Input input, Class<FMismatchedFamily.IFMismatchedFamilyMisStringInput> type) {
++        FMismatchedFamily.IFMismatchedFamilyMisStringInput result = new FMismatchedFamily.IFMismatchedFamilyMisStringInput();
++        result.setSymbolTuple1(input.readString());
++        result.setVolume(input.readInt());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput} algorithm.
++ */
++public static class IFMismatchedFamilyMisStringOutputSerializer extends Serializer<FMismatchedFamily.IFMismatchedFamilyMisStringOutput> implements ISerializer<IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput> {
++
++    @Override
++    public void serializeTo(IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput object, OutputStream out) throws IOException {
++        SIFMismatchedFamilyMisStringOutput tmp = SIFMismatchedFamilyMisStringOutput.newBuilder()
++            .setStreamID1(object.getStreamID1())
++            .setTimestamp(object.getTimestamp())
++            .setQuote(object.getQuote())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getStreamID1());
++            out.writeInt(object.getTimestamp());
++            out.writeDouble(object.getQuote());
++        }
++
++    @Override
++    public IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput deserializeFrom(InputStream in) throws IOException {
++        FMismatchedFamily.IFMismatchedFamilyMisStringOutput result = new FMismatchedFamily.IFMismatchedFamilyMisStringOutput();
++        SIFMismatchedFamilyMisStringOutput tmp = SIFMismatchedFamilyMisStringOutput.parseDelimitedFrom(in);
++        result.setStreamID1(tmp.getStreamID1());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setQuote(tmp.getQuote());
++        return result;
++    }
++
++        @Override
++        public IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput deserializeFrom(IDataInput in) throws IOException {
++            FMismatchedFamily.IFMismatchedFamilyMisStringOutput result = new FMismatchedFamily.IFMismatchedFamilyMisStringOutput();
++            result.setStreamID1(in.nextString());
++            result.setTimestamp(in.nextInt());
++            result.setQuote(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FMismatchedFamily.IFMismatchedFamilyMisStringOutput object) {
++        output.writeString(object.getStreamID1());
++        output.writeInt(object.getTimestamp());
++        output.writeDouble(object.getQuote());
++    }
++
++    @Override
++    public FMismatchedFamily.IFMismatchedFamilyMisStringOutput read(Kryo kryo, Input input, Class<FMismatchedFamily.IFMismatchedFamilyMisStringOutput> type) {
++        FMismatchedFamily.IFMismatchedFamilyMisStringOutput result = new FMismatchedFamily.IFMismatchedFamilyMisStringOutput();
++        result.setStreamID1(input.readString());
++        result.setTimestamp(input.readInt());
++        result.setQuote(input.readDouble());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessor.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessor.java
+new file mode 100644
+index 0000000..a63baf7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessor.java
+@@ -0,0 +1,132 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFPreprocessor" (GEN).
++ */
++public class FPreprocessor implements IFPreprocessor {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFPreprocessorSpringStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFPreprocessorSpringStreamInput implements IIFPreprocessorSpringStreamInput {
++
++        private String symbolTuple;
++
++        @Override
++        public String getSymbolTuple(){
++            return symbolTuple;
++        }
++
++        @Override
++        public void setSymbolTuple(String symbolTuple){
++            this.symbolTuple = symbolTuple;
++        }
++        static {
++            SerializerRegistry.register("IFPreprocessorSpringStreamInput", FPreprocessorSerializers.IFPreprocessorSpringStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFPreprocessorPreprocessedStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFPreprocessorPreprocessedStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFPreprocessorPreprocessedStreamOutput> implements IIFPreprocessorPreprocessedStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFPreprocessorPreprocessedStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFPreprocessorPreprocessedStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFPreprocessorPreprocessedStreamOutput createItem() {
++            return new IFPreprocessorPreprocessedStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String symbolId;
++        private long timestamp;
++        private double value;
++        private int volume;
++
++        @Override
++        public String getSymbolId(){
++            return symbolId;
++        }
++
++        @Override
++        public void setSymbolId(String symbolId){
++            this.symbolId = symbolId;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        @Override
++        public int getVolume(){
++            return volume;
++        }
++
++        @Override
++        public void setVolume(int volume){
++            this.volume = volume;
++        }
++        static {
++            SerializerRegistry.register("IFPreprocessorPreprocessedStreamOutput", FPreprocessorSerializers.IFPreprocessorPreprocessedStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFPreprocessorSpringStreamInput input, IIFPreprocessorPreprocessedStreamOutput preprocessedStreamResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessorSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessorSerializers.java
+new file mode 100644
+index 0000000..672ab3e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessorSerializers.java
+@@ -0,0 +1,135 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FPreprocessor;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FPreprocessorProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFPreprocessor" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FPreprocessorSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFPreprocessor.IIFPreprocessorSpringStreamInput} algorithm.
++ */
++public static class IFPreprocessorSpringStreamInputSerializer extends Serializer<FPreprocessor.IFPreprocessorSpringStreamInput> implements ISerializer<IFPreprocessor.IIFPreprocessorSpringStreamInput> {
++
++    @Override
++    public void serializeTo(IFPreprocessor.IIFPreprocessorSpringStreamInput object, OutputStream out) throws IOException {
++        SIFPreprocessorSpringStreamInput tmp = SIFPreprocessorSpringStreamInput.newBuilder()
++            .setSymbolTuple(object.getSymbolTuple())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFPreprocessor.IIFPreprocessorSpringStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolTuple());
++        }
++
++    @Override
++    public IFPreprocessor.IIFPreprocessorSpringStreamInput deserializeFrom(InputStream in) throws IOException {
++        FPreprocessor.IFPreprocessorSpringStreamInput result = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        SIFPreprocessorSpringStreamInput tmp = SIFPreprocessorSpringStreamInput.parseDelimitedFrom(in);
++        result.setSymbolTuple(tmp.getSymbolTuple());
++        return result;
++    }
++
++        @Override
++        public IFPreprocessor.IIFPreprocessorSpringStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FPreprocessor.IFPreprocessorSpringStreamInput result = new FPreprocessor.IFPreprocessorSpringStreamInput();
++            result.setSymbolTuple(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FPreprocessor.IFPreprocessorSpringStreamInput object) {
++        output.writeString(object.getSymbolTuple());
++    }
++
++    @Override
++    public FPreprocessor.IFPreprocessorSpringStreamInput read(Kryo kryo, Input input, Class<FPreprocessor.IFPreprocessorSpringStreamInput> type) {
++        FPreprocessor.IFPreprocessorSpringStreamInput result = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        result.setSymbolTuple(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput} algorithm.
++ */
++public static class IFPreprocessorPreprocessedStreamOutputSerializer extends Serializer<FPreprocessor.IFPreprocessorPreprocessedStreamOutput> implements ISerializer<IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput> {
++
++    @Override
++    public void serializeTo(IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput object, OutputStream out) throws IOException {
++        SIFPreprocessorPreprocessedStreamOutput tmp = SIFPreprocessorPreprocessedStreamOutput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .setVolume(object.getVolume())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++            out.writeInt(object.getVolume());
++        }
++
++    @Override
++    public IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FPreprocessor.IFPreprocessorPreprocessedStreamOutput result = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        SIFPreprocessorPreprocessedStreamOutput tmp = SIFPreprocessorPreprocessedStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        result.setVolume(tmp.getVolume());
++        return result;
++    }
++
++        @Override
++        public IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FPreprocessor.IFPreprocessorPreprocessedStreamOutput result = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            result.setVolume(in.nextInt());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FPreprocessor.IFPreprocessorPreprocessedStreamOutput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++        output.writeInt(object.getVolume());
++    }
++
++    @Override
++    public FPreprocessor.IFPreprocessorPreprocessedStreamOutput read(Kryo kryo, Input input, Class<FPreprocessor.IFPreprocessorPreprocessedStreamOutput> type) {
++        FPreprocessor.IFPreprocessorPreprocessedStreamOutput result = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        result.setVolume(input.readInt());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendations.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendations.java
+new file mode 100644
+index 0000000..cb2db6e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendations.java
+@@ -0,0 +1,129 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFRecommendations" (GEN).
++ */
++public class FRecommendations implements IFRecommendations {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFRecommendationsTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFRecommendationsTwitterStreamInput implements IIFRecommendationsTwitterStreamInput {
++
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFRecommendationsTwitterStreamInput", FRecommendationsSerializers.IFRecommendationsTwitterStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFRecommendationsRecommendationStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFRecommendationsRecommendationStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFRecommendationsRecommendationStreamOutput> implements IIFRecommendationsRecommendationStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFRecommendationsRecommendationStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFRecommendationsRecommendationStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFRecommendationsRecommendationStreamOutput createItem() {
++            return new IFRecommendationsRecommendationStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String recommendations;
++
++        @Override
++        public String getRecommendations(){
++            return recommendations;
++        }
++
++        @Override
++        public void setRecommendations(String recommendations){
++            this.recommendations = recommendations;
++        }
++        static {
++            SerializerRegistry.register("IFRecommendationsRecommendationStreamOutput", FRecommendationsSerializers.IFRecommendationsRecommendationStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFRecommendationsTwitterStreamInput input, IIFRecommendationsRecommendationStreamOutput recommendationStreamResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "impactThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterImpactThreshold(double value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "stockCooccurrenceThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterStockCooccurrenceThreshold(double value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendationsSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendationsSerializers.java
+new file mode 100644
+index 0000000..ce99097
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendationsSerializers.java
+@@ -0,0 +1,119 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FRecommendations;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FRecommendationsProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFRecommendations" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FRecommendationsSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFRecommendations.IIFRecommendationsTwitterStreamInput} algorithm.
++ */
++public static class IFRecommendationsTwitterStreamInputSerializer extends Serializer<FRecommendations.IFRecommendationsTwitterStreamInput> implements ISerializer<IFRecommendations.IIFRecommendationsTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFRecommendations.IIFRecommendationsTwitterStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFRecommendations.IIFRecommendationsTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFRecommendations.IIFRecommendationsTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FRecommendations.IFRecommendationsTwitterStreamInput result = new FRecommendations.IFRecommendationsTwitterStreamInput();
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFRecommendations.IIFRecommendationsTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FRecommendations.IFRecommendationsTwitterStreamInput result = new FRecommendations.IFRecommendationsTwitterStreamInput();
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FRecommendations.IFRecommendationsTwitterStreamInput object) {
++        kryo.writeObject(output, object.getEvents());
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FRecommendations.IFRecommendationsTwitterStreamInput read(Kryo kryo, Input input, Class<FRecommendations.IFRecommendationsTwitterStreamInput> type) {
++        FRecommendations.IFRecommendationsTwitterStreamInput result = new FRecommendations.IFRecommendationsTwitterStreamInput();
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFRecommendations.IIFRecommendationsRecommendationStreamOutput} algorithm.
++ */
++public static class IFRecommendationsRecommendationStreamOutputSerializer extends Serializer<FRecommendations.IFRecommendationsRecommendationStreamOutput> implements ISerializer<IFRecommendations.IIFRecommendationsRecommendationStreamOutput> {
++
++    @Override
++    public void serializeTo(IFRecommendations.IIFRecommendationsRecommendationStreamOutput object, OutputStream out) throws IOException {
++        SIFRecommendationsRecommendationStreamOutput tmp = SIFRecommendationsRecommendationStreamOutput.newBuilder()
++            .setRecommendations(object.getRecommendations())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFRecommendations.IIFRecommendationsRecommendationStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getRecommendations());
++        }
++
++    @Override
++    public IFRecommendations.IIFRecommendationsRecommendationStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FRecommendations.IFRecommendationsRecommendationStreamOutput result = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
++        SIFRecommendationsRecommendationStreamOutput tmp = SIFRecommendationsRecommendationStreamOutput.parseDelimitedFrom(in);
++        result.setRecommendations(tmp.getRecommendations());
++        return result;
++    }
++
++        @Override
++        public IFRecommendations.IIFRecommendationsRecommendationStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FRecommendations.IFRecommendationsRecommendationStreamOutput result = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
++            result.setRecommendations(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FRecommendations.IFRecommendationsRecommendationStreamOutput object) {
++        output.writeString(object.getRecommendations());
++    }
++
++    @Override
++    public FRecommendations.IFRecommendationsRecommendationStreamOutput read(Kryo kryo, Input input, Class<FRecommendations.IFRecommendationsRecommendationStreamOutput> type) {
++        FRecommendations.IFRecommendationsRecommendationStreamOutput result = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
++        result.setRecommendations(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysis.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysis.java
+new file mode 100644
+index 0000000..77a7381
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysis.java
+@@ -0,0 +1,157 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFSentimentAnalysis" (GEN).
++ */
++public class FSentimentAnalysis implements IFSentimentAnalysis {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFSentimentAnalysisTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFSentimentAnalysisTwitterStreamInput implements IIFSentimentAnalysisTwitterStreamInput {
++
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFSentimentAnalysisTwitterStreamInput", FSentimentAnalysisSerializers.IFSentimentAnalysisTwitterStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFSentimentAnalysisAnalyzedStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFSentimentAnalysisAnalyzedStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFSentimentAnalysisAnalyzedStreamOutput> implements IIFSentimentAnalysisAnalyzedStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFSentimentAnalysisAnalyzedStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFSentimentAnalysisAnalyzedStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFSentimentAnalysisAnalyzedStreamOutput createItem() {
++            return new IFSentimentAnalysisAnalyzedStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String symbolId;
++        private long timestamp;
++        private double value;
++        private int volume;
++
++        @Override
++        public String getSymbolId(){
++            return symbolId;
++        }
++
++        @Override
++        public void setSymbolId(String symbolId){
++            this.symbolId = symbolId;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        @Override
++        public int getVolume(){
++            return volume;
++        }
++
++        @Override
++        public void setVolume(int volume){
++            this.volume = volume;
++        }
++        static {
++            SerializerRegistry.register("IFSentimentAnalysisAnalyzedStreamOutput", FSentimentAnalysisSerializers.IFSentimentAnalysisAnalyzedStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFSentimentAnalysisTwitterStreamInput input, IIFSentimentAnalysisAnalyzedStreamOutput analyzedStreamResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "sentimentClass".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterSentimentClass(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "classificationThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterClassificationThreshold(double value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysisSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysisSerializers.java
+new file mode 100644
+index 0000000..d9cc40c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysisSerializers.java
+@@ -0,0 +1,131 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FSentimentAnalysis;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FSentimentAnalysisProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFSentimentAnalysis" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FSentimentAnalysisSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput} algorithm.
++ */
++public static class IFSentimentAnalysisTwitterStreamInputSerializer extends Serializer<FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput> implements ISerializer<IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput result = new FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput result = new FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput read(Kryo kryo, Input input, Class<FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput> type) {
++        FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput result = new FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput} algorithm.
++ */
++public static class IFSentimentAnalysisAnalyzedStreamOutputSerializer extends Serializer<FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput> implements ISerializer<IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput> {
++
++    @Override
++    public void serializeTo(IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput object, OutputStream out) throws IOException {
++        SIFSentimentAnalysisAnalyzedStreamOutput tmp = SIFSentimentAnalysisAnalyzedStreamOutput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .setVolume(object.getVolume())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++            out.writeInt(object.getVolume());
++        }
++
++    @Override
++    public IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput result = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
++        SIFSentimentAnalysisAnalyzedStreamOutput tmp = SIFSentimentAnalysisAnalyzedStreamOutput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        result.setVolume(tmp.getVolume());
++        return result;
++    }
++
++        @Override
++        public IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput result = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            result.setVolume(in.nextInt());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++        output.writeInt(object.getVolume());
++    }
++
++    @Override
++    public FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput read(Kryo kryo, Input input, Class<FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput> type) {
++        FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput result = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        result.setVolume(input.readInt());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendations.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendations.java
+new file mode 100644
+index 0000000..767c7f1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendations.java
+@@ -0,0 +1,112 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFSimpleRecommendations" (GEN).
++ */
++public class FSimpleRecommendations implements IFSimpleRecommendations {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFSimpleRecommendationsTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFSimpleRecommendationsTwitterStreamInput implements IIFSimpleRecommendationsTwitterStreamInput {
++
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFSimpleRecommendationsTwitterStreamInput", FSimpleRecommendationsSerializers.IFSimpleRecommendationsTwitterStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFSimpleRecommendationsTwitterStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFSimpleRecommendationsTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFSimpleRecommendationsTwitterStreamOutput> implements IIFSimpleRecommendationsTwitterStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFSimpleRecommendationsTwitterStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFSimpleRecommendationsTwitterStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFSimpleRecommendationsTwitterStreamOutput createItem() {
++            return new IFSimpleRecommendationsTwitterStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String recommendations;
++
++        @Override
++        public String getRecommendations(){
++            return recommendations;
++        }
++
++        @Override
++        public void setRecommendations(String recommendations){
++            this.recommendations = recommendations;
++        }
++        static {
++            SerializerRegistry.register("IFSimpleRecommendationsTwitterStreamOutput", FSimpleRecommendationsSerializers.IFSimpleRecommendationsTwitterStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFSimpleRecommendationsTwitterStreamInput input, IIFSimpleRecommendationsTwitterStreamOutput twitterStreamResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendationsSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendationsSerializers.java
+new file mode 100644
+index 0000000..9e3ffb3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendationsSerializers.java
+@@ -0,0 +1,119 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FSimpleRecommendations;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FSimpleRecommendationsProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFSimpleRecommendations" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FSimpleRecommendationsSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput} algorithm.
++ */
++public static class IFSimpleRecommendationsTwitterStreamInputSerializer extends Serializer<FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput> implements ISerializer<IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput();
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput();
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput object) {
++        kryo.writeObject(output, object.getEvents());
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput read(Kryo kryo, Input input, Class<FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput> type) {
++        FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput();
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput} algorithm.
++ */
++public static class IFSimpleRecommendationsTwitterStreamOutputSerializer extends Serializer<FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput> implements ISerializer<IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput> {
++
++    @Override
++    public void serializeTo(IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput object, OutputStream out) throws IOException {
++        SIFSimpleRecommendationsTwitterStreamOutput tmp = SIFSimpleRecommendationsTwitterStreamOutput.newBuilder()
++            .setRecommendations(object.getRecommendations())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getRecommendations());
++        }
++
++    @Override
++    public IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput();
++        SIFSimpleRecommendationsTwitterStreamOutput tmp = SIFSimpleRecommendationsTwitterStreamOutput.parseDelimitedFrom(in);
++        result.setRecommendations(tmp.getRecommendations());
++        return result;
++    }
++
++        @Override
++        public IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput();
++            result.setRecommendations(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput object) {
++        output.writeString(object.getRecommendations());
++    }
++
++    @Override
++    public FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput read(Kryo kryo, Input input, Class<FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput> type) {
++        FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput();
++        result.setRecommendations(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetection.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetection.java
+new file mode 100644
+index 0000000..8a5eba5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetection.java
+@@ -0,0 +1,112 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFSpamDetection" (GEN).
++ */
++public class FSpamDetection implements IFSpamDetection {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFSpamDetectionTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFSpamDetectionTwitterStreamInput implements IIFSpamDetectionTwitterStreamInput {
++
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFSpamDetectionTwitterStreamInput", FSpamDetectionSerializers.IFSpamDetectionTwitterStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFSpamDetectionTwitterStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFSpamDetectionTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFSpamDetectionTwitterStreamOutput> implements IIFSpamDetectionTwitterStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFSpamDetectionTwitterStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFSpamDetectionTwitterStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFSpamDetectionTwitterStreamOutput createItem() {
++            return new IFSpamDetectionTwitterStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++        private double spamPropability;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        @Override
++        public double getSpamPropability(){
++            return spamPropability;
++        }
++
++        @Override
++        public void setSpamPropability(double spamPropability){
++            this.spamPropability = spamPropability;
++        }
++        static {
++            SerializerRegistry.register("IFSpamDetectionTwitterStreamOutput", FSpamDetectionSerializers.IFSpamDetectionTwitterStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFSpamDetectionTwitterStreamInput input, IIFSpamDetectionTwitterStreamOutput twitterStreamResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetectionSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetectionSerializers.java
+new file mode 100644
+index 0000000..3df41a2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetectionSerializers.java
+@@ -0,0 +1,119 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FSpamDetection;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FSpamDetectionProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFSpamDetection" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FSpamDetectionSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFSpamDetection.IIFSpamDetectionTwitterStreamInput} algorithm.
++ */
++public static class IFSpamDetectionTwitterStreamInputSerializer extends Serializer<FSpamDetection.IFSpamDetectionTwitterStreamInput> implements ISerializer<IFSpamDetection.IIFSpamDetectionTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFSpamDetection.IIFSpamDetectionTwitterStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFSpamDetection.IIFSpamDetectionTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFSpamDetection.IIFSpamDetectionTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FSpamDetection.IFSpamDetectionTwitterStreamInput result = new FSpamDetection.IFSpamDetectionTwitterStreamInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFSpamDetection.IIFSpamDetectionTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FSpamDetection.IFSpamDetectionTwitterStreamInput result = new FSpamDetection.IFSpamDetectionTwitterStreamInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FSpamDetection.IFSpamDetectionTwitterStreamInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FSpamDetection.IFSpamDetectionTwitterStreamInput read(Kryo kryo, Input input, Class<FSpamDetection.IFSpamDetectionTwitterStreamInput> type) {
++        FSpamDetection.IFSpamDetectionTwitterStreamInput result = new FSpamDetection.IFSpamDetectionTwitterStreamInput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFSpamDetection.IIFSpamDetectionTwitterStreamOutput} algorithm.
++ */
++public static class IFSpamDetectionTwitterStreamOutputSerializer extends Serializer<FSpamDetection.IFSpamDetectionTwitterStreamOutput> implements ISerializer<IFSpamDetection.IIFSpamDetectionTwitterStreamOutput> {
++
++    @Override
++    public void serializeTo(IFSpamDetection.IIFSpamDetectionTwitterStreamOutput object, OutputStream out) throws IOException {
++        SIFSpamDetectionTwitterStreamOutput tmp = SIFSpamDetectionTwitterStreamOutput.newBuilder()
++            .setSpamPropability(object.getSpamPropability())
++            .build();
++        tmp.writeDelimitedTo(out);
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFSpamDetection.IIFSpamDetectionTwitterStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++            out.writeDouble(object.getSpamPropability());
++        }
++
++    @Override
++    public IFSpamDetection.IIFSpamDetectionTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FSpamDetection.IFSpamDetectionTwitterStreamOutput result = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        SIFSpamDetectionTwitterStreamOutput tmp = SIFSpamDetectionTwitterStreamOutput.parseDelimitedFrom(in);
++        result.setSpamPropability(tmp.getSpamPropability());
++        return result;
++    }
++
++        @Override
++        public IFSpamDetection.IIFSpamDetectionTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FSpamDetection.IFSpamDetectionTwitterStreamOutput result = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            result.setSpamPropability(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FSpamDetection.IFSpamDetectionTwitterStreamOutput object) {
++        kryo.writeObject(output, object.getStatus());
++        output.writeDouble(object.getSpamPropability());
++    }
++
++    @Override
++    public FSpamDetection.IFSpamDetectionTwitterStreamOutput read(Kryo kryo, Input input, Class<FSpamDetection.IFSpamDetectionTwitterStreamOutput> type) {
++        FSpamDetection.IFSpamDetectionTwitterStreamOutput result = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        result.setSpamPropability(input.readDouble());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemoval.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemoval.java
+new file mode 100644
+index 0000000..db1259b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemoval.java
+@@ -0,0 +1,121 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFSpamRemoval" (GEN).
++ */
++public class FSpamRemoval implements IFSpamRemoval {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFSpamRemovalTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFSpamRemovalTwitterStreamInput implements IIFSpamRemovalTwitterStreamInput {
++
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++        private double spamPropability;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        @Override
++        public double getSpamPropability(){
++            return spamPropability;
++        }
++
++        @Override
++        public void setSpamPropability(double spamPropability){
++            this.spamPropability = spamPropability;
++        }
++        static {
++            SerializerRegistry.register("IFSpamRemovalTwitterStreamInput", FSpamRemovalSerializers.IFSpamRemovalTwitterStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFSpamRemovalTwitterStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFSpamRemovalTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFSpamRemovalTwitterStreamOutput> implements IIFSpamRemovalTwitterStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFSpamRemovalTwitterStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFSpamRemovalTwitterStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFSpamRemovalTwitterStreamOutput createItem() {
++            return new IFSpamRemovalTwitterStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFSpamRemovalTwitterStreamOutput", FSpamRemovalSerializers.IFSpamRemovalTwitterStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFSpamRemovalTwitterStreamInput input, IIFSpamRemovalTwitterStreamOutput twitterStreamResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "spamThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterSpamThreshold(double value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemovalSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemovalSerializers.java
+new file mode 100644
+index 0000000..6d6b3a0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemovalSerializers.java
+@@ -0,0 +1,119 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FSpamRemoval;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FSpamRemovalProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFSpamRemoval" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FSpamRemovalSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFSpamRemoval.IIFSpamRemovalTwitterStreamInput} algorithm.
++ */
++public static class IFSpamRemovalTwitterStreamInputSerializer extends Serializer<FSpamRemoval.IFSpamRemovalTwitterStreamInput> implements ISerializer<IFSpamRemoval.IIFSpamRemovalTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFSpamRemoval.IIFSpamRemovalTwitterStreamInput object, OutputStream out) throws IOException {
++        SIFSpamRemovalTwitterStreamInput tmp = SIFSpamRemovalTwitterStreamInput.newBuilder()
++            .setSpamPropability(object.getSpamPropability())
++            .build();
++        tmp.writeDelimitedTo(out);
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFSpamRemoval.IIFSpamRemovalTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++            out.writeDouble(object.getSpamPropability());
++        }
++
++    @Override
++    public IFSpamRemoval.IIFSpamRemovalTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FSpamRemoval.IFSpamRemovalTwitterStreamInput result = new FSpamRemoval.IFSpamRemovalTwitterStreamInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        SIFSpamRemovalTwitterStreamInput tmp = SIFSpamRemovalTwitterStreamInput.parseDelimitedFrom(in);
++        result.setSpamPropability(tmp.getSpamPropability());
++        return result;
++    }
++
++        @Override
++        public IFSpamRemoval.IIFSpamRemovalTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FSpamRemoval.IFSpamRemovalTwitterStreamInput result = new FSpamRemoval.IFSpamRemovalTwitterStreamInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            result.setSpamPropability(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FSpamRemoval.IFSpamRemovalTwitterStreamInput object) {
++        kryo.writeObject(output, object.getStatus());
++        output.writeDouble(object.getSpamPropability());
++    }
++
++    @Override
++    public FSpamRemoval.IFSpamRemovalTwitterStreamInput read(Kryo kryo, Input input, Class<FSpamRemoval.IFSpamRemovalTwitterStreamInput> type) {
++        FSpamRemoval.IFSpamRemovalTwitterStreamInput result = new FSpamRemoval.IFSpamRemovalTwitterStreamInput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        result.setSpamPropability(input.readDouble());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput} algorithm.
++ */
++public static class IFSpamRemovalTwitterStreamOutputSerializer extends Serializer<FSpamRemoval.IFSpamRemovalTwitterStreamOutput> implements ISerializer<IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput> {
++
++    @Override
++    public void serializeTo(IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FSpamRemoval.IFSpamRemovalTwitterStreamOutput result = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FSpamRemoval.IFSpamRemovalTwitterStreamOutput result = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FSpamRemoval.IFSpamRemovalTwitterStreamOutput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FSpamRemoval.IFSpamRemovalTwitterStreamOutput read(Kryo kryo, Input input, Class<FSpamRemoval.IFSpamRemovalTwitterStreamOutput> type) {
++        FSpamRemoval.IFSpamRemovalTwitterStreamOutput result = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParser.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParser.java
+new file mode 100644
+index 0000000..e67fa45
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParser.java
+@@ -0,0 +1,113 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFStockParser" (GEN).
++ */
++public class FStockParser implements IFStockParser {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFStockParserTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFStockParserTwitterStreamInput implements IIFStockParserTwitterStreamInput {
++
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFStockParserTwitterStreamInput", FStockParserSerializers.IFStockParserTwitterStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFStockParserTwitterStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFStockParserTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFStockParserTwitterStreamOutput> implements IIFStockParserTwitterStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFStockParserTwitterStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFStockParserTwitterStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFStockParserTwitterStreamOutput createItem() {
++            return new IFStockParserTwitterStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++        private java.util.List<String> stocks;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        @Override
++        public java.util.List<String> getStocks(){
++            return stocks;
++        }
++
++        @Override
++        public void setStocks(java.util.List<String> stocks){
++            this.stocks = stocks;
++        }
++        static {
++            SerializerRegistry.register("IFStockParserTwitterStreamOutput", FStockParserSerializers.IFStockParserTwitterStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFStockParserTwitterStreamInput input, IIFStockParserTwitterStreamOutput twitterStreamResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParserSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParserSerializers.java
+new file mode 100644
+index 0000000..bff8eaa
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParserSerializers.java
+@@ -0,0 +1,115 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FStockParser;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FStockParserProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFStockParser" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FStockParserSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFStockParser.IIFStockParserTwitterStreamInput} algorithm.
++ */
++public static class IFStockParserTwitterStreamInputSerializer extends Serializer<FStockParser.IFStockParserTwitterStreamInput> implements ISerializer<IFStockParser.IIFStockParserTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFStockParser.IIFStockParserTwitterStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFStockParser.IIFStockParserTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFStockParser.IIFStockParserTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FStockParser.IFStockParserTwitterStreamInput result = new FStockParser.IFStockParserTwitterStreamInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFStockParser.IIFStockParserTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FStockParser.IFStockParserTwitterStreamInput result = new FStockParser.IFStockParserTwitterStreamInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FStockParser.IFStockParserTwitterStreamInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FStockParser.IFStockParserTwitterStreamInput read(Kryo kryo, Input input, Class<FStockParser.IFStockParserTwitterStreamInput> type) {
++        FStockParser.IFStockParserTwitterStreamInput result = new FStockParser.IFStockParserTwitterStreamInput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFStockParser.IIFStockParserTwitterStreamOutput} algorithm.
++ */
++public static class IFStockParserTwitterStreamOutputSerializer extends Serializer<FStockParser.IFStockParserTwitterStreamOutput> implements ISerializer<IFStockParser.IIFStockParserTwitterStreamOutput> {
++
++    @Override
++    public void serializeTo(IFStockParser.IIFStockParserTwitterStreamOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
++    }
++
++        @Override
++        public void serializeTo(IFStockParser.IIFStockParserTwitterStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
++        }
++
++    @Override
++    public IFStockParser.IIFStockParserTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FStockParser.IFStockParserTwitterStreamOutput result = new FStockParser.IFStockParserTwitterStreamOutput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFStockParser.IIFStockParserTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FStockParser.IFStockParserTwitterStreamOutput result = new FStockParser.IFStockParserTwitterStreamOutput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FStockParser.IFStockParserTwitterStreamOutput object) {
++        kryo.writeObject(output, object.getStatus());
++        kryo.writeObject(output, object.getStocks());
++    }
++
++    @Override
++    public FStockParser.IFStockParserTwitterStreamOutput read(Kryo kryo, Input input, Class<FStockParser.IFStockParserTwitterStreamOutput> type) {
++        FStockParser.IFStockParserTwitterStreamOutput result = new FStockParser.IFStockParserTwitterStreamOutput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        result.setStocks(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraph.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraph.java
+new file mode 100644
+index 0000000..e20120c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraph.java
+@@ -0,0 +1,274 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTimeGraph" (GEN).
++ */
++public class FTimeGraph implements IFTimeGraph {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphDataStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphDataStreamInput implements IIFTimeGraphDataStreamInput {
++
++        private Object update;
++        private boolean isAddition;
++
++        @Override
++        public Object getUpdate(){
++            return update;
++        }
++
++        @Override
++        public void setUpdate(Object update){
++            this.update = update;
++        }
++        @Override
++        public boolean getIsAddition(){
++            return isAddition;
++        }
++
++        @Override
++        public void setIsAddition(boolean isAddition){
++            this.isAddition = isAddition;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphDataStreamInput", FTimeGraphSerializers.IFTimeGraphDataStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphSnapshotQueryStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphSnapshotQueryStreamInput implements IIFTimeGraphSnapshotQueryStreamInput {
++
++        private long start;
++        private long end;
++
++        @Override
++        public long getStart(){
++            return start;
++        }
++
++        @Override
++        public void setStart(long start){
++            this.start = start;
++        }
++        @Override
++        public long getEnd(){
++            return end;
++        }
++
++        @Override
++        public void setEnd(long end){
++            this.end = end;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphSnapshotQueryStreamInput", FTimeGraphSerializers.IFTimeGraphSnapshotQueryStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphPathQueryStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphPathQueryStreamInput implements IIFTimeGraphPathQueryStreamInput {
++
++        private long start;
++        private long end;
++        private String vertexA;
++        private String vertexB;
++        private String type;
++
++        @Override
++        public long getStart(){
++            return start;
++        }
++
++        @Override
++        public void setStart(long start){
++            this.start = start;
++        }
++        @Override
++        public long getEnd(){
++            return end;
++        }
++
++        @Override
++        public void setEnd(long end){
++            this.end = end;
++        }
++        @Override
++        public String getVertexA(){
++            return vertexA;
++        }
++
++        @Override
++        public void setVertexA(String vertexA){
++            this.vertexA = vertexA;
++        }
++        @Override
++        public String getVertexB(){
++            return vertexB;
++        }
++
++        @Override
++        public void setVertexB(String vertexB){
++            this.vertexB = vertexB;
++        }
++        @Override
++        public String getType(){
++            return type;
++        }
++
++        @Override
++        public void setType(String type){
++            this.type = type;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphPathQueryStreamInput", FTimeGraphSerializers.IFTimeGraphPathQueryStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphSnapshotStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphSnapshotStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphSnapshotStreamOutput> implements IIFTimeGraphSnapshotStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphSnapshotStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphSnapshotStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphSnapshotStreamOutput createItem() {
++            return new IFTimeGraphSnapshotStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String snapshot;
++
++        @Override
++        public String getSnapshot(){
++            return snapshot;
++        }
++
++        @Override
++        public void setSnapshot(String snapshot){
++            this.snapshot = snapshot;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphSnapshotStreamOutput", FTimeGraphSerializers.IFTimeGraphSnapshotStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphPathStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphPathStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphPathStreamOutput> implements IIFTimeGraphPathStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphPathStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphPathStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphPathStreamOutput createItem() {
++            return new IFTimeGraphPathStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String path;
++
++        @Override
++        public String getPath(){
++            return path;
++        }
++
++        @Override
++        public void setPath(String path){
++            this.path = path;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphPathStreamOutput", FTimeGraphSerializers.IFTimeGraphPathStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphDataStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphSnapshotQueryStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphPathQueryStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexer.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexer.java
+new file mode 100644
+index 0000000..1536282
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexer.java
+@@ -0,0 +1,254 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTimeGraphIndexer" (GEN).
++ */
++public class FTimeGraphIndexer implements IFTimeGraphIndexer {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphIndexerDataStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphIndexerDataStreamInput implements IIFTimeGraphIndexerDataStreamInput {
++
++        private Object update;
++        private boolean isAddition;
++
++        @Override
++        public Object getUpdate(){
++            return update;
++        }
++
++        @Override
++        public void setUpdate(Object update){
++            this.update = update;
++        }
++        @Override
++        public boolean getIsAddition(){
++            return isAddition;
++        }
++
++        @Override
++        public void setIsAddition(boolean isAddition){
++            this.isAddition = isAddition;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphIndexerDataStreamInput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerDataStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphIndexerInternalRequestsInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphIndexerInternalRequestsInput implements IIFTimeGraphIndexerInternalRequestsInput {
++
++        private Object internalRequest;
++
++        @Override
++        public Object getInternalRequest(){
++            return internalRequest;
++        }
++
++        @Override
++        public void setInternalRequest(Object internalRequest){
++            this.internalRequest = internalRequest;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphIndexerInternalRequestsInput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerInternalRequestsInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphIndexerUnicastRequestsInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphIndexerUnicastRequestsInput implements IIFTimeGraphIndexerUnicastRequestsInput {
++
++        private Object unicastExternalRequest;
++
++        @Override
++        public Object getUnicastExternalRequest(){
++            return unicastExternalRequest;
++        }
++
++        @Override
++        public void setUnicastExternalRequest(Object unicastExternalRequest){
++            this.unicastExternalRequest = unicastExternalRequest;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphIndexerUnicastRequestsInput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerUnicastRequestsInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphIndexerBroadcastRequestsInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphIndexerBroadcastRequestsInput implements IIFTimeGraphIndexerBroadcastRequestsInput {
++
++        private Object broadcastExternalRequest;
++
++        @Override
++        public Object getBroadcastExternalRequest(){
++            return broadcastExternalRequest;
++        }
++
++        @Override
++        public void setBroadcastExternalRequest(Object broadcastExternalRequest){
++            this.broadcastExternalRequest = broadcastExternalRequest;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphIndexerBroadcastRequestsInput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerBroadcastRequestsInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphIndexerExternalResponsesOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphIndexerExternalResponsesOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphIndexerExternalResponsesOutput> implements IIFTimeGraphIndexerExternalResponsesOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphIndexerExternalResponsesOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphIndexerExternalResponsesOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphIndexerExternalResponsesOutput createItem() {
++            return new IFTimeGraphIndexerExternalResponsesOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private Object externalResponse;
++
++        @Override
++        public Object getExternalResponse(){
++            return externalResponse;
++        }
++
++        @Override
++        public void setExternalResponse(Object externalResponse){
++            this.externalResponse = externalResponse;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphIndexerExternalResponsesOutput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerExternalResponsesOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphIndexerInternalRequestsOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphIndexerInternalRequestsOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphIndexerInternalRequestsOutput> implements IIFTimeGraphIndexerInternalRequestsOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphIndexerInternalRequestsOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphIndexerInternalRequestsOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphIndexerInternalRequestsOutput createItem() {
++            return new IFTimeGraphIndexerInternalRequestsOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private Object internalRequest;
++
++        @Override
++        public Object getInternalRequest(){
++            return internalRequest;
++        }
++
++        @Override
++        public void setInternalRequest(Object internalRequest){
++            this.internalRequest = internalRequest;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphIndexerInternalRequestsOutput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerInternalRequestsOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphIndexerDataStreamInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphIndexerInternalRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphIndexerUnicastRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphIndexerBroadcastRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexerSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexerSerializers.java
+new file mode 100644
+index 0000000..7c24641
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexerSerializers.java
+@@ -0,0 +1,287 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTimeGraphIndexer;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTimeGraphIndexerProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTimeGraphIndexer" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTimeGraphIndexerSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput} algorithm.
++ */
++public static class IFTimeGraphIndexerDataStreamInputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput object, OutputStream out) throws IOException {
++        SIFTimeGraphIndexerDataStreamInput tmp = SIFTimeGraphIndexerDataStreamInput.newBuilder()
++            .setIsAddition(object.getIsAddition())
++            .build();
++        tmp.writeDelimitedTo(out);
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
++            out.writeBoolean(object.getIsAddition());
++        }
++
++    @Override
++    public IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput result = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
++        result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        SIFTimeGraphIndexerDataStreamInput tmp = SIFTimeGraphIndexerDataStreamInput.parseDelimitedFrom(in);
++        result.setIsAddition(tmp.getIsAddition());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput result = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
++            result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            result.setIsAddition(in.nextBoolean());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput object) {
++        kryo.writeObject(output, object.getUpdate());
++        output.writeBoolean(object.getIsAddition());
++    }
++
++    @Override
++    public FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput> type) {
++        FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput result = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
++        result.setUpdate(kryo.readObject(input, Object.class));
++        result.setIsAddition(input.readBoolean());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput} algorithm.
++ */
++public static class IFTimeGraphIndexerInternalRequestsInputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getInternalRequest(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getInternalRequest(), out);
++        }
++
++    @Override
++    public IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
++        result.setInternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
++            result.setInternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput object) {
++        kryo.writeObject(output, object.getInternalRequest());
++    }
++
++    @Override
++    public FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput> type) {
++        FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
++        result.setInternalRequest(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput} algorithm.
++ */
++public static class IFTimeGraphIndexerUnicastRequestsInputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUnicastExternalRequest(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUnicastExternalRequest(), out);
++        }
++
++    @Override
++    public IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
++        result.setUnicastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
++            result.setUnicastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput object) {
++        kryo.writeObject(output, object.getUnicastExternalRequest());
++    }
++
++    @Override
++    public FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput> type) {
++        FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
++        result.setUnicastExternalRequest(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput} algorithm.
++ */
++public static class IFTimeGraphIndexerBroadcastRequestsInputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getBroadcastExternalRequest(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getBroadcastExternalRequest(), out);
++        }
++
++    @Override
++    public IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
++        result.setBroadcastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
++            result.setBroadcastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput object) {
++        kryo.writeObject(output, object.getBroadcastExternalRequest());
++    }
++
++    @Override
++    public FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput> type) {
++        FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
++        result.setBroadcastExternalRequest(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput} algorithm.
++ */
++public static class IFTimeGraphIndexerExternalResponsesOutputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getExternalResponse(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getExternalResponse(), out);
++        }
++
++    @Override
++    public IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
++        result.setExternalResponse(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
++            result.setExternalResponse(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput object) {
++        kryo.writeObject(output, object.getExternalResponse());
++    }
++
++    @Override
++    public FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput> type) {
++        FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
++        result.setExternalResponse(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput} algorithm.
++ */
++public static class IFTimeGraphIndexerInternalRequestsOutputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getInternalRequest(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getInternalRequest(), out);
++        }
++
++    @Override
++    public IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
++        result.setInternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
++            result.setInternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput object) {
++        kryo.writeObject(output, object.getInternalRequest());
++    }
++
++    @Override
++    public FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput> type) {
++        FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
++        result.setInternalRequest(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapper.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapper.java
+new file mode 100644
+index 0000000..29ff61b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapper.java
+@@ -0,0 +1,112 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTimeGraphMapper" (GEN).
++ */
++public class FTimeGraphMapper implements IFTimeGraphMapper {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphMapperEdgeStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphMapperEdgeStreamInput implements IIFTimeGraphMapperEdgeStreamInput {
++
++        private String edge;
++
++        @Override
++        public String getEdge(){
++            return edge;
++        }
++
++        @Override
++        public void setEdge(String edge){
++            this.edge = edge;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphMapperEdgeStreamInput", FTimeGraphMapperSerializers.IFTimeGraphMapperEdgeStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphMapperDataStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphMapperDataStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphMapperDataStreamOutput> implements IIFTimeGraphMapperDataStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphMapperDataStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphMapperDataStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphMapperDataStreamOutput createItem() {
++            return new IFTimeGraphMapperDataStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private Object update;
++        private boolean isAddition;
++
++        @Override
++        public Object getUpdate(){
++            return update;
++        }
++
++        @Override
++        public void setUpdate(Object update){
++            this.update = update;
++        }
++        @Override
++        public boolean getIsAddition(){
++            return isAddition;
++        }
++
++        @Override
++        public void setIsAddition(boolean isAddition){
++            this.isAddition = isAddition;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphMapperDataStreamOutput", FTimeGraphMapperSerializers.IFTimeGraphMapperDataStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphMapperEdgeStreamInput input, IIFTimeGraphMapperDataStreamOutput dataStreamResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapperSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapperSerializers.java
+new file mode 100644
+index 0000000..faaf85a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapperSerializers.java
+@@ -0,0 +1,123 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTimeGraphMapper;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTimeGraphMapperProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTimeGraphMapper" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTimeGraphMapperSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput} algorithm.
++ */
++public static class IFTimeGraphMapperEdgeStreamInputSerializer extends Serializer<FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput> implements ISerializer<IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput object, OutputStream out) throws IOException {
++        SIFTimeGraphMapperEdgeStreamInput tmp = SIFTimeGraphMapperEdgeStreamInput.newBuilder()
++            .setEdge(object.getEdge())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getEdge());
++        }
++
++    @Override
++    public IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput result = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
++        SIFTimeGraphMapperEdgeStreamInput tmp = SIFTimeGraphMapperEdgeStreamInput.parseDelimitedFrom(in);
++        result.setEdge(tmp.getEdge());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput result = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
++            result.setEdge(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput object) {
++        output.writeString(object.getEdge());
++    }
++
++    @Override
++    public FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput read(Kryo kryo, Input input, Class<FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput> type) {
++        FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput result = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
++        result.setEdge(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput} algorithm.
++ */
++public static class IFTimeGraphMapperDataStreamOutputSerializer extends Serializer<FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput> implements ISerializer<IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput object, OutputStream out) throws IOException {
++        SIFTimeGraphMapperDataStreamOutput tmp = SIFTimeGraphMapperDataStreamOutput.newBuilder()
++            .setIsAddition(object.getIsAddition())
++            .build();
++        tmp.writeDelimitedTo(out);
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
++            out.writeBoolean(object.getIsAddition());
++        }
++
++    @Override
++    public IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput result = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
++        result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        SIFTimeGraphMapperDataStreamOutput tmp = SIFTimeGraphMapperDataStreamOutput.parseDelimitedFrom(in);
++        result.setIsAddition(tmp.getIsAddition());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput result = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
++            result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            result.setIsAddition(in.nextBoolean());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput object) {
++        kryo.writeObject(output, object.getUpdate());
++        output.writeBoolean(object.getIsAddition());
++    }
++
++    @Override
++    public FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput read(Kryo kryo, Input input, Class<FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput> type) {
++        FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput result = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
++        result.setUpdate(kryo.readObject(input, Object.class));
++        result.setIsAddition(input.readBoolean());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutor.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutor.java
+new file mode 100644
+index 0000000..2b51896
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutor.java
+@@ -0,0 +1,368 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTimeGraphQueryExecutor" (GEN).
++ */
++public class FTimeGraphQueryExecutor implements IFTimeGraphQueryExecutor {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphQueryExecutorSnapshotQueryStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphQueryExecutorSnapshotQueryStreamInput implements IIFTimeGraphQueryExecutorSnapshotQueryStreamInput {
++
++        private long start;
++        private long end;
++
++        @Override
++        public long getStart(){
++            return start;
++        }
++
++        @Override
++        public void setStart(long start){
++            this.start = start;
++        }
++        @Override
++        public long getEnd(){
++            return end;
++        }
++
++        @Override
++        public void setEnd(long end){
++            this.end = end;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphQueryExecutorSnapshotQueryStreamInput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorSnapshotQueryStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphQueryExecutorPathQueryStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphQueryExecutorPathQueryStreamInput implements IIFTimeGraphQueryExecutorPathQueryStreamInput {
++
++        private long start;
++        private long end;
++        private String vertexA;
++        private String vertexB;
++        private String type;
++
++        @Override
++        public long getStart(){
++            return start;
++        }
++
++        @Override
++        public void setStart(long start){
++            this.start = start;
++        }
++        @Override
++        public long getEnd(){
++            return end;
++        }
++
++        @Override
++        public void setEnd(long end){
++            this.end = end;
++        }
++        @Override
++        public String getVertexA(){
++            return vertexA;
++        }
++
++        @Override
++        public void setVertexA(String vertexA){
++            this.vertexA = vertexA;
++        }
++        @Override
++        public String getVertexB(){
++            return vertexB;
++        }
++
++        @Override
++        public void setVertexB(String vertexB){
++            this.vertexB = vertexB;
++        }
++        @Override
++        public String getType(){
++            return type;
++        }
++
++        @Override
++        public void setType(String type){
++            this.type = type;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphQueryExecutorPathQueryStreamInput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorPathQueryStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTimeGraphQueryExecutorExternalResponsesInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphQueryExecutorExternalResponsesInput implements IIFTimeGraphQueryExecutorExternalResponsesInput {
++
++        private Object externalResponse;
++
++        @Override
++        public Object getExternalResponse(){
++            return externalResponse;
++        }
++
++        @Override
++        public void setExternalResponse(Object externalResponse){
++            this.externalResponse = externalResponse;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphQueryExecutorExternalResponsesInput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorExternalResponsesInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphQueryExecutorSnapshotStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphQueryExecutorSnapshotStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphQueryExecutorSnapshotStreamOutput> implements IIFTimeGraphQueryExecutorSnapshotStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphQueryExecutorSnapshotStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphQueryExecutorSnapshotStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphQueryExecutorSnapshotStreamOutput createItem() {
++            return new IFTimeGraphQueryExecutorSnapshotStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String snapshot;
++
++        @Override
++        public String getSnapshot(){
++            return snapshot;
++        }
++
++        @Override
++        public void setSnapshot(String snapshot){
++            this.snapshot = snapshot;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphQueryExecutorSnapshotStreamOutput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorSnapshotStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphQueryExecutorPathStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphQueryExecutorPathStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphQueryExecutorPathStreamOutput> implements IIFTimeGraphQueryExecutorPathStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphQueryExecutorPathStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphQueryExecutorPathStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphQueryExecutorPathStreamOutput createItem() {
++            return new IFTimeGraphQueryExecutorPathStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String path;
++
++        @Override
++        public String getPath(){
++            return path;
++        }
++
++        @Override
++        public void setPath(String path){
++            this.path = path;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphQueryExecutorPathStreamOutput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorPathStreamOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphQueryExecutorUnicastRequestsOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphQueryExecutorUnicastRequestsOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphQueryExecutorUnicastRequestsOutput> implements IIFTimeGraphQueryExecutorUnicastRequestsOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphQueryExecutorUnicastRequestsOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphQueryExecutorUnicastRequestsOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphQueryExecutorUnicastRequestsOutput createItem() {
++            return new IFTimeGraphQueryExecutorUnicastRequestsOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private Object unicastExternalRequest;
++
++        @Override
++        public Object getUnicastExternalRequest(){
++            return unicastExternalRequest;
++        }
++
++        @Override
++        public void setUnicastExternalRequest(Object unicastExternalRequest){
++            this.unicastExternalRequest = unicastExternalRequest;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphQueryExecutorUnicastRequestsOutput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorUnicastRequestsOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTimeGraphQueryExecutorBroadcastRequestsOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTimeGraphQueryExecutorBroadcastRequestsOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> implements IIFTimeGraphQueryExecutorBroadcastRequestsOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTimeGraphQueryExecutorBroadcastRequestsOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTimeGraphQueryExecutorBroadcastRequestsOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTimeGraphQueryExecutorBroadcastRequestsOutput createItem() {
++            return new IFTimeGraphQueryExecutorBroadcastRequestsOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private Object broadcastExternalRequest;
++
++        @Override
++        public Object getBroadcastExternalRequest(){
++            return broadcastExternalRequest;
++        }
++
++        @Override
++        public void setBroadcastExternalRequest(Object broadcastExternalRequest){
++            this.broadcastExternalRequest = broadcastExternalRequest;
++        }
++        static {
++            SerializerRegistry.register("IFTimeGraphQueryExecutorBroadcastRequestsOutput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorBroadcastRequestsOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphQueryExecutorSnapshotQueryStreamInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphQueryExecutorPathQueryStreamInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphQueryExecutorExternalResponsesInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutorSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutorSerializers.java
+new file mode 100644
+index 0000000..72e978e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutorSerializers.java
+@@ -0,0 +1,365 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTimeGraphQueryExecutor;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTimeGraphQueryExecutorProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTimeGraphQueryExecutor" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTimeGraphQueryExecutorSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput} algorithm.
++ */
++public static class IFTimeGraphQueryExecutorSnapshotQueryStreamInputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput object, OutputStream out) throws IOException {
++        SIFTimeGraphQueryExecutorSnapshotQueryStreamInput tmp = SIFTimeGraphQueryExecutorSnapshotQueryStreamInput.newBuilder()
++            .setStart(object.getStart())
++            .setEnd(object.getEnd())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getStart());
++            out.writeLong(object.getEnd());
++        }
++
++    @Override
++    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
++        SIFTimeGraphQueryExecutorSnapshotQueryStreamInput tmp = SIFTimeGraphQueryExecutorSnapshotQueryStreamInput.parseDelimitedFrom(in);
++        result.setStart(tmp.getStart());
++        result.setEnd(tmp.getEnd());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
++            result.setStart(in.nextLong());
++            result.setEnd(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput object) {
++        output.writeLong(object.getStart());
++        output.writeLong(object.getEnd());
++    }
++
++    @Override
++    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput> type) {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
++        result.setStart(input.readLong());
++        result.setEnd(input.readLong());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput} algorithm.
++ */
++public static class IFTimeGraphQueryExecutorPathQueryStreamInputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput object, OutputStream out) throws IOException {
++        SIFTimeGraphQueryExecutorPathQueryStreamInput tmp = SIFTimeGraphQueryExecutorPathQueryStreamInput.newBuilder()
++            .setStart(object.getStart())
++            .setEnd(object.getEnd())
++            .setVertexA(object.getVertexA())
++            .setVertexB(object.getVertexB())
++            .setType(object.getType())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getStart());
++            out.writeLong(object.getEnd());
++            out.writeString(object.getVertexA());
++            out.writeString(object.getVertexB());
++            out.writeString(object.getType());
++        }
++
++    @Override
++    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
++        SIFTimeGraphQueryExecutorPathQueryStreamInput tmp = SIFTimeGraphQueryExecutorPathQueryStreamInput.parseDelimitedFrom(in);
++        result.setStart(tmp.getStart());
++        result.setEnd(tmp.getEnd());
++        result.setVertexA(tmp.getVertexA());
++        result.setVertexB(tmp.getVertexB());
++        result.setType(tmp.getType());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
++            result.setStart(in.nextLong());
++            result.setEnd(in.nextLong());
++            result.setVertexA(in.nextString());
++            result.setVertexB(in.nextString());
++            result.setType(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput object) {
++        output.writeLong(object.getStart());
++        output.writeLong(object.getEnd());
++        output.writeString(object.getVertexA());
++        output.writeString(object.getVertexB());
++        output.writeString(object.getType());
++    }
++
++    @Override
++    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput> type) {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
++        result.setStart(input.readLong());
++        result.setEnd(input.readLong());
++        result.setVertexA(input.readString());
++        result.setVertexB(input.readString());
++        result.setType(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput} algorithm.
++ */
++public static class IFTimeGraphQueryExecutorExternalResponsesInputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getExternalResponse(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getExternalResponse(), out);
++        }
++
++    @Override
++    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
++        result.setExternalResponse(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
++            result.setExternalResponse(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput object) {
++        kryo.writeObject(output, object.getExternalResponse());
++    }
++
++    @Override
++    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput> type) {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
++        result.setExternalResponse(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput} algorithm.
++ */
++public static class IFTimeGraphQueryExecutorSnapshotStreamOutputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput object, OutputStream out) throws IOException {
++        SIFTimeGraphQueryExecutorSnapshotStreamOutput tmp = SIFTimeGraphQueryExecutorSnapshotStreamOutput.newBuilder()
++            .setSnapshot(object.getSnapshot())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSnapshot());
++        }
++
++    @Override
++    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
++        SIFTimeGraphQueryExecutorSnapshotStreamOutput tmp = SIFTimeGraphQueryExecutorSnapshotStreamOutput.parseDelimitedFrom(in);
++        result.setSnapshot(tmp.getSnapshot());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
++            result.setSnapshot(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput object) {
++        output.writeString(object.getSnapshot());
++    }
++
++    @Override
++    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput> type) {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
++        result.setSnapshot(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput} algorithm.
++ */
++public static class IFTimeGraphQueryExecutorPathStreamOutputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput object, OutputStream out) throws IOException {
++        SIFTimeGraphQueryExecutorPathStreamOutput tmp = SIFTimeGraphQueryExecutorPathStreamOutput.newBuilder()
++            .setPath(object.getPath())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getPath());
++        }
++
++    @Override
++    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
++        SIFTimeGraphQueryExecutorPathStreamOutput tmp = SIFTimeGraphQueryExecutorPathStreamOutput.parseDelimitedFrom(in);
++        result.setPath(tmp.getPath());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
++            result.setPath(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput object) {
++        output.writeString(object.getPath());
++    }
++
++    @Override
++    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput> type) {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
++        result.setPath(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput} algorithm.
++ */
++public static class IFTimeGraphQueryExecutorUnicastRequestsOutputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUnicastExternalRequest(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUnicastExternalRequest(), out);
++        }
++
++    @Override
++    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
++        result.setUnicastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
++            result.setUnicastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput object) {
++        kryo.writeObject(output, object.getUnicastExternalRequest());
++    }
++
++    @Override
++    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput> type) {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
++        result.setUnicastExternalRequest(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput} algorithm.
++ */
++public static class IFTimeGraphQueryExecutorBroadcastRequestsOutputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getBroadcastExternalRequest(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getBroadcastExternalRequest(), out);
++        }
++
++    @Override
++    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
++        result.setBroadcastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
++            result.setBroadcastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput object) {
++        kryo.writeObject(output, object.getBroadcastExternalRequest());
++    }
++
++    @Override
++    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput> type) {
++        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
++        result.setBroadcastExternalRequest(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphSerializers.java
+new file mode 100644
+index 0000000..d2a349c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphSerializers.java
+@@ -0,0 +1,291 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTimeGraph;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTimeGraphProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTimeGraph" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTimeGraphSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraph.IIFTimeGraphDataStreamInput} algorithm.
++ */
++public static class IFTimeGraphDataStreamInputSerializer extends Serializer<FTimeGraph.IFTimeGraphDataStreamInput> implements ISerializer<IFTimeGraph.IIFTimeGraphDataStreamInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraph.IIFTimeGraphDataStreamInput object, OutputStream out) throws IOException {
++        SIFTimeGraphDataStreamInput tmp = SIFTimeGraphDataStreamInput.newBuilder()
++            .setIsAddition(object.getIsAddition())
++            .build();
++        tmp.writeDelimitedTo(out);
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraph.IIFTimeGraphDataStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
++            out.writeBoolean(object.getIsAddition());
++        }
++
++    @Override
++    public IFTimeGraph.IIFTimeGraphDataStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraph.IFTimeGraphDataStreamInput result = new FTimeGraph.IFTimeGraphDataStreamInput();
++        result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        SIFTimeGraphDataStreamInput tmp = SIFTimeGraphDataStreamInput.parseDelimitedFrom(in);
++        result.setIsAddition(tmp.getIsAddition());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraph.IIFTimeGraphDataStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraph.IFTimeGraphDataStreamInput result = new FTimeGraph.IFTimeGraphDataStreamInput();
++            result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            result.setIsAddition(in.nextBoolean());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphDataStreamInput object) {
++        kryo.writeObject(output, object.getUpdate());
++        output.writeBoolean(object.getIsAddition());
++    }
++
++    @Override
++    public FTimeGraph.IFTimeGraphDataStreamInput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphDataStreamInput> type) {
++        FTimeGraph.IFTimeGraphDataStreamInput result = new FTimeGraph.IFTimeGraphDataStreamInput();
++        result.setUpdate(kryo.readObject(input, Object.class));
++        result.setIsAddition(input.readBoolean());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput} algorithm.
++ */
++public static class IFTimeGraphSnapshotQueryStreamInputSerializer extends Serializer<FTimeGraph.IFTimeGraphSnapshotQueryStreamInput> implements ISerializer<IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput object, OutputStream out) throws IOException {
++        SIFTimeGraphSnapshotQueryStreamInput tmp = SIFTimeGraphSnapshotQueryStreamInput.newBuilder()
++            .setStart(object.getStart())
++            .setEnd(object.getEnd())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getStart());
++            out.writeLong(object.getEnd());
++        }
++
++    @Override
++    public IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraph.IFTimeGraphSnapshotQueryStreamInput result = new FTimeGraph.IFTimeGraphSnapshotQueryStreamInput();
++        SIFTimeGraphSnapshotQueryStreamInput tmp = SIFTimeGraphSnapshotQueryStreamInput.parseDelimitedFrom(in);
++        result.setStart(tmp.getStart());
++        result.setEnd(tmp.getEnd());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraph.IFTimeGraphSnapshotQueryStreamInput result = new FTimeGraph.IFTimeGraphSnapshotQueryStreamInput();
++            result.setStart(in.nextLong());
++            result.setEnd(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphSnapshotQueryStreamInput object) {
++        output.writeLong(object.getStart());
++        output.writeLong(object.getEnd());
++    }
++
++    @Override
++    public FTimeGraph.IFTimeGraphSnapshotQueryStreamInput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphSnapshotQueryStreamInput> type) {
++        FTimeGraph.IFTimeGraphSnapshotQueryStreamInput result = new FTimeGraph.IFTimeGraphSnapshotQueryStreamInput();
++        result.setStart(input.readLong());
++        result.setEnd(input.readLong());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraph.IIFTimeGraphPathQueryStreamInput} algorithm.
++ */
++public static class IFTimeGraphPathQueryStreamInputSerializer extends Serializer<FTimeGraph.IFTimeGraphPathQueryStreamInput> implements ISerializer<IFTimeGraph.IIFTimeGraphPathQueryStreamInput> {
++
++    @Override
++    public void serializeTo(IFTimeGraph.IIFTimeGraphPathQueryStreamInput object, OutputStream out) throws IOException {
++        SIFTimeGraphPathQueryStreamInput tmp = SIFTimeGraphPathQueryStreamInput.newBuilder()
++            .setStart(object.getStart())
++            .setEnd(object.getEnd())
++            .setVertexA(object.getVertexA())
++            .setVertexB(object.getVertexB())
++            .setType(object.getType())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraph.IIFTimeGraphPathQueryStreamInput object, IDataOutput out) throws IOException {
++            out.writeLong(object.getStart());
++            out.writeLong(object.getEnd());
++            out.writeString(object.getVertexA());
++            out.writeString(object.getVertexB());
++            out.writeString(object.getType());
++        }
++
++    @Override
++    public IFTimeGraph.IIFTimeGraphPathQueryStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraph.IFTimeGraphPathQueryStreamInput result = new FTimeGraph.IFTimeGraphPathQueryStreamInput();
++        SIFTimeGraphPathQueryStreamInput tmp = SIFTimeGraphPathQueryStreamInput.parseDelimitedFrom(in);
++        result.setStart(tmp.getStart());
++        result.setEnd(tmp.getEnd());
++        result.setVertexA(tmp.getVertexA());
++        result.setVertexB(tmp.getVertexB());
++        result.setType(tmp.getType());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraph.IIFTimeGraphPathQueryStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraph.IFTimeGraphPathQueryStreamInput result = new FTimeGraph.IFTimeGraphPathQueryStreamInput();
++            result.setStart(in.nextLong());
++            result.setEnd(in.nextLong());
++            result.setVertexA(in.nextString());
++            result.setVertexB(in.nextString());
++            result.setType(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphPathQueryStreamInput object) {
++        output.writeLong(object.getStart());
++        output.writeLong(object.getEnd());
++        output.writeString(object.getVertexA());
++        output.writeString(object.getVertexB());
++        output.writeString(object.getType());
++    }
++
++    @Override
++    public FTimeGraph.IFTimeGraphPathQueryStreamInput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphPathQueryStreamInput> type) {
++        FTimeGraph.IFTimeGraphPathQueryStreamInput result = new FTimeGraph.IFTimeGraphPathQueryStreamInput();
++        result.setStart(input.readLong());
++        result.setEnd(input.readLong());
++        result.setVertexA(input.readString());
++        result.setVertexB(input.readString());
++        result.setType(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraph.IIFTimeGraphSnapshotStreamOutput} algorithm.
++ */
++public static class IFTimeGraphSnapshotStreamOutputSerializer extends Serializer<FTimeGraph.IFTimeGraphSnapshotStreamOutput> implements ISerializer<IFTimeGraph.IIFTimeGraphSnapshotStreamOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraph.IIFTimeGraphSnapshotStreamOutput object, OutputStream out) throws IOException {
++        SIFTimeGraphSnapshotStreamOutput tmp = SIFTimeGraphSnapshotStreamOutput.newBuilder()
++            .setSnapshot(object.getSnapshot())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraph.IIFTimeGraphSnapshotStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSnapshot());
++        }
++
++    @Override
++    public IFTimeGraph.IIFTimeGraphSnapshotStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraph.IFTimeGraphSnapshotStreamOutput result = new FTimeGraph.IFTimeGraphSnapshotStreamOutput();
++        SIFTimeGraphSnapshotStreamOutput tmp = SIFTimeGraphSnapshotStreamOutput.parseDelimitedFrom(in);
++        result.setSnapshot(tmp.getSnapshot());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraph.IIFTimeGraphSnapshotStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraph.IFTimeGraphSnapshotStreamOutput result = new FTimeGraph.IFTimeGraphSnapshotStreamOutput();
++            result.setSnapshot(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphSnapshotStreamOutput object) {
++        output.writeString(object.getSnapshot());
++    }
++
++    @Override
++    public FTimeGraph.IFTimeGraphSnapshotStreamOutput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphSnapshotStreamOutput> type) {
++        FTimeGraph.IFTimeGraphSnapshotStreamOutput result = new FTimeGraph.IFTimeGraphSnapshotStreamOutput();
++        result.setSnapshot(input.readString());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraph.IIFTimeGraphPathStreamOutput} algorithm.
++ */
++public static class IFTimeGraphPathStreamOutputSerializer extends Serializer<FTimeGraph.IFTimeGraphPathStreamOutput> implements ISerializer<IFTimeGraph.IIFTimeGraphPathStreamOutput> {
++
++    @Override
++    public void serializeTo(IFTimeGraph.IIFTimeGraphPathStreamOutput object, OutputStream out) throws IOException {
++        SIFTimeGraphPathStreamOutput tmp = SIFTimeGraphPathStreamOutput.newBuilder()
++            .setPath(object.getPath())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTimeGraph.IIFTimeGraphPathStreamOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getPath());
++        }
++
++    @Override
++    public IFTimeGraph.IIFTimeGraphPathStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FTimeGraph.IFTimeGraphPathStreamOutput result = new FTimeGraph.IFTimeGraphPathStreamOutput();
++        SIFTimeGraphPathStreamOutput tmp = SIFTimeGraphPathStreamOutput.parseDelimitedFrom(in);
++        result.setPath(tmp.getPath());
++        return result;
++    }
++
++        @Override
++        public IFTimeGraph.IIFTimeGraphPathStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FTimeGraph.IFTimeGraphPathStreamOutput result = new FTimeGraph.IFTimeGraphPathStreamOutput();
++            result.setPath(in.nextString());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphPathStreamOutput object) {
++        output.writeString(object.getPath());
++    }
++
++    @Override
++    public FTimeGraph.IFTimeGraphPathStreamOutput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphPathStreamOutput> type) {
++        FTimeGraph.IFTimeGraphPathStreamOutput result = new FTimeGraph.IFTimeGraphPathStreamOutput();
++        result.setPath(input.readString());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropy.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropy.java
+new file mode 100644
+index 0000000..c04a0bf
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropy.java
+@@ -0,0 +1,219 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTransferEntropy" (GEN).
++ */
++public class FTransferEntropy implements IFTransferEntropy {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTransferEntropyPreprocessedStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTransferEntropyPreprocessedStreamInput implements IIFTransferEntropyPreprocessedStreamInput {
++
++        private String symbolId;
++        private long timestamp;
++        private double value;
++        private int volume;
++
++        @Override
++        public String getSymbolId(){
++            return symbolId;
++        }
++
++        @Override
++        public void setSymbolId(String symbolId){
++            this.symbolId = symbolId;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        @Override
++        public int getVolume(){
++            return volume;
++        }
++
++        @Override
++        public void setVolume(int volume){
++            this.volume = volume;
++        }
++        static {
++            SerializerRegistry.register("IFTransferEntropyPreprocessedStreamInput", FTransferEntropySerializers.IFTransferEntropyPreprocessedStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTransferEntropySymbolListInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTransferEntropySymbolListInput implements IIFTransferEntropySymbolListInput {
++
++        private java.util.List<String> allSymbols;
++
++        @Override
++        public java.util.List<String> getAllSymbols(){
++            return allSymbols;
++        }
++
++        @Override
++        public void setAllSymbols(java.util.List<String> allSymbols){
++            this.allSymbols = allSymbols;
++        }
++        static {
++            SerializerRegistry.register("IFTransferEntropySymbolListInput", FTransferEntropySerializers.IFTransferEntropySymbolListInputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTransferEntropyPairwiseFinancialOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTransferEntropyPairwiseFinancialOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTransferEntropyPairwiseFinancialOutput> implements IIFTransferEntropyPairwiseFinancialOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTransferEntropyPairwiseFinancialOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTransferEntropyPairwiseFinancialOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTransferEntropyPairwiseFinancialOutput createItem() {
++            return new IFTransferEntropyPairwiseFinancialOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private String id0;
++        private String id1;
++        private String date;
++        private double value;
++
++        @Override
++        public String getId0(){
++            return id0;
++        }
++
++        @Override
++        public void setId0(String id0){
++            this.id0 = id0;
++        }
++        @Override
++        public String getId1(){
++            return id1;
++        }
++
++        @Override
++        public void setId1(String id1){
++            this.id1 = id1;
++        }
++        @Override
++        public String getDate(){
++            return date;
++        }
++
++        @Override
++        public void setDate(String date){
++            this.date = date;
++        }
++        @Override
++        public double getValue(){
++            return value;
++        }
++
++        @Override
++        public void setValue(double value){
++            this.value = value;
++        }
++        static {
++            SerializerRegistry.register("IFTransferEntropyPairwiseFinancialOutput", FTransferEntropySerializers.IFTransferEntropyPairwiseFinancialOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTransferEntropyPreprocessedStreamInput input, IIFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTransferEntropySymbolListInput input, IIFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "windowAdvance".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowAdvance(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "densitySize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDensitySize(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropySerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropySerializers.java
+new file mode 100644
+index 0000000..9d58e1e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropySerializers.java
+@@ -0,0 +1,195 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTransferEntropy;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTransferEntropyProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTransferEntropy" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTransferEntropySerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput} algorithm.
++ */
++public static class IFTransferEntropyPreprocessedStreamInputSerializer extends Serializer<FTransferEntropy.IFTransferEntropyPreprocessedStreamInput> implements ISerializer<IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput> {
++
++    @Override
++    public void serializeTo(IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput object, OutputStream out) throws IOException {
++        SIFTransferEntropyPreprocessedStreamInput tmp = SIFTransferEntropyPreprocessedStreamInput.newBuilder()
++            .setSymbolId(object.getSymbolId())
++            .setTimestamp(object.getTimestamp())
++            .setValue(object.getValue())
++            .setVolume(object.getVolume())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput object, IDataOutput out) throws IOException {
++            out.writeString(object.getSymbolId());
++            out.writeLong(object.getTimestamp());
++            out.writeDouble(object.getValue());
++            out.writeInt(object.getVolume());
++        }
++
++    @Override
++    public IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTransferEntropy.IFTransferEntropyPreprocessedStreamInput result = new FTransferEntropy.IFTransferEntropyPreprocessedStreamInput();
++        SIFTransferEntropyPreprocessedStreamInput tmp = SIFTransferEntropyPreprocessedStreamInput.parseDelimitedFrom(in);
++        result.setSymbolId(tmp.getSymbolId());
++        result.setTimestamp(tmp.getTimestamp());
++        result.setValue(tmp.getValue());
++        result.setVolume(tmp.getVolume());
++        return result;
++    }
++
++        @Override
++        public IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTransferEntropy.IFTransferEntropyPreprocessedStreamInput result = new FTransferEntropy.IFTransferEntropyPreprocessedStreamInput();
++            result.setSymbolId(in.nextString());
++            result.setTimestamp(in.nextLong());
++            result.setValue(in.nextDouble());
++            result.setVolume(in.nextInt());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTransferEntropy.IFTransferEntropyPreprocessedStreamInput object) {
++        output.writeString(object.getSymbolId());
++        output.writeLong(object.getTimestamp());
++        output.writeDouble(object.getValue());
++        output.writeInt(object.getVolume());
++    }
++
++    @Override
++    public FTransferEntropy.IFTransferEntropyPreprocessedStreamInput read(Kryo kryo, Input input, Class<FTransferEntropy.IFTransferEntropyPreprocessedStreamInput> type) {
++        FTransferEntropy.IFTransferEntropyPreprocessedStreamInput result = new FTransferEntropy.IFTransferEntropyPreprocessedStreamInput();
++        result.setSymbolId(input.readString());
++        result.setTimestamp(input.readLong());
++        result.setValue(input.readDouble());
++        result.setVolume(input.readInt());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTransferEntropy.IIFTransferEntropySymbolListInput} algorithm.
++ */
++public static class IFTransferEntropySymbolListInputSerializer extends Serializer<FTransferEntropy.IFTransferEntropySymbolListInput> implements ISerializer<IFTransferEntropy.IIFTransferEntropySymbolListInput> {
++
++    @Override
++    public void serializeTo(IFTransferEntropy.IIFTransferEntropySymbolListInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTransferEntropy.IIFTransferEntropySymbolListInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
++        }
++
++    @Override
++    public IFTransferEntropy.IIFTransferEntropySymbolListInput deserializeFrom(InputStream in) throws IOException {
++        FTransferEntropy.IFTransferEntropySymbolListInput result = new FTransferEntropy.IFTransferEntropySymbolListInput();
++        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTransferEntropy.IIFTransferEntropySymbolListInput deserializeFrom(IDataInput in) throws IOException {
++            FTransferEntropy.IFTransferEntropySymbolListInput result = new FTransferEntropy.IFTransferEntropySymbolListInput();
++            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTransferEntropy.IFTransferEntropySymbolListInput object) {
++        kryo.writeObject(output, object.getAllSymbols());
++    }
++
++    @Override
++    public FTransferEntropy.IFTransferEntropySymbolListInput read(Kryo kryo, Input input, Class<FTransferEntropy.IFTransferEntropySymbolListInput> type) {
++        FTransferEntropy.IFTransferEntropySymbolListInput result = new FTransferEntropy.IFTransferEntropySymbolListInput();
++        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput} algorithm.
++ */
++public static class IFTransferEntropyPairwiseFinancialOutputSerializer extends Serializer<FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput> implements ISerializer<IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput> {
++
++    @Override
++    public void serializeTo(IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput object, OutputStream out) throws IOException {
++        SIFTransferEntropyPairwiseFinancialOutput tmp = SIFTransferEntropyPairwiseFinancialOutput.newBuilder()
++            .setId0(object.getId0())
++            .setId1(object.getId1())
++            .setDate(object.getDate())
++            .setValue(object.getValue())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput object, IDataOutput out) throws IOException {
++            out.writeString(object.getId0());
++            out.writeString(object.getId1());
++            out.writeString(object.getDate());
++            out.writeDouble(object.getValue());
++        }
++
++    @Override
++    public IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput deserializeFrom(InputStream in) throws IOException {
++        FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput result = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
++        SIFTransferEntropyPairwiseFinancialOutput tmp = SIFTransferEntropyPairwiseFinancialOutput.parseDelimitedFrom(in);
++        result.setId0(tmp.getId0());
++        result.setId1(tmp.getId1());
++        result.setDate(tmp.getDate());
++        result.setValue(tmp.getValue());
++        return result;
++    }
++
++        @Override
++        public IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput deserializeFrom(IDataInput in) throws IOException {
++            FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput result = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
++            result.setId0(in.nextString());
++            result.setId1(in.nextString());
++            result.setDate(in.nextString());
++            result.setValue(in.nextDouble());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput object) {
++        output.writeString(object.getId0());
++        output.writeString(object.getId1());
++        output.writeString(object.getDate());
++        output.writeDouble(object.getValue());
++    }
++
++    @Override
++    public FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput read(Kryo kryo, Input input, Class<FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput> type) {
++        FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput result = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
++        result.setId0(input.readString());
++        result.setId1(input.readString());
++        result.setDate(input.readString());
++        result.setValue(input.readDouble());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifier.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifier.java
+new file mode 100644
+index 0000000..e3ac115
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifier.java
+@@ -0,0 +1,144 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTweetClassifier" (GEN).
++ */
++public class FTweetClassifier implements IFTweetClassifier {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTweetClassifierModifiedTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTweetClassifierModifiedTwitterStreamInput implements IIFTweetClassifierModifiedTwitterStreamInput {
++
++        private twitter4j.Status status;
++
++        @Override
++        public twitter4j.Status getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(twitter4j.Status status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFTweetClassifierModifiedTwitterStreamInput", FTweetClassifierSerializers.IFTweetClassifierModifiedTwitterStreamInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTweetClassifierKeywordStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTweetClassifierKeywordStreamInput implements IIFTweetClassifierKeywordStreamInput {
++
++        private java.util.List<String> keywords;
++
++        @Override
++        public java.util.List<String> getKeywords(){
++            return keywords;
++        }
++
++        @Override
++        public void setKeywords(java.util.List<String> keywords){
++            this.keywords = keywords;
++        }
++        static {
++            SerializerRegistry.register("IFTweetClassifierKeywordStreamInput", FTweetClassifierSerializers.IFTweetClassifierKeywordStreamInputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTweetClassifierModifiedTwitterStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTweetClassifierModifiedTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTweetClassifierModifiedTwitterStreamOutput> implements IIFTweetClassifierModifiedTwitterStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTweetClassifierModifiedTwitterStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTweetClassifierModifiedTwitterStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTweetClassifierModifiedTwitterStreamOutput createItem() {
++            return new IFTweetClassifierModifiedTwitterStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private twitter4j.Status tweet;
++        private java.util.List<String> stocks;
++
++        @Override
++        public twitter4j.Status getTweet(){
++            return tweet;
++        }
++
++        @Override
++        public void setTweet(twitter4j.Status tweet){
++            this.tweet = tweet;
++        }
++        @Override
++        public java.util.List<String> getStocks(){
++            return stocks;
++        }
++
++        @Override
++        public void setStocks(java.util.List<String> stocks){
++            this.stocks = stocks;
++        }
++        static {
++            SerializerRegistry.register("IFTweetClassifierModifiedTwitterStreamOutput", FTweetClassifierSerializers.IFTweetClassifierModifiedTwitterStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTweetClassifierModifiedTwitterStreamInput input, IIFTweetClassifierModifiedTwitterStreamOutput modifiedTwitterStreamResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTweetClassifierKeywordStreamInput input, IIFTweetClassifierModifiedTwitterStreamOutput modifiedTwitterStreamResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifierSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifierSerializers.java
+new file mode 100644
+index 0000000..f6be51f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifierSerializers.java
+@@ -0,0 +1,157 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTweetClassifier;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTweetClassifierProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTweetClassifier" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTweetClassifierSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput} algorithm.
++ */
++public static class IFTweetClassifierModifiedTwitterStreamInputSerializer extends Serializer<FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput> implements ISerializer<IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput read(Kryo kryo, Input input, Class<FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput> type) {
++        FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput();
++        result.setStatus(kryo.readObject(input, twitter4j.Status.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTweetClassifier.IIFTweetClassifierKeywordStreamInput} algorithm.
++ */
++public static class IFTweetClassifierKeywordStreamInputSerializer extends Serializer<FTweetClassifier.IFTweetClassifierKeywordStreamInput> implements ISerializer<IFTweetClassifier.IIFTweetClassifierKeywordStreamInput> {
++
++    @Override
++    public void serializeTo(IFTweetClassifier.IIFTweetClassifierKeywordStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTweetClassifier.IIFTweetClassifierKeywordStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
++        }
++
++    @Override
++    public IFTweetClassifier.IIFTweetClassifierKeywordStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTweetClassifier.IFTweetClassifierKeywordStreamInput result = new FTweetClassifier.IFTweetClassifierKeywordStreamInput();
++        result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTweetClassifier.IIFTweetClassifierKeywordStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTweetClassifier.IFTweetClassifierKeywordStreamInput result = new FTweetClassifier.IFTweetClassifierKeywordStreamInput();
++            result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTweetClassifier.IFTweetClassifierKeywordStreamInput object) {
++        kryo.writeObject(output, object.getKeywords());
++    }
++
++    @Override
++    public FTweetClassifier.IFTweetClassifierKeywordStreamInput read(Kryo kryo, Input input, Class<FTweetClassifier.IFTweetClassifierKeywordStreamInput> type) {
++        FTweetClassifier.IFTweetClassifierKeywordStreamInput result = new FTweetClassifier.IFTweetClassifierKeywordStreamInput();
++        result.setKeywords(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput} algorithm.
++ */
++public static class IFTweetClassifierModifiedTwitterStreamOutputSerializer extends Serializer<FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput> implements ISerializer<IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput> {
++
++    @Override
++    public void serializeTo(IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getTweet(), out);
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getTweet(), out);
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
++        }
++
++    @Override
++    public IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput();
++        result.setTweet(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++        result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput();
++            result.setTweet(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
++            result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput object) {
++        kryo.writeObject(output, object.getTweet());
++        kryo.writeObject(output, object.getStocks());
++    }
++
++    @Override
++    public FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput read(Kryo kryo, Input input, Class<FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput> type) {
++        FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput();
++        result.setTweet(kryo.readObject(input, twitter4j.Status.class));
++        result.setStocks(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawling.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawling.java
+new file mode 100644
+index 0000000..b79baf0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawling.java
+@@ -0,0 +1,121 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTwitterCrawling" (GEN).
++ */
++public class FTwitterCrawling implements IFTwitterCrawling {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTwitterCrawlingAnalysisInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTwitterCrawlingAnalysisInput implements IIFTwitterCrawlingAnalysisInput {
++
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFTwitterCrawlingAnalysisInput", FTwitterCrawlingSerializers.IFTwitterCrawlingAnalysisInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTwitterCrawlingAnalysisOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTwitterCrawlingAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTwitterCrawlingAnalysisOutput> implements IIFTwitterCrawlingAnalysisOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTwitterCrawlingAnalysisOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTwitterCrawlingAnalysisOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTwitterCrawlingAnalysisOutput createItem() {
++            return new IFTwitterCrawlingAnalysisOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++        private eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        @Override
++        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval(){
++            return timeInterval;
++        }
++
++        @Override
++        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval){
++            this.timeInterval = timeInterval;
++        }
++        static {
++            SerializerRegistry.register("IFTwitterCrawlingAnalysisOutput", FTwitterCrawlingSerializers.IFTwitterCrawlingAnalysisOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTwitterCrawlingAnalysisInput input, IIFTwitterCrawlingAnalysisOutput analysisResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawlingSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawlingSerializers.java
+new file mode 100644
+index 0000000..9fabcbf
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawlingSerializers.java
+@@ -0,0 +1,115 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTwitterCrawling;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTwitterCrawlingProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTwitterCrawling" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTwitterCrawlingSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput} algorithm.
++ */
++public static class IFTwitterCrawlingAnalysisInputSerializer extends Serializer<FTwitterCrawling.IFTwitterCrawlingAnalysisInput> implements ISerializer<IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput> {
++
++    @Override
++    public void serializeTo(IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput deserializeFrom(InputStream in) throws IOException {
++        FTwitterCrawling.IFTwitterCrawlingAnalysisInput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput deserializeFrom(IDataInput in) throws IOException {
++            FTwitterCrawling.IFTwitterCrawlingAnalysisInput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTwitterCrawling.IFTwitterCrawlingAnalysisInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FTwitterCrawling.IFTwitterCrawlingAnalysisInput read(Kryo kryo, Input input, Class<FTwitterCrawling.IFTwitterCrawlingAnalysisInput> type) {
++        FTwitterCrawling.IFTwitterCrawlingAnalysisInput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisInput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput} algorithm.
++ */
++public static class IFTwitterCrawlingAnalysisOutputSerializer extends Serializer<FTwitterCrawling.IFTwitterCrawlingAnalysisOutput> implements ISerializer<IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput> {
++
++    @Override
++    public void serializeTo(IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++            SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
++        }
++
++    @Override
++    public IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput deserializeFrom(InputStream in) throws IOException {
++        FTwitterCrawling.IFTwitterCrawlingAnalysisOutput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisOutput();
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
++            FTwitterCrawling.IFTwitterCrawlingAnalysisOutput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisOutput();
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTwitterCrawling.IFTwitterCrawlingAnalysisOutput object) {
++        kryo.writeObject(output, object.getEvents());
++        kryo.writeObject(output, object.getTimeInterval());
++    }
++
++    @Override
++    public FTwitterCrawling.IFTwitterCrawlingAnalysisOutput read(Kryo kryo, Input input, Class<FTwitterCrawling.IFTwitterCrawlingAnalysisOutput> type) {
++        FTwitterCrawling.IFTwitterCrawlingAnalysisOutput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisOutput();
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        result.setTimeInterval(kryo.readObject(input, eu.qualimaster.families.datatypes.common.IFTimeInterval.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetection.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetection.java
+new file mode 100644
+index 0000000..fea43d6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetection.java
+@@ -0,0 +1,157 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTwitterEventDetection" (GEN).
++ */
++public class FTwitterEventDetection implements IFTwitterEventDetection {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTwitterEventDetectionTwitterStreamInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTwitterEventDetectionTwitterStreamInput implements IIFTwitterEventDetectionTwitterStreamInput {
++
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++        private java.util.List<String> stocks;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        @Override
++        public java.util.List<String> getStocks(){
++            return stocks;
++        }
++
++        @Override
++        public void setStocks(java.util.List<String> stocks){
++            this.stocks = stocks;
++        }
++        static {
++            SerializerRegistry.register("IFTwitterEventDetectionTwitterStreamInput", FTwitterEventDetectionSerializers.IFTwitterEventDetectionTwitterStreamInputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTwitterEventDetectionTwitterStreamOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTwitterEventDetectionTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTwitterEventDetectionTwitterStreamOutput> implements IIFTwitterEventDetectionTwitterStreamOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTwitterEventDetectionTwitterStreamOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTwitterEventDetectionTwitterStreamOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTwitterEventDetectionTwitterStreamOutput createItem() {
++            return new IFTwitterEventDetectionTwitterStreamOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFTwitterEventDetectionTwitterStreamOutput", FTwitterEventDetectionSerializers.IFTwitterEventDetectionTwitterStreamOutputSerializer.class);
++            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTwitterEventDetectionTwitterStreamInput input, IIFTwitterEventDetectionTwitterStreamOutput twitterStreamResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "hardThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterHardThreshold(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "percentageThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterPercentageThreshold(double value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "lengthOfTimeWindow".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterLengthOfTimeWindow(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "frequenceOfCheckForEvent".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterFrequenceOfCheckForEvent(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetectionSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetectionSerializers.java
+new file mode 100644
+index 0000000..2cccbf7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetectionSerializers.java
+@@ -0,0 +1,121 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTwitterEventDetection;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTwitterEventDetectionProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTwitterEventDetection" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTwitterEventDetectionSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput} algorithm.
++ */
++public static class IFTwitterEventDetectionTwitterStreamInputSerializer extends Serializer<FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput> implements ISerializer<IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput> {
++
++    @Override
++    public void serializeTo(IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
++        }
++
++    @Override
++    public IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
++        FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
++            FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput object) {
++        kryo.writeObject(output, object.getStatus());
++        kryo.writeObject(output, object.getStocks());
++    }
++
++    @Override
++    public FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput read(Kryo kryo, Input input, Class<FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput> type) {
++        FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        result.setStocks(kryo.readObject(input, java.util.ArrayList.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput} algorithm.
++ */
++public static class IFTwitterEventDetectionTwitterStreamOutputSerializer extends Serializer<FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput> implements ISerializer<IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput> {
++
++    @Override
++    public void serializeTo(IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
++        FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
++            FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput object) {
++        kryo.writeObject(output, object.getEvents());
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput read(Kryo kryo, Input input, Class<FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput> type) {
++        FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPrediction.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPrediction.java
+new file mode 100644
+index 0000000..2639854
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPrediction.java
+@@ -0,0 +1,131 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTwitterEventPrediction" (GEN).
++ */
++public class FTwitterEventPrediction implements IFTwitterEventPrediction {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTwitterEventPredictionAnalysisInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTwitterEventPredictionAnalysisInput implements IIFTwitterEventPredictionAnalysisInput {
++
++        private eu.qualimaster.data.stream.source.LabelledTweet status;
++
++        @Override
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFTwitterEventPredictionAnalysisInput", FTwitterEventPredictionSerializers.IFTwitterEventPredictionAnalysisInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTwitterEventPredictionAnalysisOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTwitterEventPredictionAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTwitterEventPredictionAnalysisOutput> implements IIFTwitterEventPredictionAnalysisOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTwitterEventPredictionAnalysisOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTwitterEventPredictionAnalysisOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTwitterEventPredictionAnalysisOutput createItem() {
++            return new IFTwitterEventPredictionAnalysisOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
++        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> symbols;
++        private eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval;
++
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
++            return events;
++        }
++
++        @Override
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
++            this.events = events;
++        }
++        @Override
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getSymbols(){
++            return symbols;
++        }
++
++        @Override
++        public void setSymbols(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> symbols){
++            this.symbols = symbols;
++        }
++        @Override
++        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval(){
++            return timeInterval;
++        }
++
++        @Override
++        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval){
++            this.timeInterval = timeInterval;
++        }
++        static {
++            SerializerRegistry.register("IFTwitterEventPredictionAnalysisOutput", FTwitterEventPredictionSerializers.IFTwitterEventPredictionAnalysisOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTwitterEventPredictionAnalysisInput input, IIFTwitterEventPredictionAnalysisOutput analysisResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPredictionSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPredictionSerializers.java
+new file mode 100644
+index 0000000..d49813b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPredictionSerializers.java
+@@ -0,0 +1,121 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTwitterEventPrediction;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTwitterEventPredictionProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTwitterEventPrediction" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTwitterEventPredictionSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput} algorithm.
++ */
++public static class IFTwitterEventPredictionAnalysisInputSerializer extends Serializer<FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput> implements ISerializer<IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput> {
++
++    @Override
++    public void serializeTo(IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput deserializeFrom(InputStream in) throws IOException {
++        FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput deserializeFrom(IDataInput in) throws IOException {
++            FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput read(Kryo kryo, Input input, Class<FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput> type) {
++        FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput();
++        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput} algorithm.
++ */
++public static class IFTwitterEventPredictionAnalysisOutputSerializer extends Serializer<FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput> implements ISerializer<IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput> {
++
++    @Override
++    public void serializeTo(IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getSymbols(), out);
++        SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
++            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getSymbols(), out);
++            SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
++        }
++
++    @Override
++    public IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput deserializeFrom(InputStream in) throws IOException {
++        FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput();
++        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        result.setSymbols(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++        result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
++            FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput();
++            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            result.setSymbols(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
++            result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput object) {
++        kryo.writeObject(output, object.getEvents());
++        kryo.writeObject(output, object.getSymbols());
++        kryo.writeObject(output, object.getTimeInterval());
++    }
++
++    @Override
++    public FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput read(Kryo kryo, Input input, Class<FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput> type) {
++        FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput();
++        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
++        result.setSymbols(kryo.readObject(input, java.util.ArrayList.class));
++        result.setTimeInterval(kryo.readObject(input, eu.qualimaster.families.datatypes.common.IFTimeInterval.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFiltering.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFiltering.java
+new file mode 100644
+index 0000000..367c204
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFiltering.java
+@@ -0,0 +1,102 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IFTwitterStreamFiltering" (GEN).
++ */
++public class FTwitterStreamFiltering implements IFTwitterStreamFiltering {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IFTwitterStreamFilteringAnalysisInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTwitterStreamFilteringAnalysisInput implements IIFTwitterStreamFilteringAnalysisInput {
++
++        private Object status;
++
++        @Override
++        public Object getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(Object status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFTwitterStreamFilteringAnalysisInput", FTwitterStreamFilteringSerializers.IFTwitterStreamFilteringAnalysisInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IFTwitterStreamFilteringAnalysisOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IFTwitterStreamFilteringAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTwitterStreamFilteringAnalysisOutput> implements IIFTwitterStreamFilteringAnalysisOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IFTwitterStreamFilteringAnalysisOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IFTwitterStreamFilteringAnalysisOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IFTwitterStreamFilteringAnalysisOutput createItem() {
++            return new IFTwitterStreamFilteringAnalysisOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private Object status;
++
++        @Override
++        public Object getStatus(){
++            return status;
++        }
++
++        @Override
++        public void setStatus(Object status){
++            this.status = status;
++        }
++        static {
++            SerializerRegistry.register("IFTwitterStreamFilteringAnalysisOutput", FTwitterStreamFilteringSerializers.IFTwitterStreamFilteringAnalysisOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTwitterStreamFilteringAnalysisInput input, IIFTwitterStreamFilteringAnalysisOutput analysisResult) {
++    }
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFilteringSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFilteringSerializers.java
+new file mode 100644
+index 0000000..d0cb901
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFilteringSerializers.java
+@@ -0,0 +1,109 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.FTwitterStreamFiltering;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.FTwitterStreamFilteringProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IFTwitterStreamFiltering" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class FTwitterStreamFilteringSerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput} algorithm.
++ */
++public static class IFTwitterStreamFilteringAnalysisInputSerializer extends Serializer<FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput> implements ISerializer<IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput> {
++
++    @Override
++    public void serializeTo(IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput deserializeFrom(InputStream in) throws IOException {
++        FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput deserializeFrom(IDataInput in) throws IOException {
++            FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput read(Kryo kryo, Input input, Class<FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput> type) {
++        FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput();
++        result.setStatus(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput} algorithm.
++ */
++public static class IFTwitterStreamFilteringAnalysisOutputSerializer extends Serializer<FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput> implements ISerializer<IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput> {
++
++    @Override
++    public void serializeTo(IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput object, OutputStream out) throws IOException {
++        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getStatus(), out);
++    }
++
++        @Override
++        public void serializeTo(IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput object, IDataOutput out) throws IOException {
++            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getStatus(), out);
++        }
++
++    @Override
++    public IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput deserializeFrom(InputStream in) throws IOException {
++        FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput();
++        result.setStatus(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++        return result;
++    }
++
++        @Override
++        public IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
++            FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput();
++            result.setStatus(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput object) {
++        kryo.writeObject(output, object.getStatus());
++    }
++
++    @Override
++    public FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput read(Kryo kryo, Input input, Class<FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput> type) {
++        FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput();
++        result.setStatus(kryo.readObject(input, Object.class));
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamily.java
+new file mode 100644
+index 0000000..ec67835
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamily.java
+@@ -0,0 +1,147 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "IRandomFamily" (GEN).
++ */
++public class RandomFamily implements IRandomFamily {
++
++    /**
++     * Provides a default implementation of the data input for the {@link IRandomFamilyRandomDataInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IRandomFamilyRandomDataInput implements IIRandomFamilyRandomDataInput {
++
++        private int randomInteger;
++        private long timestamp;
++
++        @Override
++        public int getRandomInteger(){
++            return randomInteger;
++        }
++
++        @Override
++        public void setRandomInteger(int randomInteger){
++            this.randomInteger = randomInteger;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        static {
++            SerializerRegistry.register("IRandomFamilyRandomDataInput", RandomFamilySerializers.IRandomFamilyRandomDataInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link IRandomFamilyRandomDataOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class IRandomFamilyRandomDataOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIRandomFamilyRandomDataOutput> implements IIRandomFamilyRandomDataOutput {
++
++        /**
++         * Creates the item.
++         */
++        public IRandomFamilyRandomDataOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private IRandomFamilyRandomDataOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public IRandomFamilyRandomDataOutput createItem() {
++            return new IRandomFamilyRandomDataOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private int randomInteger;
++        private long timestamp;
++
++        @Override
++        public int getRandomInteger(){
++            return randomInteger;
++        }
++
++        @Override
++        public void setRandomInteger(int randomInteger){
++            this.randomInteger = randomInteger;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        static {
++            SerializerRegistry.register("IRandomFamilyRandomDataOutput", RandomFamilySerializers.IRandomFamilyRandomDataOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIRandomFamilyRandomDataInput input, IIRandomFamilyRandomDataOutput randomDataResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "delay".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDelay(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "flag".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterFlag(boolean value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamilySerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamilySerializers.java
+new file mode 100644
+index 0000000..8e57bba
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamilySerializers.java
+@@ -0,0 +1,129 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.RandomFamily;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.RandomFamilyProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "IRandomFamily" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class RandomFamilySerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IRandomFamily.IIRandomFamilyRandomDataInput} algorithm.
++ */
++public static class IRandomFamilyRandomDataInputSerializer extends Serializer<RandomFamily.IRandomFamilyRandomDataInput> implements ISerializer<IRandomFamily.IIRandomFamilyRandomDataInput> {
++
++    @Override
++    public void serializeTo(IRandomFamily.IIRandomFamilyRandomDataInput object, OutputStream out) throws IOException {
++        SIRandomFamilyRandomDataInput tmp = SIRandomFamilyRandomDataInput.newBuilder()
++            .setRandomInteger(object.getRandomInteger())
++            .setTimestamp(object.getTimestamp())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IRandomFamily.IIRandomFamilyRandomDataInput object, IDataOutput out) throws IOException {
++            out.writeInt(object.getRandomInteger());
++            out.writeLong(object.getTimestamp());
++        }
++
++    @Override
++    public IRandomFamily.IIRandomFamilyRandomDataInput deserializeFrom(InputStream in) throws IOException {
++        RandomFamily.IRandomFamilyRandomDataInput result = new RandomFamily.IRandomFamilyRandomDataInput();
++        SIRandomFamilyRandomDataInput tmp = SIRandomFamilyRandomDataInput.parseDelimitedFrom(in);
++        result.setRandomInteger(tmp.getRandomInteger());
++        result.setTimestamp(tmp.getTimestamp());
++        return result;
++    }
++
++        @Override
++        public IRandomFamily.IIRandomFamilyRandomDataInput deserializeFrom(IDataInput in) throws IOException {
++            RandomFamily.IRandomFamilyRandomDataInput result = new RandomFamily.IRandomFamilyRandomDataInput();
++            result.setRandomInteger(in.nextInt());
++            result.setTimestamp(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, RandomFamily.IRandomFamilyRandomDataInput object) {
++        output.writeInt(object.getRandomInteger());
++        output.writeLong(object.getTimestamp());
++    }
++
++    @Override
++    public RandomFamily.IRandomFamilyRandomDataInput read(Kryo kryo, Input input, Class<RandomFamily.IRandomFamilyRandomDataInput> type) {
++        RandomFamily.IRandomFamilyRandomDataInput result = new RandomFamily.IRandomFamilyRandomDataInput();
++        result.setRandomInteger(input.readInt());
++        result.setTimestamp(input.readLong());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IRandomFamily.IIRandomFamilyRandomDataOutput} algorithm.
++ */
++public static class IRandomFamilyRandomDataOutputSerializer extends Serializer<RandomFamily.IRandomFamilyRandomDataOutput> implements ISerializer<IRandomFamily.IIRandomFamilyRandomDataOutput> {
++
++    @Override
++    public void serializeTo(IRandomFamily.IIRandomFamilyRandomDataOutput object, OutputStream out) throws IOException {
++        SIRandomFamilyRandomDataOutput tmp = SIRandomFamilyRandomDataOutput.newBuilder()
++            .setRandomInteger(object.getRandomInteger())
++            .setTimestamp(object.getTimestamp())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(IRandomFamily.IIRandomFamilyRandomDataOutput object, IDataOutput out) throws IOException {
++            out.writeInt(object.getRandomInteger());
++            out.writeLong(object.getTimestamp());
++        }
++
++    @Override
++    public IRandomFamily.IIRandomFamilyRandomDataOutput deserializeFrom(InputStream in) throws IOException {
++        RandomFamily.IRandomFamilyRandomDataOutput result = new RandomFamily.IRandomFamilyRandomDataOutput();
++        SIRandomFamilyRandomDataOutput tmp = SIRandomFamilyRandomDataOutput.parseDelimitedFrom(in);
++        result.setRandomInteger(tmp.getRandomInteger());
++        result.setTimestamp(tmp.getTimestamp());
++        return result;
++    }
++
++        @Override
++        public IRandomFamily.IIRandomFamilyRandomDataOutput deserializeFrom(IDataInput in) throws IOException {
++            RandomFamily.IRandomFamilyRandomDataOutput result = new RandomFamily.IRandomFamilyRandomDataOutput();
++            result.setRandomInteger(in.nextInt());
++            result.setTimestamp(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, RandomFamily.IRandomFamilyRandomDataOutput object) {
++        output.writeInt(object.getRandomInteger());
++        output.writeLong(object.getTimestamp());
++    }
++
++    @Override
++    public RandomFamily.IRandomFamilyRandomDataOutput read(Kryo kryo, Input input, Class<RandomFamily.IRandomFamilyRandomDataOutput> type) {
++        RandomFamily.IRandomFamilyRandomDataOutput result = new RandomFamily.IRandomFamilyRandomDataOutput();
++        result.setRandomInteger(input.readInt());
++        result.setTimestamp(input.readLong());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SerializationRegistry.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SerializationRegistry.java
+new file mode 100644
+index 0000000..71aa13b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SerializationRegistry.java
+@@ -0,0 +1,105 @@
++package eu.qualimaster.families.imp;
++
++import javax.annotation.Generated;
++import backtype.storm.Config;
++
++/**
++ * The registration of the generated serializers (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class SerializationRegistry {
++
++/**
++ * Registers all generated kryo serializers. To be called from a topology.
++ */
++    public static final void registerKryoSerializers(Config conf) {
++        conf.registerSerialization(FPreprocessor.IFPreprocessorSpringStreamInput.class, FPreprocessorSerializers.IFPreprocessorSpringStreamInputSerializer.class);
++        conf.registerSerialization(FPreprocessor.IFPreprocessorPreprocessedStreamOutput.class, FPreprocessorSerializers.IFPreprocessorPreprocessedStreamOutputSerializer.class);
++        conf.registerSerialization(FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput.class, FCorrelationFinancialSerializers.IFCorrelationFinancialPreprocessedStreamInputSerializer.class);
++        conf.registerSerialization(FCorrelationFinancial.IFCorrelationFinancialSymbolListInput.class, FCorrelationFinancialSerializers.IFCorrelationFinancialSymbolListInputSerializer.class);
++        conf.registerSerialization(FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput.class, FCorrelationFinancialSerializers.IFCorrelationFinancialPairwiseFinancialOutputSerializer.class);
++        conf.registerSerialization(FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput.class, FSentimentAnalysisSerializers.IFSentimentAnalysisTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput.class, FSentimentAnalysisSerializers.IFSentimentAnalysisAnalyzedStreamOutputSerializer.class);
++        conf.registerSerialization(FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput.class, FCorrelationTwitterSerializers.IFCorrelationTwitterAnalyzedStreamInputSerializer.class);
++        conf.registerSerialization(FCorrelationTwitter.IFCorrelationTwitterSymbolListInput.class, FCorrelationTwitterSerializers.IFCorrelationTwitterSymbolListInputSerializer.class);
++        conf.registerSerialization(FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput.class, FCorrelationTwitterSerializers.IFCorrelationTwitterPairwiseTwitterOutputSerializer.class);
++        conf.registerSerialization(FMismatchedFamily.IFMismatchedFamilyMisStringInput.class, FMismatchedFamilySerializers.IFMismatchedFamilyMisStringInputSerializer.class);
++        conf.registerSerialization(FMismatchedFamily.IFMismatchedFamilyMisStringOutput.class, FMismatchedFamilySerializers.IFMismatchedFamilyMisStringOutputSerializer.class);
++        conf.registerSerialization(RandomFamily.IRandomFamilyRandomDataInput.class, RandomFamilySerializers.IRandomFamilyRandomDataInputSerializer.class);
++        conf.registerSerialization(RandomFamily.IRandomFamilyRandomDataOutput.class, RandomFamilySerializers.IRandomFamilyRandomDataOutputSerializer.class);
++        conf.registerSerialization(SwitchFamily.ISwitchFamilyRandomDataInput.class, SwitchFamilySerializers.ISwitchFamilyRandomDataInputSerializer.class);
++        conf.registerSerialization(SwitchFamily.ISwitchFamilyRandomDataOutput.class, SwitchFamilySerializers.ISwitchFamilyRandomDataOutputSerializer.class);
++        conf.registerSerialization(FExpertSearch.IFExpertSearchAnalysisInput.class, FExpertSearchSerializers.IFExpertSearchAnalysisInputSerializer.class);
++        conf.registerSerialization(FExpertSearch.IFExpertSearchAnalysisOutput.class, FExpertSearchSerializers.IFExpertSearchAnalysisOutputSerializer.class);
++        conf.registerSerialization(FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput.class, FFinancialNetworkExtractionSerializers.IFFinancialNetworkExtractionAnalysisInputSerializer.class);
++        conf.registerSerialization(FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput.class, FFinancialNetworkExtractionSerializers.IFFinancialNetworkExtractionAnalysisOutputSerializer.class);
++        conf.registerSerialization(FTwitterCrawling.IFTwitterCrawlingAnalysisInput.class, FTwitterCrawlingSerializers.IFTwitterCrawlingAnalysisInputSerializer.class);
++        conf.registerSerialization(FTwitterCrawling.IFTwitterCrawlingAnalysisOutput.class, FTwitterCrawlingSerializers.IFTwitterCrawlingAnalysisOutputSerializer.class);
++        conf.registerSerialization(FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput.class, FTwitterEventDetectionSerializers.IFTwitterEventDetectionTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput.class, FTwitterEventDetectionSerializers.IFTwitterEventDetectionTwitterStreamOutputSerializer.class);
++        conf.registerSerialization(FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput.class, FTwitterEventPredictionSerializers.IFTwitterEventPredictionAnalysisInputSerializer.class);
++        conf.registerSerialization(FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput.class, FTwitterEventPredictionSerializers.IFTwitterEventPredictionAnalysisOutputSerializer.class);
++        conf.registerSerialization(FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput.class, FTwitterStreamFilteringSerializers.IFTwitterStreamFilteringAnalysisInputSerializer.class);
++        conf.registerSerialization(FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput.class, FTwitterStreamFilteringSerializers.IFTwitterStreamFilteringAnalysisOutputSerializer.class);
++        conf.registerSerialization(FSpamDetection.IFSpamDetectionTwitterStreamInput.class, FSpamDetectionSerializers.IFSpamDetectionTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FSpamDetection.IFSpamDetectionTwitterStreamOutput.class, FSpamDetectionSerializers.IFSpamDetectionTwitterStreamOutputSerializer.class);
++        conf.registerSerialization(FSpamRemoval.IFSpamRemovalTwitterStreamInput.class, FSpamRemovalSerializers.IFSpamRemovalTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FSpamRemoval.IFSpamRemovalTwitterStreamOutput.class, FSpamRemovalSerializers.IFSpamRemovalTwitterStreamOutputSerializer.class);
++        conf.registerSerialization(FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput.class, FTweetClassifierSerializers.IFTweetClassifierModifiedTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FTweetClassifier.IFTweetClassifierKeywordStreamInput.class, FTweetClassifierSerializers.IFTweetClassifierKeywordStreamInputSerializer.class);
++        conf.registerSerialization(FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput.class, FTweetClassifierSerializers.IFTweetClassifierModifiedTwitterStreamOutputSerializer.class);
++        conf.registerSerialization(FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput.class, FKeywordAnalyzerSerializers.IFKeywordAnalyzerTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput.class, FKeywordAnalyzerSerializers.IFKeywordAnalyzerTwitterStreamOutputSerializer.class);
++        conf.registerSerialization(FEventEnrichment.IFEventEnrichmentEventStreamInput.class, FEventEnrichmentSerializers.IFEventEnrichmentEventStreamInputSerializer.class);
++        conf.registerSerialization(FEventEnrichment.IFEventEnrichmentKeywordStreamInput.class, FEventEnrichmentSerializers.IFEventEnrichmentKeywordStreamInputSerializer.class);
++        conf.registerSerialization(FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput.class, FEventEnrichmentSerializers.IFEventEnrichmentEnrichedEventsStreamOutputSerializer.class);
++        conf.registerSerialization(FRecommendations.IFRecommendationsTwitterStreamInput.class, FRecommendationsSerializers.IFRecommendationsTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FRecommendations.IFRecommendationsRecommendationStreamOutput.class, FRecommendationsSerializers.IFRecommendationsRecommendationStreamOutputSerializer.class);
++        conf.registerSerialization(FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput.class, FSimpleRecommendationsSerializers.IFSimpleRecommendationsTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput.class, FSimpleRecommendationsSerializers.IFSimpleRecommendationsTwitterStreamOutputSerializer.class);
++        conf.registerSerialization(FStockParser.IFStockParserTwitterStreamInput.class, FStockParserSerializers.IFStockParserTwitterStreamInputSerializer.class);
++        conf.registerSerialization(FStockParser.IFStockParserTwitterStreamOutput.class, FStockParserSerializers.IFStockParserTwitterStreamOutputSerializer.class);
++        conf.registerSerialization(FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput.class, FDynamicGraphCompilationSerializers.IFDynamicGraphCompilationPairwiseFinancialInputSerializer.class);
++        conf.registerSerialization(FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput.class, FDynamicGraphCompilationSerializers.IFDynamicGraphCompilationEdgeStreamOutputSerializer.class);
++        conf.registerSerialization(FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput.class, FDynamicHubComputationSerializers.IFDynamicHubComputationEdgeStreamInputSerializer.class);
++        conf.registerSerialization(FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput.class, FDynamicHubComputationSerializers.IFDynamicHubComputationHubStreamOutputSerializer.class);
++        conf.registerSerialization(FTransferEntropy.IFTransferEntropyPreprocessedStreamInput.class, FTransferEntropySerializers.IFTransferEntropyPreprocessedStreamInputSerializer.class);
++        conf.registerSerialization(FTransferEntropy.IFTransferEntropySymbolListInput.class, FTransferEntropySerializers.IFTransferEntropySymbolListInputSerializer.class);
++        conf.registerSerialization(FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput.class, FTransferEntropySerializers.IFTransferEntropyPairwiseFinancialOutputSerializer.class);
++        conf.registerSerialization(FMapper.IFMapperPreprocessedStreamInput.class, FMapperSerializers.IFMapperPreprocessedStreamInputSerializer.class);
++        conf.registerSerialization(FMapper.IFMapperSymbolListInput.class, FMapperSerializers.IFMapperSymbolListInputSerializer.class);
++        conf.registerSerialization(FMapper.IFMapperSymbolsStreamOutput.class, FMapperSerializers.IFMapperSymbolsStreamOutputSerializer.class);
++        conf.registerSerialization(FMapper.IFMapperConfigurationStreamOutput.class, FMapperSerializers.IFMapperConfigurationStreamOutputSerializer.class);
++        conf.registerSerialization(FMapper.IFMapperResetWindowStreamOutput.class, FMapperSerializers.IFMapperResetWindowStreamOutputSerializer.class);
++        conf.registerSerialization(FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput.class, FHayashiYoshidaSerializers.IFHayashiYoshidaSymbolsStreamInputSerializer.class);
++        conf.registerSerialization(FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput.class, FHayashiYoshidaSerializers.IFHayashiYoshidaConfigurationStreamInputSerializer.class);
++        conf.registerSerialization(FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput.class, FHayashiYoshidaSerializers.IFHayashiYoshidaResetWindowStreamInputSerializer.class);
++        conf.registerSerialization(FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput.class, FHayashiYoshidaSerializers.IFHayashiYoshidaPairwiseFinancialOutputSerializer.class);
++        conf.registerSerialization(FTimeGraph.IFTimeGraphDataStreamInput.class, FTimeGraphSerializers.IFTimeGraphDataStreamInputSerializer.class);
++        conf.registerSerialization(FTimeGraph.IFTimeGraphSnapshotQueryStreamInput.class, FTimeGraphSerializers.IFTimeGraphSnapshotQueryStreamInputSerializer.class);
++        conf.registerSerialization(FTimeGraph.IFTimeGraphPathQueryStreamInput.class, FTimeGraphSerializers.IFTimeGraphPathQueryStreamInputSerializer.class);
++        conf.registerSerialization(FTimeGraph.IFTimeGraphSnapshotStreamOutput.class, FTimeGraphSerializers.IFTimeGraphSnapshotStreamOutputSerializer.class);
++        conf.registerSerialization(FTimeGraph.IFTimeGraphPathStreamOutput.class, FTimeGraphSerializers.IFTimeGraphPathStreamOutputSerializer.class);
++        conf.registerSerialization(FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput.class, FTimeGraphMapperSerializers.IFTimeGraphMapperEdgeStreamInputSerializer.class);
++        conf.registerSerialization(FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput.class, FTimeGraphMapperSerializers.IFTimeGraphMapperDataStreamOutputSerializer.class);
++        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerDataStreamInputSerializer.class);
++        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerInternalRequestsInputSerializer.class);
++        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerUnicastRequestsInputSerializer.class);
++        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerBroadcastRequestsInputSerializer.class);
++        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerExternalResponsesOutputSerializer.class);
++        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerInternalRequestsOutputSerializer.class);
++        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorSnapshotQueryStreamInputSerializer.class);
++        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorPathQueryStreamInputSerializer.class);
++        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorExternalResponsesInputSerializer.class);
++        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorSnapshotStreamOutputSerializer.class);
++        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorPathStreamOutputSerializer.class);
++        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorUnicastRequestsOutputSerializer.class);
++        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorBroadcastRequestsOutputSerializer.class);
++    }
++
++/**
++ * Registers all generated hardware serializers. To be called from a topology.
++ */
++    public static final void registerHardwareSerializers() {
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamily.java
+new file mode 100644
+index 0000000..f2a0f91
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamily.java
+@@ -0,0 +1,155 @@
++package eu.qualimaster.families.imp;
++
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++
++/**
++ * The implementation for the algorithm family "ISwitchFamily" (GEN).
++ */
++public class SwitchFamily implements ISwitchFamily {
++
++    /**
++     * Provides a default implementation of the data input for the {@link ISwitchFamilyRandomDataInput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class ISwitchFamilyRandomDataInput implements IISwitchFamilyRandomDataInput {
++
++        private int randomInteger;
++        private long timestamp;
++
++        @Override
++        public int getRandomInteger(){
++            return randomInteger;
++        }
++
++        @Override
++        public void setRandomInteger(int randomInteger){
++            this.randomInteger = randomInteger;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        static {
++            SerializerRegistry.register("ISwitchFamilyRandomDataInput", SwitchFamilySerializers.ISwitchFamilyRandomDataInputSerializer.class);
++        }
++    }
++
++    /**
++     * Provides a default implementation of the data output for the {@link ISwitchFamilyRandomDataOutput} algorithm.
++     * Actual execution system code may also directly wrap the respective tuple concept.
++     */
++    public static class ISwitchFamilyRandomDataOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IISwitchFamilyRandomDataOutput> implements IISwitchFamilyRandomDataOutput {
++
++        /**
++         * Creates the item.
++         */
++        public ISwitchFamilyRandomDataOutput() {
++            this(true);
++        }
++
++        /**
++         * Creates a sub-item.
++         *
++         * @param topLevel whether it is a top-level item
++         */
++        private ISwitchFamilyRandomDataOutput(boolean topLevel) {
++            super(topLevel);
++            setParent(this);
++        }
++
++        @Override
++        public ISwitchFamilyRandomDataOutput createItem() {
++            return new ISwitchFamilyRandomDataOutput(false);
++        }
++        @Override
++        public void setTaskId(int taskId) {
++            this.taskId = taskId;
++        }
++        @Override
++        public int getTaskId() {
++            return taskId;
++        }
++        private transient int taskId;
++        private int randomInteger;
++        private long timestamp;
++
++        @Override
++        public int getRandomInteger(){
++            return randomInteger;
++        }
++
++        @Override
++        public void setRandomInteger(int randomInteger){
++            this.randomInteger = randomInteger;
++        }
++        @Override
++        public long getTimestamp(){
++            return timestamp;
++        }
++
++        @Override
++        public void setTimestamp(long timestamp){
++            this.timestamp = timestamp;
++        }
++        static {
++            SerializerRegistry.register("ISwitchFamilyRandomDataOutput", SwitchFamilySerializers.ISwitchFamilyRandomDataOutputSerializer.class);
++        }
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IISwitchFamilyRandomDataInput input, IISwitchFamilyRandomDataOutput randomDataResult) {
++    }
++
++    /**
++     * Sets the algorithm parameter "aggregationFactor".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterAggregationFactor(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "delay".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDelay(int value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "flag".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterFlag(boolean value) {
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++    }
++
++    @Override
++    public void switchState(State arg0) {
++    }
++
++    @Override
++    public Double getMeasurement(IObservable arg0) {
++	    return null;
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamilySerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamilySerializers.java
+new file mode 100644
+index 0000000..d87b517
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamilySerializers.java
+@@ -0,0 +1,129 @@
++package eu.qualimaster.families.imp;
++
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.OutputStream;
++import javax.annotation.Generated;
++import com.esotericsoftware.kryo.io.Output;
++import com.esotericsoftware.kryo.io.Input;
++import com.esotericsoftware.kryo.Serializer;
++import com.esotericsoftware.kryo.Kryo;
++import eu.qualimaster.dataManagement.serialization.ISerializer;
++import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
++import eu.qualimaster.dataManagement.serialization.IDataInput;
++import eu.qualimaster.dataManagement.serialization.IDataOutput;
++import eu.qualimaster.families.imp.SwitchFamily;
++import eu.qualimaster.families.inf.*;
++
++import eu.qualimaster.protos.SwitchFamilyProtos.*;
++/**
++ * The implementation of the serializers for the algorithm family "ISwitchFamily" (GEN).
++ */
++@Generated(value="EASy-Producer")
++public class SwitchFamilySerializers {
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link ISwitchFamily.IISwitchFamilyRandomDataInput} algorithm.
++ */
++public static class ISwitchFamilyRandomDataInputSerializer extends Serializer<SwitchFamily.ISwitchFamilyRandomDataInput> implements ISerializer<ISwitchFamily.IISwitchFamilyRandomDataInput> {
++
++    @Override
++    public void serializeTo(ISwitchFamily.IISwitchFamilyRandomDataInput object, OutputStream out) throws IOException {
++        SISwitchFamilyRandomDataInput tmp = SISwitchFamilyRandomDataInput.newBuilder()
++            .setRandomInteger(object.getRandomInteger())
++            .setTimestamp(object.getTimestamp())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(ISwitchFamily.IISwitchFamilyRandomDataInput object, IDataOutput out) throws IOException {
++            out.writeInt(object.getRandomInteger());
++            out.writeLong(object.getTimestamp());
++        }
++
++    @Override
++    public ISwitchFamily.IISwitchFamilyRandomDataInput deserializeFrom(InputStream in) throws IOException {
++        SwitchFamily.ISwitchFamilyRandomDataInput result = new SwitchFamily.ISwitchFamilyRandomDataInput();
++        SISwitchFamilyRandomDataInput tmp = SISwitchFamilyRandomDataInput.parseDelimitedFrom(in);
++        result.setRandomInteger(tmp.getRandomInteger());
++        result.setTimestamp(tmp.getTimestamp());
++        return result;
++    }
++
++        @Override
++        public ISwitchFamily.IISwitchFamilyRandomDataInput deserializeFrom(IDataInput in) throws IOException {
++            SwitchFamily.ISwitchFamilyRandomDataInput result = new SwitchFamily.ISwitchFamilyRandomDataInput();
++            result.setRandomInteger(in.nextInt());
++            result.setTimestamp(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SwitchFamily.ISwitchFamilyRandomDataInput object) {
++        output.writeInt(object.getRandomInteger());
++        output.writeLong(object.getTimestamp());
++    }
++
++    @Override
++    public SwitchFamily.ISwitchFamilyRandomDataInput read(Kryo kryo, Input input, Class<SwitchFamily.ISwitchFamilyRandomDataInput> type) {
++        SwitchFamily.ISwitchFamilyRandomDataInput result = new SwitchFamily.ISwitchFamilyRandomDataInput();
++        result.setRandomInteger(input.readInt());
++        result.setTimestamp(input.readLong());
++        return result;
++    }
++}
++
++/**
++ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link ISwitchFamily.IISwitchFamilyRandomDataOutput} algorithm.
++ */
++public static class ISwitchFamilyRandomDataOutputSerializer extends Serializer<SwitchFamily.ISwitchFamilyRandomDataOutput> implements ISerializer<ISwitchFamily.IISwitchFamilyRandomDataOutput> {
++
++    @Override
++    public void serializeTo(ISwitchFamily.IISwitchFamilyRandomDataOutput object, OutputStream out) throws IOException {
++        SISwitchFamilyRandomDataOutput tmp = SISwitchFamilyRandomDataOutput.newBuilder()
++            .setRandomInteger(object.getRandomInteger())
++            .setTimestamp(object.getTimestamp())
++            .build();
++        tmp.writeDelimitedTo(out);
++    }
++
++        @Override
++        public void serializeTo(ISwitchFamily.IISwitchFamilyRandomDataOutput object, IDataOutput out) throws IOException {
++            out.writeInt(object.getRandomInteger());
++            out.writeLong(object.getTimestamp());
++        }
++
++    @Override
++    public ISwitchFamily.IISwitchFamilyRandomDataOutput deserializeFrom(InputStream in) throws IOException {
++        SwitchFamily.ISwitchFamilyRandomDataOutput result = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++        SISwitchFamilyRandomDataOutput tmp = SISwitchFamilyRandomDataOutput.parseDelimitedFrom(in);
++        result.setRandomInteger(tmp.getRandomInteger());
++        result.setTimestamp(tmp.getTimestamp());
++        return result;
++    }
++
++        @Override
++        public ISwitchFamily.IISwitchFamilyRandomDataOutput deserializeFrom(IDataInput in) throws IOException {
++            SwitchFamily.ISwitchFamilyRandomDataOutput result = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++            result.setRandomInteger(in.nextInt());
++            result.setTimestamp(in.nextLong());
++            return result;
++        }
++
++    @Override
++    public void write(Kryo kryo, Output output, SwitchFamily.ISwitchFamilyRandomDataOutput object) {
++        output.writeInt(object.getRandomInteger());
++        output.writeLong(object.getTimestamp());
++    }
++
++    @Override
++    public SwitchFamily.ISwitchFamilyRandomDataOutput read(Kryo kryo, Input input, Class<SwitchFamily.ISwitchFamilyRandomDataOutput> type) {
++        SwitchFamily.ISwitchFamilyRandomDataOutput result = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++        result.setRandomInteger(input.readInt());
++        result.setTimestamp(input.readLong());
++        return result;
++    }
++}
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationFinancial.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationFinancial.java
+new file mode 100644
+index 0000000..8cb13b7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationFinancial.java
+@@ -0,0 +1,154 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFCorrelationFinancial" (GEN).
++ */
++public interface IFCorrelationFinancial extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFCorrelationFinancialPreprocessedStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFCorrelationFinancialPreprocessedStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Changes the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++        /**
++         * Returns the input value for tuple field "volume".
++         * @return the tuple value
++         */
++        public int getVolume();
++
++        /**
++         * Changes the output value for tuple field "volume".
++         * @param volume the field value
++         */
++        public void setVolume(int volume);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFCorrelationFinancialSymbolListInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFCorrelationFinancialSymbolListInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Changes the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFCorrelationFinancialPairwiseFinancialOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFCorrelationFinancialPairwiseFinancialOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFCorrelationFinancialPairwiseFinancialOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "id0".
++         * @return the tuple value
++         */
++        public String getId0();
++
++        /**
++         * Changes the output value for tuple field "id0".
++         * @param id0 the field value
++         */
++        public void setId0(String id0);
++        /**
++         * Returns the input value for tuple field "id1".
++         * @return the tuple value
++         */
++        public String getId1();
++
++        /**
++         * Changes the output value for tuple field "id1".
++         * @param id1 the field value
++         */
++        public void setId1(String id1);
++        /**
++         * Returns the input value for tuple field "date".
++         * @return the tuple value
++         */
++        public String getDate();
++
++        /**
++         * Changes the output value for tuple field "date".
++         * @param date the field value
++         */
++        public void setDate(String date);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult);
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationTwitter.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationTwitter.java
+new file mode 100644
+index 0000000..4bf86b8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationTwitter.java
+@@ -0,0 +1,121 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFCorrelationTwitter" (GEN).
++ */
++public interface IFCorrelationTwitter extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFCorrelationTwitterAnalyzedStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFCorrelationTwitterAnalyzedStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Changes the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++        /**
++         * Returns the input value for tuple field "volume".
++         * @return the tuple value
++         */
++        public int getVolume();
++
++        /**
++         * Changes the output value for tuple field "volume".
++         * @param volume the field value
++         */
++        public void setVolume(int volume);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFCorrelationTwitterSymbolListInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFCorrelationTwitterSymbolListInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Changes the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFCorrelationTwitterPairwiseTwitterOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFCorrelationTwitterPairwiseTwitterOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFCorrelationTwitterPairwiseTwitterOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "pairwiseCorrelationTwitter".
++         * @return the tuple value
++         */
++        public String getPairwiseCorrelationTwitter();
++
++        /**
++         * Changes the output value for tuple field "pairwiseCorrelationTwitter".
++         * @param pairwiseCorrelationTwitter the field value
++         */
++        public void setPairwiseCorrelationTwitter(String pairwiseCorrelationTwitter);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationTwitterAnalyzedStreamInput input, IIFCorrelationTwitterPairwiseTwitterOutput pairwiseTwitterResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationTwitterSymbolListInput input, IIFCorrelationTwitterPairwiseTwitterOutput pairwiseTwitterResult);
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicGraphCompilation.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicGraphCompilation.java
+new file mode 100644
+index 0000000..77d407f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicGraphCompilation.java
+@@ -0,0 +1,96 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFDynamicGraphCompilation" (GEN).
++ */
++public interface IFDynamicGraphCompilation extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFDynamicGraphCompilationPairwiseFinancialInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFDynamicGraphCompilationPairwiseFinancialInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "id0".
++         * @return the tuple value
++         */
++        public String getId0();
++
++        /**
++         * Changes the output value for tuple field "id0".
++         * @param id0 the field value
++         */
++        public void setId0(String id0);
++        /**
++         * Returns the input value for tuple field "id1".
++         * @return the tuple value
++         */
++        public String getId1();
++
++        /**
++         * Changes the output value for tuple field "id1".
++         * @param id1 the field value
++         */
++        public void setId1(String id1);
++        /**
++         * Returns the input value for tuple field "date".
++         * @return the tuple value
++         */
++        public String getDate();
++
++        /**
++         * Changes the output value for tuple field "date".
++         * @param date the field value
++         */
++        public void setDate(String date);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFDynamicGraphCompilationEdgeStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFDynamicGraphCompilationEdgeStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFDynamicGraphCompilationEdgeStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "edge".
++         * @return the tuple value
++         */
++        public String getEdge();
++
++        /**
++         * Changes the output value for tuple field "edge".
++         * @param edge the field value
++         */
++        public void setEdge(String edge);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFDynamicGraphCompilationPairwiseFinancialInput input, IIFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult);
++
++    /**
++     * Sets the algorithm parameter "correlationThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterCorrelationThreshold(double value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicHubComputation.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicHubComputation.java
+new file mode 100644
+index 0000000..47e7537
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicHubComputation.java
+@@ -0,0 +1,70 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFDynamicHubComputation" (GEN).
++ */
++public interface IFDynamicHubComputation extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFDynamicHubComputationEdgeStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFDynamicHubComputationEdgeStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "edge".
++         * @return the tuple value
++         */
++        public String getEdge();
++
++        /**
++         * Changes the output value for tuple field "edge".
++         * @param edge the field value
++         */
++        public void setEdge(String edge);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFDynamicHubComputationHubStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFDynamicHubComputationHubStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFDynamicHubComputationHubStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "hubList".
++         * @return the tuple value
++         */
++        public String getHubList();
++
++        /**
++         * Changes the output value for tuple field "hubList".
++         * @param hubList the field value
++         */
++        public void setHubList(String hubList);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFDynamicHubComputationEdgeStreamInput input, IIFDynamicHubComputationHubStreamOutput hubStreamResult);
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value);
++
++    /**
++     * Sets the algorithm parameter "hubListSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterHubListSize(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFEventEnrichment.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFEventEnrichment.java
+new file mode 100644
+index 0000000..4cc1fd2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFEventEnrichment.java
+@@ -0,0 +1,91 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFEventEnrichment" (GEN).
++ */
++public interface IFEventEnrichment extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFEventEnrichmentEventStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFEventEnrichmentEventStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "tweet".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getTweet();
++
++        /**
++         * Changes the output value for tuple field "tweet".
++         * @param tweet the field value
++         */
++        public void setTweet(eu.qualimaster.data.stream.source.LabelledTweet tweet);
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFEventEnrichmentKeywordStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFEventEnrichmentKeywordStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "keywords".
++         * @return the tuple value
++         */
++        public java.util.List<String> getKeywords();
++
++        /**
++         * Changes the output value for tuple field "keywords".
++         * @param keywords the field value
++         */
++        public void setKeywords(java.util.List<String> keywords);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFEventEnrichmentEnrichedEventsStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFEventEnrichmentEnrichedEventsStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFEventEnrichmentEnrichedEventsStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFEventEnrichmentEventStreamInput input, IIFEventEnrichmentEnrichedEventsStreamOutput enrichedEventsStreamResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFEventEnrichmentKeywordStreamInput input, IIFEventEnrichmentEnrichedEventsStreamOutput enrichedEventsStreamResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFExpertSearch.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFExpertSearch.java
+new file mode 100644
+index 0000000..dbb567f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFExpertSearch.java
+@@ -0,0 +1,96 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFExpertSearch" (GEN).
++ */
++public interface IFExpertSearch extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFExpertSearchAnalysisInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFExpertSearchAnalysisInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public twitter4j.Status getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(twitter4j.Status status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFExpertSearchAnalysisOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFExpertSearchAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFExpertSearchAnalysisOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "experts".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> getExperts();
++
++        /**
++         * Changes the output value for tuple field "experts".
++         * @param experts the field value
++         */
++        public void setExperts(java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> experts);
++        /**
++         * Returns the input value for tuple field "timeInterval".
++         * @return the tuple value
++         */
++        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval();
++
++        /**
++         * Changes the output value for tuple field "timeInterval".
++         * @param timeInterval the field value
++         */
++        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval);
++        /**
++         * Returns the input value for tuple field "keywords".
++         * @return the tuple value
++         */
++        public java.util.List<String> getKeywords();
++
++        /**
++         * Changes the output value for tuple field "keywords".
++         * @param keywords the field value
++         */
++        public void setKeywords(java.util.List<String> keywords);
++        /**
++         * Returns the input value for tuple field "symbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getSymbols();
++
++        /**
++         * Changes the output value for tuple field "symbols".
++         * @param symbols the field value
++         */
++        public void setSymbols(java.util.List<String> symbols);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFExpertSearchAnalysisInput input, IIFExpertSearchAnalysisOutput analysisResult);
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFFinancialNetworkExtraction.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFFinancialNetworkExtraction.java
+new file mode 100644
+index 0000000..da9dc45
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFFinancialNetworkExtraction.java
+@@ -0,0 +1,74 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFFinancialNetworkExtraction" (GEN).
++ */
++public interface IFFinancialNetworkExtraction extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFFinancialNetworkExtractionAnalysisInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFFinancialNetworkExtractionAnalysisInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public twitter4j.Status getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(twitter4j.Status status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFFinancialNetworkExtractionAnalysisOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFFinancialNetworkExtractionAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFFinancialNetworkExtractionAnalysisOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "edges".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> getEdges();
++
++        /**
++         * Changes the output value for tuple field "edges".
++         * @param edges the field value
++         */
++        public void setEdges(java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> edges);
++        /**
++         * Returns the input value for tuple field "timeInterval".
++         * @return the tuple value
++         */
++        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval();
++
++        /**
++         * Changes the output value for tuple field "timeInterval".
++         * @param timeInterval the field value
++         */
++        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFFinancialNetworkExtractionAnalysisInput input, IIFFinancialNetworkExtractionAnalysisOutput analysisResult);
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFHayashiYoshida.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFHayashiYoshida.java
+new file mode 100644
+index 0000000..91065aa
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFHayashiYoshida.java
+@@ -0,0 +1,138 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFHayashiYoshida" (GEN).
++ */
++public interface IFHayashiYoshida extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFHayashiYoshidaSymbolsStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFHayashiYoshidaSymbolsStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Changes the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFHayashiYoshidaConfigurationStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFHayashiYoshidaConfigurationStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "pairKey".
++         * @return the tuple value
++         */
++        public String getPairKey();
++
++        /**
++         * Changes the output value for tuple field "pairKey".
++         * @param pairKey the field value
++         */
++        public void setPairKey(String pairKey);
++        /**
++         * Returns the input value for tuple field "pairValue".
++         * @return the tuple value
++         */
++        public String getPairValue();
++
++        /**
++         * Changes the output value for tuple field "pairValue".
++         * @param pairValue the field value
++         */
++        public void setPairValue(String pairValue);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFHayashiYoshidaResetWindowStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFHayashiYoshidaResetWindowStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "windowStart".
++         * @return the tuple value
++         */
++        public long getWindowStart();
++
++        /**
++         * Changes the output value for tuple field "windowStart".
++         * @param windowStart the field value
++         */
++        public void setWindowStart(long windowStart);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFHayashiYoshidaPairwiseFinancialOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFHayashiYoshidaPairwiseFinancialOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFHayashiYoshidaPairwiseFinancialOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "pairwiseCorrelationFinancial".
++         * @return the tuple value
++         */
++        public String getPairwiseCorrelationFinancial();
++
++        /**
++         * Changes the output value for tuple field "pairwiseCorrelationFinancial".
++         * @param pairwiseCorrelationFinancial the field value
++         */
++        public void setPairwiseCorrelationFinancial(String pairwiseCorrelationFinancial);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFHayashiYoshidaSymbolsStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFHayashiYoshidaConfigurationStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFHayashiYoshidaResetWindowStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFKeywordAnalyzer.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFKeywordAnalyzer.java
+new file mode 100644
+index 0000000..6f70158
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFKeywordAnalyzer.java
+@@ -0,0 +1,92 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFKeywordAnalyzer" (GEN).
++ */
++public interface IFKeywordAnalyzer extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFKeywordAnalyzerTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFKeywordAnalyzerTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFKeywordAnalyzerTwitterStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFKeywordAnalyzerTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFKeywordAnalyzerTwitterStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFKeywordAnalyzerTwitterStreamInput input, IIFKeywordAnalyzerTwitterStreamOutput twitterStreamResult);
++
++    /**
++     * Sets the algorithm parameter "threshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterThreshold(double value);
++
++    /**
++     * Sets the algorithm parameter "decay".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDecay(double value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMapper.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMapper.java
+new file mode 100644
+index 0000000..7be5621
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMapper.java
+@@ -0,0 +1,190 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFMapper" (GEN).
++ */
++public interface IFMapper extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFMapperPreprocessedStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFMapperPreprocessedStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Changes the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++        /**
++         * Returns the input value for tuple field "volume".
++         * @return the tuple value
++         */
++        public int getVolume();
++
++        /**
++         * Changes the output value for tuple field "volume".
++         * @param volume the field value
++         */
++        public void setVolume(int volume);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFMapperSymbolListInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFMapperSymbolListInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Changes the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFMapperSymbolsStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFMapperSymbolsStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFMapperSymbolsStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Changes the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFMapperConfigurationStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFMapperConfigurationStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFMapperConfigurationStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "pairKey".
++         * @return the tuple value
++         */
++        public String getPairKey();
++
++        /**
++         * Changes the output value for tuple field "pairKey".
++         * @param pairKey the field value
++         */
++        public void setPairKey(String pairKey);
++        /**
++         * Returns the input value for tuple field "pairValue".
++         * @return the tuple value
++         */
++        public String getPairValue();
++
++        /**
++         * Changes the output value for tuple field "pairValue".
++         * @param pairValue the field value
++         */
++        public void setPairValue(String pairValue);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFMapperResetWindowStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFMapperResetWindowStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFMapperResetWindowStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "windowStart".
++         * @return the tuple value
++         */
++        public long getWindowStart();
++
++        /**
++         * Changes the output value for tuple field "windowStart".
++         * @param windowStart the field value
++         */
++        public void setWindowStart(long windowStart);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFMapperPreprocessedStreamInput input, IIFMapperSymbolsStreamOutput symbolsStreamResult, IIFMapperConfigurationStreamOutput configurationStreamResult, IIFMapperResetWindowStreamOutput resetWindowStreamResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFMapperSymbolListInput input, IIFMapperSymbolsStreamOutput symbolsStreamResult, IIFMapperConfigurationStreamOutput configurationStreamResult, IIFMapperResetWindowStreamOutput resetWindowStreamResult);
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMismatchedFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMismatchedFamily.java
+new file mode 100644
+index 0000000..0c8c513
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMismatchedFamily.java
+@@ -0,0 +1,88 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFMismatchedFamily" (GEN).
++ */
++public interface IFMismatchedFamily extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFMismatchedFamilyMisStringInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFMismatchedFamilyMisStringInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "symbolTuple1".
++         * @return the tuple value
++         */
++        public String getSymbolTuple1();
++
++        /**
++         * Changes the output value for tuple field "symbolTuple1".
++         * @param symbolTuple1 the field value
++         */
++        public void setSymbolTuple1(String symbolTuple1);
++        /**
++         * Returns the input value for tuple field "volume".
++         * @return the tuple value
++         */
++        public int getVolume();
++
++        /**
++         * Changes the output value for tuple field "volume".
++         * @param volume the field value
++         */
++        public void setVolume(int volume);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFMismatchedFamilyMisStringOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFMismatchedFamilyMisStringOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFMismatchedFamilyMisStringOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "streamID1".
++         * @return the tuple value
++         */
++        public String getStreamID1();
++
++        /**
++         * Changes the output value for tuple field "streamID1".
++         * @param streamID1 the field value
++         */
++        public void setStreamID1(String streamID1);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public int getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(int timestamp);
++        /**
++         * Returns the input value for tuple field "quote".
++         * @return the tuple value
++         */
++        public double getQuote();
++
++        /**
++         * Changes the output value for tuple field "quote".
++         * @param quote the field value
++         */
++        public void setQuote(double quote);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFMismatchedFamilyMisStringInput input, IIFMismatchedFamilyMisStringOutput misStringResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFPreprocessor.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFPreprocessor.java
+new file mode 100644
+index 0000000..85dd771
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFPreprocessor.java
+@@ -0,0 +1,88 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFPreprocessor" (GEN).
++ */
++public interface IFPreprocessor extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFPreprocessorSpringStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFPreprocessorSpringStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "symbolTuple".
++         * @return the tuple value
++         */
++        public String getSymbolTuple();
++
++        /**
++         * Changes the output value for tuple field "symbolTuple".
++         * @param symbolTuple the field value
++         */
++        public void setSymbolTuple(String symbolTuple);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFPreprocessorPreprocessedStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFPreprocessorPreprocessedStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFPreprocessorPreprocessedStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Changes the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++        /**
++         * Returns the input value for tuple field "volume".
++         * @return the tuple value
++         */
++        public int getVolume();
++
++        /**
++         * Changes the output value for tuple field "volume".
++         * @param volume the field value
++         */
++        public void setVolume(int volume);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFPreprocessorSpringStreamInput input, IIFPreprocessorPreprocessedStreamOutput preprocessedStreamResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFRecommendations.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFRecommendations.java
+new file mode 100644
+index 0000000..3db1b34
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFRecommendations.java
+@@ -0,0 +1,81 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFRecommendations" (GEN).
++ */
++public interface IFRecommendations extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFRecommendationsTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFRecommendationsTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFRecommendationsRecommendationStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFRecommendationsRecommendationStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFRecommendationsRecommendationStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "recommendations".
++         * @return the tuple value
++         */
++        public String getRecommendations();
++
++        /**
++         * Changes the output value for tuple field "recommendations".
++         * @param recommendations the field value
++         */
++        public void setRecommendations(String recommendations);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFRecommendationsTwitterStreamInput input, IIFRecommendationsRecommendationStreamOutput recommendationStreamResult);
++
++    /**
++     * Sets the algorithm parameter "impactThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterImpactThreshold(double value);
++
++    /**
++     * Sets the algorithm parameter "stockCooccurrenceThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterStockCooccurrenceThreshold(double value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSentimentAnalysis.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSentimentAnalysis.java
+new file mode 100644
+index 0000000..c0d20b8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSentimentAnalysis.java
+@@ -0,0 +1,110 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFSentimentAnalysis" (GEN).
++ */
++public interface IFSentimentAnalysis extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFSentimentAnalysisTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFSentimentAnalysisTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFSentimentAnalysisAnalyzedStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFSentimentAnalysisAnalyzedStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFSentimentAnalysisAnalyzedStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Changes the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++        /**
++         * Returns the input value for tuple field "volume".
++         * @return the tuple value
++         */
++        public int getVolume();
++
++        /**
++         * Changes the output value for tuple field "volume".
++         * @param volume the field value
++         */
++        public void setVolume(int volume);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFSentimentAnalysisTwitterStreamInput input, IIFSentimentAnalysisAnalyzedStreamOutput analyzedStreamResult);
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value);
++
++    /**
++     * Sets the algorithm parameter "sentimentClass".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterSentimentClass(int value);
++
++    /**
++     * Sets the algorithm parameter "classificationThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterClassificationThreshold(double value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSimpleRecommendations.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSimpleRecommendations.java
+new file mode 100644
+index 0000000..26cfba6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSimpleRecommendations.java
+@@ -0,0 +1,66 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFSimpleRecommendations" (GEN).
++ */
++public interface IFSimpleRecommendations extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFSimpleRecommendationsTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFSimpleRecommendationsTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFSimpleRecommendationsTwitterStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFSimpleRecommendationsTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFSimpleRecommendationsTwitterStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "recommendations".
++         * @return the tuple value
++         */
++        public String getRecommendations();
++
++        /**
++         * Changes the output value for tuple field "recommendations".
++         * @param recommendations the field value
++         */
++        public void setRecommendations(String recommendations);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFSimpleRecommendationsTwitterStreamInput input, IIFSimpleRecommendationsTwitterStreamOutput twitterStreamResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamDetection.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamDetection.java
+new file mode 100644
+index 0000000..bc48626
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamDetection.java
+@@ -0,0 +1,66 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFSpamDetection" (GEN).
++ */
++public interface IFSpamDetection extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFSpamDetectionTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFSpamDetectionTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFSpamDetectionTwitterStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFSpamDetectionTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFSpamDetectionTwitterStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++        /**
++         * Returns the input value for tuple field "spamPropability".
++         * @return the tuple value
++         */
++        public double getSpamPropability();
++
++        /**
++         * Changes the output value for tuple field "spamPropability".
++         * @param spamPropability the field value
++         */
++        public void setSpamPropability(double spamPropability);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFSpamDetectionTwitterStreamInput input, IIFSpamDetectionTwitterStreamOutput twitterStreamResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamRemoval.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamRemoval.java
+new file mode 100644
+index 0000000..1e2d15d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamRemoval.java
+@@ -0,0 +1,74 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFSpamRemoval" (GEN).
++ */
++public interface IFSpamRemoval extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFSpamRemovalTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFSpamRemovalTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++        /**
++         * Returns the input value for tuple field "spamPropability".
++         * @return the tuple value
++         */
++        public double getSpamPropability();
++
++        /**
++         * Changes the output value for tuple field "spamPropability".
++         * @param spamPropability the field value
++         */
++        public void setSpamPropability(double spamPropability);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFSpamRemovalTwitterStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFSpamRemovalTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFSpamRemovalTwitterStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFSpamRemovalTwitterStreamInput input, IIFSpamRemovalTwitterStreamOutput twitterStreamResult);
++
++    /**
++     * Sets the algorithm parameter "spamThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterSpamThreshold(double value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFStockParser.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFStockParser.java
+new file mode 100644
+index 0000000..688a501
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFStockParser.java
+@@ -0,0 +1,66 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFStockParser" (GEN).
++ */
++public interface IFStockParser extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFStockParserTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFStockParserTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFStockParserTwitterStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFStockParserTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFStockParserTwitterStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++        /**
++         * Returns the input value for tuple field "stocks".
++         * @return the tuple value
++         */
++        public java.util.List<String> getStocks();
++
++        /**
++         * Changes the output value for tuple field "stocks".
++         * @param stocks the field value
++         */
++        public void setStocks(java.util.List<String> stocks);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFStockParserTwitterStreamInput input, IIFStockParserTwitterStreamOutput twitterStreamResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraph.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraph.java
+new file mode 100644
+index 0000000..01281c0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraph.java
+@@ -0,0 +1,189 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTimeGraph" (GEN).
++ */
++public interface IFTimeGraph extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphDataStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphDataStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "update".
++         * @return the tuple value
++         */
++        public Object getUpdate();
++
++        /**
++         * Changes the output value for tuple field "update".
++         * @param update the field value
++         */
++        public void setUpdate(Object update);
++        /**
++         * Returns the input value for tuple field "isAddition".
++         * @return the tuple value
++         */
++        public boolean getIsAddition();
++
++        /**
++         * Changes the output value for tuple field "isAddition".
++         * @param isAddition the field value
++         */
++        public void setIsAddition(boolean isAddition);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphSnapshotQueryStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphSnapshotQueryStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "start".
++         * @return the tuple value
++         */
++        public long getStart();
++
++        /**
++         * Changes the output value for tuple field "start".
++         * @param start the field value
++         */
++        public void setStart(long start);
++        /**
++         * Returns the input value for tuple field "end".
++         * @return the tuple value
++         */
++        public long getEnd();
++
++        /**
++         * Changes the output value for tuple field "end".
++         * @param end the field value
++         */
++        public void setEnd(long end);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphPathQueryStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphPathQueryStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "start".
++         * @return the tuple value
++         */
++        public long getStart();
++
++        /**
++         * Changes the output value for tuple field "start".
++         * @param start the field value
++         */
++        public void setStart(long start);
++        /**
++         * Returns the input value for tuple field "end".
++         * @return the tuple value
++         */
++        public long getEnd();
++
++        /**
++         * Changes the output value for tuple field "end".
++         * @param end the field value
++         */
++        public void setEnd(long end);
++        /**
++         * Returns the input value for tuple field "vertexA".
++         * @return the tuple value
++         */
++        public String getVertexA();
++
++        /**
++         * Changes the output value for tuple field "vertexA".
++         * @param vertexA the field value
++         */
++        public void setVertexA(String vertexA);
++        /**
++         * Returns the input value for tuple field "vertexB".
++         * @return the tuple value
++         */
++        public String getVertexB();
++
++        /**
++         * Changes the output value for tuple field "vertexB".
++         * @param vertexB the field value
++         */
++        public void setVertexB(String vertexB);
++        /**
++         * Returns the input value for tuple field "type".
++         * @return the tuple value
++         */
++        public String getType();
++
++        /**
++         * Changes the output value for tuple field "type".
++         * @param type the field value
++         */
++        public void setType(String type);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphSnapshotStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphSnapshotStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphSnapshotStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "snapshot".
++         * @return the tuple value
++         */
++        public String getSnapshot();
++
++        /**
++         * Changes the output value for tuple field "snapshot".
++         * @param snapshot the field value
++         */
++        public void setSnapshot(String snapshot);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphPathStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphPathStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphPathStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "path".
++         * @return the tuple value
++         */
++        public String getPath();
++
++        /**
++         * Changes the output value for tuple field "path".
++         * @param path the field value
++         */
++        public void setPath(String path);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphDataStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphSnapshotQueryStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphPathQueryStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphIndexer.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphIndexer.java
+new file mode 100644
+index 0000000..b51c8c2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphIndexer.java
+@@ -0,0 +1,159 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTimeGraphIndexer" (GEN).
++ */
++public interface IFTimeGraphIndexer extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphIndexerDataStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphIndexerDataStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "update".
++         * @return the tuple value
++         */
++        public Object getUpdate();
++
++        /**
++         * Changes the output value for tuple field "update".
++         * @param update the field value
++         */
++        public void setUpdate(Object update);
++        /**
++         * Returns the input value for tuple field "isAddition".
++         * @return the tuple value
++         */
++        public boolean getIsAddition();
++
++        /**
++         * Changes the output value for tuple field "isAddition".
++         * @param isAddition the field value
++         */
++        public void setIsAddition(boolean isAddition);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphIndexerInternalRequestsInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphIndexerInternalRequestsInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "internalRequest".
++         * @return the tuple value
++         */
++        public Object getInternalRequest();
++
++        /**
++         * Changes the output value for tuple field "internalRequest".
++         * @param internalRequest the field value
++         */
++        public void setInternalRequest(Object internalRequest);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphIndexerUnicastRequestsInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphIndexerUnicastRequestsInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "unicastExternalRequest".
++         * @return the tuple value
++         */
++        public Object getUnicastExternalRequest();
++
++        /**
++         * Changes the output value for tuple field "unicastExternalRequest".
++         * @param unicastExternalRequest the field value
++         */
++        public void setUnicastExternalRequest(Object unicastExternalRequest);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphIndexerBroadcastRequestsInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphIndexerBroadcastRequestsInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "broadcastExternalRequest".
++         * @return the tuple value
++         */
++        public Object getBroadcastExternalRequest();
++
++        /**
++         * Changes the output value for tuple field "broadcastExternalRequest".
++         * @param broadcastExternalRequest the field value
++         */
++        public void setBroadcastExternalRequest(Object broadcastExternalRequest);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphIndexerExternalResponsesOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphIndexerExternalResponsesOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphIndexerExternalResponsesOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "externalResponse".
++         * @return the tuple value
++         */
++        public Object getExternalResponse();
++
++        /**
++         * Changes the output value for tuple field "externalResponse".
++         * @param externalResponse the field value
++         */
++        public void setExternalResponse(Object externalResponse);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphIndexerInternalRequestsOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphIndexerInternalRequestsOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphIndexerInternalRequestsOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "internalRequest".
++         * @return the tuple value
++         */
++        public Object getInternalRequest();
++
++        /**
++         * Changes the output value for tuple field "internalRequest".
++         * @param internalRequest the field value
++         */
++        public void setInternalRequest(Object internalRequest);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphIndexerDataStreamInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphIndexerInternalRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphIndexerUnicastRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphIndexerBroadcastRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphMapper.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphMapper.java
+new file mode 100644
+index 0000000..6b1affc
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphMapper.java
+@@ -0,0 +1,66 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTimeGraphMapper" (GEN).
++ */
++public interface IFTimeGraphMapper extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphMapperEdgeStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphMapperEdgeStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "edge".
++         * @return the tuple value
++         */
++        public String getEdge();
++
++        /**
++         * Changes the output value for tuple field "edge".
++         * @param edge the field value
++         */
++        public void setEdge(String edge);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphMapperDataStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphMapperDataStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphMapperDataStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "update".
++         * @return the tuple value
++         */
++        public Object getUpdate();
++
++        /**
++         * Changes the output value for tuple field "update".
++         * @param update the field value
++         */
++        public void setUpdate(Object update);
++        /**
++         * Returns the input value for tuple field "isAddition".
++         * @return the tuple value
++         */
++        public boolean getIsAddition();
++
++        /**
++         * Changes the output value for tuple field "isAddition".
++         * @param isAddition the field value
++         */
++        public void setIsAddition(boolean isAddition);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphMapperEdgeStreamInput input, IIFTimeGraphMapperDataStreamOutput dataStreamResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphQueryExecutor.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphQueryExecutor.java
+new file mode 100644
+index 0000000..f568286
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphQueryExecutor.java
+@@ -0,0 +1,214 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTimeGraphQueryExecutor" (GEN).
++ */
++public interface IFTimeGraphQueryExecutor extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphQueryExecutorSnapshotQueryStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphQueryExecutorSnapshotQueryStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "start".
++         * @return the tuple value
++         */
++        public long getStart();
++
++        /**
++         * Changes the output value for tuple field "start".
++         * @param start the field value
++         */
++        public void setStart(long start);
++        /**
++         * Returns the input value for tuple field "end".
++         * @return the tuple value
++         */
++        public long getEnd();
++
++        /**
++         * Changes the output value for tuple field "end".
++         * @param end the field value
++         */
++        public void setEnd(long end);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphQueryExecutorPathQueryStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphQueryExecutorPathQueryStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "start".
++         * @return the tuple value
++         */
++        public long getStart();
++
++        /**
++         * Changes the output value for tuple field "start".
++         * @param start the field value
++         */
++        public void setStart(long start);
++        /**
++         * Returns the input value for tuple field "end".
++         * @return the tuple value
++         */
++        public long getEnd();
++
++        /**
++         * Changes the output value for tuple field "end".
++         * @param end the field value
++         */
++        public void setEnd(long end);
++        /**
++         * Returns the input value for tuple field "vertexA".
++         * @return the tuple value
++         */
++        public String getVertexA();
++
++        /**
++         * Changes the output value for tuple field "vertexA".
++         * @param vertexA the field value
++         */
++        public void setVertexA(String vertexA);
++        /**
++         * Returns the input value for tuple field "vertexB".
++         * @return the tuple value
++         */
++        public String getVertexB();
++
++        /**
++         * Changes the output value for tuple field "vertexB".
++         * @param vertexB the field value
++         */
++        public void setVertexB(String vertexB);
++        /**
++         * Returns the input value for tuple field "type".
++         * @return the tuple value
++         */
++        public String getType();
++
++        /**
++         * Changes the output value for tuple field "type".
++         * @param type the field value
++         */
++        public void setType(String type);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTimeGraphQueryExecutorExternalResponsesInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTimeGraphQueryExecutorExternalResponsesInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "externalResponse".
++         * @return the tuple value
++         */
++        public Object getExternalResponse();
++
++        /**
++         * Changes the output value for tuple field "externalResponse".
++         * @param externalResponse the field value
++         */
++        public void setExternalResponse(Object externalResponse);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphQueryExecutorSnapshotStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphQueryExecutorSnapshotStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphQueryExecutorSnapshotStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "snapshot".
++         * @return the tuple value
++         */
++        public String getSnapshot();
++
++        /**
++         * Changes the output value for tuple field "snapshot".
++         * @param snapshot the field value
++         */
++        public void setSnapshot(String snapshot);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphQueryExecutorPathStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphQueryExecutorPathStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphQueryExecutorPathStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "path".
++         * @return the tuple value
++         */
++        public String getPath();
++
++        /**
++         * Changes the output value for tuple field "path".
++         * @param path the field value
++         */
++        public void setPath(String path);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphQueryExecutorUnicastRequestsOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphQueryExecutorUnicastRequestsOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphQueryExecutorUnicastRequestsOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "unicastExternalRequest".
++         * @return the tuple value
++         */
++        public Object getUnicastExternalRequest();
++
++        /**
++         * Changes the output value for tuple field "unicastExternalRequest".
++         * @param unicastExternalRequest the field value
++         */
++        public void setUnicastExternalRequest(Object unicastExternalRequest);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTimeGraphQueryExecutorBroadcastRequestsOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTimeGraphQueryExecutorBroadcastRequestsOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphQueryExecutorBroadcastRequestsOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "broadcastExternalRequest".
++         * @return the tuple value
++         */
++        public Object getBroadcastExternalRequest();
++
++        /**
++         * Changes the output value for tuple field "broadcastExternalRequest".
++         * @param broadcastExternalRequest the field value
++         */
++        public void setBroadcastExternalRequest(Object broadcastExternalRequest);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphQueryExecutorSnapshotQueryStreamInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphQueryExecutorPathQueryStreamInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTimeGraphQueryExecutorExternalResponsesInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTransferEntropy.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTransferEntropy.java
+new file mode 100644
+index 0000000..fc6352a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTransferEntropy.java
+@@ -0,0 +1,168 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTransferEntropy" (GEN).
++ */
++public interface IFTransferEntropy extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTransferEntropyPreprocessedStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTransferEntropyPreprocessedStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "symbolId".
++         * @return the tuple value
++         */
++        public String getSymbolId();
++
++        /**
++         * Changes the output value for tuple field "symbolId".
++         * @param symbolId the field value
++         */
++        public void setSymbolId(String symbolId);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++        /**
++         * Returns the input value for tuple field "volume".
++         * @return the tuple value
++         */
++        public int getVolume();
++
++        /**
++         * Changes the output value for tuple field "volume".
++         * @param volume the field value
++         */
++        public void setVolume(int volume);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTransferEntropySymbolListInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTransferEntropySymbolListInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "allSymbols".
++         * @return the tuple value
++         */
++        public java.util.List<String> getAllSymbols();
++
++        /**
++         * Changes the output value for tuple field "allSymbols".
++         * @param allSymbols the field value
++         */
++        public void setAllSymbols(java.util.List<String> allSymbols);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTransferEntropyPairwiseFinancialOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTransferEntropyPairwiseFinancialOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTransferEntropyPairwiseFinancialOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "id0".
++         * @return the tuple value
++         */
++        public String getId0();
++
++        /**
++         * Changes the output value for tuple field "id0".
++         * @param id0 the field value
++         */
++        public void setId0(String id0);
++        /**
++         * Returns the input value for tuple field "id1".
++         * @return the tuple value
++         */
++        public String getId1();
++
++        /**
++         * Changes the output value for tuple field "id1".
++         * @param id1 the field value
++         */
++        public void setId1(String id1);
++        /**
++         * Returns the input value for tuple field "date".
++         * @return the tuple value
++         */
++        public String getDate();
++
++        /**
++         * Changes the output value for tuple field "date".
++         * @param date the field value
++         */
++        public void setDate(String date);
++        /**
++         * Returns the input value for tuple field "value".
++         * @return the tuple value
++         */
++        public double getValue();
++
++        /**
++         * Changes the output value for tuple field "value".
++         * @param value the field value
++         */
++        public void setValue(double value);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTransferEntropyPreprocessedStreamInput input, IIFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTransferEntropySymbolListInput input, IIFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult);
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value);
++
++    /**
++     * Sets the algorithm parameter "windowAdvance".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowAdvance(int value);
++
++    /**
++     * Sets the algorithm parameter "densitySize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDensitySize(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTweetClassifier.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTweetClassifier.java
+new file mode 100644
+index 0000000..4563275
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTweetClassifier.java
+@@ -0,0 +1,91 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTweetClassifier" (GEN).
++ */
++public interface IFTweetClassifier extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTweetClassifierModifiedTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTweetClassifierModifiedTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public twitter4j.Status getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(twitter4j.Status status);
++    }
++
++    /**
++     * Defines the data input interface for the {@link IIFTweetClassifierKeywordStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTweetClassifierKeywordStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "keywords".
++         * @return the tuple value
++         */
++        public java.util.List<String> getKeywords();
++
++        /**
++         * Changes the output value for tuple field "keywords".
++         * @param keywords the field value
++         */
++        public void setKeywords(java.util.List<String> keywords);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTweetClassifierModifiedTwitterStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTweetClassifierModifiedTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTweetClassifierModifiedTwitterStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "tweet".
++         * @return the tuple value
++         */
++        public twitter4j.Status getTweet();
++
++        /**
++         * Changes the output value for tuple field "tweet".
++         * @param tweet the field value
++         */
++        public void setTweet(twitter4j.Status tweet);
++        /**
++         * Returns the input value for tuple field "stocks".
++         * @return the tuple value
++         */
++        public java.util.List<String> getStocks();
++
++        /**
++         * Changes the output value for tuple field "stocks".
++         * @param stocks the field value
++         */
++        public void setStocks(java.util.List<String> stocks);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTweetClassifierModifiedTwitterStreamInput input, IIFTweetClassifierModifiedTwitterStreamOutput modifiedTwitterStreamResult);
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTweetClassifierKeywordStreamInput input, IIFTweetClassifierModifiedTwitterStreamOutput modifiedTwitterStreamResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterCrawling.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterCrawling.java
+new file mode 100644
+index 0000000..13abd3a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterCrawling.java
+@@ -0,0 +1,74 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTwitterCrawling" (GEN).
++ */
++public interface IFTwitterCrawling extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTwitterCrawlingAnalysisInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTwitterCrawlingAnalysisInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTwitterCrawlingAnalysisOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTwitterCrawlingAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTwitterCrawlingAnalysisOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++        /**
++         * Returns the input value for tuple field "timeInterval".
++         * @return the tuple value
++         */
++        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval();
++
++        /**
++         * Changes the output value for tuple field "timeInterval".
++         * @param timeInterval the field value
++         */
++        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTwitterCrawlingAnalysisInput input, IIFTwitterCrawlingAnalysisOutput analysisResult);
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventDetection.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventDetection.java
+new file mode 100644
+index 0000000..c5ece83
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventDetection.java
+@@ -0,0 +1,106 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTwitterEventDetection" (GEN).
++ */
++public interface IFTwitterEventDetection extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTwitterEventDetectionTwitterStreamInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTwitterEventDetectionTwitterStreamInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++        /**
++         * Returns the input value for tuple field "stocks".
++         * @return the tuple value
++         */
++        public java.util.List<String> getStocks();
++
++        /**
++         * Changes the output value for tuple field "stocks".
++         * @param stocks the field value
++         */
++        public void setStocks(java.util.List<String> stocks);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTwitterEventDetectionTwitterStreamOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTwitterEventDetectionTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTwitterEventDetectionTwitterStreamOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTwitterEventDetectionTwitterStreamInput input, IIFTwitterEventDetectionTwitterStreamOutput twitterStreamResult);
++
++    /**
++     * Sets the algorithm parameter "hardThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterHardThreshold(int value);
++
++    /**
++     * Sets the algorithm parameter "percentageThreshold".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterPercentageThreshold(double value);
++
++    /**
++     * Sets the algorithm parameter "lengthOfTimeWindow".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterLengthOfTimeWindow(int value);
++
++    /**
++     * Sets the algorithm parameter "frequenceOfCheckForEvent".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterFrequenceOfCheckForEvent(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventPrediction.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventPrediction.java
+new file mode 100644
+index 0000000..9a66c30
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventPrediction.java
+@@ -0,0 +1,85 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTwitterEventPrediction" (GEN).
++ */
++public interface IFTwitterEventPrediction extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTwitterEventPredictionAnalysisInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTwitterEventPredictionAnalysisInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTwitterEventPredictionAnalysisOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTwitterEventPredictionAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTwitterEventPredictionAnalysisOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "events".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
++
++        /**
++         * Changes the output value for tuple field "events".
++         * @param events the field value
++         */
++        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
++        /**
++         * Returns the input value for tuple field "symbols".
++         * @return the tuple value
++         */
++        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getSymbols();
++
++        /**
++         * Changes the output value for tuple field "symbols".
++         * @param symbols the field value
++         */
++        public void setSymbols(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> symbols);
++        /**
++         * Returns the input value for tuple field "timeInterval".
++         * @return the tuple value
++         */
++        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval();
++
++        /**
++         * Changes the output value for tuple field "timeInterval".
++         * @param timeInterval the field value
++         */
++        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTwitterEventPredictionAnalysisInput input, IIFTwitterEventPredictionAnalysisOutput analysisResult);
++
++    /**
++     * Sets the algorithm parameter "timeSeriesGranularity".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterTimeSeriesGranularity(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterStreamFiltering.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterStreamFiltering.java
+new file mode 100644
+index 0000000..11eb6e2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterStreamFiltering.java
+@@ -0,0 +1,55 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IFTwitterStreamFiltering" (GEN).
++ */
++public interface IFTwitterStreamFiltering extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIFTwitterStreamFilteringAnalysisInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIFTwitterStreamFilteringAnalysisInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public Object getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(Object status);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIFTwitterStreamFilteringAnalysisOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIFTwitterStreamFilteringAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTwitterStreamFilteringAnalysisOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "status".
++         * @return the tuple value
++         */
++        public Object getStatus();
++
++        /**
++         * Changes the output value for tuple field "status".
++         * @param status the field value
++         */
++        public void setStatus(Object status);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFTwitterStreamFilteringAnalysisInput input, IIFTwitterStreamFilteringAnalysisOutput analysisResult);
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IRandomFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IRandomFamily.java
+new file mode 100644
+index 0000000..cfd797d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IRandomFamily.java
+@@ -0,0 +1,99 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "IRandomFamily" (GEN).
++ */
++public interface IRandomFamily extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IIRandomFamilyRandomDataInput} algorithm (over all defined input tuples).
++     */
++    public static interface IIRandomFamilyRandomDataInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "randomInteger".
++         * @return the tuple value
++         */
++        public int getRandomInteger();
++
++        /**
++         * Changes the output value for tuple field "randomInteger".
++         * @param randomInteger the field value
++         */
++        public void setRandomInteger(int randomInteger);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IIRandomFamilyRandomDataOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IIRandomFamilyRandomDataOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIRandomFamilyRandomDataOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "randomInteger".
++         * @return the tuple value
++         */
++        public int getRandomInteger();
++
++        /**
++         * Changes the output value for tuple field "randomInteger".
++         * @param randomInteger the field value
++         */
++        public void setRandomInteger(int randomInteger);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIRandomFamilyRandomDataInput input, IIRandomFamilyRandomDataOutput randomDataResult);
++
++    /**
++     * Sets the algorithm parameter "delay".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDelay(int value);
++
++    /**
++     * Sets the algorithm parameter "flag".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterFlag(boolean value);
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/ISwitchFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/ISwitchFamily.java
+new file mode 100644
+index 0000000..b90fd01
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/ISwitchFamily.java
+@@ -0,0 +1,106 @@
++package eu.qualimaster.families.inf;
++
++import java.io.Serializable;
++import eu.qualimaster.base.algorithm.IFamily;
++import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
++
++/**
++ * Defines the interface for the algorithm family "ISwitchFamily" (GEN).
++ */
++public interface ISwitchFamily extends IFamily{
++
++    /**
++     * Defines the data input interface for the {@link IISwitchFamilyRandomDataInput} algorithm (over all defined input tuples).
++     */
++    public static interface IISwitchFamilyRandomDataInput extends Serializable {
++
++        /**
++         * Returns the input value for tuple field "randomInteger".
++         * @return the tuple value
++         */
++        public int getRandomInteger();
++
++        /**
++         * Changes the output value for tuple field "randomInteger".
++         * @param randomInteger the field value
++         */
++        public void setRandomInteger(int randomInteger);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++    }
++
++    /**
++     * Defines the data output interface for the {@link IISwitchFamilyRandomDataOutput} algorithm (over all defined output tuples).
++     */
++    public static interface IISwitchFamilyRandomDataOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IISwitchFamilyRandomDataOutput>, IDirectGroupingInfo {
++
++        /**
++         * Returns the input value for tuple field "randomInteger".
++         * @return the tuple value
++         */
++        public int getRandomInteger();
++
++        /**
++         * Changes the output value for tuple field "randomInteger".
++         * @param randomInteger the field value
++         */
++        public void setRandomInteger(int randomInteger);
++        /**
++         * Returns the input value for tuple field "timestamp".
++         * @return the tuple value
++         */
++        public long getTimestamp();
++
++        /**
++         * Changes the output value for tuple field "timestamp".
++         * @param timestamp the field value
++         */
++        public void setTimestamp(long timestamp);
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IISwitchFamilyRandomDataInput input, IISwitchFamilyRandomDataOutput randomDataResult);
++
++    /**
++     * Sets the algorithm parameter "aggregationFactor".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterAggregationFactor(int value);
++
++    /**
++     * Sets the algorithm parameter "delay".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDelay(int value);
++
++    /**
++     * Sets the algorithm parameter "flag".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterFlag(boolean value);
++
++    /**
++     * Sets the algorithm parameter "windowSize".
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value);
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/pom.xml
+new file mode 100644
+index 0000000..1f4aa69
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/pom.xml
+@@ -0,0 +1,142 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <build>
++    <sourceDirectory>${basedir}/</sourceDirectory>
++    <plugins>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-source-plugin</artifactId>
++				<version>2.2.1</version>
++				<executions>
++					<execution>
++						<id>attach-sources</id>
++						<phase>verify</phase>
++						<goals>
++							<goal>jar</goal>
++						</goals>
++					</execution>
++				</executions>
++			</plugin>
++            <plugin>
++    			<groupId>com.github.os72</groupId>
++    			<artifactId>protoc-jar-maven-plugin</artifactId>
++    			<version>3.0.0-a3</version>
++    			<executions>
++        			<execution>
++            			<phase>generate-sources</phase>
++			            <goals>
++			                <goal>run</goal>
++			            </goals>
++			            <configuration>
++			                <protocVersion>2.6.1</protocVersion> <!-- 2.4.1, 2.5.0, 2.6.1, 3.0.0 -->
++			                <includeDirectories>
++			                    <include>${basedir}/protobuf</include>
++			                </includeDirectories>
++			                <inputDirectories>
++			                    <include>${basedir}/protobuf</include>
++			                </inputDirectories>
++			            </configuration>
++			        </execution>
++			    </executions>
++			</plugin>
++    </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>protobuf/*.proto</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>org.apache.storm</groupId>
++     <artifactId>storm-core</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>com.esotericsoftware.kryo</groupId>
++     <artifactId>kryo</artifactId>
++   </dependency>
++    <dependency>
++    <groupId>com.google.protobuf</groupId>
++    <artifactId>protobuf-java</artifactId>
++    <version>2.6.1</version>
++</dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++    <dependency>
++        <groupId>eu.qualimaster.families</groupId>
++        <artifactId>Datatypes</artifactId>
++        <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++        <groupId>org.twitter4j</groupId>
++        <artifactId>twitter4j-stream</artifactId>
++        <version>4.0.1</version>
++    </dependency>
++    <dependency>
++        <groupId>eu.qualimaster</groupId>
++        <artifactId>TwitterStreamDataSource</artifactId>
++        <version>0.0.5-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/DynamicGraphSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/DynamicGraphSink.proto
+new file mode 100644
+index 0000000..b879feb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/DynamicGraphSink.proto
+@@ -0,0 +1,8 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "DynamicGraphSinkProtos";
++
++message SDynamicGraphSinkHubStreamInput {
++    required string hubList = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationFinancial.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationFinancial.proto
+new file mode 100644
+index 0000000..01ced9b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationFinancial.proto
+@@ -0,0 +1,19 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FCorrelationFinancialProtos";
++
++message SIFCorrelationFinancialPreprocessedStreamInput {
++    required string symbolId = 1;
++    required int64 timestamp = 2;
++    required double value = 3;
++    required int32 volume = 4;
++}
++
++
++message SIFCorrelationFinancialPairwiseFinancialOutput {
++    required string id0 = 1;
++    required string id1 = 2;
++    required string date = 3;
++    required double value = 4;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationTwitter.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationTwitter.proto
+new file mode 100644
+index 0000000..c31bd11
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationTwitter.proto
+@@ -0,0 +1,16 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FCorrelationTwitterProtos";
++
++message SIFCorrelationTwitterAnalyzedStreamInput {
++    required string symbolId = 1;
++    required int64 timestamp = 2;
++    required double value = 3;
++    required int32 volume = 4;
++}
++
++
++message SIFCorrelationTwitterPairwiseTwitterOutput {
++    required string pairwiseCorrelationTwitter = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicGraphCompilation.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicGraphCompilation.proto
+new file mode 100644
+index 0000000..cdf4403
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicGraphCompilation.proto
+@@ -0,0 +1,15 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FDynamicGraphCompilationProtos";
++
++message SIFDynamicGraphCompilationPairwiseFinancialInput {
++    required string id0 = 1;
++    required string id1 = 2;
++    required string date = 3;
++    required double value = 4;
++}
++
++message SIFDynamicGraphCompilationEdgeStreamOutput {
++    required string edge = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicHubComputation.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicHubComputation.proto
+new file mode 100644
+index 0000000..510c6da
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicHubComputation.proto
+@@ -0,0 +1,12 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FDynamicHubComputationProtos";
++
++message SIFDynamicHubComputationEdgeStreamInput {
++    required string edge = 1;
++}
++
++message SIFDynamicHubComputationHubStreamOutput {
++    required string hubList = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FEventEnrichment.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FEventEnrichment.proto
+new file mode 100644
+index 0000000..cfb77fe
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FEventEnrichment.proto
+@@ -0,0 +1,7 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FEventEnrichmentProtos";
++
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FExpertSearch.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FExpertSearch.proto
+new file mode 100644
+index 0000000..123bb35
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FExpertSearch.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FExpertSearchProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FFinancialNetworkExtraction.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FFinancialNetworkExtraction.proto
+new file mode 100644
+index 0000000..6e577ce
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FFinancialNetworkExtraction.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FFinancialNetworkExtractionProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FHayashiYoshida.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FHayashiYoshida.proto
+new file mode 100644
+index 0000000..8a8e053
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FHayashiYoshida.proto
+@@ -0,0 +1,23 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FHayashiYoshidaProtos";
++
++message SIFHayashiYoshidaSymbolsStreamInput {
++    required string symbolId = 1;
++    required int64 timestamp = 2;
++    required double value = 3;
++}
++
++message SIFHayashiYoshidaConfigurationStreamInput {
++    required string pairKey = 4;
++    required string pairValue = 5;
++}
++
++message SIFHayashiYoshidaResetWindowStreamInput {
++    required int64 windowStart = 6;
++}
++
++message SIFHayashiYoshidaPairwiseFinancialOutput {
++    required string pairwiseCorrelationFinancial = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FKeywordAnalyzer.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FKeywordAnalyzer.proto
+new file mode 100644
+index 0000000..f75427c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FKeywordAnalyzer.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FKeywordAnalyzerProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMapper.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMapper.proto
+new file mode 100644
+index 0000000..827f347
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMapper.proto
+@@ -0,0 +1,27 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FMapperProtos";
++
++message SIFMapperPreprocessedStreamInput {
++    required string symbolId = 1;
++    required int64 timestamp = 2;
++    required double value = 3;
++    required int32 volume = 4;
++}
++
++
++message SIFMapperSymbolsStreamOutput {
++    required string symbolId = 1;
++    required int64 timestamp = 2;
++    required double value = 3;
++}
++
++message SIFMapperConfigurationStreamOutput {
++    required string pairKey = 4;
++    required string pairValue = 5;
++}
++
++message SIFMapperResetWindowStreamOutput {
++    required int64 windowStart = 6;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMismatchedFamily.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMismatchedFamily.proto
+new file mode 100644
+index 0000000..2da9659
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMismatchedFamily.proto
+@@ -0,0 +1,15 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FMismatchedFamilyProtos";
++
++message SIFMismatchedFamilyMisStringInput {
++    required string symbolTuple1 = 1;
++    required int32 volume = 2;
++}
++
++message SIFMismatchedFamilyMisStringOutput {
++    required string streamID1 = 1;
++    required int32 timestamp = 2;
++    required double quote = 3;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FPreprocessor.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FPreprocessor.proto
+new file mode 100644
+index 0000000..459e2f6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FPreprocessor.proto
+@@ -0,0 +1,15 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FPreprocessorProtos";
++
++message SIFPreprocessorSpringStreamInput {
++    required string symbolTuple = 1;
++}
++
++message SIFPreprocessorPreprocessedStreamOutput {
++    required string symbolId = 1;
++    required int64 timestamp = 2;
++    required double value = 3;
++    required int32 volume = 4;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FRecommendations.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FRecommendations.proto
+new file mode 100644
+index 0000000..1422058
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FRecommendations.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FRecommendationsProtos";
++
++
++message SIFRecommendationsRecommendationStreamOutput {
++    required string recommendations = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSentimentAnalysis.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSentimentAnalysis.proto
+new file mode 100644
+index 0000000..dcffd03
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSentimentAnalysis.proto
+@@ -0,0 +1,12 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FSentimentAnalysisProtos";
++
++
++message SIFSentimentAnalysisAnalyzedStreamOutput {
++    required string symbolId = 1;
++    required int64 timestamp = 2;
++    required double value = 3;
++    required int32 volume = 4;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSimpleRecommendations.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSimpleRecommendations.proto
+new file mode 100644
+index 0000000..5dba60d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSimpleRecommendations.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FSimpleRecommendationsProtos";
++
++
++message SIFSimpleRecommendationsTwitterStreamOutput {
++    required string recommendations = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamDetection.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamDetection.proto
+new file mode 100644
+index 0000000..1a320bc
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamDetection.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FSpamDetectionProtos";
++
++
++message SIFSpamDetectionTwitterStreamOutput {
++    required double spamPropability = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamRemoval.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamRemoval.proto
+new file mode 100644
+index 0000000..d5ecaa6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamRemoval.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FSpamRemovalProtos";
++
++message SIFSpamRemovalTwitterStreamInput {
++    required double spamPropability = 1;
++}
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FStockParser.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FStockParser.proto
+new file mode 100644
+index 0000000..46da72f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FStockParser.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FStockParserProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraph.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraph.proto
+new file mode 100644
+index 0000000..599fb79
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraph.proto
+@@ -0,0 +1,29 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTimeGraphProtos";
++
++message SIFTimeGraphDataStreamInput {
++    required bool isAddition = 1;
++}
++
++message SIFTimeGraphSnapshotQueryStreamInput {
++    required int64 start = 2;
++    required int64 end = 3;
++}
++
++message SIFTimeGraphPathQueryStreamInput {
++    required int64 start = 4;
++    required int64 end = 5;
++    required string vertexA = 6;
++    required string vertexB = 7;
++    required string type = 8;
++}
++
++message SIFTimeGraphSnapshotStreamOutput {
++    required string snapshot = 1;
++}
++
++message SIFTimeGraphPathStreamOutput {
++    required string path = 2;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphIndexer.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphIndexer.proto
+new file mode 100644
+index 0000000..2f9e047
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphIndexer.proto
+@@ -0,0 +1,13 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTimeGraphIndexerProtos";
++
++message SIFTimeGraphIndexerDataStreamInput {
++    required bool isAddition = 1;
++}
++
++
++
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphMapper.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphMapper.proto
+new file mode 100644
+index 0000000..0f15248
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphMapper.proto
+@@ -0,0 +1,12 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTimeGraphMapperProtos";
++
++message SIFTimeGraphMapperEdgeStreamInput {
++    required string edge = 1;
++}
++
++message SIFTimeGraphMapperDataStreamOutput {
++    required bool isAddition = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphQueryExecutor.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphQueryExecutor.proto
+new file mode 100644
+index 0000000..0187184
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphQueryExecutor.proto
+@@ -0,0 +1,28 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTimeGraphQueryExecutorProtos";
++
++message SIFTimeGraphQueryExecutorSnapshotQueryStreamInput {
++    required int64 start = 1;
++    required int64 end = 2;
++}
++
++message SIFTimeGraphQueryExecutorPathQueryStreamInput {
++    required int64 start = 3;
++    required int64 end = 4;
++    required string vertexA = 5;
++    required string vertexB = 6;
++    required string type = 7;
++}
++
++
++message SIFTimeGraphQueryExecutorSnapshotStreamOutput {
++    required string snapshot = 1;
++}
++
++message SIFTimeGraphQueryExecutorPathStreamOutput {
++    required string path = 2;
++}
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTransferEntropy.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTransferEntropy.proto
+new file mode 100644
+index 0000000..61d08d8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTransferEntropy.proto
+@@ -0,0 +1,19 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTransferEntropyProtos";
++
++message SIFTransferEntropyPreprocessedStreamInput {
++    required string symbolId = 1;
++    required int64 timestamp = 2;
++    required double value = 3;
++    required int32 volume = 4;
++}
++
++
++message SIFTransferEntropyPairwiseFinancialOutput {
++    required string id0 = 1;
++    required string id1 = 2;
++    required string date = 3;
++    required double value = 4;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTweetClassifier.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTweetClassifier.proto
+new file mode 100644
+index 0000000..910b204
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTweetClassifier.proto
+@@ -0,0 +1,7 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTweetClassifierProtos";
++
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterCrawling.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterCrawling.proto
+new file mode 100644
+index 0000000..9692554
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterCrawling.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTwitterCrawlingProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventDetection.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventDetection.proto
+new file mode 100644
+index 0000000..4943f36
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventDetection.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTwitterEventDetectionProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventPrediction.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventPrediction.proto
+new file mode 100644
+index 0000000..a07e2da
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventPrediction.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTwitterEventPredictionProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterStreamFiltering.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterStreamFiltering.proto
+new file mode 100644
+index 0000000..e29c421
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterStreamFiltering.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FTwitterStreamFilteringProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FixedRateSimulatedFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FixedRateSimulatedFinancialData.proto
+new file mode 100644
+index 0000000..df80f84
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FixedRateSimulatedFinancialData.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FixedRateSimulatedFinancialDataProtos";
++
++
++message SFixedRateSimulatedFinancialDataSpringStreamOutput {
++    required string symbolTuple = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusFincancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusFincancialData.proto
+new file mode 100644
+index 0000000..de297a0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusFincancialData.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FocusFincancialDataProtos";
++
++
++message SFocusFincancialDataSpringStreamOutput {
++    required string symbolTuple = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusSink.proto
+new file mode 100644
+index 0000000..aa65f52
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusSink.proto
+@@ -0,0 +1,12 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "FocusSinkProtos";
++
++message SFocusSinkRecommendationStreamInput {
++    required string recommendations = 1;
++}
++
++message SFocusSinkEdgeStreamInput {
++    required string edge = 2;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/MI_data_Sink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/MI_data_Sink.proto
+new file mode 100644
+index 0000000..2527f8a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/MI_data_Sink.proto
+@@ -0,0 +1,11 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "MI_data_SinkProtos";
++
++message SMI_data_SinkPairwiseFinancialInput {
++    required string id0 = 1;
++    required string id1 = 2;
++    required string date = 3;
++    required double value = 4;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/NewTwitterStreamDataSource.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/NewTwitterStreamDataSource.proto
+new file mode 100644
+index 0000000..031de52
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/NewTwitterStreamDataSource.proto
+@@ -0,0 +1,5 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "NewTwitterStreamDataSourceProtos";
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/PriorityDataSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/PriorityDataSink.proto
+new file mode 100644
+index 0000000..7db580f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/PriorityDataSink.proto
+@@ -0,0 +1,18 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "PriorityDataSinkProtos";
++
++message SPriorityDataSinkPairwiseFinancialInput {
++    required string id0 = 1;
++    required string id1 = 2;
++    required string date = 3;
++    required double value = 4;
++}
++
++message SPriorityDataSinkAnalyzedStreamInput {
++    required string symbolId = 5;
++    required int64 timestamp = 6;
++    required double value = 7;
++    required int32 volume = 8;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomFamily.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomFamily.proto
+new file mode 100644
+index 0000000..8d74a1c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomFamily.proto
+@@ -0,0 +1,14 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "RandomFamilyProtos";
++
++message SIRandomFamilyRandomDataInput {
++    required int32 randomInteger = 1;
++    required int64 timestamp = 2;
++}
++
++message SIRandomFamilyRandomDataOutput {
++    required int32 randomInteger = 1;
++    required int64 timestamp = 2;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSink.proto
+new file mode 100644
+index 0000000..0138943
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSink.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "RandomSinkProtos";
++
++message SRandomSinkRandomDataInput {
++    required int32 randomInteger = 1;
++    required int64 timestamp = 2;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSource.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSource.proto
+new file mode 100644
+index 0000000..d18c922
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSource.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "RandomSourceProtos";
++
++message SRandomSourceRandomDataOutput {
++    required int32 randomInteger = 1;
++    required int64 timestamp = 2;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFinancialData.proto
+new file mode 100644
+index 0000000..3064de1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFinancialData.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "SimulatedFinancialDataProtos";
++
++
++message SSimulatedFinancialDataSpringStreamOutput {
++    required string symbolTuple = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFocusFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFocusFinancialData.proto
+new file mode 100644
+index 0000000..6fe312d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFocusFinancialData.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "SimulatedFocusFinancialDataProtos";
++
++
++message SSimulatedFocusFinancialDataSpringStreamOutput {
++    required string symbolTuple = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedGraphData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedGraphData.proto
+new file mode 100644
+index 0000000..dda873f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedGraphData.proto
+@@ -0,0 +1,8 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "SimulatedGraphDataProtos";
++
++message SSimulatedGraphDataEdgeStreamOutput {
++    required string edge = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SpringFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SpringFinancialData.proto
+new file mode 100644
+index 0000000..d2f681e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SpringFinancialData.proto
+@@ -0,0 +1,9 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "SpringFinancialDataProtos";
++
++
++message SSpringFinancialDataSpringStreamOutput {
++    required string symbolTuple = 1;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SwitchFamily.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SwitchFamily.proto
+new file mode 100644
+index 0000000..1765c40
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SwitchFamily.proto
+@@ -0,0 +1,14 @@
++package eu.qualimaster.families.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "SwitchFamilyProtos";
++
++message SISwitchFamilyRandomDataInput {
++    required int32 randomInteger = 1;
++    required int64 timestamp = 2;
++}
++
++message SISwitchFamilyRandomDataOutput {
++    required int32 randomInteger = 1;
++    required int64 timestamp = 2;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeGraphQueriesSource.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeGraphQueriesSource.proto
+new file mode 100644
+index 0000000..2b544cd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeGraphQueriesSource.proto
+@@ -0,0 +1,17 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "TimeGraphQueriesSourceProtos";
++
++message STimeGraphQueriesSourceSnapshotQueryStreamOutput {
++    required int64 start = 1;
++    required int64 end = 2;
++}
++
++message STimeGraphQueriesSourcePathQueryStreamOutput {
++    required int64 start = 3;
++    required int64 end = 4;
++    required string vertexA = 5;
++    required string vertexB = 6;
++    required string type = 7;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeTravelSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeTravelSink.proto
+new file mode 100644
+index 0000000..b9cf624
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeTravelSink.proto
+@@ -0,0 +1,12 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "TimeTravelSinkProtos";
++
++message STimeTravelSinkSnapshotStreamInput {
++    required string snapshot = 1;
++}
++
++message STimeTravelSinkPathStreamInput {
++    required string path = 2;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TransferSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TransferSink.proto
+new file mode 100644
+index 0000000..938c3f0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TransferSink.proto
+@@ -0,0 +1,11 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "TransferSinkProtos";
++
++message STransferSinkPairwiseFinancialInput {
++    required string id0 = 1;
++    required string id1 = 2;
++    required string date = 3;
++    required double value = 4;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TwitterStreamData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TwitterStreamData.proto
+new file mode 100644
+index 0000000..2f8f0d8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TwitterStreamData.proto
+@@ -0,0 +1,6 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "TwitterStreamDataProtos";
++
++
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/WindowedSpringFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/WindowedSpringFinancialData.proto
+new file mode 100644
+index 0000000..f8737a5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/WindowedSpringFinancialData.proto
+@@ -0,0 +1,14 @@
++package eu.qualimaster.data.protobuf;
++option java_package = "eu.qualimaster.protos";
++option java_outer_classname = "WindowedSpringFinancialDataProtos";
++
++
++message SWindowedSpringFinancialDataSpringStreamOutput {
++    required string symbolTuple = 1;
++}
++
++message SWindowedSpringFinancialDataResetWindowOutput {
++    required int64 windowStart = 2;
++    required int64 windowEnd = 3;
++}
++
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines.xml
+new file mode 100644
+index 0000000..ff6002d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines.xml
+@@ -0,0 +1,91 @@
++<project name="pipelines" default="deploy" basedir=".">
++
++    <property file="${user.home}/global-build.properties"/>
++    <property file="${user.home}/qualimaster-build.properties"/>
++    <include file="${user.home}/macros.xml"/>
++
++    <!--
++    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"/>
++
++    <path id="easyTaskDef.lib">
++      <fileset dir="${home.base.dir}/${projects.standalone.dir}/build/generatedLibs.ex/dist">
++        <include name="*.jar"/>
++      </fileset>
++    </path>
++    -->
++    <target name="deploy">
++      <delete file="pipelines/eu/qualimaster/PriorityPip/target/PriorityPip-0.0.2-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/PriorityPip/target/PriorityPip-0.0.2-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/PriorityPip/target/PriorityPip-0.0.2-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/PriorityPip" pomFile="pipelines/eu/qualimaster/PriorityPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/PriorityPip/target" jarFile= "PriorityPip-0.0.2-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/RandomPip/target/RandomPip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/RandomPip/target/RandomPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/RandomPip/target/RandomPip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/RandomPip" pomFile="pipelines/eu/qualimaster/RandomPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/RandomPip/target" jarFile= "RandomPip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/SwitchPip/target/SwitchPip-0.0.2-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/SwitchPip/target/SwitchPip-0.0.2-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/SwitchPip/target/SwitchPip-0.0.2-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/SwitchPip" pomFile="pipelines/eu/qualimaster/SwitchPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/SwitchPip/target" jarFile= "SwitchPip-0.0.2-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/FocusPip/target/FocusPip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/FocusPip/target/FocusPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/FocusPip/target/FocusPip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/FocusPip" pomFile="pipelines/eu/qualimaster/FocusPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/FocusPip/target" jarFile= "FocusPip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/DynamicGraphPip/target/DynamicGraphPip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/DynamicGraphPip/target/DynamicGraphPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/DynamicGraphPip/target/DynamicGraphPip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/DynamicGraphPip" pomFile="pipelines/eu/qualimaster/DynamicGraphPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/DynamicGraphPip/target" jarFile= "DynamicGraphPip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/ReplayPip/target/ReplayPip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/ReplayPip/target/ReplayPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/ReplayPip/target/ReplayPip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/ReplayPip" pomFile="pipelines/eu/qualimaster/ReplayPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/ReplayPip/target" jarFile= "ReplayPip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/TimeTravelPip/target/TimeTravelPip-0.0.2-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/TimeTravelPip/target/TimeTravelPip-0.0.2-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/TimeTravelPip/target/TimeTravelPip-0.0.2-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/TimeTravelPip" pomFile="pipelines/eu/qualimaster/TimeTravelPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/TimeTravelPip/target" jarFile= "TimeTravelPip-0.0.2-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/TransferPip/target/TransferPip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/TransferPip/target/TransferPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/TransferPip/target/TransferPip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/TransferPip" pomFile="pipelines/eu/qualimaster/TransferPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/TransferPip/target" jarFile= "TransferPip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/ReflectiveRandomPip/target/ReflectiveRandomPip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/ReflectiveRandomPip/target/ReflectiveRandomPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/ReflectiveRandomPip/target/ReflectiveRandomPip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/ReflectiveRandomPip" pomFile="pipelines/eu/qualimaster/ReflectiveRandomPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/ReflectiveRandomPip/target" jarFile= "ReflectiveRandomPip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/PriorityFinancialPip/target/PriorityFinancialPip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/PriorityFinancialPip/target/PriorityFinancialPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/PriorityFinancialPip/target/PriorityFinancialPip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/PriorityFinancialPip" pomFile="pipelines/eu/qualimaster/PriorityFinancialPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/PriorityFinancialPip/target" jarFile= "PriorityFinancialPip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/PrioritySimulatePip/target/PrioritySimulatePip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/PrioritySimulatePip/target/PrioritySimulatePip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/PrioritySimulatePip/target/PrioritySimulatePip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/PrioritySimulatePip" pomFile="pipelines/eu/qualimaster/PrioritySimulatePip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/PrioritySimulatePip/target" jarFile= "PrioritySimulatePip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/TimeTravelSimPip/target/TimeTravelSimPip-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/TimeTravelSimPip/target/TimeTravelSimPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/TimeTravelSimPip/target/TimeTravelSimPip-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/TimeTravelSimPip" pomFile="pipelines/eu/qualimaster/TimeTravelSimPip/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/TimeTravelSimPip/target" jarFile= "TimeTravelSimPip-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/CorrelationSW/target/CorrelationSW-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/CorrelationSW/target/CorrelationSW-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/CorrelationSW/target/CorrelationSW-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/CorrelationSW" pomFile="pipelines/eu/qualimaster/CorrelationSW/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/CorrelationSW/target" jarFile= "CorrelationSW-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/RandomSubPipeline1/target/RandomSubPipeline1-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/RandomSubPipeline1/target/RandomSubPipeline1-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/RandomSubPipeline1/target/RandomSubPipeline1-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/RandomSubPipeline1" pomFile="pipelines/eu/qualimaster/RandomSubPipeline1/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/RandomSubPipeline1/target" jarFile= "RandomSubPipeline1-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/RandomSubPipeline2/target/RandomSubPipeline2-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/RandomSubPipeline2/target/RandomSubPipeline2-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/RandomSubPipeline2/target/RandomSubPipeline2-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/RandomSubPipeline2" pomFile="pipelines/eu/qualimaster/RandomSubPipeline2/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/RandomSubPipeline2/target" jarFile= "RandomSubPipeline2-0.0.1-SNAPSHOT.jar"/>
++      <delete file="pipelines/eu/qualimaster/CorrelationSWAlternative/target/CorrelationSWAlternative-0.0.1-SNAPSHOT.jar"/>
++      <rename src="pipelines/eu/qualimaster/CorrelationSWAlternative/target/CorrelationSWAlternative-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/CorrelationSWAlternative/target/CorrelationSWAlternative-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="eu/qualimaster/CorrelationSWAlternative" pomFile="pipelines/eu/qualimaster/CorrelationSWAlternative/pom.xml" 
++        jarFolder="pipelines/eu/qualimaster/CorrelationSWAlternative/target" jarFile= "CorrelationSWAlternative-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="if-gen" pomFile="if-gen/pom.xml" 
++        jarFolder="if-gen/target" jarFile= "PriorityPipelineInterfaces-0.5.0-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial" pomFile="hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/pom.xml" 
++        jarFolder="hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/target" jarFile= "GenTopoHardwareCorrelationFinancial-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware" pomFile="hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/pom.xml" 
++        jarFolder="hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/target" jarFile= "TransferEntropyHardware-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware" pomFile="hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/pom.xml" 
++        jarFolder="hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/target" jarFile= "MutualInformationHardware-0.0.1-SNAPSHOT.jar"/>
++      <mvnDeploy folderName="model-gen" pomFile="model-gen/pom.xml" jarFolder="model-gen/target" jarFile="infrastructureModel-0.5.0-SNAPSHOT.jar" />
++    </target>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/mapping.xml
+new file mode 100644
+index 0000000..95447b7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/mapping.xml
+@@ -0,0 +1,14 @@
++<mapping>
++  <pipeline name="CorrelationSW" class="eu.qualimaster.CorrelationSW.topology.Topology">
++      <node name="Mapper" type="family">
++          <component name="CorrelationSWMapper" container="CorrelationSW" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++      </node>
++      <node name="HayashiYoshida" type="family">
++          <component name="CorrelationSWHayashiYoshida" container="CorrelationSW" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </node>
++      <algorithm name="Mapper" implName="Mapper" class="eu.qualimaster.algorithms.imp.correlation.Mapper"/>
++      <algorithm name="HayashiYoshida" implName="HayashiYoshida" class="eu.qualimaster.algorithms.imp.correlation.HayashiYoshida"/>
++      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/pom.xml
+new file mode 100644
+index 0000000..03077e1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/pom.xml
+@@ -0,0 +1,265 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>CorrelationSW</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-assembly-plugin</artifactId>
++				<version>2.6</version>
++            	<dependencies>
++	                    <dependency>
++	                        <groupId>eu.qualimaster</groupId>
++	                        <artifactId>AlgorithmAssemblies</artifactId>
++	                        <version>0.5.0-SNAPSHOT</version>
++	                    </dependency>
++	                </dependencies>
++					<executions>
++					<execution>
++						<id>make-assembly</id>
++						<phase>package</phase>
++						<goals>
++							<goal>single</goal>
++						</goals>
++					<configuration>
++					<descriptorRefs>
++						<descriptorRef>jar-with-dependencies</descriptorRef>
++					</descriptorRefs>
++					<dependencySets>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>runtime</scope>
++						</dependencySet>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>provided</scope>
++						</dependencySet>
++					</dependencySets>
++					<archive>
++						<manifest>
++						</manifest>
++					</archive>
++				</configuration>
++					</execution>
++				<execution>
++                        <id>make-profilingAssembly</id>
++                        <phase>package</phase>
++                        <goals>
++                            <goal>single</goal>
++                        </goals>
++                        <configuration>
++                            <descriptorRefs>
++                                <descriptorRef>profiling</descriptorRef>
++                            </descriptorRefs>
++                        </configuration>
++                    </execution>
++				</executions>
++						</plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++	<dependency>
++          <groupId>eu.qualimaster</groupId>
++          <artifactId>AlgorithmAssemblies</artifactId>
++          <version>0.5.0-SNAPSHOT</version>
++      </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-mapper</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hayashi-yoshida</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/profiling/profile.ctl
+new file mode 100644
+index 0000000..d5609a9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/profiling/profile.ctl
+@@ -0,0 +1 @@
++import eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/CorrelationSWSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/CorrelationSWSubTopology.java
+new file mode 100644
+index 0000000..23c75e9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/CorrelationSWSubTopology.java
+@@ -0,0 +1,85 @@
++package eu.qualimaster.CorrelationSW.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.Config;
++import backtype.storm.topology.TopologyBuilder;
++import eu.qualimaster.base.algorithm.ITopologyCreate;
++import eu.qualimaster.base.algorithm.SubTopologyOutput;
++import backtype.storm.topology.BoltDeclarer;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.SignalException;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.families.inf.IFCorrelationFinancial;
++
++public class CorrelationSWSubTopology implements IFCorrelationFinancial, ITopologyCreate {
++    final static Logger logger = Logger.getLogger(CorrelationSWSubTopology.class);
++    private int windowSize;
++    private transient State state;
++
++    public void switchState(State arg0) {
++        this.state = arg0;	
++    }
++
++    public Double getMeasurement(IObservable observable) {
++        return null;
++    }
++
++    public SubTopologyOutput createSubTopology(TopologyBuilder builder,
++    			Config config, String prefix, String input, String streamId) {
++        String namespace = "CorrelationSW";
++        if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {
++            namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);
++        }
++        // Declare a Bolt "Mapper"
++
++        BoltDeclarer SubTopology_FamilyElement0 =builder.setBolt(prefix+"Mapper", new SubTopology_FamilyElement0FamilyElement(prefix+"Mapper", namespace), 1);
++        SubTopology_FamilyElement0.shuffleGrouping(input, streamId);
++        // Declare a Bolt "HayashiYoshida"
++
++        BoltDeclarer SubTopology_FamilyElement1 =builder.setBolt(prefix+"HayashiYoshida", new SubTopology_FamilyElement1FamilyElement(prefix+"HayashiYoshida", namespace), 14);
++        //SubTopology_FamilyElement1 subscribing streams:
++        SubTopology_FamilyElement1.directGrouping(prefix+"Mapper", "MapperSymbolsStream");
++        SubTopology_FamilyElement1.directGrouping(prefix+"Mapper", "MapperConfigurationStream");
++        SubTopology_FamilyElement1.allGrouping(prefix+"Mapper", "MapperResetWindowStream");
++        return new SubTopologyOutput(prefix+"HayashiYoshida", "HayashiYoshidaPairwiseFinancial", 4, 14); //TODO: consider PipelineOptions to change the parallelisms
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++
++
++    /**
++     * Sets the algorithm parameter "windowSize". Note that the actual parameter change will be dynamically
++     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
++     * sub-topology.
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++        this.windowSize = windowSize;
++        try {
++            logger.info("sending new WindowSize signal " + value + "!");
++            ParameterChangeSignal signal = new ParameterChangeSignal("CorrelationSW", 
++                    "CorrelationSWMapper", "windowSize", value, null);
++            signal.sendSignal();
++        } catch (Exception e) {
++            logger.error("Signal not sent!");
++            e.printStackTrace();
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..e98b2ad
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement0FamilyElement.java
+@@ -0,0 +1,366 @@
++package eu.qualimaster.CorrelationSW.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFMapper.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Mapper;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class SubTopology_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(SubTopology_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FMapper.IFMapperSymbolsStreamOutput symbolsStreamResult = new FMapper.IFMapperSymbolsStreamOutput();
++    private transient FMapper.IFMapperConfigurationStreamOutput configurationStreamResult = new FMapper.IFMapperConfigurationStreamOutput();
++    private transient FMapper.IFMapperResetWindowStreamOutput resetWindowStreamResult = new FMapper.IFMapperResetWindowStreamOutput();
++    private transient IFMapper alg = null; 
++    private transient List<Integer> taskIdHayashiYoshida;
++    private int SubTopology_FamilyElement0TaskId;
++    transient IIFCorrelationFinancialPreprocessedStreamInput iTuplePreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput iTupleSymbolList = null;
++    transient IIFMapperPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFMapperSymbolListInput inputSymbolList = null;
++
++    public SubTopology_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++        taskIdHayashiYoshida = topologyContext.getComponentTasks("CorrelationSWHayashiYoshida");
++        logger.info("taskIdsHayashiYoshida = " + taskIdHayashiYoshida);
++        SubTopology_FamilyElement0TaskId = topologyContext.getThisTaskId();
++        logger.info("SubTopology_FamilyElement0TaskId = " + SubTopology_FamilyElement0TaskId);
++
++        symbolsStreamResult = new FMapper.IFMapperSymbolsStreamOutput();
++        IItemEmitter<IIFMapperSymbolsStreamOutput> symbolsStreamEmitter = new IItemEmitter<IIFMapperSymbolsStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFMapperSymbolsStreamOutput item) {
++                _collector.emitDirect(item.getTaskId(), "MapperSymbolsStream", new Values(item));
++            }
++        };
++        symbolsStreamResult.setEmitter(symbolsStreamEmitter);
++
++        configurationStreamResult = new FMapper.IFMapperConfigurationStreamOutput();
++        IItemEmitter<IIFMapperConfigurationStreamOutput> configurationStreamEmitter = new IItemEmitter<IIFMapperConfigurationStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFMapperConfigurationStreamOutput item) {
++                _collector.emitDirect(item.getTaskId(), "MapperConfigurationStream", new Values(item));
++            }
++        };
++        configurationStreamResult.setEmitter(configurationStreamEmitter);
++
++        resetWindowStreamResult = new FMapper.IFMapperResetWindowStreamOutput();
++        IItemEmitter<IIFMapperResetWindowStreamOutput> resetWindowStreamEmitter = new IItemEmitter<IIFMapperResetWindowStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFMapperResetWindowStreamOutput item) {
++                _collector.emit("MapperResetWindowStream", new Values(item));
++            }
++        };
++        resetWindowStreamResult.setEmitter(resetWindowStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Mapper");
++                    alg = (IFMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdHayashiYoshida, SubTopology_FamilyElement0TaskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                } catch (NoSuchMethodException e) {
++                    e.printStackTrace();
++                } catch (InvocationTargetException e) {
++                    e.printStackTrace();
++                }
++                if (PipelineOptions.hasExecutorArgument(map, getName(), "windowSize")) {
++                    alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 0));
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Mapper", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fMapper"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
++            iTuplePreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tupleItem;
++            inputPreprocessedStream = new FMapper.IFMapperPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, symbolsStreamResult, configurationStreamResult, resetWindowStreamResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                symbolsStreamResult.setSymbolId("");
++                symbolsStreamResult.setTimestamp(0);
++                symbolsStreamResult.setValue(0.0);
++                configurationStreamResult.setPairKey("");
++                configurationStreamResult.setPairValue("");
++                resetWindowStreamResult.setWindowStart(0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFCorrelationFinancialSymbolListInput) {
++            iTupleSymbolList = (IIFCorrelationFinancialSymbolListInput)tupleItem;
++            inputSymbolList = new FMapper.IFMapperSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, symbolsStreamResult, configurationStreamResult, resetWindowStreamResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                symbolsStreamResult.setSymbolId("");
++                symbolsStreamResult.setTimestamp(0);
++                symbolsStreamResult.setValue(0.0);
++                configurationStreamResult.setPairKey("");
++                configurationStreamResult.setPairValue("");
++                resetWindowStreamResult.setWindowStart(0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperSymbolsStreamOutput> iterSymbolsStream = symbolsStreamResult.iterator();
++            iterSymbolsStream.reset();
++            while (iterSymbolsStream.hasNext()) {
++                IIFMapperSymbolsStreamOutput out = iterSymbolsStream.next();
++                _collector.emitDirect(out.getTaskId(), "MapperSymbolsStream", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperConfigurationStreamOutput> iterConfigurationStream = configurationStreamResult.iterator();
++            iterConfigurationStream.reset();
++            while (iterConfigurationStream.hasNext()) {
++                IIFMapperConfigurationStreamOutput out = iterConfigurationStream.next();
++                _collector.emitDirect(out.getTaskId(), "MapperConfigurationStream", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperResetWindowStreamOutput> iterResetWindowStream = resetWindowStreamResult.iterator();
++            iterResetWindowStream.reset();
++            while (iterResetWindowStream.hasNext()) {
++                IIFMapperResetWindowStreamOutput out = iterResetWindowStream.next();
++                _collector.emit("MapperResetWindowStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Mapper":
++                if (!algChange || !(alg instanceof Mapper)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Mapper");
++                        alg = (IFMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdHayashiYoshida, SubTopology_FamilyElement0TaskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    } catch (NoSuchMethodException e) {
++                        e.printStackTrace();
++                    } catch (InvocationTargetException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterWindowSize(0);
++                    sendAlgorithmChangeEvent("Mapper", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("MapperSymbolsStream", new Fields("MapperSymbolsStreamFields"));
++        declarer.declareStream("MapperConfigurationStream", new Fields("MapperConfigurationStreamFields"));
++        declarer.declareStream("MapperResetWindowStream", new Fields("MapperResetWindowStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..e0f9158
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement1FamilyElement.java
+@@ -0,0 +1,321 @@
++package eu.qualimaster.CorrelationSW.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.HayashiYoshida;
++import eu.qualimaster.families.inf.IFMapper.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class SubTopology_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(SubTopology_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++int counter = 0;
++long recordOutput = 0;
++    private transient FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
++    private transient IFHayashiYoshida alg = null; 
++    transient IIFMapperSymbolsStreamOutput iTupleSymbolsStream = null;
++    transient IIFMapperConfigurationStreamOutput iTupleConfigurationStream = null;
++    transient IIFMapperResetWindowStreamOutput iTupleResetWindowStream = null;
++    transient IIFHayashiYoshidaSymbolsStreamInput inputSymbolsStream = null;
++    transient IIFHayashiYoshidaConfigurationStreamInput inputConfigurationStream = null;
++    transient IIFHayashiYoshidaResetWindowStreamInput inputResetWindowStream = null;
++
++    public SubTopology_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++counter = 0;
++
++        pairwiseFinancialResult = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
++        IItemEmitter<IIFHayashiYoshidaPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFHayashiYoshidaPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFHayashiYoshidaPairwiseFinancialOutput item) {
++                _collector.emit("HayashiYoshidaPairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.HayashiYoshida");
++                    alg = (IFHayashiYoshida) cls.getConstructor(int.class).newInstance(taskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("HayashiYoshida", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fHayashiYoshida"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++recordOutput = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFMapperSymbolsStreamOutput) {
++            iTupleSymbolsStream = (IIFMapperSymbolsStreamOutput)tupleItem;
++            inputSymbolsStream = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
++            inputSymbolsStream.setSymbolId(iTupleSymbolsStream.getSymbolId());
++            inputSymbolsStream.setTimestamp(iTupleSymbolsStream.getTimestamp());
++            inputSymbolsStream.setValue(iTupleSymbolsStream.getValue());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolsStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFMapperConfigurationStreamOutput) {
++            iTupleConfigurationStream = (IIFMapperConfigurationStreamOutput)tupleItem;
++            inputConfigurationStream = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
++            inputConfigurationStream.setPairKey(iTupleConfigurationStream.getPairKey());
++            inputConfigurationStream.setPairValue(iTupleConfigurationStream.getPairValue());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputConfigurationStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFMapperResetWindowStreamOutput) {
++            iTupleResetWindowStream = (IIFMapperResetWindowStreamOutput)tupleItem;
++            inputResetWindowStream = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
++            inputResetWindowStream.setWindowStart(iTupleResetWindowStream.getWindowStart());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputResetWindowStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFHayashiYoshidaPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++long nowOutput = System.currentTimeMillis();
++if ((nowOutput - recordOutput) > 1000) {
++recordOutput = nowOutput;
++logger.error("The output rate at the time " + nowOutput + ":" + counter);
++counter = 0;
++} else {
++counter++;
++}
++                IIFHayashiYoshidaPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("HayashiYoshidaPairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "HayashiYoshida":
++                if (!algChange || !(alg instanceof HayashiYoshida)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.HayashiYoshida");
++                        alg = (IFHayashiYoshida) cls.getConstructor(int.class).newInstance(taskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("HayashiYoshida", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("HayashiYoshidaPairwiseFinancial", new Fields("HayashiYoshidaPairwiseFinancialFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/mapping.xml
+new file mode 100644
+index 0000000..60394f8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/mapping.xml
+@@ -0,0 +1,14 @@
++<mapping>
++  <pipeline name="CorrelationSWAlternative" class="eu.qualimaster.CorrelationSWAlternative.topology.Topology">
++      <node name="MP" type="family">
++          <component name="CorrelationSWAlternativeMP" container="CorrelationSWAlternative" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++      </node>
++      <node name="HY" type="family">
++          <component name="CorrelationSWAlternativeHY" container="CorrelationSWAlternative" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </node>
++      <algorithm name="Mapper" implName="Mapper" class="eu.qualimaster.algorithms.imp.correlation.Mapper"/>
++      <algorithm name="HayashiYoshida" implName="HayashiYoshida" class="eu.qualimaster.algorithms.imp.correlation.HayashiYoshida"/>
++      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/pom.xml
+new file mode 100644
+index 0000000..272b3f1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/pom.xml
+@@ -0,0 +1,265 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>CorrelationSWAlternative</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-assembly-plugin</artifactId>
++				<version>2.6</version>
++            	<dependencies>
++	                    <dependency>
++	                        <groupId>eu.qualimaster</groupId>
++	                        <artifactId>AlgorithmAssemblies</artifactId>
++	                        <version>0.5.0-SNAPSHOT</version>
++	                    </dependency>
++	                </dependencies>
++					<executions>
++					<execution>
++						<id>make-assembly</id>
++						<phase>package</phase>
++						<goals>
++							<goal>single</goal>
++						</goals>
++					<configuration>
++					<descriptorRefs>
++						<descriptorRef>jar-with-dependencies</descriptorRef>
++					</descriptorRefs>
++					<dependencySets>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>runtime</scope>
++						</dependencySet>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>provided</scope>
++						</dependencySet>
++					</dependencySets>
++					<archive>
++						<manifest>
++						</manifest>
++					</archive>
++				</configuration>
++					</execution>
++				<execution>
++                        <id>make-profilingAssembly</id>
++                        <phase>package</phase>
++                        <goals>
++                            <goal>single</goal>
++                        </goals>
++                        <configuration>
++                            <descriptorRefs>
++                                <descriptorRef>profiling</descriptorRef>
++                            </descriptorRefs>
++                        </configuration>
++                    </execution>
++				</executions>
++						</plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++	<dependency>
++          <groupId>eu.qualimaster</groupId>
++          <artifactId>AlgorithmAssemblies</artifactId>
++          <version>0.5.0-SNAPSHOT</version>
++      </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-mapper</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hayashi-yoshida</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/profiling/profile.ctl
+new file mode 100644
+index 0000000..d5609a9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/profiling/profile.ctl
+@@ -0,0 +1 @@
++import eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/CorrelationSWAlternativeSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/CorrelationSWAlternativeSubTopology.java
+new file mode 100644
+index 0000000..594bad3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/CorrelationSWAlternativeSubTopology.java
+@@ -0,0 +1,85 @@
++package eu.qualimaster.CorrelationSWAlternative.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.Config;
++import backtype.storm.topology.TopologyBuilder;
++import eu.qualimaster.base.algorithm.ITopologyCreate;
++import eu.qualimaster.base.algorithm.SubTopologyOutput;
++import backtype.storm.topology.BoltDeclarer;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.SignalException;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.families.inf.IFCorrelationFinancial;
++
++public class CorrelationSWAlternativeSubTopology implements IFCorrelationFinancial, ITopologyCreate {
++    final static Logger logger = Logger.getLogger(CorrelationSWAlternativeSubTopology.class);
++    private int windowSize;
++    private transient State state;
++
++    public void switchState(State arg0) {
++        this.state = arg0;	
++    }
++
++    public Double getMeasurement(IObservable observable) {
++        return null;
++    }
++
++    public SubTopologyOutput createSubTopology(TopologyBuilder builder,
++    			Config config, String prefix, String input, String streamId) {
++        String namespace = "CorrelationSWAlternative";
++        if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {
++            namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);
++        }
++        // Declare a Bolt "MP"
++
++        BoltDeclarer SubPipelineVar_19_FamilyElement0 =builder.setBolt(prefix+"MP", new SubPipelineVar_19_FamilyElement0FamilyElement(prefix+"MP", namespace), 1);
++        SubPipelineVar_19_FamilyElement0.shuffleGrouping(input, streamId);
++        // Declare a Bolt "HY"
++
++        BoltDeclarer SubPipelineVar_19_FamilyElement1 =builder.setBolt(prefix+"HY", new SubPipelineVar_19_FamilyElement1FamilyElement(prefix+"HY", namespace), 14);
++        //SubPipelineVar_19_FamilyElement1 subscribing streams:
++        SubPipelineVar_19_FamilyElement1.directGrouping(prefix+"MP", "MPSymbolsStream");
++        SubPipelineVar_19_FamilyElement1.directGrouping(prefix+"MP", "MPConfigurationStream");
++        SubPipelineVar_19_FamilyElement1.allGrouping(prefix+"MP", "MPResetWindowStream");
++        return new SubTopologyOutput(prefix+"HY", "HYPairwiseFinancial", 4, 14); //TODO: consider PipelineOptions to change the parallelisms
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
++    }
++
++
++    /**
++     * Sets the algorithm parameter "windowSize". Note that the actual parameter change will be dynamically
++     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
++     * sub-topology.
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++        this.windowSize = windowSize;
++        try {
++            logger.info("sending new WindowSize signal " + value + "!");
++            ParameterChangeSignal signal = new ParameterChangeSignal("CorrelationSWAlternative", 
++                    "CorrelationSWAlternativeMP", "windowSize", value, null);
++            signal.sendSignal();
++        } catch (Exception e) {
++            logger.error("Signal not sent!");
++            e.printStackTrace();
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..4bc02f4
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement0FamilyElement.java
+@@ -0,0 +1,366 @@
++package eu.qualimaster.CorrelationSWAlternative.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFMapper.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Mapper;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class SubPipelineVar_19_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(SubPipelineVar_19_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FMapper.IFMapperSymbolsStreamOutput symbolsStreamResult = new FMapper.IFMapperSymbolsStreamOutput();
++    private transient FMapper.IFMapperConfigurationStreamOutput configurationStreamResult = new FMapper.IFMapperConfigurationStreamOutput();
++    private transient FMapper.IFMapperResetWindowStreamOutput resetWindowStreamResult = new FMapper.IFMapperResetWindowStreamOutput();
++    private transient IFMapper alg = null; 
++    private transient List<Integer> taskIdHY;
++    private int SubPipelineVar_19_FamilyElement0TaskId;
++    transient IIFCorrelationFinancialPreprocessedStreamInput iTuplePreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput iTupleSymbolList = null;
++    transient IIFMapperPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFMapperSymbolListInput inputSymbolList = null;
++
++    public SubPipelineVar_19_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++        taskIdHY = topologyContext.getComponentTasks("CorrelationSWAlternativeHY");
++        logger.info("taskIdsHY = " + taskIdHY);
++        SubPipelineVar_19_FamilyElement0TaskId = topologyContext.getThisTaskId();
++        logger.info("SubPipelineVar_19_FamilyElement0TaskId = " + SubPipelineVar_19_FamilyElement0TaskId);
++
++        symbolsStreamResult = new FMapper.IFMapperSymbolsStreamOutput();
++        IItemEmitter<IIFMapperSymbolsStreamOutput> symbolsStreamEmitter = new IItemEmitter<IIFMapperSymbolsStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFMapperSymbolsStreamOutput item) {
++                _collector.emitDirect(item.getTaskId(), "MPSymbolsStream", new Values(item));
++            }
++        };
++        symbolsStreamResult.setEmitter(symbolsStreamEmitter);
++
++        configurationStreamResult = new FMapper.IFMapperConfigurationStreamOutput();
++        IItemEmitter<IIFMapperConfigurationStreamOutput> configurationStreamEmitter = new IItemEmitter<IIFMapperConfigurationStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFMapperConfigurationStreamOutput item) {
++                _collector.emitDirect(item.getTaskId(), "MPConfigurationStream", new Values(item));
++            }
++        };
++        configurationStreamResult.setEmitter(configurationStreamEmitter);
++
++        resetWindowStreamResult = new FMapper.IFMapperResetWindowStreamOutput();
++        IItemEmitter<IIFMapperResetWindowStreamOutput> resetWindowStreamEmitter = new IItemEmitter<IIFMapperResetWindowStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFMapperResetWindowStreamOutput item) {
++                _collector.emit("MPResetWindowStream", new Values(item));
++            }
++        };
++        resetWindowStreamResult.setEmitter(resetWindowStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Mapper");
++                    alg = (IFMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdHY, SubPipelineVar_19_FamilyElement0TaskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                } catch (NoSuchMethodException e) {
++                    e.printStackTrace();
++                } catch (InvocationTargetException e) {
++                    e.printStackTrace();
++                }
++                if (PipelineOptions.hasExecutorArgument(map, getName(), "windowSize")) {
++                    alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 0));
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Mapper", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fMapper"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
++            iTuplePreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tupleItem;
++            inputPreprocessedStream = new FMapper.IFMapperPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, symbolsStreamResult, configurationStreamResult, resetWindowStreamResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                symbolsStreamResult.setSymbolId("");
++                symbolsStreamResult.setTimestamp(0);
++                symbolsStreamResult.setValue(0.0);
++                configurationStreamResult.setPairKey("");
++                configurationStreamResult.setPairValue("");
++                resetWindowStreamResult.setWindowStart(0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFCorrelationFinancialSymbolListInput) {
++            iTupleSymbolList = (IIFCorrelationFinancialSymbolListInput)tupleItem;
++            inputSymbolList = new FMapper.IFMapperSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, symbolsStreamResult, configurationStreamResult, resetWindowStreamResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                symbolsStreamResult.setSymbolId("");
++                symbolsStreamResult.setTimestamp(0);
++                symbolsStreamResult.setValue(0.0);
++                configurationStreamResult.setPairKey("");
++                configurationStreamResult.setPairValue("");
++                resetWindowStreamResult.setWindowStart(0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperSymbolsStreamOutput> iterSymbolsStream = symbolsStreamResult.iterator();
++            iterSymbolsStream.reset();
++            while (iterSymbolsStream.hasNext()) {
++                IIFMapperSymbolsStreamOutput out = iterSymbolsStream.next();
++                _collector.emitDirect(out.getTaskId(), "MPSymbolsStream", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperConfigurationStreamOutput> iterConfigurationStream = configurationStreamResult.iterator();
++            iterConfigurationStream.reset();
++            while (iterConfigurationStream.hasNext()) {
++                IIFMapperConfigurationStreamOutput out = iterConfigurationStream.next();
++                _collector.emitDirect(out.getTaskId(), "MPConfigurationStream", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperResetWindowStreamOutput> iterResetWindowStream = resetWindowStreamResult.iterator();
++            iterResetWindowStream.reset();
++            while (iterResetWindowStream.hasNext()) {
++                IIFMapperResetWindowStreamOutput out = iterResetWindowStream.next();
++                _collector.emit("MPResetWindowStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Mapper":
++                if (!algChange || !(alg instanceof Mapper)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Mapper");
++                        alg = (IFMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdHY, SubPipelineVar_19_FamilyElement0TaskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    } catch (NoSuchMethodException e) {
++                        e.printStackTrace();
++                    } catch (InvocationTargetException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterWindowSize(0);
++                    sendAlgorithmChangeEvent("Mapper", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("MPSymbolsStream", new Fields("MPSymbolsStreamFields"));
++        declarer.declareStream("MPConfigurationStream", new Fields("MPConfigurationStreamFields"));
++        declarer.declareStream("MPResetWindowStream", new Fields("MPResetWindowStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..df5801f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement1FamilyElement.java
+@@ -0,0 +1,321 @@
++package eu.qualimaster.CorrelationSWAlternative.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.HayashiYoshida;
++import eu.qualimaster.families.inf.IFMapper.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class SubPipelineVar_19_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(SubPipelineVar_19_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++int counter = 0;
++long recordOutput = 0;
++    private transient FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
++    private transient IFHayashiYoshida alg = null; 
++    transient IIFMapperSymbolsStreamOutput iTupleSymbolsStream = null;
++    transient IIFMapperConfigurationStreamOutput iTupleConfigurationStream = null;
++    transient IIFMapperResetWindowStreamOutput iTupleResetWindowStream = null;
++    transient IIFHayashiYoshidaSymbolsStreamInput inputSymbolsStream = null;
++    transient IIFHayashiYoshidaConfigurationStreamInput inputConfigurationStream = null;
++    transient IIFHayashiYoshidaResetWindowStreamInput inputResetWindowStream = null;
++
++    public SubPipelineVar_19_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++counter = 0;
++
++        pairwiseFinancialResult = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
++        IItemEmitter<IIFHayashiYoshidaPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFHayashiYoshidaPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFHayashiYoshidaPairwiseFinancialOutput item) {
++                _collector.emit("HYPairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.HayashiYoshida");
++                    alg = (IFHayashiYoshida) cls.getConstructor(int.class).newInstance(taskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("HayashiYoshida", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fHayashiYoshida"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++recordOutput = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFMapperSymbolsStreamOutput) {
++            iTupleSymbolsStream = (IIFMapperSymbolsStreamOutput)tupleItem;
++            inputSymbolsStream = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
++            inputSymbolsStream.setSymbolId(iTupleSymbolsStream.getSymbolId());
++            inputSymbolsStream.setTimestamp(iTupleSymbolsStream.getTimestamp());
++            inputSymbolsStream.setValue(iTupleSymbolsStream.getValue());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolsStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFMapperConfigurationStreamOutput) {
++            iTupleConfigurationStream = (IIFMapperConfigurationStreamOutput)tupleItem;
++            inputConfigurationStream = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
++            inputConfigurationStream.setPairKey(iTupleConfigurationStream.getPairKey());
++            inputConfigurationStream.setPairValue(iTupleConfigurationStream.getPairValue());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputConfigurationStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFMapperResetWindowStreamOutput) {
++            iTupleResetWindowStream = (IIFMapperResetWindowStreamOutput)tupleItem;
++            inputResetWindowStream = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
++            inputResetWindowStream.setWindowStart(iTupleResetWindowStream.getWindowStart());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputResetWindowStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFHayashiYoshidaPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++long nowOutput = System.currentTimeMillis();
++if ((nowOutput - recordOutput) > 1000) {
++recordOutput = nowOutput;
++logger.error("The output rate at the time " + nowOutput + ":" + counter);
++counter = 0;
++} else {
++counter++;
++}
++                IIFHayashiYoshidaPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("HYPairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "HayashiYoshida":
++                if (!algChange || !(alg instanceof HayashiYoshida)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.HayashiYoshida");
++                        alg = (IFHayashiYoshida) cls.getConstructor(int.class).newInstance(taskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("HayashiYoshida", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("HYPairwiseFinancial", new Fields("HYPairwiseFinancialFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/mapping.xml
+new file mode 100644
+index 0000000..cafe50c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/mapping.xml
+@@ -0,0 +1,55 @@
++<mapping>
++  <pipeline name="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.Topology">
++      <node name="FinancialDataSource" type="source">
++          <component name="PipelineVar_8_Source0" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="preprocessor" type="family">
++          <component name="PipelineVar_8_FamilyElement0" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
++      </node>
++      <node name="CorrelationComputation" type="family">
++          <component name="PipelineVar_8_FamilyElement1" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
++      </node>
++      <node name="DynamicGraphCompilation" type="family">
++          <component name="PipelineVar_8_FamilyElement2" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "DynamicGraphCompilation"/>
++      </node>
++      <node name="DynamicHubComputation" type="family">
++          <component name="PipelineVar_8_FamilyElement3" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_FamilyElement3FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoDynamicHubComputation"/>
++      </node>
++      <node name="DynamicGraphSink" type="sink">
++          <component name="PipelineVar_8_Sink0" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
++      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
++      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
++              <component name="CorrelationSWMapper" container="DynamicGraphPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWHayashiYoshida" container="DynamicGraphPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
++          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
++          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
++              <component name="CorrelationSWAlternativeMP" container="DynamicGraphPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWAlternativeHY" container="DynamicGraphPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="DynamicGraphCompilation" implName="DynamicGraphCompilation" class="eu.qualimaster.dynamicgraph.DynamicGraphCompilation"/>
++      <algorithm name="TopoDynamicHubComputation" implName="TopoDynamicHubComputation" class="eu.qualimaster.dynamicgraph.TopoDynamicHubComputation"/>
++      <algorithm name="Spring Financial Data" implName="SpringClient" class="eu.qualimaster.algorithms.imp.correlation.SpringClient"/>
++      <algorithm name="DynamicGraphSink" implName="DynamicGraphSinkAlgorithm" class="eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm"/>
++      <parameter parameter="windowSize" name="CorrelationComputation" receiver="PipelineVar_8_FamilyElement1"/> 
++      <parameter parameter="correlationThreshold" name="DynamicGraphCompilation" receiver="PipelineVar_8_FamilyElement2"/> 
++      <parameter parameter="windowSize" name="DynamicHubComputation" receiver="PipelineVar_8_FamilyElement3"/> 
++      <parameter parameter="hubListSize" name="DynamicHubComputation" receiver="PipelineVar_8_FamilyElement3"/> 
++      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
++      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/pom.xml
+new file mode 100644
+index 0000000..1785b4d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/pom.xml
+@@ -0,0 +1,295 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>DynamicGraphPip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>spring-client</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-preprocessor</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-correlation-financial-software</artifactId>
++      <version>3.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSW</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TransferEntropyHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>MutualInformationHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSWAlternative</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>dynamic-graph-compilation</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>dynamic-hub-computation</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>dynamic-graph-sink</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/settings.xml
+new file mode 100644
+index 0000000..c2aa94f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/settings.xml
+@@ -0,0 +1,115 @@
++<pipeline>
++    <name>DynamicGraphPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changecorrelationThreshold</name>
++			<request>
++				<field sequence="0">changecorrelationThreshold</field>
++				<field sequence="1">%newCorrelationThreshold%</field>
++			</request>
++			<response>
++				<field sequence="0">changecorrelationThreshold_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newCorrelationThreshold%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changehubListSize</name>
++			<request>
++				<field sequence="0">changehubListSize</field>
++				<field sequence="1">%newHubListSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changehubListSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newHubListSize%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..13bc369
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement0FamilyElement.java
+@@ -0,0 +1,250 @@
++package eu.qualimaster.DynamicGraphPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_8_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_8_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++    private transient IFPreprocessor alg = null; 
++    transient ISpringFinancialDataSpringStreamOutput iTupleSpringStream = null;
++    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
++
++    public PipelineVar_8_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
++                _collector.emit("PipelineVar_8_FamilyElement0PreprocessedStream", new Values(item));
++            }
++        };
++        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                    alg = (IFPreprocessor) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Preprocessor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fPreprocessor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof ISpringFinancialDataSpringStreamOutput) {
++        iTupleSpringStream = (ISpringFinancialDataSpringStreamOutput)tupleItem;
++        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
++        try {
++            if(alg != null) {
++                alg.calculate(inputSpringStream, preprocessedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            preprocessedStreamResult.setSymbolId("");
++            preprocessedStreamResult.setTimestamp(0);
++            preprocessedStreamResult.setValue(0.0);
++            preprocessedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
++            iterPreprocessedStream.reset();
++            while (iterPreprocessedStream.hasNext()) {
++                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
++                _collector.emit("PipelineVar_8_FamilyElement0PreprocessedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Preprocessor":
++                if (!algChange || !(alg instanceof Preprocessor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                        alg = (IFPreprocessor) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_8_FamilyElement0PreprocessedStream", new Fields("PipelineVar_8_FamilyElement0PreprocessedStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..b558b28
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement1FamilyElement.java
+@@ -0,0 +1,544 @@
++package eu.qualimaster.DynamicGraphPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.common.hardware.*;
++import com.google.protobuf.ByteString;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_8_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_8_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial";
++    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++    private transient IFCorrelationFinancial alg = null; 
++    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
++    transient ISpringFinancialDataSymbolListOutput iTupleSymbolList = null;
++    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++
++    public PipelineVar_8_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
++                _collector.emit("PipelineVar_8_FamilyElement1PairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                    alg = (IFCorrelationFinancial) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
++            streamId = "PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fCorrelationFinancial"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
++            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
++            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputPreprocessedStream));
++            }
++        }
++
++        if(tupleItem instanceof ISpringFinancialDataSymbolListOutput) {
++            iTupleSymbolList = (ISpringFinancialDataSymbolListOutput)tupleItem;
++            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputSymbolList));
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("PipelineVar_8_FamilyElement1PairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TopoSoftwareCorrelationFinancial":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "GenTopoHardwareCorrelationFinancial":
++            case "GenTopoHardwareCorrelationFinancialSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("DynamicGraphPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("DynamicGraphPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_8_FamilyElement1GenTopoHardwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSW":
++            case "CorrelationSWSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_8_FamilyElement1CorrelationSW";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "TransferEntropyHardware":
++            case "TransferEntropyHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("DynamicGraphPip",
++                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("DynamicGraphPip",
++                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_8_FamilyElement1TransferEntropyHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "MutualInformationHardware":
++            case "MutualInformationHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("DynamicGraphPip",
++                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("DynamicGraphPip",
++                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_8_FamilyElement1MutualInformationHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSWAlternative":
++            case "CorrelationSWAlternativeSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_8_FamilyElement1CorrelationSWAlternative";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_8_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_8_FamilyElement1PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_8_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_8_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_8_FamilyElement1CorrelationSW", new Fields("PipelineVar_8_FamilyElement1CorrelationSWFields"));
++        declarer.declareStream("PipelineVar_8_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_8_FamilyElement1TransferEntropyHardwareFields"));
++        declarer.declareStream("PipelineVar_8_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_8_FamilyElement1MutualInformationHardwareFields"));
++        declarer.declareStream("PipelineVar_8_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_8_FamilyElement1CorrelationSWAlternativeFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement2FamilyElement.java
+new file mode 100644
+index 0000000..7d72886
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement2FamilyElement.java
+@@ -0,0 +1,281 @@
++package eu.qualimaster.DynamicGraphPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_8_FamilyElement2FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_8_FamilyElement2FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++    private transient IFDynamicGraphCompilation alg = null; 
++    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient IIFDynamicGraphCompilationPairwiseFinancialInput inputPairwiseFinancial = null;
++
++    public PipelineVar_8_FamilyElement2FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++        IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput> edgeStreamEmitter = new IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFDynamicGraphCompilationEdgeStreamOutput item) {
++                _collector.emit("PipelineVar_8_FamilyElement2EdgeStream", new Values(item));
++            }
++        };
++        edgeStreamResult.setEmitter(edgeStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
++                    alg = (IFDynamicGraphCompilation) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (PipelineOptions.hasExecutorArgument(map, getName(), "correlationThreshold")) {
++                    alg.setParameterCorrelationThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "correlationThreshold", 0.0));
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("DynamicGraphCompilation", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fDynamicGraphCompilation"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
++        iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
++        inputPairwiseFinancial = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
++        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++        try {
++            if(alg != null) {
++                alg.calculate(inputPairwiseFinancial, edgeStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            edgeStreamResult.setEdge("");
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFDynamicGraphCompilationEdgeStreamOutput> iterEdgeStream = edgeStreamResult.iterator();
++            iterEdgeStream.reset();
++            while (iterEdgeStream.hasNext()) {
++                IIFDynamicGraphCompilationEdgeStreamOutput out = iterEdgeStream.next();
++                _collector.emit("PipelineVar_8_FamilyElement2EdgeStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "correlationThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal correlationThreshold");
++                        alg.setParameterCorrelationThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("correlationThreshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "DynamicGraphCompilation":
++                if (!algChange || !(alg instanceof DynamicGraphCompilation)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
++                        alg = (IFDynamicGraphCompilation) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterCorrelationThreshold(0.0);
++                    sendAlgorithmChangeEvent("DynamicGraphCompilation", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_8_FamilyElement2EdgeStream", new Fields("PipelineVar_8_FamilyElement2EdgeStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement3FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement3FamilyElement.java
+new file mode 100644
+index 0000000..419414b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement3FamilyElement.java
+@@ -0,0 +1,294 @@
++package eu.qualimaster.DynamicGraphPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFDynamicHubComputation.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.dynamicgraph.TopoDynamicHubComputation;
++import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_8_FamilyElement3FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_8_FamilyElement3FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_8_FamilyElement3TopoDynamicHubComputation";
++    private transient FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput hubStreamResult = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
++    private transient IFDynamicHubComputation alg = null; 
++    transient IIFDynamicGraphCompilationEdgeStreamOutput iTupleEdgeStream = null;
++    transient IIFDynamicHubComputationEdgeStreamInput inputEdgeStream = null;
++
++    public PipelineVar_8_FamilyElement3FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        hubStreamResult = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
++        IItemEmitter<IIFDynamicHubComputationHubStreamOutput> hubStreamEmitter = new IItemEmitter<IIFDynamicHubComputationHubStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFDynamicHubComputationHubStreamOutput item) {
++                _collector.emit("PipelineVar_8_FamilyElement3HubStream", new Values(item));
++            }
++        };
++        hubStreamResult.setEmitter(hubStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.dynamicgraph.TopoDynamicHubComputation");
++                    alg = (IFDynamicHubComputation) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
++                alg.setParameterHubListSize(PipelineOptions.getExecutorIntArgument(map, getName(), "hubListSize", 10));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TopoDynamicHubComputation", null);
++            streamId = "PipelineVar_8_FamilyElement3TopoDynamicHubComputation";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fDynamicHubComputation"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFDynamicGraphCompilationEdgeStreamOutput) {
++        iTupleEdgeStream = (IIFDynamicGraphCompilationEdgeStreamOutput)tupleItem;
++        inputEdgeStream = new FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput();
++        inputEdgeStream.setEdge(iTupleEdgeStream.getEdge());
++        try {
++            if(alg != null) {
++                alg.calculate(inputEdgeStream, hubStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            hubStreamResult.setHubList("");
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++        if(alg instanceof ITopologyCreate) {
++            _collector.emit(streamId, new Values(inputEdgeStream));
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFDynamicHubComputationHubStreamOutput> iterHubStream = hubStreamResult.iterator();
++            iterHubStream.reset();
++            while (iterHubStream.hasNext()) {
++                IIFDynamicHubComputationHubStreamOutput out = iterHubStream.next();
++                _collector.emit("PipelineVar_8_FamilyElement3HubStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "hubListSize" :
++                    try {
++                        System.out.println("Received parameter changing signal hubListSize");
++                        alg.setParameterHubListSize(para.getIntValue()); 
++                        sendParameterChangeEvent("hubListSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TopoDynamicHubComputation":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TopoDynamicHubComputation)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.dynamicgraph.TopoDynamicHubComputation");
++                        alg = (IFDynamicHubComputation) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_8_FamilyElement3TopoDynamicHubComputation";
++                    alg.setParameterWindowSize(30);
++                    alg.setParameterHubListSize(10);
++                    sendAlgorithmChangeEvent("TopoDynamicHubComputation", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_8_FamilyElement3HubStream", new Fields("PipelineVar_8_FamilyElement3HubStreamFields"));
++        declarer.declareStream("PipelineVar_8_FamilyElement3TopoDynamicHubComputation", new Fields("PipelineVar_8_FamilyElement3TopoDynamicHubComputationFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Sink0Sink.java
+new file mode 100644
+index 0000000..4f8868a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Sink0Sink.java
+@@ -0,0 +1,132 @@
++package eu.qualimaster.DynamicGraphPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IDynamicGraphSink;
++import eu.qualimaster.data.inf.IDynamicGraphSink.*;
++import eu.qualimaster.data.imp.DynamicGraphSink;
++import eu.qualimaster.data.imp.DynamicGraphSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFDynamicHubComputation.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_8_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_8_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient IDynamicGraphSink sinkHandler;
++private int counter = 0;
++    transient IIFDynamicHubComputationHubStreamOutput iTupleHubStream = null;
++    transient IDynamicGraphSinkHubStreamInput inputHubStream = null;
++
++	public PipelineVar_8_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++    if(tupleItem instanceof IIFDynamicHubComputationHubStreamOutput) {
++        iTupleHubStream = (IIFDynamicHubComputationHubStreamOutput)tupleItem;
++        inputHubStream = new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
++        inputHubStream.setHubList(iTupleHubStream.getHubList());
++        sinkHandler.postDataHubStream(inputHubStream);
++        emitted(inputHubStream);
++    }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IDynamicGraphSink> cls = (Class<? extends IDynamicGraphSink>)Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("DynamicGraphSinkAlgorithm", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_8_Sink0HubStream", new Fields("PipelineVar_8_Sink0HubStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Source0Source.java
+new file mode 100644
+index 0000000..99ad86e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Source0Source.java
+@@ -0,0 +1,200 @@
++package eu.qualimaster.DynamicGraphPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ISpringFinancialData;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.data.imp.SpringFinancialData;
++import eu.qualimaster.algorithms.imp.correlation.SpringClient;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_8_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_8_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ISpringFinancialData sourceData;
++
++    public PipelineVar_8_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("DynamicGraphPip", "PipelineVar_8_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSymbolListOutput>(ISpringFinancialDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSpringStreamOutput>(ISpringFinancialDataSpringStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ISpringFinancialData> cls = (Class<? extends ISpringFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClient");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("SpringClient", null);
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("DynamicGraphPip", "PipelineVar_8_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_8_Source0StreamSymbolList".
++        ISpringFinancialDataSymbolListOutput dataItemSymbolList = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PipelineVar_8_Source0SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PipelineVar_8_Source0SpringStream".
++        ISpringFinancialDataSpringStreamOutput dataItemSpringStream = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
++        try {
++            dataItemSpringStream = sourceData.getSpringStream();
++        } catch(DefaultModeException e) {
++            dataItemSpringStream.setSymbolTuple("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSpringStream!=null){
++            _collector.emit("PipelineVar_8_Source0SpringStream", new Values(dataItemSpringStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_8_Source0SymbolList", new Fields("PipelineVar_8_Source0SymbolListFields"));
++        declarer.declareStream("PipelineVar_8_Source0SpringStream", new Fields("PipelineVar_8_Source0SpringStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/Topology.java
+new file mode 100644
+index 0000000..770566b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/Topology.java
+@@ -0,0 +1,171 @@
++package eu.qualimaster.DynamicGraphPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
++import eu.qualimaster.dynamicgraph.TopoDynamicHubComputation;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "DynamicGraphPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 18; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "FinancialDataSource"
++
++            builder.setSpout("PipelineVar_8_Source0", new PipelineVar_8_Source0Source("PipelineVar_8_Source0", "DynamicGraphPip"), 1);
++            // Declare a Bolt "preprocessor"
++
++            BoltDeclarer PipelineVar_8_FamilyElement0=builder.setBolt("PipelineVar_8_FamilyElement0", new PipelineVar_8_FamilyElement0FamilyElement("PipelineVar_8_FamilyElement0", "DynamicGraphPip"), 1);
++            PipelineVar_8_FamilyElement0.shuffleGrouping("PipelineVar_8_Source0", "PipelineVar_8_Source0SpringStream");
++            // Declare a Bolt "CorrelationComputation"
++
++            BoltDeclarer PipelineVar_8_FamilyElement1=builder.setBolt("PipelineVar_8_FamilyElement1", new PipelineVar_8_FamilyElement1FamilyElement("PipelineVar_8_FamilyElement1", "DynamicGraphPip"), 1);
++            PipelineVar_8_FamilyElement1.shuffleGrouping("PipelineVar_8_FamilyElement0", "PipelineVar_8_FamilyElement0PreprocessedStream");
++            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
++            }
++            builder.startRecording("TopoSoftwareCorrelationFinancial");
++            ITopologyCreate PipelineVar_8_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
++            SubTopologyOutput PipelineVar_8_FamilyElement11SubOutput = PipelineVar_8_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial");
++            builder.endRecording(PipelineVar_8_FamilyElement11SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement11SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement11SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
++            ITopologyCreate PipelineVar_8_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
++            SubTopologyOutput PipelineVar_8_FamilyElement12SubOutput = PipelineVar_8_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1GenTopoHardwareCorrelationFinancial");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement12SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement12SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
++            ITopologyCreate PipelineVar_8_FamilyElement13SubCreator = new CorrelationSWSubTopology();
++            SubTopologyOutput PipelineVar_8_FamilyElement13SubOutput = PipelineVar_8_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1CorrelationSW");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement13SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement13SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
++            ITopologyCreate PipelineVar_8_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
++            SubTopologyOutput PipelineVar_8_FamilyElement14SubOutput = PipelineVar_8_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1TransferEntropyHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement14SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement14SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
++            ITopologyCreate PipelineVar_8_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
++            SubTopologyOutput PipelineVar_8_FamilyElement15SubOutput = PipelineVar_8_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1MutualInformationHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement15SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement15SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
++            ITopologyCreate PipelineVar_8_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
++            SubTopologyOutput PipelineVar_8_FamilyElement16SubOutput = PipelineVar_8_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1CorrelationSWAlternative");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement16SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement16SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "DynamicGraphCompilation"
++
++            BoltDeclarer PipelineVar_8_FamilyElement2=builder.setBolt("PipelineVar_8_FamilyElement2", new PipelineVar_8_FamilyElement2FamilyElement("PipelineVar_8_FamilyElement2", "DynamicGraphPip"), 1);
++            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement11SubOutput.getBoltName(), PipelineVar_8_FamilyElement11SubOutput.getStreamId());
++            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement12SubOutput.getBoltName(), PipelineVar_8_FamilyElement12SubOutput.getStreamId());
++            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement13SubOutput.getBoltName(), PipelineVar_8_FamilyElement13SubOutput.getStreamId());
++            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement14SubOutput.getBoltName(), PipelineVar_8_FamilyElement14SubOutput.getStreamId());
++            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement15SubOutput.getBoltName(), PipelineVar_8_FamilyElement15SubOutput.getStreamId());
++            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement16SubOutput.getBoltName(), PipelineVar_8_FamilyElement16SubOutput.getStreamId());
++            // Declare a Bolt "DynamicHubComputation"
++
++            BoltDeclarer PipelineVar_8_FamilyElement3=builder.setBolt("PipelineVar_8_FamilyElement3", new PipelineVar_8_FamilyElement3FamilyElement("PipelineVar_8_FamilyElement3", "DynamicGraphPip"), 1);
++            PipelineVar_8_FamilyElement3.shuffleGrouping("PipelineVar_8_FamilyElement2", "PipelineVar_8_FamilyElement2EdgeStream");
++            //generate the Storm-based algorithm topology name:TopoDynamicHubComputation
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoDynamicHubComputation"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("TopoDynamicHubComputation"), 1);
++            }
++            builder.startRecording("TopoDynamicHubComputation");
++            ITopologyCreate PipelineVar_8_FamilyElement31SubCreator = new TopoDynamicHubComputation();
++            SubTopologyOutput PipelineVar_8_FamilyElement31SubOutput = PipelineVar_8_FamilyElement31SubCreator.createSubTopology(builder,config,"TopoDynamicHubComputation", "PipelineVar_8_FamilyElement3", "PipelineVar_8_FamilyElement3TopoDynamicHubComputation");
++            builder.endRecording(PipelineVar_8_FamilyElement31SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement31SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement31SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "DynamicGraphSink"
++
++            BoltDeclarer PipelineVar_8_Sink0=builder.setBolt("PipelineVar_8_Sink0", new PipelineVar_8_Sink0Sink("PipelineVar_8_Sink0", "DynamicGraphPip"), 1);
++            PipelineVar_8_Sink0.shuffleGrouping(PipelineVar_8_FamilyElement31SubOutput.getBoltName(), PipelineVar_8_FamilyElement31SubOutput.getStreamId());
++            PipelineVar_8_FamilyElement1.shuffleGrouping("PipelineVar_8_Source0", "PipelineVar_8_Source0SymbolList");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/mapping.xml
+new file mode 100644
+index 0000000..53fc1fb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/mapping.xml
+@@ -0,0 +1,98 @@
++<mapping>
++  <pipeline name="FocusPip" class="eu.qualimaster.FocusPip.topology.Topology">
++      <node name="TwitterDataSource" type="source">
++          <component name="PipelineVar_7_Source0" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="SpamDetection" type="family">
++          <component name="PipelineVar_7_FamilyElement0" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SpamDetection"/>
++      </node>
++      <node name="Spam Removal" type="family">
++          <component name="PipelineVar_7_FamilyElement1" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SpamRemoval"/>
++      </node>
++      <node name="StockParser" type="family">
++          <component name="PipelineVar_7_FamilyElement2" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "StockParser  "/>
++      </node>
++      <node name="EventDetection" type="family">
++          <component name="PipelineVar_7_FamilyElement3" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement3FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "EventDetectionHardThreshold"/>
++      </node>
++      <node name="KeywordAnalyzer" type="family">
++          <component name="PipelineVar_7_FamilyElement4" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement4FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "KeywordAnalyzer"/>
++      </node>
++      <node name="Recommendations" type="family">
++          <component name="PipelineVar_7_FamilyElement5" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement5FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Recommendations"/>
++      </node>
++      <node name="FocusSink" type="sink">
++          <component name="PipelineVar_7_Sink0" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="SpringDataSource" type="source">
++          <component name="PipelineVar_7_Source1" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_Source1Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="preprocessor" type="family">
++          <component name="PipelineVar_7_FamilyElement6" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement6FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
++      </node>
++      <node name="correlation" type="family">
++          <component name="PipelineVar_7_FamilyElement7" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement7FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
++      </node>
++      <node name="DynamicGraphCompilation" type="family">
++          <component name="PipelineVar_7_FamilyElement8" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement8FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "DynamicGraphCompilation"/>
++      </node>
++      <algorithm name="SpamDetection" implName="SpamDetectionBolt" class="eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt"/>
++      <algorithm name="SpamRemoval" implName="SpamRemovalBolt" class="eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt"/>
++      <algorithm name="StockParser  " implName="StockParserAlgorithm" class="eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm"/>
++      <algorithm name="EventDetectionHardThreshold" implName="EventDetectionHardThresholdAlgorithm" class="eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm"/>
++      <algorithm name="KeywordAnalyzer" implName="BasicKeywordAnalyzerAlgorithm" class="eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm"/>
++      <algorithm name="Recommendations" implName="RecommendationsAlgorithm" class="eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm"/>
++      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
++      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
++      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
++              <component name="CorrelationSWMapper" container="FocusPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWHayashiYoshida" container="FocusPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
++          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
++          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
++              <component name="CorrelationSWAlternativeMP" container="FocusPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWAlternativeHY" container="FocusPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="DynamicGraphCompilation" implName="DynamicGraphCompilation" class="eu.qualimaster.dynamicgraph.DynamicGraphCompilation"/>
++      <algorithm name="Twitter Stream Data" implName="TwitterFileStreaming" class="eu.qualimaster.data.stream.source.TwitterFileStreaming"/>
++      <algorithm name="FocusFincancialData" implName="FocusedSpringClient" class="eu.qualimaster.focus.FocusedSpringClient"/>
++      <algorithm name="FocusSink" implName="FocusSinkAlgorithm" class="eu.qualimaster.focus.FocusSinkAlgorithm"/>
++      <parameter parameter="consumerKey" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="consumerSecret" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="accessToken" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="accessTokenSecret" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="queueSize" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="tweetDirectory" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="speedFactor" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="runLocally" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="adjustTimeToNow" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="realLoops" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="setAdditionalKeywords" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
++      <parameter parameter="spamThreshold" name="Spam Removal" receiver="PipelineVar_7_FamilyElement1"/> 
++      <parameter parameter="hardThreshold" name="EventDetection" receiver="PipelineVar_7_FamilyElement3"/> 
++      <parameter parameter="percentageThreshold" name="EventDetection" receiver="PipelineVar_7_FamilyElement3"/> 
++      <parameter parameter="lengthOfTimeWindow" name="EventDetection" receiver="PipelineVar_7_FamilyElement3"/> 
++      <parameter parameter="frequenceOfCheckForEvent" name="EventDetection" receiver="PipelineVar_7_FamilyElement3"/> 
++      <parameter parameter="threshold" name="KeywordAnalyzer" receiver="PipelineVar_7_FamilyElement4"/> 
++      <parameter parameter="decay" name="KeywordAnalyzer" receiver="PipelineVar_7_FamilyElement4"/> 
++      <parameter parameter="impactThreshold" name="Recommendations" receiver="PipelineVar_7_FamilyElement5"/> 
++      <parameter parameter="stockCooccurrenceThreshold" name="Recommendations" receiver="PipelineVar_7_FamilyElement5"/> 
++      <parameter parameter="playerList" name="SpringDataSource" receiver="PipelineVar_7_Source1"/> 
++      <parameter parameter="windowSize" name="correlation" receiver="PipelineVar_7_FamilyElement7"/> 
++      <parameter parameter="correlationThreshold" name="DynamicGraphCompilation" receiver="PipelineVar_7_FamilyElement8"/> 
++      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
++      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/pom.xml
+new file mode 100644
+index 0000000..4b679dd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/pom.xml
+@@ -0,0 +1,325 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>FocusPip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TwitterStreamDataSource</artifactId>
++      <version>0.0.5-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>SpamDetectionAlgorithm</artifactId>
++      <version>0.1.5-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>SpamRemovalAlgorithm</artifactId>
++      <version>0.1.5-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>StockParser</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>EventDetectionHardThresholdAlgorithm</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>KeywordAnalyzer</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>Recommendations</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>focus-sink</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>focused-spring-client</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-preprocessor</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-correlation-financial-software</artifactId>
++      <version>3.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSW</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TransferEntropyHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>MutualInformationHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSWAlternative</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>dynamic-graph-compilation</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/settings.xml
+new file mode 100644
+index 0000000..ba1016c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/settings.xml
+@@ -0,0 +1,102 @@
++<pipeline>
++    <name>FocusPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changeplayerList</name>
++			<request>
++				<field sequence="0">changeplayerList</field>
++				<field sequence="1">%newPlayerList%</field>
++			</request>
++			<response>
++				<field sequence="0">changeplayerList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newPlayerList%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changecorrelationThreshold</name>
++			<request>
++				<field sequence="0">changecorrelationThreshold</field>
++				<field sequence="1">%newCorrelationThreshold%</field>
++			</request>
++			<response>
++				<field sequence="0">changecorrelationThreshold_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newCorrelationThreshold%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..985f490
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement0FamilyElement.java
+@@ -0,0 +1,248 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFSpamDetection.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt;
++import eu.qualimaster.data.inf.ITwitterStreamData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FSpamDetection.IFSpamDetectionTwitterStreamOutput twitterStreamResult = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
++    private transient IFSpamDetection alg = null; 
++    transient ITwitterStreamDataTwitterStreamOutput iTupleTwitterStream = null;
++    transient IIFSpamDetectionTwitterStreamInput inputTwitterStream = null;
++
++    public PipelineVar_7_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        twitterStreamResult = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
++        IItemEmitter<IIFSpamDetectionTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFSpamDetectionTwitterStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFSpamDetectionTwitterStreamOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement0TwitterStream", new Values(item));
++            }
++        };
++        twitterStreamResult.setEmitter(twitterStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt");
++                    alg = (IFSpamDetection) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("SpamDetectionBolt", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fSpamDetection"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof ITwitterStreamDataTwitterStreamOutput) {
++        iTupleTwitterStream = (ITwitterStreamDataTwitterStreamOutput)tupleItem;
++        inputTwitterStream = new FSpamDetection.IFSpamDetectionTwitterStreamInput();
++        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
++        try {
++            if(alg != null) {
++                alg.calculate(inputTwitterStream, twitterStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            twitterStreamResult.setStatus(null);
++            twitterStreamResult.setSpamPropability(0.0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFSpamDetectionTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
++            iterTwitterStream.reset();
++            while (iterTwitterStream.hasNext()) {
++                IIFSpamDetectionTwitterStreamOutput out = iterTwitterStream.next();
++                _collector.emit("PipelineVar_7_FamilyElement0TwitterStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "SpamDetectionBolt":
++                if (!algChange || !(alg instanceof SpamDetectionBolt)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt");
++                        alg = (IFSpamDetection) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("SpamDetectionBolt", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement0TwitterStream", new Fields("PipelineVar_7_FamilyElement0TwitterStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..ee624fe
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement1FamilyElement.java
+@@ -0,0 +1,275 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFSpamRemoval.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt;
++import eu.qualimaster.families.inf.IFSpamDetection.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FSpamRemoval.IFSpamRemovalTwitterStreamOutput twitterStreamResult = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
++    private transient IFSpamRemoval alg = null; 
++    transient IIFSpamDetectionTwitterStreamOutput iTupleTwitterStream = null;
++    transient IIFSpamRemovalTwitterStreamInput inputTwitterStream = null;
++
++    public PipelineVar_7_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        twitterStreamResult = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
++        IItemEmitter<IIFSpamRemovalTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFSpamRemovalTwitterStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFSpamRemovalTwitterStreamOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement1TwitterStream", new Values(item));
++            }
++        };
++        twitterStreamResult.setEmitter(twitterStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt");
++                    alg = (IFSpamRemoval) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterSpamThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "spamThreshold", 0.5));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("SpamRemovalBolt", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fSpamRemoval"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFSpamDetectionTwitterStreamOutput) {
++        iTupleTwitterStream = (IIFSpamDetectionTwitterStreamOutput)tupleItem;
++        inputTwitterStream = new FSpamRemoval.IFSpamRemovalTwitterStreamInput();
++        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
++        inputTwitterStream.setSpamPropability(iTupleTwitterStream.getSpamPropability());
++        try {
++            if(alg != null) {
++                alg.calculate(inputTwitterStream, twitterStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            twitterStreamResult.setStatus(null);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFSpamRemovalTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
++            iterTwitterStream.reset();
++            while (iterTwitterStream.hasNext()) {
++                IIFSpamRemovalTwitterStreamOutput out = iterTwitterStream.next();
++                _collector.emit("PipelineVar_7_FamilyElement1TwitterStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "spamThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal spamThreshold");
++                        alg.setParameterSpamThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("spamThreshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "SpamRemovalBolt":
++                if (!algChange || !(alg instanceof SpamRemovalBolt)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt");
++                        alg = (IFSpamRemoval) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterSpamThreshold(0.5);
++                    sendAlgorithmChangeEvent("SpamRemovalBolt", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement1TwitterStream", new Fields("PipelineVar_7_FamilyElement1TwitterStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement2FamilyElement.java
+new file mode 100644
+index 0000000..bd78ea6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement2FamilyElement.java
+@@ -0,0 +1,248 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFStockParser.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm;
++import eu.qualimaster.families.inf.IFSpamRemoval.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement2FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement2FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FStockParser.IFStockParserTwitterStreamOutput twitterStreamResult = new FStockParser.IFStockParserTwitterStreamOutput();
++    private transient IFStockParser alg = null; 
++    transient IIFSpamRemovalTwitterStreamOutput iTupleTwitterStream = null;
++    transient IIFStockParserTwitterStreamInput inputTwitterStream = null;
++
++    public PipelineVar_7_FamilyElement2FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        twitterStreamResult = new FStockParser.IFStockParserTwitterStreamOutput();
++        IItemEmitter<IIFStockParserTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFStockParserTwitterStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFStockParserTwitterStreamOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement2TwitterStream", new Values(item));
++            }
++        };
++        twitterStreamResult.setEmitter(twitterStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm");
++                    alg = (IFStockParser) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("StockParserAlgorithm", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fStockParser"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFSpamRemovalTwitterStreamOutput) {
++        iTupleTwitterStream = (IIFSpamRemovalTwitterStreamOutput)tupleItem;
++        inputTwitterStream = new FStockParser.IFStockParserTwitterStreamInput();
++        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
++        try {
++            if(alg != null) {
++                alg.calculate(inputTwitterStream, twitterStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            twitterStreamResult.setStatus(null);
++            twitterStreamResult.setStocks(null);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFStockParserTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
++            iterTwitterStream.reset();
++            while (iterTwitterStream.hasNext()) {
++                IIFStockParserTwitterStreamOutput out = iterTwitterStream.next();
++                _collector.emit("PipelineVar_7_FamilyElement2TwitterStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "StockParserAlgorithm":
++                if (!algChange || !(alg instanceof StockParserAlgorithm)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm");
++                        alg = (IFStockParser) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("StockParserAlgorithm", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement2TwitterStream", new Fields("PipelineVar_7_FamilyElement2TwitterStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement3FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement3FamilyElement.java
+new file mode 100644
+index 0000000..4c4b4f2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement3FamilyElement.java
+@@ -0,0 +1,309 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFTwitterEventDetection.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm;
++import eu.qualimaster.families.inf.IFStockParser.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement3FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement3FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput twitterStreamResult = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
++    private transient IFTwitterEventDetection alg = null; 
++    transient IIFStockParserTwitterStreamOutput iTupleTwitterStream = null;
++    transient IIFTwitterEventDetectionTwitterStreamInput inputTwitterStream = null;
++
++    public PipelineVar_7_FamilyElement3FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        twitterStreamResult = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
++        IItemEmitter<IIFTwitterEventDetectionTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFTwitterEventDetectionTwitterStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTwitterEventDetectionTwitterStreamOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement3TwitterStream", new Values(item));
++            }
++        };
++        twitterStreamResult.setEmitter(twitterStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm");
++                    alg = (IFTwitterEventDetection) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterHardThreshold(PipelineOptions.getExecutorIntArgument(map, getName(), "hardThreshold", 1000));
++                alg.setParameterPercentageThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "percentageThreshold", 0.5));
++                alg.setParameterLengthOfTimeWindow(PipelineOptions.getExecutorIntArgument(map, getName(), "lengthOfTimeWindow", 86400));
++                alg.setParameterFrequenceOfCheckForEvent(PipelineOptions.getExecutorIntArgument(map, getName(), "frequenceOfCheckForEvent", 1));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("EventDetectionHardThresholdAlgorithm", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fTwitterEventDetection"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFStockParserTwitterStreamOutput) {
++        iTupleTwitterStream = (IIFStockParserTwitterStreamOutput)tupleItem;
++        inputTwitterStream = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput();
++        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
++        inputTwitterStream.setStocks(iTupleTwitterStream.getStocks());
++        try {
++            if(alg != null) {
++                alg.calculate(inputTwitterStream, twitterStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            twitterStreamResult.setEvents(null);
++            twitterStreamResult.setStatus(null);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTwitterEventDetectionTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
++            iterTwitterStream.reset();
++            while (iterTwitterStream.hasNext()) {
++                IIFTwitterEventDetectionTwitterStreamOutput out = iterTwitterStream.next();
++                _collector.emit("PipelineVar_7_FamilyElement3TwitterStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "hardThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal hardThreshold");
++                        alg.setParameterHardThreshold(para.getIntValue()); 
++                        sendParameterChangeEvent("hardThreshold", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "percentageThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal percentageThreshold");
++                        alg.setParameterPercentageThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("percentageThreshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "lengthOfTimeWindow" :
++                    try {
++                        System.out.println("Received parameter changing signal lengthOfTimeWindow");
++                        alg.setParameterLengthOfTimeWindow(para.getIntValue()); 
++                        sendParameterChangeEvent("lengthOfTimeWindow", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "frequenceOfCheckForEvent" :
++                    try {
++                        System.out.println("Received parameter changing signal frequenceOfCheckForEvent");
++                        alg.setParameterFrequenceOfCheckForEvent(para.getIntValue()); 
++                        sendParameterChangeEvent("frequenceOfCheckForEvent", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "EventDetectionHardThresholdAlgorithm":
++                if (!algChange || !(alg instanceof EventDetectionHardThresholdAlgorithm)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm");
++                        alg = (IFTwitterEventDetection) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterHardThreshold(1000);
++                    alg.setParameterPercentageThreshold(0.5);
++                    alg.setParameterLengthOfTimeWindow(86400);
++                    alg.setParameterFrequenceOfCheckForEvent(1);
++                    sendAlgorithmChangeEvent("EventDetectionHardThresholdAlgorithm", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement3TwitterStream", new Fields("PipelineVar_7_FamilyElement3TwitterStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement4FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement4FamilyElement.java
+new file mode 100644
+index 0000000..bf78078
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement4FamilyElement.java
+@@ -0,0 +1,287 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFKeywordAnalyzer.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm;
++import eu.qualimaster.families.inf.IFTwitterEventDetection.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement4FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement4FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput twitterStreamResult = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
++    private transient IFKeywordAnalyzer alg = null; 
++    transient IIFTwitterEventDetectionTwitterStreamOutput iTupleTwitterStream = null;
++    transient IIFKeywordAnalyzerTwitterStreamInput inputTwitterStream = null;
++
++    public PipelineVar_7_FamilyElement4FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        twitterStreamResult = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
++        IItemEmitter<IIFKeywordAnalyzerTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFKeywordAnalyzerTwitterStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFKeywordAnalyzerTwitterStreamOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement4TwitterStream", new Values(item));
++            }
++        };
++        twitterStreamResult.setEmitter(twitterStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm");
++                    alg = (IFKeywordAnalyzer) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "threshold", 0.5));
++                alg.setParameterDecay(PipelineOptions.getExecutorDoubleArgument(map, getName(), "decay", 0.5));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("BasicKeywordAnalyzerAlgorithm", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fKeywordAnalyzer"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFTwitterEventDetectionTwitterStreamOutput) {
++        iTupleTwitterStream = (IIFTwitterEventDetectionTwitterStreamOutput)tupleItem;
++        inputTwitterStream = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput();
++        inputTwitterStream.setEvents(iTupleTwitterStream.getEvents());
++        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
++        try {
++            if(alg != null) {
++                alg.calculate(inputTwitterStream, twitterStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            twitterStreamResult.setEvents(null);
++            twitterStreamResult.setStatus(null);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFKeywordAnalyzerTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
++            iterTwitterStream.reset();
++            while (iterTwitterStream.hasNext()) {
++                IIFKeywordAnalyzerTwitterStreamOutput out = iterTwitterStream.next();
++                _collector.emit("PipelineVar_7_FamilyElement4TwitterStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "threshold" :
++                    try {
++                        System.out.println("Received parameter changing signal threshold");
++                        alg.setParameterThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("threshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "decay" :
++                    try {
++                        System.out.println("Received parameter changing signal decay");
++                        alg.setParameterDecay(para.getDoubleValue()); 
++                        sendParameterChangeEvent("decay", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "BasicKeywordAnalyzerAlgorithm":
++                if (!algChange || !(alg instanceof BasicKeywordAnalyzerAlgorithm)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm");
++                        alg = (IFKeywordAnalyzer) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterThreshold(0.5);
++                    alg.setParameterDecay(0.5);
++                    sendAlgorithmChangeEvent("BasicKeywordAnalyzerAlgorithm", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement4TwitterStream", new Fields("PipelineVar_7_FamilyElement4TwitterStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement5FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement5FamilyElement.java
+new file mode 100644
+index 0000000..7b309a3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement5FamilyElement.java
+@@ -0,0 +1,286 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFRecommendations.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm;
++import eu.qualimaster.families.inf.IFKeywordAnalyzer.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement5FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement5FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FRecommendations.IFRecommendationsRecommendationStreamOutput recommendationStreamResult = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
++    private transient IFRecommendations alg = null; 
++    transient IIFKeywordAnalyzerTwitterStreamOutput iTupleTwitterStream = null;
++    transient IIFRecommendationsTwitterStreamInput inputTwitterStream = null;
++
++    public PipelineVar_7_FamilyElement5FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        recommendationStreamResult = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
++        IItemEmitter<IIFRecommendationsRecommendationStreamOutput> recommendationStreamEmitter = new IItemEmitter<IIFRecommendationsRecommendationStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFRecommendationsRecommendationStreamOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement5RecommendationStream", new Values(item));
++            }
++        };
++        recommendationStreamResult.setEmitter(recommendationStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm");
++                    alg = (IFRecommendations) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterImpactThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "impactThreshold", 0.5));
++                alg.setParameterStockCooccurrenceThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "stockCooccurrenceThreshold", 0.5));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("RecommendationsAlgorithm", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fRecommendations"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFKeywordAnalyzerTwitterStreamOutput) {
++        iTupleTwitterStream = (IIFKeywordAnalyzerTwitterStreamOutput)tupleItem;
++        inputTwitterStream = new FRecommendations.IFRecommendationsTwitterStreamInput();
++        inputTwitterStream.setEvents(iTupleTwitterStream.getEvents());
++        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
++        try {
++            if(alg != null) {
++                alg.calculate(inputTwitterStream, recommendationStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            recommendationStreamResult.setRecommendations("");
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFRecommendationsRecommendationStreamOutput> iterRecommendationStream = recommendationStreamResult.iterator();
++            iterRecommendationStream.reset();
++            while (iterRecommendationStream.hasNext()) {
++                IIFRecommendationsRecommendationStreamOutput out = iterRecommendationStream.next();
++                _collector.emit("PipelineVar_7_FamilyElement5RecommendationStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "impactThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal impactThreshold");
++                        alg.setParameterImpactThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("impactThreshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "stockCooccurrenceThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal stockCooccurrenceThreshold");
++                        alg.setParameterStockCooccurrenceThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("stockCooccurrenceThreshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "RecommendationsAlgorithm":
++                if (!algChange || !(alg instanceof RecommendationsAlgorithm)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm");
++                        alg = (IFRecommendations) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterImpactThreshold(0.5);
++                    alg.setParameterStockCooccurrenceThreshold(0.5);
++                    sendAlgorithmChangeEvent("RecommendationsAlgorithm", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement5RecommendationStream", new Fields("PipelineVar_7_FamilyElement5RecommendationStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement6FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement6FamilyElement.java
+new file mode 100644
+index 0000000..e04cd59
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement6FamilyElement.java
+@@ -0,0 +1,250 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.data.inf.IFocusFincancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement6FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement6FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++    private transient IFPreprocessor alg = null; 
++    transient IFocusFincancialDataSpringStreamOutput iTupleSpringStream = null;
++    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
++
++    public PipelineVar_7_FamilyElement6FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement6PreprocessedStream", new Values(item));
++            }
++        };
++        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                    alg = (IFPreprocessor) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Preprocessor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fPreprocessor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IFocusFincancialDataSpringStreamOutput) {
++        iTupleSpringStream = (IFocusFincancialDataSpringStreamOutput)tupleItem;
++        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
++        try {
++            if(alg != null) {
++                alg.calculate(inputSpringStream, preprocessedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            preprocessedStreamResult.setSymbolId("");
++            preprocessedStreamResult.setTimestamp(0);
++            preprocessedStreamResult.setValue(0.0);
++            preprocessedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
++            iterPreprocessedStream.reset();
++            while (iterPreprocessedStream.hasNext()) {
++                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
++                _collector.emit("PipelineVar_7_FamilyElement6PreprocessedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Preprocessor":
++                if (!algChange || !(alg instanceof Preprocessor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                        alg = (IFPreprocessor) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement6PreprocessedStream", new Fields("PipelineVar_7_FamilyElement6PreprocessedStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement7FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement7FamilyElement.java
+new file mode 100644
+index 0000000..4df7af6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement7FamilyElement.java
+@@ -0,0 +1,544 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.data.inf.IFocusFincancialData.*;
++import eu.qualimaster.common.hardware.*;
++import com.google.protobuf.ByteString;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement7FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement7FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial";
++    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++    private transient IFCorrelationFinancial alg = null; 
++    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
++    transient IFocusFincancialDataSymbolListOutput iTupleSymbolList = null;
++    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++
++    public PipelineVar_7_FamilyElement7FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement7PairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                    alg = (IFCorrelationFinancial) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
++            streamId = "PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fCorrelationFinancial"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
++            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
++            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputPreprocessedStream));
++            }
++        }
++
++        if(tupleItem instanceof IFocusFincancialDataSymbolListOutput) {
++            iTupleSymbolList = (IFocusFincancialDataSymbolListOutput)tupleItem;
++            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputSymbolList));
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("PipelineVar_7_FamilyElement7PairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TopoSoftwareCorrelationFinancial":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "GenTopoHardwareCorrelationFinancial":
++            case "GenTopoHardwareCorrelationFinancialSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("FocusPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("FocusPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_7_FamilyElement7GenTopoHardwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSW":
++            case "CorrelationSWSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_7_FamilyElement7CorrelationSW";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "TransferEntropyHardware":
++            case "TransferEntropyHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("FocusPip",
++                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("FocusPip",
++                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_7_FamilyElement7TransferEntropyHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "MutualInformationHardware":
++            case "MutualInformationHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("FocusPip",
++                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("FocusPip",
++                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_7_FamilyElement7MutualInformationHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSWAlternative":
++            case "CorrelationSWAlternativeSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_7_FamilyElement7CorrelationSWAlternative";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement7PairwiseFinancial", new Fields("PipelineVar_7_FamilyElement7PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_7_FamilyElement7GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_7_FamilyElement7GenTopoHardwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_7_FamilyElement7CorrelationSW", new Fields("PipelineVar_7_FamilyElement7CorrelationSWFields"));
++        declarer.declareStream("PipelineVar_7_FamilyElement7TransferEntropyHardware", new Fields("PipelineVar_7_FamilyElement7TransferEntropyHardwareFields"));
++        declarer.declareStream("PipelineVar_7_FamilyElement7MutualInformationHardware", new Fields("PipelineVar_7_FamilyElement7MutualInformationHardwareFields"));
++        declarer.declareStream("PipelineVar_7_FamilyElement7CorrelationSWAlternative", new Fields("PipelineVar_7_FamilyElement7CorrelationSWAlternativeFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement8FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement8FamilyElement.java
+new file mode 100644
+index 0000000..85a10d6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement8FamilyElement.java
+@@ -0,0 +1,281 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_FamilyElement8FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement8FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++    private transient IFDynamicGraphCompilation alg = null; 
++    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient IIFDynamicGraphCompilationPairwiseFinancialInput inputPairwiseFinancial = null;
++
++    public PipelineVar_7_FamilyElement8FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++        IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput> edgeStreamEmitter = new IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFDynamicGraphCompilationEdgeStreamOutput item) {
++                _collector.emit("PipelineVar_7_FamilyElement8EdgeStream", new Values(item));
++            }
++        };
++        edgeStreamResult.setEmitter(edgeStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
++                    alg = (IFDynamicGraphCompilation) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (PipelineOptions.hasExecutorArgument(map, getName(), "correlationThreshold")) {
++                    alg.setParameterCorrelationThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "correlationThreshold", 0.0));
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("DynamicGraphCompilation", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fDynamicGraphCompilation"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
++        iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
++        inputPairwiseFinancial = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
++        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++        try {
++            if(alg != null) {
++                alg.calculate(inputPairwiseFinancial, edgeStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            edgeStreamResult.setEdge("");
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFDynamicGraphCompilationEdgeStreamOutput> iterEdgeStream = edgeStreamResult.iterator();
++            iterEdgeStream.reset();
++            while (iterEdgeStream.hasNext()) {
++                IIFDynamicGraphCompilationEdgeStreamOutput out = iterEdgeStream.next();
++                _collector.emit("PipelineVar_7_FamilyElement8EdgeStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "correlationThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal correlationThreshold");
++                        alg.setParameterCorrelationThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("correlationThreshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "DynamicGraphCompilation":
++                if (!algChange || !(alg instanceof DynamicGraphCompilation)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
++                        alg = (IFDynamicGraphCompilation) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterCorrelationThreshold(0.0);
++                    sendAlgorithmChangeEvent("DynamicGraphCompilation", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_FamilyElement8EdgeStream", new Fields("PipelineVar_7_FamilyElement8EdgeStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Sink0Sink.java
+new file mode 100644
+index 0000000..626d226
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Sink0Sink.java
+@@ -0,0 +1,145 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IFocusSink;
++import eu.qualimaster.data.inf.IFocusSink.*;
++import eu.qualimaster.data.imp.FocusSink;
++import eu.qualimaster.data.imp.FocusSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFRecommendations.*;
++import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient IFocusSink sinkHandler;
++private int counter = 0;
++    transient IIFRecommendationsRecommendationStreamOutput iTupleRecommendationStream = null;
++    transient IIFDynamicGraphCompilationEdgeStreamOutput iTupleEdgeStream = null;
++    transient IFocusSinkRecommendationStreamInput inputRecommendationStream = null;
++    transient IFocusSinkEdgeStreamInput inputEdgeStream = null;
++
++	public PipelineVar_7_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++        if(tupleItem instanceof IIFRecommendationsRecommendationStreamOutput) {
++            iTupleRecommendationStream = (IIFRecommendationsRecommendationStreamOutput)tupleItem;
++            inputRecommendationStream = new FocusSink.FocusSinkRecommendationStreamInput();
++            inputRecommendationStream.setRecommendations(iTupleRecommendationStream.getRecommendations());
++            sinkHandler.postDataRecommendationStream(inputRecommendationStream);
++            emitted(inputRecommendationStream);
++        }
++
++        if(tupleItem instanceof IIFDynamicGraphCompilationEdgeStreamOutput) {
++            iTupleEdgeStream = (IIFDynamicGraphCompilationEdgeStreamOutput)tupleItem;
++            inputEdgeStream = new FocusSink.FocusSinkEdgeStreamInput();
++            inputEdgeStream.setEdge(iTupleEdgeStream.getEdge());
++            sinkHandler.postDataEdgeStream(inputEdgeStream);
++            emitted(inputEdgeStream);
++        }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new FocusSink.FocusSinkRecommendationStreamInput();
++        new FocusSink.FocusSinkEdgeStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IFocusSink> cls = (Class<? extends IFocusSink>)Class.forName("eu.qualimaster.focus.FocusSinkAlgorithm");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("FocusSinkAlgorithm", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_Sink0RecommendationStream", new Fields("PipelineVar_7_Sink0RecommendationStreamFields"));
++        declarer.declareStream("PipelineVar_7_Sink0EdgeStream", new Fields("PipelineVar_7_Sink0EdgeStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source0Source.java
+new file mode 100644
+index 0000000..5d84b7f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source0Source.java
+@@ -0,0 +1,286 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ITwitterStreamData;
++import eu.qualimaster.data.inf.ITwitterStreamData.*;
++import eu.qualimaster.data.imp.TwitterStreamData;
++import eu.qualimaster.data.stream.source.TwitterFileStreaming;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ITwitterStreamData sourceData;
++
++    public PipelineVar_7_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("FocusPip", "PipelineVar_7_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITwitterStreamDataSymbolListOutput>(ITwitterStreamDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(ITwitterStreamDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITwitterStreamDataTwitterStreamOutput>(ITwitterStreamDataTwitterStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ITwitterStreamDataTwitterStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ITwitterStreamData> cls = (Class<? extends ITwitterStreamData>) Class.forName("eu.qualimaster.data.stream.source.TwitterFileStreaming");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("TwitterFileStreaming", null);
++            sourceData.setParameterConsumerKey(PipelineOptions.getExecutorStringArgument(conf, getName(), "consumerKey", ""));
++            sourceData.setParameterConsumerSecret(PipelineOptions.getExecutorStringArgument(conf, getName(), "consumerSecret", ""));
++            sourceData.setParameterAccessToken(PipelineOptions.getExecutorStringArgument(conf, getName(), "accessToken", ""));
++            sourceData.setParameterAccessTokenSecret(PipelineOptions.getExecutorStringArgument(conf, getName(), "accessTokenSecret", ""));
++            sourceData.setParameterQueueSize(PipelineOptions.getExecutorIntArgument(conf, getName(), "queueSize", 0));
++            sourceData.setParameterTweetDirectory(PipelineOptions.getExecutorStringArgument(conf, getName(), "tweetDirectory", "/user/storm/resultSymbols"));
++            sourceData.setParameterSpeedFactor(PipelineOptions.getExecutorDoubleArgument(conf, getName(), "speedFactor", 0.0));
++            sourceData.setParameterRunLocally(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "runLocally", false));
++            sourceData.setParameterAdjustTimeToNow(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "adjustTimeToNow", false));
++            sourceData.setParameterRealLoops(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "realLoops", false));
++            sourceData.setParameterSetAdditionalKeywords(PipelineOptions.getExecutorStringArgument(conf, getName(), "setAdditionalKeywords", ""));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("FocusPip", "PipelineVar_7_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_7_Source0StreamSymbolList".
++        ITwitterStreamDataSymbolListOutput dataItemSymbolList = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PipelineVar_7_Source0SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PipelineVar_7_Source0TwitterStream".
++        ITwitterStreamDataTwitterStreamOutput dataItemTwitterStream = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
++        try {
++            dataItemTwitterStream = sourceData.getTwitterStream();
++        } catch(DefaultModeException e) {
++            dataItemTwitterStream.setStatus(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemTwitterStream!=null){
++            _collector.emit("PipelineVar_7_Source0TwitterStream", new Values(dataItemTwitterStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "consumerKey" :
++                    logger.info("Received the parameter consumerKey!");
++                    sourceData.setParameterConsumerKey(para.getStringValue()); 
++                    sendParameterChangeEvent("consumerKey", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "consumerSecret" :
++                    logger.info("Received the parameter consumerSecret!");
++                    sourceData.setParameterConsumerSecret(para.getStringValue()); 
++                    sendParameterChangeEvent("consumerSecret", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "accessToken" :
++                    logger.info("Received the parameter accessToken!");
++                    sourceData.setParameterAccessToken(para.getStringValue()); 
++                    sendParameterChangeEvent("accessToken", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "accessTokenSecret" :
++                    logger.info("Received the parameter accessTokenSecret!");
++                    sourceData.setParameterAccessTokenSecret(para.getStringValue()); 
++                    sendParameterChangeEvent("accessTokenSecret", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "queueSize" :
++                    try {
++                        logger.info("Received the parameter queueSize!");
++                        sourceData.setParameterQueueSize(para.getIntValue()); 
++                        sendParameterChangeEvent("queueSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "tweetDirectory" :
++                    logger.info("Received the parameter tweetDirectory!");
++                    sourceData.setParameterTweetDirectory(para.getStringValue()); 
++                    sendParameterChangeEvent("tweetDirectory", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "speedFactor" :
++                    try {
++                        logger.info("Received the parameter speedFactor!");
++                        sourceData.setParameterSpeedFactor(para.getDoubleValue()); 
++                        sendParameterChangeEvent("speedFactor", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "runLocally" :
++                    try {
++                        logger.info("Received the parameter runLocally!");
++                        sourceData.setParameterRunLocally(para.getBooleanValue()); 
++                        sendParameterChangeEvent("runLocally", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "adjustTimeToNow" :
++                    try {
++                        logger.info("Received the parameter adjustTimeToNow!");
++                        sourceData.setParameterAdjustTimeToNow(para.getBooleanValue()); 
++                        sendParameterChangeEvent("adjustTimeToNow", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "realLoops" :
++                    try {
++                        logger.info("Received the parameter realLoops!");
++                        sourceData.setParameterRealLoops(para.getBooleanValue()); 
++                        sendParameterChangeEvent("realLoops", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "setAdditionalKeywords" :
++                    logger.info("Received the parameter setAdditionalKeywords!");
++                    sourceData.setParameterSetAdditionalKeywords(para.getStringValue()); 
++                    sendParameterChangeEvent("setAdditionalKeywords", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_Source0SymbolList", new Fields("PipelineVar_7_Source0SymbolListFields"));
++        declarer.declareStream("PipelineVar_7_Source0TwitterStream", new Fields("PipelineVar_7_Source0TwitterStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source1Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source1Source.java
+new file mode 100644
+index 0000000..26773c9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source1Source.java
+@@ -0,0 +1,206 @@
++package eu.qualimaster.FocusPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.IFocusFincancialData;
++import eu.qualimaster.data.inf.IFocusFincancialData.*;
++import eu.qualimaster.data.imp.FocusFincancialData;
++import eu.qualimaster.focus.FocusedSpringClient;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_7_Source1Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_7_Source1Source.class);
++    transient SpoutOutputCollector _collector;
++    transient IFocusFincancialData sourceData;
++
++    public PipelineVar_7_Source1Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("FocusPip", "PipelineVar_7_Source1", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFocusFincancialDataSymbolListOutput>(IFocusFincancialDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(IFocusFincancialDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFocusFincancialDataSpringStreamOutput>(IFocusFincancialDataSpringStreamOutput.class) {
++            @Override
++            public String getAggregationKey(IFocusFincancialDataSpringStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IFocusFincancialData> cls = (Class<? extends IFocusFincancialData>) Class.forName("eu.qualimaster.focus.FocusedSpringClient");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("FocusedSpringClient", null);
++            sourceData.setParameterPlayerList(PipelineOptions.getExecutorStringArgument(conf, getName(), "playerList", ""));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("FocusPip", "PipelineVar_7_Source1", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_7_Source1StreamSymbolList".
++        IFocusFincancialDataSymbolListOutput dataItemSymbolList = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PipelineVar_7_Source1SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PipelineVar_7_Source1SpringStream".
++        IFocusFincancialDataSpringStreamOutput dataItemSpringStream = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
++        try {
++            dataItemSpringStream = sourceData.getSpringStream();
++        } catch(DefaultModeException e) {
++            dataItemSpringStream.setSymbolTuple("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSpringStream!=null){
++            _collector.emit("PipelineVar_7_Source1SpringStream", new Values(dataItemSpringStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "playerList" :
++                    logger.info("Received the parameter playerList!");
++                    sourceData.setParameterPlayerList(para.getStringValue()); 
++                    sendParameterChangeEvent("playerList", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_7_Source1SymbolList", new Fields("PipelineVar_7_Source1SymbolListFields"));
++        declarer.declareStream("PipelineVar_7_Source1SpringStream", new Fields("PipelineVar_7_Source1SpringStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/Topology.java
+new file mode 100644
+index 0000000..075df1c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/Topology.java
+@@ -0,0 +1,190 @@
++package eu.qualimaster.FocusPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt;
++import eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt;
++import eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm;
++import eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm;
++import eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm;
++import eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "FocusPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 13; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "TwitterDataSource"
++
++            builder.setSpout("PipelineVar_7_Source0", new PipelineVar_7_Source0Source("PipelineVar_7_Source0", "FocusPip"), 1);
++            // Declare a Bolt "SpamDetection"
++
++            BoltDeclarer PipelineVar_7_FamilyElement0=builder.setBolt("PipelineVar_7_FamilyElement0", new PipelineVar_7_FamilyElement0FamilyElement("PipelineVar_7_FamilyElement0", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement0.shuffleGrouping("PipelineVar_7_Source0", "PipelineVar_7_Source0TwitterStream");
++            // Declare a Bolt "Spam Removal"
++
++            BoltDeclarer PipelineVar_7_FamilyElement1=builder.setBolt("PipelineVar_7_FamilyElement1", new PipelineVar_7_FamilyElement1FamilyElement("PipelineVar_7_FamilyElement1", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement1.shuffleGrouping("PipelineVar_7_FamilyElement0", "PipelineVar_7_FamilyElement0TwitterStream");
++            // Declare a Bolt "StockParser"
++
++            BoltDeclarer PipelineVar_7_FamilyElement2=builder.setBolt("PipelineVar_7_FamilyElement2", new PipelineVar_7_FamilyElement2FamilyElement("PipelineVar_7_FamilyElement2", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement2.shuffleGrouping("PipelineVar_7_FamilyElement1", "PipelineVar_7_FamilyElement1TwitterStream");
++            // Declare a Bolt "EventDetection"
++
++            BoltDeclarer PipelineVar_7_FamilyElement3=builder.setBolt("PipelineVar_7_FamilyElement3", new PipelineVar_7_FamilyElement3FamilyElement("PipelineVar_7_FamilyElement3", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement3.shuffleGrouping("PipelineVar_7_FamilyElement2", "PipelineVar_7_FamilyElement2TwitterStream");
++            // Declare a Bolt "KeywordAnalyzer"
++
++            BoltDeclarer PipelineVar_7_FamilyElement4=builder.setBolt("PipelineVar_7_FamilyElement4", new PipelineVar_7_FamilyElement4FamilyElement("PipelineVar_7_FamilyElement4", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement4.shuffleGrouping("PipelineVar_7_FamilyElement3", "PipelineVar_7_FamilyElement3TwitterStream");
++            // Declare a Bolt "Recommendations"
++
++            BoltDeclarer PipelineVar_7_FamilyElement5=builder.setBolt("PipelineVar_7_FamilyElement5", new PipelineVar_7_FamilyElement5FamilyElement("PipelineVar_7_FamilyElement5", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement5.shuffleGrouping("PipelineVar_7_FamilyElement4", "PipelineVar_7_FamilyElement4TwitterStream");
++            // Declare a Bolt "FocusSink"
++
++            BoltDeclarer PipelineVar_7_Sink0=builder.setBolt("PipelineVar_7_Sink0", new PipelineVar_7_Sink0Sink("PipelineVar_7_Sink0", "FocusPip"), 1);
++            PipelineVar_7_Sink0.shuffleGrouping("PipelineVar_7_FamilyElement5", "PipelineVar_7_FamilyElement5RecommendationStream");
++            // Declare a Spout "SpringDataSource"
++
++            builder.setSpout("PipelineVar_7_Source1", new PipelineVar_7_Source1Source("PipelineVar_7_Source1", "FocusPip"), 1);
++            // Declare a Bolt "preprocessor"
++
++            BoltDeclarer PipelineVar_7_FamilyElement6=builder.setBolt("PipelineVar_7_FamilyElement6", new PipelineVar_7_FamilyElement6FamilyElement("PipelineVar_7_FamilyElement6", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement6.shuffleGrouping("PipelineVar_7_Source1", "PipelineVar_7_Source1SpringStream");
++            // Declare a Bolt "correlation"
++
++            BoltDeclarer PipelineVar_7_FamilyElement7=builder.setBolt("PipelineVar_7_FamilyElement7", new PipelineVar_7_FamilyElement7FamilyElement("PipelineVar_7_FamilyElement7", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement7.shuffleGrouping("PipelineVar_7_FamilyElement6", "PipelineVar_7_FamilyElement6PreprocessedStream");
++            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
++            }
++            builder.startRecording("TopoSoftwareCorrelationFinancial");
++            ITopologyCreate PipelineVar_7_FamilyElement71SubCreator = new TopoSoftwareCorrelationFinancial();
++            SubTopologyOutput PipelineVar_7_FamilyElement71SubOutput = PipelineVar_7_FamilyElement71SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial");
++            builder.endRecording(PipelineVar_7_FamilyElement71SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement71SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement71SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
++            ITopologyCreate PipelineVar_7_FamilyElement72SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
++            SubTopologyOutput PipelineVar_7_FamilyElement72SubOutput = PipelineVar_7_FamilyElement72SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7GenTopoHardwareCorrelationFinancial");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement72SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement72SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
++            ITopologyCreate PipelineVar_7_FamilyElement73SubCreator = new CorrelationSWSubTopology();
++            SubTopologyOutput PipelineVar_7_FamilyElement73SubOutput = PipelineVar_7_FamilyElement73SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7CorrelationSW");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement73SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement73SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
++            ITopologyCreate PipelineVar_7_FamilyElement74SubCreator = new TransferEntropyHardwareSubTopology();
++            SubTopologyOutput PipelineVar_7_FamilyElement74SubOutput = PipelineVar_7_FamilyElement74SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7TransferEntropyHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement74SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement74SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
++            ITopologyCreate PipelineVar_7_FamilyElement75SubCreator = new MutualInformationHardwareSubTopology();
++            SubTopologyOutput PipelineVar_7_FamilyElement75SubOutput = PipelineVar_7_FamilyElement75SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7MutualInformationHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement75SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement75SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
++            ITopologyCreate PipelineVar_7_FamilyElement76SubCreator = new CorrelationSWAlternativeSubTopology();
++            SubTopologyOutput PipelineVar_7_FamilyElement76SubOutput = PipelineVar_7_FamilyElement76SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7CorrelationSWAlternative");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement76SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement76SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "DynamicGraphCompilation"
++
++            BoltDeclarer PipelineVar_7_FamilyElement8=builder.setBolt("PipelineVar_7_FamilyElement8", new PipelineVar_7_FamilyElement8FamilyElement("PipelineVar_7_FamilyElement8", "FocusPip"), 1);
++            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement71SubOutput.getBoltName(), PipelineVar_7_FamilyElement71SubOutput.getStreamId());
++            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement72SubOutput.getBoltName(), PipelineVar_7_FamilyElement72SubOutput.getStreamId());
++            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement73SubOutput.getBoltName(), PipelineVar_7_FamilyElement73SubOutput.getStreamId());
++            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement74SubOutput.getBoltName(), PipelineVar_7_FamilyElement74SubOutput.getStreamId());
++            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement75SubOutput.getBoltName(), PipelineVar_7_FamilyElement75SubOutput.getStreamId());
++            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement76SubOutput.getBoltName(), PipelineVar_7_FamilyElement76SubOutput.getStreamId());
++            PipelineVar_7_Sink0.shuffleGrouping("PipelineVar_7_FamilyElement8", "PipelineVar_7_FamilyElement8EdgeStream");
++            PipelineVar_7_FamilyElement7.shuffleGrouping("PipelineVar_7_Source1", "PipelineVar_7_Source1SymbolList");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/mapping.xml
+new file mode 100644
+index 0000000..dc2fe02
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/mapping.xml
+@@ -0,0 +1,45 @@
++<mapping>
++  <pipeline name="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.Topology">
++      <node name="FinancialDataSource" type="source">
++          <component name="PipelineVar_16_Source0" container="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.PipelineVar_16_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="Preprocessor" type="family">
++          <component name="PipelineVar_16_FamilyElement0" container="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.PipelineVar_16_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
++      </node>
++      <node name="FinancialCorrelation" type="family">
++          <component name="PipelineVar_16_FamilyElement1" container="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.PipelineVar_16_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
++      </node>
++      <node name="Sink" type="sink">
++          <component name="PipelineVar_16_Sink0" container="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.PipelineVar_16_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
++      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
++      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
++              <component name="CorrelationSWMapper" container="PriorityFinancialPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWHayashiYoshida" container="PriorityFinancialPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
++          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
++          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
++              <component name="CorrelationSWAlternativeMP" container="PriorityFinancialPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWAlternativeHY" container="PriorityFinancialPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="SimulatedFinancialData" implName="SpringClientSimulator" class="eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator"/>
++      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
++      <parameter parameter="speedFactor" name="FinancialDataSource" receiver="PipelineVar_16_Source0"/> 
++      <parameter parameter="windowSize" name="FinancialCorrelation" receiver="PipelineVar_16_FamilyElement1"/> 
++      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
++      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/pom.xml
+new file mode 100644
+index 0000000..3d641d7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/pom.xml
+@@ -0,0 +1,285 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityFinancialPip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>spring-client-simulator</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-preprocessor</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-correlation-financial-software</artifactId>
++      <version>3.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSW</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TransferEntropyHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>MutualInformationHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSWAlternative</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-priority-data-sink</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/settings.xml
+new file mode 100644
+index 0000000..00cd188
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/settings.xml
+@@ -0,0 +1,89 @@
++<pipeline>
++    <name>PriorityFinancialPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changespeedFactor</name>
++			<request>
++				<field sequence="0">changespeedFactor</field>
++				<field sequence="1">%newSpeedFactor%</field>
++			</request>
++			<response>
++				<field sequence="0">changespeedFactor_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newSpeedFactor%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..2b92fcd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement0FamilyElement.java
+@@ -0,0 +1,250 @@
++package eu.qualimaster.PriorityFinancialPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_16_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_16_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++    private transient IFPreprocessor alg = null; 
++    transient ISimulatedFinancialDataSpringStreamOutput iTupleSpringStream = null;
++    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
++
++    public PipelineVar_16_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
++                _collector.emit("PipelineVar_16_FamilyElement0PreprocessedStream", new Values(item));
++            }
++        };
++        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                    alg = (IFPreprocessor) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Preprocessor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fPreprocessor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof ISimulatedFinancialDataSpringStreamOutput) {
++        iTupleSpringStream = (ISimulatedFinancialDataSpringStreamOutput)tupleItem;
++        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
++        try {
++            if(alg != null) {
++                alg.calculate(inputSpringStream, preprocessedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            preprocessedStreamResult.setSymbolId("");
++            preprocessedStreamResult.setTimestamp(0);
++            preprocessedStreamResult.setValue(0.0);
++            preprocessedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
++            iterPreprocessedStream.reset();
++            while (iterPreprocessedStream.hasNext()) {
++                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
++                _collector.emit("PipelineVar_16_FamilyElement0PreprocessedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Preprocessor":
++                if (!algChange || !(alg instanceof Preprocessor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                        alg = (IFPreprocessor) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_16_FamilyElement0PreprocessedStream", new Fields("PipelineVar_16_FamilyElement0PreprocessedStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..816ad92
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement1FamilyElement.java
+@@ -0,0 +1,544 @@
++package eu.qualimaster.PriorityFinancialPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
++import eu.qualimaster.common.hardware.*;
++import com.google.protobuf.ByteString;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_16_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_16_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial";
++    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++    private transient IFCorrelationFinancial alg = null; 
++    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
++    transient ISimulatedFinancialDataSymbolListOutput iTupleSymbolList = null;
++    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++
++    public PipelineVar_16_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
++                _collector.emit("PipelineVar_16_FamilyElement1PairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                    alg = (IFCorrelationFinancial) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
++            streamId = "PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fCorrelationFinancial"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
++            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
++            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputPreprocessedStream));
++            }
++        }
++
++        if(tupleItem instanceof ISimulatedFinancialDataSymbolListOutput) {
++            iTupleSymbolList = (ISimulatedFinancialDataSymbolListOutput)tupleItem;
++            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputSymbolList));
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("PipelineVar_16_FamilyElement1PairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TopoSoftwareCorrelationFinancial":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "GenTopoHardwareCorrelationFinancial":
++            case "GenTopoHardwareCorrelationFinancialSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityFinancialPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityFinancialPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_16_FamilyElement1GenTopoHardwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSW":
++            case "CorrelationSWSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_16_FamilyElement1CorrelationSW";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "TransferEntropyHardware":
++            case "TransferEntropyHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityFinancialPip",
++                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityFinancialPip",
++                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_16_FamilyElement1TransferEntropyHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "MutualInformationHardware":
++            case "MutualInformationHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityFinancialPip",
++                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityFinancialPip",
++                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_16_FamilyElement1MutualInformationHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSWAlternative":
++            case "CorrelationSWAlternativeSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_16_FamilyElement1CorrelationSWAlternative";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_16_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_16_FamilyElement1PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_16_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_16_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_16_FamilyElement1CorrelationSW", new Fields("PipelineVar_16_FamilyElement1CorrelationSWFields"));
++        declarer.declareStream("PipelineVar_16_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_16_FamilyElement1TransferEntropyHardwareFields"));
++        declarer.declareStream("PipelineVar_16_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_16_FamilyElement1MutualInformationHardwareFields"));
++        declarer.declareStream("PipelineVar_16_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_16_FamilyElement1CorrelationSWAlternativeFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Sink0Sink.java
+new file mode 100644
+index 0000000..68623de
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Sink0Sink.java
+@@ -0,0 +1,140 @@
++package eu.qualimaster.PriorityFinancialPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IPriorityDataSink;
++import eu.qualimaster.data.inf.IPriorityDataSink.*;
++import eu.qualimaster.data.imp.PriorityDataSink;
++import eu.qualimaster.data.imp.PriorityDataSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_16_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_16_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient IPriorityDataSink sinkHandler;
++private int counter = 0;
++    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
++    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
++
++	public PipelineVar_16_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
++            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
++            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++            sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
++            emitted(inputPairwiseFinancial);
++        }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_16_Sink0PairwiseFinancial", new Fields("PipelineVar_16_Sink0PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_16_Sink0AnalyzedStream", new Fields("PipelineVar_16_Sink0AnalyzedStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Source0Source.java
+new file mode 100644
+index 0000000..ae2e55a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Source0Source.java
+@@ -0,0 +1,210 @@
++package eu.qualimaster.PriorityFinancialPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ISimulatedFinancialData;
++import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
++import eu.qualimaster.data.imp.SimulatedFinancialData;
++import eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_16_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_16_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ISimulatedFinancialData sourceData;
++
++    public PipelineVar_16_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("PriorityFinancialPip", "PipelineVar_16_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedFinancialDataSymbolListOutput>(ISimulatedFinancialDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(ISimulatedFinancialDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedFinancialDataSpringStreamOutput>(ISimulatedFinancialDataSpringStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ISimulatedFinancialDataSpringStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ISimulatedFinancialData> cls = (Class<? extends ISimulatedFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("SpringClientSimulator", null);
++            sourceData.setParameterSpeedFactor(PipelineOptions.getExecutorDoubleArgument(conf, getName(), "speedFactor", 1.0));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("PriorityFinancialPip", "PipelineVar_16_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_16_Source0StreamSymbolList".
++        ISimulatedFinancialDataSymbolListOutput dataItemSymbolList = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null && isEnabled(dataItemSymbolList)){
++            _collector.emit("PipelineVar_16_Source0SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PipelineVar_16_Source0SpringStream".
++        ISimulatedFinancialDataSpringStreamOutput dataItemSpringStream = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
++        try {
++            dataItemSpringStream = sourceData.getSpringStream();
++        } catch(DefaultModeException e) {
++            dataItemSpringStream.setSymbolTuple("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSpringStream!=null && isEnabled(dataItemSpringStream)){
++            _collector.emit("PipelineVar_16_Source0SpringStream", new Values(dataItemSpringStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "speedFactor" :
++                    try {
++                        logger.info("Received the parameter speedFactor!");
++                        sourceData.setParameterSpeedFactor(para.getDoubleValue()); 
++                        sendParameterChangeEvent("speedFactor", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_16_Source0SymbolList", new Fields("PipelineVar_16_Source0SymbolListFields"));
++        declarer.declareStream("PipelineVar_16_Source0SpringStream", new Fields("PipelineVar_16_Source0SpringStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/Topology.java
+new file mode 100644
+index 0000000..bd4e220
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/Topology.java
+@@ -0,0 +1,151 @@
++package eu.qualimaster.PriorityFinancialPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "PriorityFinancialPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 16; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "FinancialDataSource"
++
++            builder.setSpout("PipelineVar_16_Source0", new PipelineVar_16_Source0Source("PipelineVar_16_Source0", "PriorityFinancialPip"), 1);
++            // Declare a Bolt "Preprocessor"
++
++            BoltDeclarer PipelineVar_16_FamilyElement0=builder.setBolt("PipelineVar_16_FamilyElement0", new PipelineVar_16_FamilyElement0FamilyElement("PipelineVar_16_FamilyElement0", "PriorityFinancialPip"), 1);
++            PipelineVar_16_FamilyElement0.shuffleGrouping("PipelineVar_16_Source0", "PipelineVar_16_Source0SpringStream");
++            // Declare a Bolt "FinancialCorrelation"
++
++            BoltDeclarer PipelineVar_16_FamilyElement1=builder.setBolt("PipelineVar_16_FamilyElement1", new PipelineVar_16_FamilyElement1FamilyElement("PipelineVar_16_FamilyElement1", "PriorityFinancialPip"), 1);
++            PipelineVar_16_FamilyElement1.shuffleGrouping("PipelineVar_16_FamilyElement0", "PipelineVar_16_FamilyElement0PreprocessedStream");
++            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
++            }
++            builder.startRecording("TopoSoftwareCorrelationFinancial");
++            ITopologyCreate PipelineVar_16_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
++            SubTopologyOutput PipelineVar_16_FamilyElement11SubOutput = PipelineVar_16_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial");
++            builder.endRecording(PipelineVar_16_FamilyElement11SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement11SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement11SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
++            ITopologyCreate PipelineVar_16_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
++            SubTopologyOutput PipelineVar_16_FamilyElement12SubOutput = PipelineVar_16_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1GenTopoHardwareCorrelationFinancial");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement12SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement12SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
++            ITopologyCreate PipelineVar_16_FamilyElement13SubCreator = new CorrelationSWSubTopology();
++            SubTopologyOutput PipelineVar_16_FamilyElement13SubOutput = PipelineVar_16_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1CorrelationSW");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement13SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement13SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
++            ITopologyCreate PipelineVar_16_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
++            SubTopologyOutput PipelineVar_16_FamilyElement14SubOutput = PipelineVar_16_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1TransferEntropyHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement14SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement14SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
++            ITopologyCreate PipelineVar_16_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
++            SubTopologyOutput PipelineVar_16_FamilyElement15SubOutput = PipelineVar_16_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1MutualInformationHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement15SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement15SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
++            ITopologyCreate PipelineVar_16_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
++            SubTopologyOutput PipelineVar_16_FamilyElement16SubOutput = PipelineVar_16_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1CorrelationSWAlternative");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement16SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement16SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "Sink"
++
++            BoltDeclarer PipelineVar_16_Sink0=builder.setBolt("PipelineVar_16_Sink0", new PipelineVar_16_Sink0Sink("PipelineVar_16_Sink0", "PriorityFinancialPip"), 1);
++            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement11SubOutput.getBoltName(), PipelineVar_16_FamilyElement11SubOutput.getStreamId());
++            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement12SubOutput.getBoltName(), PipelineVar_16_FamilyElement12SubOutput.getStreamId());
++            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement13SubOutput.getBoltName(), PipelineVar_16_FamilyElement13SubOutput.getStreamId());
++            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement14SubOutput.getBoltName(), PipelineVar_16_FamilyElement14SubOutput.getStreamId());
++            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement15SubOutput.getBoltName(), PipelineVar_16_FamilyElement15SubOutput.getStreamId());
++            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement16SubOutput.getBoltName(), PipelineVar_16_FamilyElement16SubOutput.getStreamId());
++            PipelineVar_16_FamilyElement1.shuffleGrouping("PipelineVar_16_Source0", "PipelineVar_16_Source0SymbolList");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/mapping.xml
+new file mode 100644
+index 0000000..8968bf1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/mapping.xml
+@@ -0,0 +1,70 @@
++<mapping>
++  <pipeline name="PriorityPip" class="eu.qualimaster.PriorityPip.topology.Topology">
++      <node name="FinancialDataSource" type="source">
++          <component name="PriorityPip_Source0" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="FinancialCorrelation" type="family">
++          <component name="PriorityPip_FamilyElement0" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
++      </node>
++      <node name="Sink" type="sink">
++          <component name="PriorityPip_Sink0" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="Preprocessor" type="family">
++          <component name="PriorityPip_FamilyElement1" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
++      </node>
++      <node name="TwitterDataSource" type="source">
++          <component name="PriorityPip_Source1" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_Source1Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="SentimentAnalysis" type="family">
++          <component name="PriorityPip_FamilyElement2" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SentimentAnaylsisSentiWordNetTopology" alternative1 = "SentimentAnaylsisSVMTopology"/>
++      </node>
++      <node name="DataManagement" type="data_mgt">
++          <component name="PriorityPip_DataManagementElement0" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_DataManagementElement0DataManagementElement" receiver="true" thrift="false"/>
++      </node>
++      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
++      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
++              <component name="CorrelationSWMapper" container="PriorityPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWHayashiYoshida" container="PriorityPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
++          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
++          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
++              <component name="CorrelationSWAlternativeMP" container="PriorityPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWAlternativeHY" container="PriorityPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
++      <algorithm name="SentimentAnaylsisSentiWordNetTopology" implName="SentimentAnaylsisSentiWordNetTopology" class="eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology"/>
++      <algorithm name="SentimentAnaylsisSVMTopology" implName="SentimentAnaylsisSVMTopology" class="eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology"/>
++      <algorithm name="Spring Financial Data" implName="SpringClient" class="eu.qualimaster.algorithms.imp.correlation.SpringClient"/>
++      <algorithm name="Twitter Stream Data" implName="TwitterFileStreaming" class="eu.qualimaster.data.stream.source.TwitterFileStreaming"/>
++      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
++      <parameter parameter="windowSize" name="FinancialCorrelation" receiver="PriorityPip_FamilyElement0"/> 
++      <parameter parameter="consumerKey" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="consumerSecret" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="accessToken" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="accessTokenSecret" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="queueSize" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="tweetDirectory" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="speedFactor" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="runLocally" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="adjustTimeToNow" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="realLoops" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="setAdditionalKeywords" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
++      <parameter parameter="timeSeriesGranularity" name="SentimentAnalysis" receiver="PriorityPip_FamilyElement2"/> 
++      <parameter parameter="sentimentClass" name="SentimentAnalysis" receiver="PriorityPip_FamilyElement2"/> 
++      <parameter parameter="classificationThreshold" name="SentimentAnalysis" receiver="PriorityPip_FamilyElement2"/> 
++      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
++      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/pom.xml
+new file mode 100644
+index 0000000..a1d468a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/pom.xml
+@@ -0,0 +1,300 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPip</artifactId>
++  <version>0.0.2-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>spring-client</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-correlation-financial-software</artifactId>
++      <version>3.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSW</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TransferEntropyHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>MutualInformationHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSWAlternative</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-priority-data-sink</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-preprocessor</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TwitterStreamDataSource</artifactId>
++      <version>0.0.5-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>SentiWordnetSubTopology</artifactId>
++      <version>0.0.5-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>SVMSubTopology</artifactId>
++      <version>0.0.5-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/settings.xml
+new file mode 100644
+index 0000000..5d01f15
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/settings.xml
+@@ -0,0 +1,89 @@
++<pipeline>
++    <name>PriorityPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changeclassificationThreshold</name>
++			<request>
++				<field sequence="0">changeclassificationThreshold</field>
++				<field sequence="1">%newClassificationThreshold%</field>
++			</request>
++			<response>
++				<field sequence="0">changeclassificationThreshold_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newClassificationThreshold%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_DataManagementElement0DataManagementElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_DataManagementElement0DataManagementElement.java
+new file mode 100644
+index 0000000..87c9424
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_DataManagementElement0DataManagementElement.java
+@@ -0,0 +1,68 @@
++package eu.qualimaster.PriorityPip.topology;
++
++import java.util.*;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.dataManagement.storage.AbstractStorageTable;
++import eu.qualimaster.dataManagement.storage.support.IStorageSupport;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.families.inf.IFSentimentAnalysis.*;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PriorityPip_DataManagementElement0DataManagementElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PriorityPip_DataManagementElement0DataManagementElement.class);
++    transient OutputCollector _collector;
++    private static String streamId;
++    private transient IStorageSupport support;
++    transient IIFSentimentAnalysisAnalyzedStreamOutput iTupleAnalyzedStream = null;
++
++    public PriorityPip_DataManagementElement0DataManagementElement(String name, String namespace) {
++        super(name, namespace);
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		 super.prepare(map, topologyContext, collector);
++		 String pipelineName = "PriorityPip";
++		 String location = "hBase-l3s";
++		 IStorageStrategyDescriptor storageStrategy = FirstInFirstOutStorageStrategyDescriptor.INSTANCE;
++		 AbstractStorageTable table = DataManager.INTERMEDIARY_STORAGE_MANAGER.getTable(pipelineName, location, storageStrategy);
++         support = table.getStorageSupport();
++         _collector = collector;
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void execute(Tuple tuple) {
++        startMonitoring();
++    if(tuple instanceof IIFSentimentAnalysisAnalyzedStreamOutput) {
++        iTupleAnalyzedStream = (IIFSentimentAnalysisAnalyzedStreamOutput)tuple.getValue(0);
++        streamId = "PriorityPip_DataManagementElement0StreamAnalyzedStream";
++        //support.write(iTuple);
++        //_collector.ack(tuple);
++    }
++        endMonitoring();
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PriorityPip_DataManagementElement0StreamAnalyzedStream", new Fields("IIHBaseDataManagementOutput"));
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..cc0c2f3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement0FamilyElement.java
+@@ -0,0 +1,544 @@
++package eu.qualimaster.PriorityPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.common.hardware.*;
++import com.google.protobuf.ByteString;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PriorityPip_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PriorityPip_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial";
++    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++    private transient IFCorrelationFinancial alg = null; 
++    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
++    transient ISpringFinancialDataSymbolListOutput iTupleSymbolList = null;
++    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++
++    public PriorityPip_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
++                _collector.emit("PriorityPip_FamilyElement0PairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                    alg = (IFCorrelationFinancial) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
++            streamId = "PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fCorrelationFinancial"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
++            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
++            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputPreprocessedStream));
++            }
++        }
++
++        if(tupleItem instanceof ISpringFinancialDataSymbolListOutput) {
++            iTupleSymbolList = (ISpringFinancialDataSymbolListOutput)tupleItem;
++            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputSymbolList));
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("PriorityPip_FamilyElement0PairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TopoSoftwareCorrelationFinancial":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "GenTopoHardwareCorrelationFinancial":
++            case "GenTopoHardwareCorrelationFinancialSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PriorityPip_FamilyElement0GenTopoHardwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSW":
++            case "CorrelationSWSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PriorityPip_FamilyElement0CorrelationSW";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "TransferEntropyHardware":
++            case "TransferEntropyHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityPip",
++                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityPip",
++                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PriorityPip_FamilyElement0TransferEntropyHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "MutualInformationHardware":
++            case "MutualInformationHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityPip",
++                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityPip",
++                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PriorityPip_FamilyElement0MutualInformationHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSWAlternative":
++            case "CorrelationSWAlternativeSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PriorityPip_FamilyElement0CorrelationSWAlternative";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PriorityPip_FamilyElement0PairwiseFinancial", new Fields("PriorityPip_FamilyElement0PairwiseFinancialFields"));
++        declarer.declareStream("PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial", new Fields("PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancialFields"));
++        declarer.declareStream("PriorityPip_FamilyElement0GenTopoHardwareCorrelationFinancial", new Fields("PriorityPip_FamilyElement0GenTopoHardwareCorrelationFinancialFields"));
++        declarer.declareStream("PriorityPip_FamilyElement0CorrelationSW", new Fields("PriorityPip_FamilyElement0CorrelationSWFields"));
++        declarer.declareStream("PriorityPip_FamilyElement0TransferEntropyHardware", new Fields("PriorityPip_FamilyElement0TransferEntropyHardwareFields"));
++        declarer.declareStream("PriorityPip_FamilyElement0MutualInformationHardware", new Fields("PriorityPip_FamilyElement0MutualInformationHardwareFields"));
++        declarer.declareStream("PriorityPip_FamilyElement0CorrelationSWAlternative", new Fields("PriorityPip_FamilyElement0CorrelationSWAlternativeFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..e856c3e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement1FamilyElement.java
+@@ -0,0 +1,250 @@
++package eu.qualimaster.PriorityPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PriorityPip_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PriorityPip_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++    private transient IFPreprocessor alg = null; 
++    transient ISpringFinancialDataSpringStreamOutput iTupleSpringStream = null;
++    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
++
++    public PriorityPip_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
++                _collector.emit("PriorityPip_FamilyElement1PreprocessedStream", new Values(item));
++            }
++        };
++        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                    alg = (IFPreprocessor) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Preprocessor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fPreprocessor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof ISpringFinancialDataSpringStreamOutput) {
++        iTupleSpringStream = (ISpringFinancialDataSpringStreamOutput)tupleItem;
++        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
++        try {
++            if(alg != null) {
++                alg.calculate(inputSpringStream, preprocessedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            preprocessedStreamResult.setSymbolId("");
++            preprocessedStreamResult.setTimestamp(0);
++            preprocessedStreamResult.setValue(0.0);
++            preprocessedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
++            iterPreprocessedStream.reset();
++            while (iterPreprocessedStream.hasNext()) {
++                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
++                _collector.emit("PriorityPip_FamilyElement1PreprocessedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Preprocessor":
++                if (!algChange || !(alg instanceof Preprocessor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                        alg = (IFPreprocessor) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PriorityPip_FamilyElement1PreprocessedStream", new Fields("PriorityPip_FamilyElement1PreprocessedStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement2FamilyElement.java
+new file mode 100644
+index 0000000..e38bf2b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement2FamilyElement.java
+@@ -0,0 +1,338 @@
++package eu.qualimaster.PriorityPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFSentimentAnalysis.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology;
++import eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology;
++import eu.qualimaster.data.inf.ITwitterStreamData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PriorityPip_FamilyElement2FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PriorityPip_FamilyElement2FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology";
++    private transient FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput analyzedStreamResult = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
++    private transient IFSentimentAnalysis alg = null; 
++    transient ITwitterStreamDataTwitterStreamOutput iTupleTwitterStream = null;
++    transient IIFSentimentAnalysisTwitterStreamInput inputTwitterStream = null;
++
++    public PriorityPip_FamilyElement2FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        analyzedStreamResult = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
++        IItemEmitter<IIFSentimentAnalysisAnalyzedStreamOutput> analyzedStreamEmitter = new IItemEmitter<IIFSentimentAnalysisAnalyzedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFSentimentAnalysisAnalyzedStreamOutput item) {
++                _collector.emit("PriorityPip_FamilyElement2AnalyzedStream", new Values(item));
++            }
++        };
++        analyzedStreamResult.setEmitter(analyzedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology");
++                    alg = (IFSentimentAnalysis) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterTimeSeriesGranularity(PipelineOptions.getExecutorIntArgument(map, getName(), "timeSeriesGranularity", 60));
++                alg.setParameterSentimentClass(PipelineOptions.getExecutorIntArgument(map, getName(), "sentimentClass", 10));
++                alg.setParameterClassificationThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "classificationThreshold", 2.5));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("SentimentAnaylsisSentiWordNetTopology", null);
++            streamId = "PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fSentimentAnalysis"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof ITwitterStreamDataTwitterStreamOutput) {
++        iTupleTwitterStream = (ITwitterStreamDataTwitterStreamOutput)tupleItem;
++        inputTwitterStream = new FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput();
++        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
++        try {
++            if(alg != null) {
++                alg.calculate(inputTwitterStream, analyzedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            analyzedStreamResult.setSymbolId("");
++            analyzedStreamResult.setTimestamp(0);
++            analyzedStreamResult.setValue(0.0);
++            analyzedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++        if(alg instanceof ITopologyCreate) {
++            _collector.emit(streamId, new Values(inputTwitterStream));
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFSentimentAnalysisAnalyzedStreamOutput> iterAnalyzedStream = analyzedStreamResult.iterator();
++            iterAnalyzedStream.reset();
++            while (iterAnalyzedStream.hasNext()) {
++                IIFSentimentAnalysisAnalyzedStreamOutput out = iterAnalyzedStream.next();
++                _collector.emit("PriorityPip_FamilyElement2AnalyzedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "timeSeriesGranularity" :
++                    try {
++                        System.out.println("Received parameter changing signal timeSeriesGranularity");
++                        alg.setParameterTimeSeriesGranularity(para.getIntValue()); 
++                        sendParameterChangeEvent("timeSeriesGranularity", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "sentimentClass" :
++                    try {
++                        System.out.println("Received parameter changing signal sentimentClass");
++                        alg.setParameterSentimentClass(para.getIntValue()); 
++                        sendParameterChangeEvent("sentimentClass", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "classificationThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal classificationThreshold");
++                        alg.setParameterClassificationThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("classificationThreshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "SentimentAnaylsisSentiWordNetTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof SentimentAnaylsisSentiWordNetTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology");
++                        alg = (IFSentimentAnalysis) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology";
++                    alg.setParameterTimeSeriesGranularity(60);
++                    alg.setParameterSentimentClass(10);
++                    alg.setParameterClassificationThreshold(2.5);
++                    sendAlgorithmChangeEvent("SentimentAnaylsisSentiWordNetTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "SentimentAnaylsisSVMTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof SentimentAnaylsisSVMTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology");
++                        alg = (IFSentimentAnalysis) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PriorityPip_FamilyElement2SentimentAnaylsisSVMTopology";
++                    alg.setParameterTimeSeriesGranularity(60);
++                    alg.setParameterSentimentClass(10);
++                    alg.setParameterClassificationThreshold(2.5);
++                    sendAlgorithmChangeEvent("SentimentAnaylsisSVMTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PriorityPip_FamilyElement2AnalyzedStream", new Fields("PriorityPip_FamilyElement2AnalyzedStreamFields"));
++        declarer.declareStream("PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology", new Fields("PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopologyFields"));
++        declarer.declareStream("PriorityPip_FamilyElement2SentimentAnaylsisSVMTopology", new Fields("PriorityPip_FamilyElement2SentimentAnaylsisSVMTopologyFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Sink0Sink.java
+new file mode 100644
+index 0000000..a468a31
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Sink0Sink.java
+@@ -0,0 +1,153 @@
++package eu.qualimaster.PriorityPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IPriorityDataSink;
++import eu.qualimaster.data.inf.IPriorityDataSink.*;
++import eu.qualimaster.data.imp.PriorityDataSink;
++import eu.qualimaster.data.imp.PriorityDataSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFSentimentAnalysis.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PriorityPip_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PriorityPip_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient IPriorityDataSink sinkHandler;
++private int counter = 0;
++    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient IIFSentimentAnalysisAnalyzedStreamOutput iTupleAnalyzedStream = null;
++    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
++    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
++
++	public PriorityPip_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
++            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
++            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++            sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
++            emitted(inputPairwiseFinancial);
++        }
++
++        if(tupleItem instanceof IIFSentimentAnalysisAnalyzedStreamOutput) {
++            iTupleAnalyzedStream = (IIFSentimentAnalysisAnalyzedStreamOutput)tupleItem;
++            inputAnalyzedStream = new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++            inputAnalyzedStream.setSymbolId(iTupleAnalyzedStream.getSymbolId());
++            inputAnalyzedStream.setTimestamp(iTupleAnalyzedStream.getTimestamp());
++            inputAnalyzedStream.setValue(iTupleAnalyzedStream.getValue());
++            inputAnalyzedStream.setVolume(iTupleAnalyzedStream.getVolume());
++            sinkHandler.postDataAnalyzedStream(inputAnalyzedStream);
++            emitted(inputAnalyzedStream);
++        }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PriorityPip_Sink0PairwiseFinancial", new Fields("PriorityPip_Sink0PairwiseFinancialFields"));
++        declarer.declareStream("PriorityPip_Sink0AnalyzedStream", new Fields("PriorityPip_Sink0AnalyzedStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source0Source.java
+new file mode 100644
+index 0000000..fd00709
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source0Source.java
+@@ -0,0 +1,200 @@
++package eu.qualimaster.PriorityPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ISpringFinancialData;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.data.imp.SpringFinancialData;
++import eu.qualimaster.algorithms.imp.correlation.SpringClient;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PriorityPip_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PriorityPip_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ISpringFinancialData sourceData;
++
++    public PriorityPip_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("PriorityPip", "PriorityPip_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSymbolListOutput>(ISpringFinancialDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSpringStreamOutput>(ISpringFinancialDataSpringStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ISpringFinancialData> cls = (Class<? extends ISpringFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClient");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("SpringClient", null);
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("PriorityPip", "PriorityPip_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PriorityPip_Source0StreamSymbolList".
++        ISpringFinancialDataSymbolListOutput dataItemSymbolList = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PriorityPip_Source0SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PriorityPip_Source0SpringStream".
++        ISpringFinancialDataSpringStreamOutput dataItemSpringStream = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
++        try {
++            dataItemSpringStream = sourceData.getSpringStream();
++        } catch(DefaultModeException e) {
++            dataItemSpringStream.setSymbolTuple("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSpringStream!=null){
++            _collector.emit("PriorityPip_Source0SpringStream", new Values(dataItemSpringStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PriorityPip_Source0SymbolList", new Fields("PriorityPip_Source0SymbolListFields"));
++        declarer.declareStream("PriorityPip_Source0SpringStream", new Fields("PriorityPip_Source0SpringStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source1Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source1Source.java
+new file mode 100644
+index 0000000..c807f0b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source1Source.java
+@@ -0,0 +1,286 @@
++package eu.qualimaster.PriorityPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ITwitterStreamData;
++import eu.qualimaster.data.inf.ITwitterStreamData.*;
++import eu.qualimaster.data.imp.TwitterStreamData;
++import eu.qualimaster.data.stream.source.TwitterFileStreaming;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PriorityPip_Source1Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PriorityPip_Source1Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ITwitterStreamData sourceData;
++
++    public PriorityPip_Source1Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("PriorityPip", "PriorityPip_Source1", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITwitterStreamDataSymbolListOutput>(ITwitterStreamDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(ITwitterStreamDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITwitterStreamDataTwitterStreamOutput>(ITwitterStreamDataTwitterStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ITwitterStreamDataTwitterStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ITwitterStreamData> cls = (Class<? extends ITwitterStreamData>) Class.forName("eu.qualimaster.data.stream.source.TwitterFileStreaming");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("TwitterFileStreaming", null);
++            sourceData.setParameterConsumerKey(PipelineOptions.getExecutorStringArgument(conf, getName(), "consumerKey", ""));
++            sourceData.setParameterConsumerSecret(PipelineOptions.getExecutorStringArgument(conf, getName(), "consumerSecret", ""));
++            sourceData.setParameterAccessToken(PipelineOptions.getExecutorStringArgument(conf, getName(), "accessToken", ""));
++            sourceData.setParameterAccessTokenSecret(PipelineOptions.getExecutorStringArgument(conf, getName(), "accessTokenSecret", ""));
++            sourceData.setParameterQueueSize(PipelineOptions.getExecutorIntArgument(conf, getName(), "queueSize", 0));
++            sourceData.setParameterTweetDirectory(PipelineOptions.getExecutorStringArgument(conf, getName(), "tweetDirectory", "/user/storm/resultSymbols"));
++            sourceData.setParameterSpeedFactor(PipelineOptions.getExecutorDoubleArgument(conf, getName(), "speedFactor", 0.0));
++            sourceData.setParameterRunLocally(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "runLocally", false));
++            sourceData.setParameterAdjustTimeToNow(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "adjustTimeToNow", false));
++            sourceData.setParameterRealLoops(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "realLoops", false));
++            sourceData.setParameterSetAdditionalKeywords(PipelineOptions.getExecutorStringArgument(conf, getName(), "setAdditionalKeywords", ""));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("PriorityPip", "PriorityPip_Source1", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PriorityPip_Source1StreamSymbolList".
++        ITwitterStreamDataSymbolListOutput dataItemSymbolList = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PriorityPip_Source1SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PriorityPip_Source1TwitterStream".
++        ITwitterStreamDataTwitterStreamOutput dataItemTwitterStream = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
++        try {
++            dataItemTwitterStream = sourceData.getTwitterStream();
++        } catch(DefaultModeException e) {
++            dataItemTwitterStream.setStatus(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemTwitterStream!=null){
++            _collector.emit("PriorityPip_Source1TwitterStream", new Values(dataItemTwitterStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "consumerKey" :
++                    logger.info("Received the parameter consumerKey!");
++                    sourceData.setParameterConsumerKey(para.getStringValue()); 
++                    sendParameterChangeEvent("consumerKey", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "consumerSecret" :
++                    logger.info("Received the parameter consumerSecret!");
++                    sourceData.setParameterConsumerSecret(para.getStringValue()); 
++                    sendParameterChangeEvent("consumerSecret", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "accessToken" :
++                    logger.info("Received the parameter accessToken!");
++                    sourceData.setParameterAccessToken(para.getStringValue()); 
++                    sendParameterChangeEvent("accessToken", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "accessTokenSecret" :
++                    logger.info("Received the parameter accessTokenSecret!");
++                    sourceData.setParameterAccessTokenSecret(para.getStringValue()); 
++                    sendParameterChangeEvent("accessTokenSecret", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "queueSize" :
++                    try {
++                        logger.info("Received the parameter queueSize!");
++                        sourceData.setParameterQueueSize(para.getIntValue()); 
++                        sendParameterChangeEvent("queueSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "tweetDirectory" :
++                    logger.info("Received the parameter tweetDirectory!");
++                    sourceData.setParameterTweetDirectory(para.getStringValue()); 
++                    sendParameterChangeEvent("tweetDirectory", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "speedFactor" :
++                    try {
++                        logger.info("Received the parameter speedFactor!");
++                        sourceData.setParameterSpeedFactor(para.getDoubleValue()); 
++                        sendParameterChangeEvent("speedFactor", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "runLocally" :
++                    try {
++                        logger.info("Received the parameter runLocally!");
++                        sourceData.setParameterRunLocally(para.getBooleanValue()); 
++                        sendParameterChangeEvent("runLocally", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "adjustTimeToNow" :
++                    try {
++                        logger.info("Received the parameter adjustTimeToNow!");
++                        sourceData.setParameterAdjustTimeToNow(para.getBooleanValue()); 
++                        sendParameterChangeEvent("adjustTimeToNow", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "realLoops" :
++                    try {
++                        logger.info("Received the parameter realLoops!");
++                        sourceData.setParameterRealLoops(para.getBooleanValue()); 
++                        sendParameterChangeEvent("realLoops", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "setAdditionalKeywords" :
++                    logger.info("Received the parameter setAdditionalKeywords!");
++                    sourceData.setParameterSetAdditionalKeywords(para.getStringValue()); 
++                    sendParameterChangeEvent("setAdditionalKeywords", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PriorityPip_Source1SymbolList", new Fields("PriorityPip_Source1SymbolListFields"));
++        declarer.declareStream("PriorityPip_Source1TwitterStream", new Fields("PriorityPip_Source1TwitterStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/Topology.java
+new file mode 100644
+index 0000000..21d9142
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/Topology.java
+@@ -0,0 +1,187 @@
++package eu.qualimaster.PriorityPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology;
++import eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "PriorityPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 1; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "FinancialDataSource"
++
++            builder.setSpout("PriorityPip_Source0", new PriorityPip_Source0Source("PriorityPip_Source0", "PriorityPip"), 1);
++            // Declare a Bolt "FinancialCorrelation"
++
++            BoltDeclarer PriorityPip_FamilyElement0=builder.setBolt("PriorityPip_FamilyElement0", new PriorityPip_FamilyElement0FamilyElement("PriorityPip_FamilyElement0", "PriorityPip"), 1);
++            PriorityPip_FamilyElement0.shuffleGrouping("PriorityPip_Source0", "PriorityPip_Source0SymbolList");
++            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
++            }
++            builder.startRecording("TopoSoftwareCorrelationFinancial");
++            ITopologyCreate PriorityPip_FamilyElement01SubCreator = new TopoSoftwareCorrelationFinancial();
++            SubTopologyOutput PriorityPip_FamilyElement01SubOutput = PriorityPip_FamilyElement01SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial");
++            builder.endRecording(PriorityPip_FamilyElement01SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement01SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement01SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
++            ITopologyCreate PriorityPip_FamilyElement02SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
++            SubTopologyOutput PriorityPip_FamilyElement02SubOutput = PriorityPip_FamilyElement02SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0GenTopoHardwareCorrelationFinancial");
++            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement02SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement02SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
++            ITopologyCreate PriorityPip_FamilyElement03SubCreator = new CorrelationSWSubTopology();
++            SubTopologyOutput PriorityPip_FamilyElement03SubOutput = PriorityPip_FamilyElement03SubCreator.createSubTopology(builder,config,"CorrelationSW", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0CorrelationSW");
++            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement03SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement03SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
++            ITopologyCreate PriorityPip_FamilyElement04SubCreator = new TransferEntropyHardwareSubTopology();
++            SubTopologyOutput PriorityPip_FamilyElement04SubOutput = PriorityPip_FamilyElement04SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0TransferEntropyHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement04SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement04SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
++            ITopologyCreate PriorityPip_FamilyElement05SubCreator = new MutualInformationHardwareSubTopology();
++            SubTopologyOutput PriorityPip_FamilyElement05SubOutput = PriorityPip_FamilyElement05SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0MutualInformationHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement05SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement05SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
++            ITopologyCreate PriorityPip_FamilyElement06SubCreator = new CorrelationSWAlternativeSubTopology();
++            SubTopologyOutput PriorityPip_FamilyElement06SubOutput = PriorityPip_FamilyElement06SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0CorrelationSWAlternative");
++            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement06SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement06SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "Sink"
++
++            BoltDeclarer PriorityPip_Sink0=builder.setBolt("PriorityPip_Sink0", new PriorityPip_Sink0Sink("PriorityPip_Sink0", "PriorityPip"), 1);
++            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement01SubOutput.getBoltName(), PriorityPip_FamilyElement01SubOutput.getStreamId());
++            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement02SubOutput.getBoltName(), PriorityPip_FamilyElement02SubOutput.getStreamId());
++            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement03SubOutput.getBoltName(), PriorityPip_FamilyElement03SubOutput.getStreamId());
++            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement04SubOutput.getBoltName(), PriorityPip_FamilyElement04SubOutput.getStreamId());
++            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement05SubOutput.getBoltName(), PriorityPip_FamilyElement05SubOutput.getStreamId());
++            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement06SubOutput.getBoltName(), PriorityPip_FamilyElement06SubOutput.getStreamId());
++            // Declare a Bolt "Preprocessor"
++
++            BoltDeclarer PriorityPip_FamilyElement1=builder.setBolt("PriorityPip_FamilyElement1", new PriorityPip_FamilyElement1FamilyElement("PriorityPip_FamilyElement1", "PriorityPip"), 1);
++            PriorityPip_FamilyElement1.shuffleGrouping("PriorityPip_Source0", "PriorityPip_Source0SpringStream");
++            PriorityPip_FamilyElement0.shuffleGrouping("PriorityPip_FamilyElement1", "PriorityPip_FamilyElement1PreprocessedStream");
++            // Declare a Spout "TwitterDataSource"
++
++            builder.setSpout("PriorityPip_Source1", new PriorityPip_Source1Source("PriorityPip_Source1", "PriorityPip"), 1);
++            // Declare a Bolt "SentimentAnalysis"
++
++            BoltDeclarer PriorityPip_FamilyElement2=builder.setBolt("PriorityPip_FamilyElement2", new PriorityPip_FamilyElement2FamilyElement("PriorityPip_FamilyElement2", "PriorityPip"), 1);
++            PriorityPip_FamilyElement2.shuffleGrouping("PriorityPip_Source1", "PriorityPip_Source1TwitterStream");
++            //generate the Storm-based algorithm topology name:SentimentAnaylsisSentiWordNetTopology
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("SentimentAnaylsisSentiWordNetTopology"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("SentimentAnaylsisSentiWordNetTopology"), 1);
++            }
++            builder.startRecording("SentimentAnaylsisSentiWordNetTopology");
++            ITopologyCreate PriorityPip_FamilyElement21SubCreator = new SentimentAnaylsisSentiWordNetTopology();
++            SubTopologyOutput PriorityPip_FamilyElement21SubOutput = PriorityPip_FamilyElement21SubCreator.createSubTopology(builder,config,"SentimentAnaylsisSentiWordNetTopology", "PriorityPip_FamilyElement2", "PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology");
++            builder.endRecording(PriorityPip_FamilyElement21SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement21SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement21SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:SentimentAnaylsisSVMTopology
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("SentimentAnaylsisSVMTopology"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("SentimentAnaylsisSVMTopology"), 1);
++            }
++            builder.startRecording("SentimentAnaylsisSVMTopology");
++            ITopologyCreate PriorityPip_FamilyElement22SubCreator = new SentimentAnaylsisSVMTopology();
++            SubTopologyOutput PriorityPip_FamilyElement22SubOutput = PriorityPip_FamilyElement22SubCreator.createSubTopology(builder,config,"SentimentAnaylsisSVMTopology", "PriorityPip_FamilyElement2", "PriorityPip_FamilyElement2SentimentAnaylsisSVMTopology");
++            builder.endRecording(PriorityPip_FamilyElement22SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement22SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement22SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "DataManagement"
++
++            BoltDeclarer PriorityPip_DataManagementElement0=builder.setBolt("PriorityPip_DataManagementElement0", new PriorityPip_DataManagementElement0DataManagementElement("PriorityPip_DataManagementElement0", "PriorityPip"), 1);
++            PriorityPip_DataManagementElement0.shuffleGrouping(PriorityPip_FamilyElement21SubOutput.getBoltName(), PriorityPip_FamilyElement21SubOutput.getStreamId());
++            PriorityPip_DataManagementElement0.shuffleGrouping(PriorityPip_FamilyElement22SubOutput.getBoltName(), PriorityPip_FamilyElement22SubOutput.getStreamId());
++            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement21SubOutput.getBoltName(), PriorityPip_FamilyElement21SubOutput.getStreamId());
++            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement22SubOutput.getBoltName(), PriorityPip_FamilyElement22SubOutput.getStreamId());
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/mapping.xml
+new file mode 100644
+index 0000000..94d17ea
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/mapping.xml
+@@ -0,0 +1,44 @@
++<mapping>
++  <pipeline name="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.Topology">
++      <node name="FinancialSource" type="source">
++          <component name="PipelineVar_17_Source0" container="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.PipelineVar_17_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="Preprocessor" type="family">
++          <component name="PipelineVar_17_FamilyElement0" container="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.PipelineVar_17_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
++      </node>
++      <node name="CorrelationComputation" type="family">
++          <component name="PipelineVar_17_FamilyElement1" container="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.PipelineVar_17_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
++      </node>
++      <node name="Sink" type="sink">
++          <component name="PipelineVar_17_Sink0" container="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.PipelineVar_17_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
++      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
++      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
++              <component name="CorrelationSWMapper" container="PrioritySimulatePip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWHayashiYoshida" container="PrioritySimulatePip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
++          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
++          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
++              <component name="CorrelationSWAlternativeMP" container="PrioritySimulatePip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWAlternativeHY" container="PrioritySimulatePip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="FixedRateSimulatedFinancialData" implName="FixRateFinancialDataSource" class="eu.qualimaster.algorithm.FixRateFinancialDataSource"/>
++      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
++      <parameter parameter="windowSize" name="CorrelationComputation" receiver="PipelineVar_17_FamilyElement1"/> 
++      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
++      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/pom.xml
+new file mode 100644
+index 0000000..f3230ff
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/pom.xml
+@@ -0,0 +1,285 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PrioritySimulatePip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>DataSourceSimulator</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-preprocessor</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-correlation-financial-software</artifactId>
++      <version>3.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSW</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TransferEntropyHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>MutualInformationHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSWAlternative</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-priority-data-sink</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/settings.xml
+new file mode 100644
+index 0000000..467ea1b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/settings.xml
+@@ -0,0 +1,76 @@
++<pipeline>
++    <name>PrioritySimulatePip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..eca0000
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement0FamilyElement.java
+@@ -0,0 +1,250 @@
++package eu.qualimaster.PrioritySimulatePip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_17_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_17_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++    private transient IFPreprocessor alg = null; 
++    transient IFixedRateSimulatedFinancialDataSpringStreamOutput iTupleSpringStream = null;
++    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
++
++    public PipelineVar_17_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
++                _collector.emit("PipelineVar_17_FamilyElement0PreprocessedStream", new Values(item));
++            }
++        };
++        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                    alg = (IFPreprocessor) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Preprocessor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fPreprocessor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IFixedRateSimulatedFinancialDataSpringStreamOutput) {
++        iTupleSpringStream = (IFixedRateSimulatedFinancialDataSpringStreamOutput)tupleItem;
++        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
++        try {
++            if(alg != null) {
++                alg.calculate(inputSpringStream, preprocessedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            preprocessedStreamResult.setSymbolId("");
++            preprocessedStreamResult.setTimestamp(0);
++            preprocessedStreamResult.setValue(0.0);
++            preprocessedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
++            iterPreprocessedStream.reset();
++            while (iterPreprocessedStream.hasNext()) {
++                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
++                _collector.emit("PipelineVar_17_FamilyElement0PreprocessedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Preprocessor":
++                if (!algChange || !(alg instanceof Preprocessor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                        alg = (IFPreprocessor) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_17_FamilyElement0PreprocessedStream", new Fields("PipelineVar_17_FamilyElement0PreprocessedStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..940bfa6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement1FamilyElement.java
+@@ -0,0 +1,544 @@
++package eu.qualimaster.PrioritySimulatePip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData.*;
++import eu.qualimaster.common.hardware.*;
++import com.google.protobuf.ByteString;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_17_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_17_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial";
++    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++    private transient IFCorrelationFinancial alg = null; 
++    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
++    transient IFixedRateSimulatedFinancialDataSymbolListOutput iTupleSymbolList = null;
++    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++
++    public PipelineVar_17_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
++                _collector.emit("PipelineVar_17_FamilyElement1PairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                    alg = (IFCorrelationFinancial) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
++            streamId = "PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fCorrelationFinancial"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
++            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
++            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputPreprocessedStream));
++            }
++        }
++
++        if(tupleItem instanceof IFixedRateSimulatedFinancialDataSymbolListOutput) {
++            iTupleSymbolList = (IFixedRateSimulatedFinancialDataSymbolListOutput)tupleItem;
++            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputSymbolList));
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("PipelineVar_17_FamilyElement1PairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TopoSoftwareCorrelationFinancial":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "GenTopoHardwareCorrelationFinancial":
++            case "GenTopoHardwareCorrelationFinancialSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PrioritySimulatePip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PrioritySimulatePip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_17_FamilyElement1GenTopoHardwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSW":
++            case "CorrelationSWSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_17_FamilyElement1CorrelationSW";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "TransferEntropyHardware":
++            case "TransferEntropyHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PrioritySimulatePip",
++                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PrioritySimulatePip",
++                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_17_FamilyElement1TransferEntropyHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "MutualInformationHardware":
++            case "MutualInformationHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PrioritySimulatePip",
++                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PrioritySimulatePip",
++                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_17_FamilyElement1MutualInformationHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSWAlternative":
++            case "CorrelationSWAlternativeSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_17_FamilyElement1CorrelationSWAlternative";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_17_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_17_FamilyElement1PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_17_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_17_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_17_FamilyElement1CorrelationSW", new Fields("PipelineVar_17_FamilyElement1CorrelationSWFields"));
++        declarer.declareStream("PipelineVar_17_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_17_FamilyElement1TransferEntropyHardwareFields"));
++        declarer.declareStream("PipelineVar_17_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_17_FamilyElement1MutualInformationHardwareFields"));
++        declarer.declareStream("PipelineVar_17_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_17_FamilyElement1CorrelationSWAlternativeFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Sink0Sink.java
+new file mode 100644
+index 0000000..caeef90
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Sink0Sink.java
+@@ -0,0 +1,140 @@
++package eu.qualimaster.PrioritySimulatePip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IPriorityDataSink;
++import eu.qualimaster.data.inf.IPriorityDataSink.*;
++import eu.qualimaster.data.imp.PriorityDataSink;
++import eu.qualimaster.data.imp.PriorityDataSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_17_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_17_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient IPriorityDataSink sinkHandler;
++private int counter = 0;
++    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
++    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
++
++	public PipelineVar_17_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
++            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
++            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++            sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
++            emitted(inputPairwiseFinancial);
++        }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_17_Sink0PairwiseFinancial", new Fields("PipelineVar_17_Sink0PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_17_Sink0AnalyzedStream", new Fields("PipelineVar_17_Sink0AnalyzedStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Source0Source.java
+new file mode 100644
+index 0000000..609b1bd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Source0Source.java
+@@ -0,0 +1,200 @@
++package eu.qualimaster.PrioritySimulatePip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData;
++import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData.*;
++import eu.qualimaster.data.imp.FixedRateSimulatedFinancialData;
++import eu.qualimaster.algorithm.FixRateFinancialDataSource;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_17_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_17_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient IFixedRateSimulatedFinancialData sourceData;
++
++    public PipelineVar_17_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("PrioritySimulatePip", "PipelineVar_17_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFixedRateSimulatedFinancialDataSymbolListOutput>(IFixedRateSimulatedFinancialDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(IFixedRateSimulatedFinancialDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFixedRateSimulatedFinancialDataSpringStreamOutput>(IFixedRateSimulatedFinancialDataSpringStreamOutput.class) {
++            @Override
++            public String getAggregationKey(IFixedRateSimulatedFinancialDataSpringStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IFixedRateSimulatedFinancialData> cls = (Class<? extends IFixedRateSimulatedFinancialData>) Class.forName("eu.qualimaster.algorithm.FixRateFinancialDataSource");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, null);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("FixRateFinancialDataSource", null);
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("PrioritySimulatePip", "PipelineVar_17_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_17_Source0StreamSymbolList".
++        IFixedRateSimulatedFinancialDataSymbolListOutput dataItemSymbolList = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PipelineVar_17_Source0SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PipelineVar_17_Source0SpringStream".
++        IFixedRateSimulatedFinancialDataSpringStreamOutput dataItemSpringStream = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput();
++        try {
++            dataItemSpringStream = sourceData.getSpringStream();
++        } catch(DefaultModeException e) {
++            dataItemSpringStream.setSymbolTuple("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSpringStream!=null){
++            _collector.emit("PipelineVar_17_Source0SpringStream", new Values(dataItemSpringStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_17_Source0SymbolList", new Fields("PipelineVar_17_Source0SymbolListFields"));
++        declarer.declareStream("PipelineVar_17_Source0SpringStream", new Fields("PipelineVar_17_Source0SpringStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/Topology.java
+new file mode 100644
+index 0000000..6bd4bf9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/Topology.java
+@@ -0,0 +1,151 @@
++package eu.qualimaster.PrioritySimulatePip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "PrioritySimulatePip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 5; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "FinancialSource"
++
++            builder.setSpout("PipelineVar_17_Source0", new PipelineVar_17_Source0Source("PipelineVar_17_Source0", "PrioritySimulatePip"), 1);
++            // Declare a Bolt "Preprocessor"
++
++            BoltDeclarer PipelineVar_17_FamilyElement0=builder.setBolt("PipelineVar_17_FamilyElement0", new PipelineVar_17_FamilyElement0FamilyElement("PipelineVar_17_FamilyElement0", "PrioritySimulatePip"), 1);
++            PipelineVar_17_FamilyElement0.shuffleGrouping("PipelineVar_17_Source0", "PipelineVar_17_Source0SpringStream");
++            // Declare a Bolt "CorrelationComputation"
++
++            BoltDeclarer PipelineVar_17_FamilyElement1=builder.setBolt("PipelineVar_17_FamilyElement1", new PipelineVar_17_FamilyElement1FamilyElement("PipelineVar_17_FamilyElement1", "PrioritySimulatePip"), 1);
++            PipelineVar_17_FamilyElement1.shuffleGrouping("PipelineVar_17_FamilyElement0", "PipelineVar_17_FamilyElement0PreprocessedStream");
++            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
++            }
++            builder.startRecording("TopoSoftwareCorrelationFinancial");
++            ITopologyCreate PipelineVar_17_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
++            SubTopologyOutput PipelineVar_17_FamilyElement11SubOutput = PipelineVar_17_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial");
++            builder.endRecording(PipelineVar_17_FamilyElement11SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement11SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement11SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
++            ITopologyCreate PipelineVar_17_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
++            SubTopologyOutput PipelineVar_17_FamilyElement12SubOutput = PipelineVar_17_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1GenTopoHardwareCorrelationFinancial");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement12SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement12SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
++            ITopologyCreate PipelineVar_17_FamilyElement13SubCreator = new CorrelationSWSubTopology();
++            SubTopologyOutput PipelineVar_17_FamilyElement13SubOutput = PipelineVar_17_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1CorrelationSW");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement13SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement13SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
++            ITopologyCreate PipelineVar_17_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
++            SubTopologyOutput PipelineVar_17_FamilyElement14SubOutput = PipelineVar_17_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1TransferEntropyHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement14SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement14SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
++            ITopologyCreate PipelineVar_17_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
++            SubTopologyOutput PipelineVar_17_FamilyElement15SubOutput = PipelineVar_17_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1MutualInformationHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement15SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement15SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
++            ITopologyCreate PipelineVar_17_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
++            SubTopologyOutput PipelineVar_17_FamilyElement16SubOutput = PipelineVar_17_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1CorrelationSWAlternative");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement16SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement16SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "Sink"
++
++            BoltDeclarer PipelineVar_17_Sink0=builder.setBolt("PipelineVar_17_Sink0", new PipelineVar_17_Sink0Sink("PipelineVar_17_Sink0", "PrioritySimulatePip"), 1);
++            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement11SubOutput.getBoltName(), PipelineVar_17_FamilyElement11SubOutput.getStreamId());
++            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement12SubOutput.getBoltName(), PipelineVar_17_FamilyElement12SubOutput.getStreamId());
++            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement13SubOutput.getBoltName(), PipelineVar_17_FamilyElement13SubOutput.getStreamId());
++            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement14SubOutput.getBoltName(), PipelineVar_17_FamilyElement14SubOutput.getStreamId());
++            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement15SubOutput.getBoltName(), PipelineVar_17_FamilyElement15SubOutput.getStreamId());
++            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement16SubOutput.getBoltName(), PipelineVar_17_FamilyElement16SubOutput.getStreamId());
++            PipelineVar_17_FamilyElement1.shuffleGrouping("PipelineVar_17_Source0", "PipelineVar_17_Source0SymbolList");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/mapping.xml
+new file mode 100644
+index 0000000..1a12445
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/mapping.xml
+@@ -0,0 +1,22 @@
++<mapping>
++  <pipeline name="RandomPip" class="eu.qualimaster.RandomPip.topology.Topology">
++      <node name="src" type="source">
++          <component name="PipelineVar_1_Source0" container="RandomPip" class="eu.qualimaster.RandomPip.topology.PipelineVar_1_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="processor" type="family">
++          <component name="PipelineVar_1_FamilyElement0" container="RandomPip" class="eu.qualimaster.RandomPip.topology.PipelineVar_1_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "RandomProcessor1" alternative1 = "RandomProcessor2"/>
++      </node>
++      <node name="snk" type="sink">
++          <component name="PipelineVar_1_Sink0" container="RandomPip" class="eu.qualimaster.RandomPip.topology.PipelineVar_1_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="RandomProcessor1" implName="RandomProcessor1" class="eu.qualimaster.algorithms.RandomProcessor1"/>
++      <algorithm name="RandomProcessor2" implName="RandomProcessor2" class="eu.qualimaster.algorithms.RandomProcessor2"/>
++      <algorithm name="Random Source" implName="RandomSourceAlg" class="eu.qualimaster.algorithms.RandomSourceAlg"/>
++      <algorithm name="Random Sink" implName="RandomSinkAlg" class="eu.qualimaster.algorithms.RandomSinkAlg"/>
++      <parameter parameter="delay" name="src" receiver="PipelineVar_1_Source0"/> 
++      <parameter parameter="delay" name="processor" receiver="PipelineVar_1_FamilyElement0"/> 
++      <parameter parameter="flag" name="processor" receiver="PipelineVar_1_FamilyElement0"/> 
++      <parameter parameter="windowSize" name="processor" receiver="PipelineVar_1_FamilyElement0"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/pom.xml
+new file mode 100644
+index 0000000..bc24ee2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/pom.xml
+@@ -0,0 +1,260 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>RandomPip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomSourceAlg</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomProcessor1</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomProcessor2</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomSinkAlg</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/settings.xml
+new file mode 100644
+index 0000000..71a5595
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/settings.xml
+@@ -0,0 +1,63 @@
++<pipeline>
++    <name>RandomPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..d506530
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_FamilyElement0FamilyElement.java
+@@ -0,0 +1,337 @@
++package eu.qualimaster.RandomPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IRandomFamily.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.RandomProcessor1;
++import eu.qualimaster.algorithms.RandomProcessor2;
++import eu.qualimaster.data.inf.IRandomSource.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_1_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_1_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_1_FamilyElement0RandomProcessor1";
++    private transient RandomFamily.IRandomFamilyRandomDataOutput randomDataResult = new RandomFamily.IRandomFamilyRandomDataOutput();
++    private transient IRandomFamily alg = null; 
++    transient IRandomSourceRandomDataOutput iTupleRandomData = null;
++    transient IIRandomFamilyRandomDataInput inputRandomData = null;
++
++    public PipelineVar_1_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        randomDataResult = new RandomFamily.IRandomFamilyRandomDataOutput();
++        IItemEmitter<IIRandomFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IIRandomFamilyRandomDataOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIRandomFamilyRandomDataOutput item) {
++                _collector.emit("PipelineVar_1_FamilyElement0RandomData", new Values(item));
++            }
++        };
++        randomDataResult.setEmitter(randomDataEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor1");
++                    alg = (IRandomFamily) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 5));
++                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", false));
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("RandomProcessor1", null);
++            streamId = "PipelineVar_1_FamilyElement0RandomProcessor1";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "randomFamily"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IRandomSourceRandomDataOutput) {
++        iTupleRandomData = (IRandomSourceRandomDataOutput)tupleItem;
++        inputRandomData = new RandomFamily.IRandomFamilyRandomDataInput();
++        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
++        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
++        try {
++            if(alg != null) {
++                alg.calculate(inputRandomData, randomDataResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            randomDataResult.setRandomInteger(0);
++            randomDataResult.setTimestamp(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++        if(alg instanceof ITopologyCreate) {
++            _collector.emit(streamId, new Values(inputRandomData));
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIRandomFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
++            iterRandomData.reset();
++            while (iterRandomData.hasNext()) {
++                IIRandomFamilyRandomDataOutput out = iterRandomData.next();
++                _collector.emit("PipelineVar_1_FamilyElement0RandomData", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "delay" :
++                    try {
++                        System.out.println("Received parameter changing signal delay");
++                        alg.setParameterDelay(para.getIntValue()); 
++                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "flag" :
++                    try {
++                        System.out.println("Received parameter changing signal flag");
++                        alg.setParameterFlag(para.getBooleanValue()); 
++                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "RandomProcessor1":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof RandomProcessor1)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor1");
++                        alg = (IRandomFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_1_FamilyElement0RandomProcessor1";
++                    alg.setParameterDelay(5);
++                    alg.setParameterFlag(false);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("RandomProcessor1", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "RandomProcessor2":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof RandomProcessor2)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor2");
++                        alg = (IRandomFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_1_FamilyElement0RandomProcessor2";
++                    alg.setParameterDelay(0);
++                    alg.setParameterFlag(false);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("RandomProcessor2", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_1_FamilyElement0RandomData", new Fields("PipelineVar_1_FamilyElement0RandomDataFields"));
++        declarer.declareStream("PipelineVar_1_FamilyElement0RandomProcessor1", new Fields("PipelineVar_1_FamilyElement0RandomProcessor1Fields"));
++        declarer.declareStream("PipelineVar_1_FamilyElement0RandomProcessor2", new Fields("PipelineVar_1_FamilyElement0RandomProcessor2Fields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Sink0Sink.java
+new file mode 100644
+index 0000000..b0fc307
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Sink0Sink.java
+@@ -0,0 +1,133 @@
++package eu.qualimaster.RandomPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IRandomSink;
++import eu.qualimaster.data.inf.IRandomSink.*;
++import eu.qualimaster.data.imp.RandomSink;
++import eu.qualimaster.data.imp.RandomSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IRandomFamily.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_1_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_1_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient IRandomSink sinkHandler;
++private int counter = 0;
++    transient IIRandomFamilyRandomDataOutput iTupleRandomData = null;
++    transient IRandomSinkRandomDataInput inputRandomData = null;
++
++	public PipelineVar_1_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++    if(tupleItem instanceof IIRandomFamilyRandomDataOutput) {
++        iTupleRandomData = (IIRandomFamilyRandomDataOutput)tupleItem;
++        inputRandomData = new RandomSink.RandomSinkRandomDataInput();
++        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
++        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
++        sinkHandler.postDataRandomData(inputRandomData);
++        emitted(inputRandomData);
++    }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new RandomSink.RandomSinkRandomDataInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IRandomSink> cls = (Class<? extends IRandomSink>)Class.forName("eu.qualimaster.algorithms.RandomSinkAlg");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("RandomSinkAlg", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_1_Sink0RandomData", new Fields("PipelineVar_1_Sink0RandomDataFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Source0Source.java
+new file mode 100644
+index 0000000..46c60a0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Source0Source.java
+@@ -0,0 +1,192 @@
++package eu.qualimaster.RandomPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.IRandomSource;
++import eu.qualimaster.data.inf.IRandomSource.*;
++import eu.qualimaster.data.imp.RandomSource;
++import eu.qualimaster.algorithms.RandomSourceAlg;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_1_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_1_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient IRandomSource sourceData;
++
++    public PipelineVar_1_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("RandomPip", "PipelineVar_1_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IRandomSourceRandomDataOutput>(IRandomSourceRandomDataOutput.class) {
++            @Override
++            public String getAggregationKey(IRandomSourceRandomDataOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IRandomSource> cls = (Class<? extends IRandomSource>) Class.forName("eu.qualimaster.algorithms.RandomSourceAlg");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("RandomSourceAlg", null);
++            sourceData.setParameterDelay(PipelineOptions.getExecutorIntArgument(conf, getName(), "delay", 0));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("RandomPip", "PipelineVar_1_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_1_Source0StreamRandomData".
++        IRandomSourceRandomDataOutput dataItemRandomData = new RandomSource.RandomSourceRandomDataOutput();
++        try {
++            dataItemRandomData = sourceData.getRandomData();
++        } catch(DefaultModeException e) {
++            dataItemRandomData.setRandomInteger(0);
++            dataItemRandomData.setTimestamp(0);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemRandomData!=null){
++            _collector.emit("PipelineVar_1_Source0RandomData", new Values(dataItemRandomData));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "delay" :
++                    try {
++                        logger.info("Received the parameter delay!");
++                        sourceData.setParameterDelay(para.getIntValue()); 
++                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_1_Source0RandomData", new Fields("PipelineVar_1_Source0RandomDataFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/Topology.java
+new file mode 100644
+index 0000000..0bdf468
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/Topology.java
+@@ -0,0 +1,122 @@
++package eu.qualimaster.RandomPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.RandomProcessor1;
++import eu.qualimaster.algorithms.RandomProcessor2;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "RandomPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 1; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "src"
++
++            builder.setSpout("PipelineVar_1_Source0", new PipelineVar_1_Source0Source("PipelineVar_1_Source0", "RandomPip"), 1);
++            // Declare a Bolt "processor"
++
++            BoltDeclarer PipelineVar_1_FamilyElement0=builder.setBolt("PipelineVar_1_FamilyElement0", new PipelineVar_1_FamilyElement0FamilyElement("PipelineVar_1_FamilyElement0", "RandomPip"), 1);
++            PipelineVar_1_FamilyElement0.shuffleGrouping("PipelineVar_1_Source0", "PipelineVar_1_Source0RandomData");
++            //generate the Storm-based algorithm topology name:RandomProcessor1
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("RandomProcessor1"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("RandomProcessor1"), 1);
++            }
++            builder.startRecording("RandomProcessor1");
++            ITopologyCreate PipelineVar_1_FamilyElement01SubCreator = new RandomProcessor1();
++            SubTopologyOutput PipelineVar_1_FamilyElement01SubOutput = PipelineVar_1_FamilyElement01SubCreator.createSubTopology(builder,config,"RandomProcessor1", "PipelineVar_1_FamilyElement0", "PipelineVar_1_FamilyElement0RandomProcessor1");
++            builder.endRecording(PipelineVar_1_FamilyElement01SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_1_FamilyElement01SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_1_FamilyElement01SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:RandomProcessor2
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("RandomProcessor2"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("RandomProcessor2"), 1);
++            }
++            builder.startRecording("RandomProcessor2");
++            ITopologyCreate PipelineVar_1_FamilyElement02SubCreator = new RandomProcessor2();
++            SubTopologyOutput PipelineVar_1_FamilyElement02SubOutput = PipelineVar_1_FamilyElement02SubCreator.createSubTopology(builder,config,"RandomProcessor2", "PipelineVar_1_FamilyElement0", "PipelineVar_1_FamilyElement0RandomProcessor2");
++            builder.endRecording(PipelineVar_1_FamilyElement02SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_1_FamilyElement02SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_1_FamilyElement02SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "snk"
++
++            BoltDeclarer PipelineVar_1_Sink0=builder.setBolt("PipelineVar_1_Sink0", new PipelineVar_1_Sink0Sink("PipelineVar_1_Sink0", "RandomPip"), 1);
++            PipelineVar_1_Sink0.shuffleGrouping(PipelineVar_1_FamilyElement01SubOutput.getBoltName(), PipelineVar_1_FamilyElement01SubOutput.getStreamId());
++            PipelineVar_1_Sink0.shuffleGrouping(PipelineVar_1_FamilyElement02SubOutput.getBoltName(), PipelineVar_1_FamilyElement02SubOutput.getStreamId());
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/mapping.xml
+new file mode 100644
+index 0000000..1335ee3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/mapping.xml
+@@ -0,0 +1,14 @@
++<mapping>
++  <pipeline name="RandomSubPipeline1" class="eu.qualimaster.RandomSubPipeline1.topology.Topology">
++      <node name="dataProcessor" type="family">
++          <component name="RandomSubPipelineAlgorithm1DataProcessor" container="RandomSubPipeline1" class="eu.qualimaster.RandomSubPipeline1.topology.SubPipelineVar_11_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SwitchProcessor1" alternative1 = "SwitchProcessor2"/>
++      </node>
++      <algorithm name="SwitchProcessor1" implName="SwitchProcessor1" class="eu.qualimaster.algorithms.SwitchProcessor1"/>
++      <algorithm name="SwitchProcessor2" implName="SwitchProcessor2" class="eu.qualimaster.algorithms.SwitchProcessor2"/>
++      <parameter parameter="aggregationFactor" name="dataProcessor" receiver="RandomSubPipelineAlgorithm1DataProcessor"/> 
++      <parameter parameter="delay" name="dataProcessor" receiver="RandomSubPipelineAlgorithm1DataProcessor"/> 
++      <parameter parameter="flag" name="dataProcessor" receiver="RandomSubPipelineAlgorithm1DataProcessor"/> 
++      <parameter parameter="windowSize" name="dataProcessor" receiver="RandomSubPipelineAlgorithm1DataProcessor"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/pom.xml
+new file mode 100644
+index 0000000..f95e242
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/pom.xml
+@@ -0,0 +1,265 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>RandomSubPipeline1</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-assembly-plugin</artifactId>
++				<version>2.6</version>
++            	<dependencies>
++	                    <dependency>
++	                        <groupId>eu.qualimaster</groupId>
++	                        <artifactId>AlgorithmAssemblies</artifactId>
++	                        <version>0.5.0-SNAPSHOT</version>
++	                    </dependency>
++	                </dependencies>
++					<executions>
++					<execution>
++						<id>make-assembly</id>
++						<phase>package</phase>
++						<goals>
++							<goal>single</goal>
++						</goals>
++					<configuration>
++					<descriptorRefs>
++						<descriptorRef>jar-with-dependencies</descriptorRef>
++					</descriptorRefs>
++					<dependencySets>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>runtime</scope>
++						</dependencySet>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>provided</scope>
++						</dependencySet>
++					</dependencySets>
++					<archive>
++						<manifest>
++						</manifest>
++					</archive>
++				</configuration>
++					</execution>
++				<execution>
++                        <id>make-profilingAssembly</id>
++                        <phase>package</phase>
++                        <goals>
++                            <goal>single</goal>
++                        </goals>
++                        <configuration>
++                            <descriptorRefs>
++                                <descriptorRef>profiling</descriptorRef>
++                            </descriptorRefs>
++                        </configuration>
++                    </execution>
++				</executions>
++						</plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++	<dependency>
++          <groupId>eu.qualimaster</groupId>
++          <artifactId>AlgorithmAssemblies</artifactId>
++          <version>0.5.0-SNAPSHOT</version>
++      </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>SwitchProcessor1</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>SwitchProcessor2</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/profiling/profile.ctl
+new file mode 100644
+index 0000000..d5609a9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/profiling/profile.ctl
+@@ -0,0 +1 @@
++import eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/RandomSubPipeline1SubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/RandomSubPipeline1SubTopology.java
+new file mode 100644
+index 0000000..339b37c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/RandomSubPipeline1SubTopology.java
+@@ -0,0 +1,112 @@
++package eu.qualimaster.RandomSubPipeline1.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.Config;
++import backtype.storm.topology.TopologyBuilder;
++import eu.qualimaster.base.algorithm.ITopologyCreate;
++import eu.qualimaster.base.algorithm.SubTopologyOutput;
++import backtype.storm.topology.BoltDeclarer;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.SignalException;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.families.inf.IRandomFamily;
++
++public class RandomSubPipeline1SubTopology implements IRandomFamily, ITopologyCreate {
++    final static Logger logger = Logger.getLogger(RandomSubPipeline1SubTopology.class);
++    private int delay;
++    private boolean flag;
++    private int windowSize;
++    private transient State state;
++
++    public void switchState(State arg0) {
++        this.state = arg0;	
++    }
++
++    public Double getMeasurement(IObservable observable) {
++        return null;
++    }
++
++    public SubTopologyOutput createSubTopology(TopologyBuilder builder,
++    			Config config, String prefix, String input, String streamId) {
++        String namespace = "RandomSubPipeline1";
++        if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {
++            namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);
++        }
++        // Declare a Bolt "dataProcessor"
++
++        BoltDeclarer SubPipelineVar_11_FamilyElement0 =builder.setBolt(prefix+"DataProcessor", new SubPipelineVar_11_FamilyElement0FamilyElement(prefix+"DataProcessor", namespace), 1);
++        SubPipelineVar_11_FamilyElement0.shuffleGrouping(input, streamId);
++        return new SubTopologyOutput(prefix+"DataProcessor", "DataProcessorRandomData", 1, 1); //TODO: consider PipelineOptions to change the parallelisms
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIRandomFamilyRandomDataInput input, IIRandomFamilyRandomDataOutput randomDataResult) {
++    }
++
++
++    /**
++     * Sets the algorithm parameter "delay". Note that the actual parameter change will be dynamically
++     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
++     * sub-topology.
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDelay(int value) {
++        this.delay = delay;
++        try {
++            logger.info("sending new Delay signal " + value + "!");
++            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline1", 
++                    "RandomSubPipeline1DataProcessor", "delay", value, null);
++            signal.sendSignal();
++        } catch (Exception e) {
++            logger.error("Signal not sent!");
++            e.printStackTrace();
++        }
++    }
++
++    /**
++     * Sets the algorithm parameter "flag". Note that the actual parameter change will be dynamically
++     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
++     * sub-topology.
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterFlag(boolean value) {
++        this.flag = flag;
++        try {
++            logger.info("sending new Flag signal " + value + "!");
++            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline1", 
++                    "RandomSubPipeline1DataProcessor", "flag", value, null);
++            signal.sendSignal();
++        } catch (Exception e) {
++            logger.error("Signal not sent!");
++            e.printStackTrace();
++        }
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize". Note that the actual parameter change will be dynamically
++     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
++     * sub-topology.
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++        this.windowSize = windowSize;
++        try {
++            logger.info("sending new WindowSize signal " + value + "!");
++            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline1", 
++                    "RandomSubPipeline1DataProcessor", "windowSize", value, null);
++            signal.sendSignal();
++        } catch (Exception e) {
++            logger.error("Signal not sent!");
++            e.printStackTrace();
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/SubPipelineVar_11_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/SubPipelineVar_11_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..e4f1284
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/SubPipelineVar_11_FamilyElement0FamilyElement.java
+@@ -0,0 +1,336 @@
++package eu.qualimaster.RandomSubPipeline1.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.ISwitchFamily.*;
++import eu.qualimaster.families.inf.IRandomFamily.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.SwitchProcessor1;
++import eu.qualimaster.algorithms.SwitchProcessor2;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class SubPipelineVar_11_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(SubPipelineVar_11_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient SwitchFamily.ISwitchFamilyRandomDataOutput randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++    private transient ISwitchFamily alg = null; 
++    transient IIRandomFamilyRandomDataInput iTupleRandomData = null;
++    transient IISwitchFamilyRandomDataInput inputRandomData = null;
++
++    public SubPipelineVar_11_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++        IItemEmitter<IISwitchFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IISwitchFamilyRandomDataOutput>() {
++            @Override
++            public void emitDirect(String streamId, IISwitchFamilyRandomDataOutput item) {
++                _collector.emit("DataProcessorRandomData", new Values(item));
++            }
++        };
++        randomDataResult.setEmitter(randomDataEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
++                    alg = (ISwitchFamily) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterAggregationFactor(PipelineOptions.getExecutorIntArgument(map, getName(), "aggregationFactor", 0));
++                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 0));
++                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", true));
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("SwitchProcessor1", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "switchFamily"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIRandomFamilyRandomDataInput) {
++        iTupleRandomData = (IIRandomFamilyRandomDataInput)tupleItem;
++        inputRandomData = new SwitchFamily.ISwitchFamilyRandomDataInput();
++        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
++        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
++        try {
++            if(alg != null) {
++                alg.calculate(inputRandomData, randomDataResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            randomDataResult.setRandomInteger(0);
++            randomDataResult.setTimestamp(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IISwitchFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
++            iterRandomData.reset();
++            while (iterRandomData.hasNext()) {
++                IISwitchFamilyRandomDataOutput out = iterRandomData.next();
++                _collector.emit("DataProcessorRandomData", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "aggregationFactor" :
++                    try {
++                        System.out.println("Received parameter changing signal aggregationFactor");
++                        alg.setParameterAggregationFactor(para.getIntValue()); 
++                        sendParameterChangeEvent("aggregationFactor", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "delay" :
++                    try {
++                        System.out.println("Received parameter changing signal delay");
++                        alg.setParameterDelay(para.getIntValue()); 
++                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "flag" :
++                    try {
++                        System.out.println("Received parameter changing signal flag");
++                        alg.setParameterFlag(para.getBooleanValue()); 
++                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "SwitchProcessor1":
++                if (!algChange || !(alg instanceof SwitchProcessor1)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
++                        alg = (ISwitchFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterAggregationFactor(0);
++                    alg.setParameterDelay(0);
++                    alg.setParameterFlag(true);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("SwitchProcessor1", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++            case "SwitchProcessor2":
++                if (!algChange || !(alg instanceof SwitchProcessor2)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor2");
++                        alg = (ISwitchFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterAggregationFactor(0);
++                    alg.setParameterDelay(0);
++                    alg.setParameterFlag(true);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("SwitchProcessor2", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("DataProcessorRandomData", new Fields("DataProcessorRandomDataFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/mapping.xml
+new file mode 100644
+index 0000000..7d68cc1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/mapping.xml
+@@ -0,0 +1,14 @@
++<mapping>
++  <pipeline name="RandomSubPipeline2" class="eu.qualimaster.RandomSubPipeline2.topology.Topology">
++      <node name="dataProcessor2" type="family">
++          <component name="RandomSubPipelineAlgorithm2DataProcessor2" container="RandomSubPipeline2" class="eu.qualimaster.RandomSubPipeline2.topology.SubPipelineVar_15_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SwitchProcessor1" alternative1 = "SwitchProcessor2"/>
++      </node>
++      <algorithm name="SwitchProcessor1" implName="SwitchProcessor1" class="eu.qualimaster.algorithms.SwitchProcessor1"/>
++      <algorithm name="SwitchProcessor2" implName="SwitchProcessor2" class="eu.qualimaster.algorithms.SwitchProcessor2"/>
++      <parameter parameter="aggregationFactor" name="dataProcessor2" receiver="RandomSubPipelineAlgorithm2DataProcessor2"/> 
++      <parameter parameter="delay" name="dataProcessor2" receiver="RandomSubPipelineAlgorithm2DataProcessor2"/> 
++      <parameter parameter="flag" name="dataProcessor2" receiver="RandomSubPipelineAlgorithm2DataProcessor2"/> 
++      <parameter parameter="windowSize" name="dataProcessor2" receiver="RandomSubPipelineAlgorithm2DataProcessor2"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/pom.xml
+new file mode 100644
+index 0000000..9205336
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/pom.xml
+@@ -0,0 +1,265 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>RandomSubPipeline2</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++				<groupId>org.apache.maven.plugins</groupId>
++				<artifactId>maven-assembly-plugin</artifactId>
++				<version>2.6</version>
++            	<dependencies>
++	                    <dependency>
++	                        <groupId>eu.qualimaster</groupId>
++	                        <artifactId>AlgorithmAssemblies</artifactId>
++	                        <version>0.5.0-SNAPSHOT</version>
++	                    </dependency>
++	                </dependencies>
++					<executions>
++					<execution>
++						<id>make-assembly</id>
++						<phase>package</phase>
++						<goals>
++							<goal>single</goal>
++						</goals>
++					<configuration>
++					<descriptorRefs>
++						<descriptorRef>jar-with-dependencies</descriptorRef>
++					</descriptorRefs>
++					<dependencySets>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>runtime</scope>
++						</dependencySet>
++						<dependencySet>
++							<unpack>false</unpack>
++							<scope>provided</scope>
++						</dependencySet>
++					</dependencySets>
++					<archive>
++						<manifest>
++						</manifest>
++					</archive>
++				</configuration>
++					</execution>
++				<execution>
++                        <id>make-profilingAssembly</id>
++                        <phase>package</phase>
++                        <goals>
++                            <goal>single</goal>
++                        </goals>
++                        <configuration>
++                            <descriptorRefs>
++                                <descriptorRef>profiling</descriptorRef>
++                            </descriptorRefs>
++                        </configuration>
++                    </execution>
++				</executions>
++						</plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++	<dependency>
++          <groupId>eu.qualimaster</groupId>
++          <artifactId>AlgorithmAssemblies</artifactId>
++          <version>0.5.0-SNAPSHOT</version>
++      </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>SwitchProcessor1</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>SwitchProcessor2</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/profiling/profile.ctl
+new file mode 100644
+index 0000000..d5609a9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/profiling/profile.ctl
+@@ -0,0 +1 @@
++import eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/RandomSubPipeline2SubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/RandomSubPipeline2SubTopology.java
+new file mode 100644
+index 0000000..4dcbb5c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/RandomSubPipeline2SubTopology.java
+@@ -0,0 +1,112 @@
++package eu.qualimaster.RandomSubPipeline2.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.Config;
++import backtype.storm.topology.TopologyBuilder;
++import eu.qualimaster.base.algorithm.ITopologyCreate;
++import eu.qualimaster.base.algorithm.SubTopologyOutput;
++import backtype.storm.topology.BoltDeclarer;
++import eu.qualimaster.common.signal.ParameterChangeSignal;
++import eu.qualimaster.common.signal.SignalException;
++import eu.qualimaster.observables.IObservable;
++import eu.qualimaster.families.inf.IRandomFamily;
++
++public class RandomSubPipeline2SubTopology implements IRandomFamily, ITopologyCreate {
++    final static Logger logger = Logger.getLogger(RandomSubPipeline2SubTopology.class);
++    private int delay;
++    private boolean flag;
++    private int windowSize;
++    private transient State state;
++
++    public void switchState(State arg0) {
++        this.state = arg0;	
++    }
++
++    public Double getMeasurement(IObservable observable) {
++        return null;
++    }
++
++    public SubTopologyOutput createSubTopology(TopologyBuilder builder,
++    			Config config, String prefix, String input, String streamId) {
++        String namespace = "RandomSubPipeline2";
++        if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {
++            namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);
++        }
++        // Declare a Bolt "dataProcessor2"
++
++        BoltDeclarer SubPipelineVar_15_FamilyElement0 =builder.setBolt(prefix+"DataProcessor2", new SubPipelineVar_15_FamilyElement0FamilyElement(prefix+"DataProcessor2", namespace), 1);
++        SubPipelineVar_15_FamilyElement0.shuffleGrouping(input, streamId);
++        return new SubTopologyOutput(prefix+"DataProcessor2", "DataProcessor2RandomData", 1, 1); //TODO: consider PipelineOptions to change the parallelisms
++    }
++
++    /**
++     * Calculates the actual <code>result</code> for <code>input</code>.
++     *
++     * @param input the algorithm input taken from the input stream
++     * @param result the result calculated by the algorithm
++     */
++    public void calculate(IIRandomFamilyRandomDataInput input, IIRandomFamilyRandomDataOutput randomDataResult) {
++    }
++
++
++    /**
++     * Sets the algorithm parameter "delay". Note that the actual parameter change will be dynamically
++     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
++     * sub-topology.
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterDelay(int value) {
++        this.delay = delay;
++        try {
++            logger.info("sending new Delay signal " + value + "!");
++            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline2", 
++                    "RandomSubPipeline2DataProcessor2", "delay", value, null);
++            signal.sendSignal();
++        } catch (Exception e) {
++            logger.error("Signal not sent!");
++            e.printStackTrace();
++        }
++    }
++
++    /**
++     * Sets the algorithm parameter "flag". Note that the actual parameter change will be dynamically
++     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
++     * sub-topology.
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterFlag(boolean value) {
++        this.flag = flag;
++        try {
++            logger.info("sending new Flag signal " + value + "!");
++            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline2", 
++                    "RandomSubPipeline2DataProcessor2", "flag", value, null);
++            signal.sendSignal();
++        } catch (Exception e) {
++            logger.error("Signal not sent!");
++            e.printStackTrace();
++        }
++    }
++
++    /**
++     * Sets the algorithm parameter "windowSize". Note that the actual parameter change will be dynamically
++     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
++     * sub-topology.
++     *
++     * @param value the new value of the algorithm parameter
++     */
++    public void setParameterWindowSize(int value) {
++        this.windowSize = windowSize;
++        try {
++            logger.info("sending new WindowSize signal " + value + "!");
++            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline2", 
++                    "RandomSubPipeline2DataProcessor2", "windowSize", value, null);
++            signal.sendSignal();
++        } catch (Exception e) {
++            logger.error("Signal not sent!");
++            e.printStackTrace();
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/SubPipelineVar_15_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/SubPipelineVar_15_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..0674ea9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/SubPipelineVar_15_FamilyElement0FamilyElement.java
+@@ -0,0 +1,336 @@
++package eu.qualimaster.RandomSubPipeline2.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.ISwitchFamily.*;
++import eu.qualimaster.families.inf.IRandomFamily.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.SwitchProcessor1;
++import eu.qualimaster.algorithms.SwitchProcessor2;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class SubPipelineVar_15_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(SubPipelineVar_15_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient SwitchFamily.ISwitchFamilyRandomDataOutput randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++    private transient ISwitchFamily alg = null; 
++    transient IIRandomFamilyRandomDataInput iTupleRandomData = null;
++    transient IISwitchFamilyRandomDataInput inputRandomData = null;
++
++    public SubPipelineVar_15_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++        IItemEmitter<IISwitchFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IISwitchFamilyRandomDataOutput>() {
++            @Override
++            public void emitDirect(String streamId, IISwitchFamilyRandomDataOutput item) {
++                _collector.emit("DataProcessor2RandomData", new Values(item));
++            }
++        };
++        randomDataResult.setEmitter(randomDataEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
++                    alg = (ISwitchFamily) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterAggregationFactor(PipelineOptions.getExecutorIntArgument(map, getName(), "aggregationFactor", 0));
++                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 0));
++                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", true));
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("SwitchProcessor1", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "switchFamily"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIRandomFamilyRandomDataInput) {
++        iTupleRandomData = (IIRandomFamilyRandomDataInput)tupleItem;
++        inputRandomData = new SwitchFamily.ISwitchFamilyRandomDataInput();
++        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
++        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
++        try {
++            if(alg != null) {
++                alg.calculate(inputRandomData, randomDataResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            randomDataResult.setRandomInteger(0);
++            randomDataResult.setTimestamp(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IISwitchFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
++            iterRandomData.reset();
++            while (iterRandomData.hasNext()) {
++                IISwitchFamilyRandomDataOutput out = iterRandomData.next();
++                _collector.emit("DataProcessor2RandomData", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "aggregationFactor" :
++                    try {
++                        System.out.println("Received parameter changing signal aggregationFactor");
++                        alg.setParameterAggregationFactor(para.getIntValue()); 
++                        sendParameterChangeEvent("aggregationFactor", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "delay" :
++                    try {
++                        System.out.println("Received parameter changing signal delay");
++                        alg.setParameterDelay(para.getIntValue()); 
++                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "flag" :
++                    try {
++                        System.out.println("Received parameter changing signal flag");
++                        alg.setParameterFlag(para.getBooleanValue()); 
++                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "SwitchProcessor1":
++                if (!algChange || !(alg instanceof SwitchProcessor1)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
++                        alg = (ISwitchFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterAggregationFactor(0);
++                    alg.setParameterDelay(0);
++                    alg.setParameterFlag(true);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("SwitchProcessor1", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++            case "SwitchProcessor2":
++                if (!algChange || !(alg instanceof SwitchProcessor2)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor2");
++                        alg = (ISwitchFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterAggregationFactor(0);
++                    alg.setParameterDelay(0);
++                    alg.setParameterFlag(true);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("SwitchProcessor2", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("DataProcessor2RandomData", new Fields("DataProcessor2RandomDataFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/mapping.xml
+new file mode 100644
+index 0000000..eee90bc
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/mapping.xml
+@@ -0,0 +1,22 @@
++<mapping>
++  <pipeline name="ReflectiveRandomPip" class="eu.qualimaster.ReflectiveRandomPip.topology.Topology">
++      <node name="src" type="source">
++          <component name="PipelineVar_14_Source0" container="ReflectiveRandomPip" class="eu.qualimaster.ReflectiveRandomPip.topology.PipelineVar_14_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="processor" type="family">
++          <component name="PipelineVar_14_FamilyElement0" container="ReflectiveRandomPip" class="eu.qualimaster.ReflectiveRandomPip.topology.PipelineVar_14_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "RandomProcessor1" alternative1 = "RandomProcessor2"/>
++      </node>
++      <node name="snk" type="sink">
++          <component name="PipelineVar_14_Sink0" container="ReflectiveRandomPip" class="eu.qualimaster.ReflectiveRandomPip.topology.PipelineVar_14_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="RandomProcessor1" implName="RandomProcessor1" class="eu.qualimaster.algorithms.RandomProcessor1"/>
++      <algorithm name="RandomProcessor2" implName="RandomProcessor2" class="eu.qualimaster.algorithms.RandomProcessor2"/>
++      <algorithm name="Random Source" implName="RandomSourceAlg" class="eu.qualimaster.algorithms.RandomSourceAlg"/>
++      <algorithm name="Random Sink" implName="RandomSinkAlg" class="eu.qualimaster.algorithms.RandomSinkAlg"/>
++      <parameter parameter="delay" name="src" receiver="PipelineVar_14_Source0"/> 
++      <parameter parameter="delay" name="processor" receiver="PipelineVar_14_FamilyElement0"/> 
++      <parameter parameter="flag" name="processor" receiver="PipelineVar_14_FamilyElement0"/> 
++      <parameter parameter="windowSize" name="processor" receiver="PipelineVar_14_FamilyElement0"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/pom.xml
+new file mode 100644
+index 0000000..ef86ed3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/pom.xml
+@@ -0,0 +1,260 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>ReflectiveRandomPip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomSourceAlg</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomProcessor1</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomProcessor2</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomSinkAlg</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/settings.xml
+new file mode 100644
+index 0000000..19d3649
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/settings.xml
+@@ -0,0 +1,115 @@
++<pipeline>
++    <name>ReflectiveRandomPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changedelay</name>
++			<request>
++				<field sequence="0">changedelay</field>
++				<field sequence="1">%newDelay%</field>
++			</request>
++			<response>
++				<field sequence="0">changedelay_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newDelay%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changeflag</name>
++			<request>
++				<field sequence="0">changeflag</field>
++				<field sequence="1">%newFlag%</field>
++			</request>
++			<response>
++				<field sequence="0">changeflag_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newFlag%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changedelay</name>
++			<request>
++				<field sequence="0">changedelay</field>
++				<field sequence="1">%newDelay%</field>
++			</request>
++			<response>
++				<field sequence="0">changedelay_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newDelay%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..2abba14
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_FamilyElement0FamilyElement.java
+@@ -0,0 +1,337 @@
++package eu.qualimaster.ReflectiveRandomPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IRandomFamily.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.RandomProcessor1;
++import eu.qualimaster.algorithms.RandomProcessor2;
++import eu.qualimaster.data.inf.IRandomSource.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_14_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_14_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_14_FamilyElement0RandomProcessor1";
++    private transient RandomFamily.IRandomFamilyRandomDataOutput randomDataResult = new RandomFamily.IRandomFamilyRandomDataOutput();
++    private transient IRandomFamily alg = null; 
++    transient IRandomSourceRandomDataOutput iTupleRandomData = null;
++    transient IIRandomFamilyRandomDataInput inputRandomData = null;
++
++    public PipelineVar_14_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        randomDataResult = new RandomFamily.IRandomFamilyRandomDataOutput();
++        IItemEmitter<IIRandomFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IIRandomFamilyRandomDataOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIRandomFamilyRandomDataOutput item) {
++                _collector.emit("PipelineVar_14_FamilyElement0RandomData", new Values(item));
++            }
++        };
++        randomDataResult.setEmitter(randomDataEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor1");
++                    alg = (IRandomFamily) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 5));
++                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", false));
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("RandomProcessor1", null);
++            streamId = "PipelineVar_14_FamilyElement0RandomProcessor1";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "randomFamily"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IRandomSourceRandomDataOutput) {
++        iTupleRandomData = (IRandomSourceRandomDataOutput)tupleItem;
++        inputRandomData = new RandomFamily.IRandomFamilyRandomDataInput();
++        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
++        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
++        try {
++            if(alg != null) {
++                alg.calculate(inputRandomData, randomDataResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            randomDataResult.setRandomInteger(0);
++            randomDataResult.setTimestamp(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++        if(alg instanceof ITopologyCreate) {
++            _collector.emit(streamId, new Values(inputRandomData));
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIRandomFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
++            iterRandomData.reset();
++            while (iterRandomData.hasNext()) {
++                IIRandomFamilyRandomDataOutput out = iterRandomData.next();
++                _collector.emit("PipelineVar_14_FamilyElement0RandomData", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "delay" :
++                    try {
++                        System.out.println("Received parameter changing signal delay");
++                        alg.setParameterDelay(para.getIntValue()); 
++                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "flag" :
++                    try {
++                        System.out.println("Received parameter changing signal flag");
++                        alg.setParameterFlag(para.getBooleanValue()); 
++                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "RandomProcessor1":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof RandomProcessor1)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor1");
++                        alg = (IRandomFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_14_FamilyElement0RandomProcessor1";
++                    alg.setParameterDelay(5);
++                    alg.setParameterFlag(false);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("RandomProcessor1", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "RandomProcessor2":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof RandomProcessor2)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor2");
++                        alg = (IRandomFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_14_FamilyElement0RandomProcessor2";
++                    alg.setParameterDelay(0);
++                    alg.setParameterFlag(false);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("RandomProcessor2", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_14_FamilyElement0RandomData", new Fields("PipelineVar_14_FamilyElement0RandomDataFields"));
++        declarer.declareStream("PipelineVar_14_FamilyElement0RandomProcessor1", new Fields("PipelineVar_14_FamilyElement0RandomProcessor1Fields"));
++        declarer.declareStream("PipelineVar_14_FamilyElement0RandomProcessor2", new Fields("PipelineVar_14_FamilyElement0RandomProcessor2Fields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Sink0Sink.java
+new file mode 100644
+index 0000000..aedf477
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Sink0Sink.java
+@@ -0,0 +1,133 @@
++package eu.qualimaster.ReflectiveRandomPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IRandomSink;
++import eu.qualimaster.data.inf.IRandomSink.*;
++import eu.qualimaster.data.imp.RandomSink;
++import eu.qualimaster.data.imp.RandomSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IRandomFamily.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_14_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_14_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient IRandomSink sinkHandler;
++private int counter = 0;
++    transient IIRandomFamilyRandomDataOutput iTupleRandomData = null;
++    transient IRandomSinkRandomDataInput inputRandomData = null;
++
++	public PipelineVar_14_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++    if(tupleItem instanceof IIRandomFamilyRandomDataOutput) {
++        iTupleRandomData = (IIRandomFamilyRandomDataOutput)tupleItem;
++        inputRandomData = new RandomSink.RandomSinkRandomDataInput();
++        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
++        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
++        sinkHandler.postDataRandomData(inputRandomData);
++        emitted(inputRandomData);
++    }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new RandomSink.RandomSinkRandomDataInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IRandomSink> cls = (Class<? extends IRandomSink>)Class.forName("eu.qualimaster.algorithms.RandomSinkAlg");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("RandomSinkAlg", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_14_Sink0RandomData", new Fields("PipelineVar_14_Sink0RandomDataFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Source0Source.java
+new file mode 100644
+index 0000000..c943c31
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Source0Source.java
+@@ -0,0 +1,192 @@
++package eu.qualimaster.ReflectiveRandomPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.IRandomSource;
++import eu.qualimaster.data.inf.IRandomSource.*;
++import eu.qualimaster.data.imp.RandomSource;
++import eu.qualimaster.algorithms.RandomSourceAlg;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_14_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_14_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient IRandomSource sourceData;
++
++    public PipelineVar_14_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("ReflectiveRandomPip", "PipelineVar_14_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IRandomSourceRandomDataOutput>(IRandomSourceRandomDataOutput.class) {
++            @Override
++            public String getAggregationKey(IRandomSourceRandomDataOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IRandomSource> cls = (Class<? extends IRandomSource>) Class.forName("eu.qualimaster.algorithms.RandomSourceAlg");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("RandomSourceAlg", null);
++            sourceData.setParameterDelay(PipelineOptions.getExecutorIntArgument(conf, getName(), "delay", 0));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("ReflectiveRandomPip", "PipelineVar_14_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_14_Source0StreamRandomData".
++        IRandomSourceRandomDataOutput dataItemRandomData = new RandomSource.RandomSourceRandomDataOutput();
++        try {
++            dataItemRandomData = sourceData.getRandomData();
++        } catch(DefaultModeException e) {
++            dataItemRandomData.setRandomInteger(0);
++            dataItemRandomData.setTimestamp(0);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemRandomData!=null){
++            _collector.emit("PipelineVar_14_Source0RandomData", new Values(dataItemRandomData));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "delay" :
++                    try {
++                        logger.info("Received the parameter delay!");
++                        sourceData.setParameterDelay(para.getIntValue()); 
++                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_14_Source0RandomData", new Fields("PipelineVar_14_Source0RandomDataFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/Topology.java
+new file mode 100644
+index 0000000..715bcf6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/Topology.java
+@@ -0,0 +1,122 @@
++package eu.qualimaster.ReflectiveRandomPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.RandomProcessor1;
++import eu.qualimaster.algorithms.RandomProcessor2;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "ReflectiveRandomPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 1; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "src"
++
++            builder.setSpout("PipelineVar_14_Source0", new PipelineVar_14_Source0Source("PipelineVar_14_Source0", "ReflectiveRandomPip"), 1);
++            // Declare a Bolt "processor"
++
++            BoltDeclarer PipelineVar_14_FamilyElement0=builder.setBolt("PipelineVar_14_FamilyElement0", new PipelineVar_14_FamilyElement0FamilyElement("PipelineVar_14_FamilyElement0", "ReflectiveRandomPip"), 1);
++            PipelineVar_14_FamilyElement0.shuffleGrouping("PipelineVar_14_Source0", "PipelineVar_14_Source0RandomData");
++            //generate the Storm-based algorithm topology name:RandomProcessor1
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("RandomProcessor1"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("RandomProcessor1"), 1);
++            }
++            builder.startRecording("RandomProcessor1");
++            ITopologyCreate PipelineVar_14_FamilyElement01SubCreator = new RandomProcessor1();
++            SubTopologyOutput PipelineVar_14_FamilyElement01SubOutput = PipelineVar_14_FamilyElement01SubCreator.createSubTopology(builder,config,"RandomProcessor1", "PipelineVar_14_FamilyElement0", "PipelineVar_14_FamilyElement0RandomProcessor1");
++            builder.endRecording(PipelineVar_14_FamilyElement01SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_14_FamilyElement01SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_14_FamilyElement01SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:RandomProcessor2
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("RandomProcessor2"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("RandomProcessor2"), 1);
++            }
++            builder.startRecording("RandomProcessor2");
++            ITopologyCreate PipelineVar_14_FamilyElement02SubCreator = new RandomProcessor2();
++            SubTopologyOutput PipelineVar_14_FamilyElement02SubOutput = PipelineVar_14_FamilyElement02SubCreator.createSubTopology(builder,config,"RandomProcessor2", "PipelineVar_14_FamilyElement0", "PipelineVar_14_FamilyElement0RandomProcessor2");
++            builder.endRecording(PipelineVar_14_FamilyElement02SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_14_FamilyElement02SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_14_FamilyElement02SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "snk"
++
++            BoltDeclarer PipelineVar_14_Sink0=builder.setBolt("PipelineVar_14_Sink0", new PipelineVar_14_Sink0Sink("PipelineVar_14_Sink0", "ReflectiveRandomPip"), 1);
++            PipelineVar_14_Sink0.shuffleGrouping(PipelineVar_14_FamilyElement01SubOutput.getBoltName(), PipelineVar_14_FamilyElement01SubOutput.getStreamId());
++            PipelineVar_14_Sink0.shuffleGrouping(PipelineVar_14_FamilyElement02SubOutput.getBoltName(), PipelineVar_14_FamilyElement02SubOutput.getStreamId());
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/mapping.xml
+new file mode 100644
+index 0000000..61a8eaf
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/mapping.xml
+@@ -0,0 +1,48 @@
++<mapping>
++  <pipeline name="ReplayPip" class="eu.qualimaster.ReplayPip.topology.Topology">
++      <node name="FinancialDataSource" type="source">
++          <component name="PipelineVar_9_Source0" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="Preprocessor" type="family">
++          <component name="PipelineVar_9_FamilyElement0" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
++      </node>
++      <node name="FinancialCorrelation" type="family">
++          <component name="PipelineVar_9_FamilyElement1" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
++      </node>
++      <node name="ReplaySink" type="replaySink">
++          <component name="PipelineVar_9_ReplaySink0" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_ReplaySink0ReplaySink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="Sink" type="sink">
++          <component name="PipelineVar_9_Sink1" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_Sink1Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
++      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
++      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
++              <component name="CorrelationSWMapper" container="ReplayPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWHayashiYoshida" container="ReplayPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
++          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
++          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
++              <component name="CorrelationSWAlternativeMP" container="ReplayPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWAlternativeHY" container="ReplayPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="Spring Financial Data" implName="SpringClient" class="eu.qualimaster.algorithms.imp.correlation.SpringClient"/>
++      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
++      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
++      <parameter parameter="windowSize" name="FinancialCorrelation" receiver="PipelineVar_9_FamilyElement1"/> 
++      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
++      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/pom.xml
+new file mode 100644
+index 0000000..20339bd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/pom.xml
+@@ -0,0 +1,285 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>ReplayPip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>spring-client</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-preprocessor</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-correlation-financial-software</artifactId>
++      <version>3.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSW</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TransferEntropyHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>MutualInformationHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSWAlternative</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-priority-data-sink</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/settings.xml
+new file mode 100644
+index 0000000..cf267ed
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/settings.xml
+@@ -0,0 +1,76 @@
++<pipeline>
++    <name>ReplayPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..500116e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement0FamilyElement.java
+@@ -0,0 +1,250 @@
++package eu.qualimaster.ReplayPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_9_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_9_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++    private transient IFPreprocessor alg = null; 
++    transient ISpringFinancialDataSpringStreamOutput iTupleSpringStream = null;
++    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
++
++    public PipelineVar_9_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
++                _collector.emit("PipelineVar_9_FamilyElement0PreprocessedStream", new Values(item));
++            }
++        };
++        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                    alg = (IFPreprocessor) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Preprocessor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fPreprocessor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof ISpringFinancialDataSpringStreamOutput) {
++        iTupleSpringStream = (ISpringFinancialDataSpringStreamOutput)tupleItem;
++        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
++        try {
++            if(alg != null) {
++                alg.calculate(inputSpringStream, preprocessedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            preprocessedStreamResult.setSymbolId("");
++            preprocessedStreamResult.setTimestamp(0);
++            preprocessedStreamResult.setValue(0.0);
++            preprocessedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
++            iterPreprocessedStream.reset();
++            while (iterPreprocessedStream.hasNext()) {
++                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
++                _collector.emit("PipelineVar_9_FamilyElement0PreprocessedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Preprocessor":
++                if (!algChange || !(alg instanceof Preprocessor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                        alg = (IFPreprocessor) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_9_FamilyElement0PreprocessedStream", new Fields("PipelineVar_9_FamilyElement0PreprocessedStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..7b4e9e8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement1FamilyElement.java
+@@ -0,0 +1,544 @@
++package eu.qualimaster.ReplayPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.common.hardware.*;
++import com.google.protobuf.ByteString;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_9_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_9_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial";
++    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++    private transient IFCorrelationFinancial alg = null; 
++    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
++    transient ISpringFinancialDataSymbolListOutput iTupleSymbolList = null;
++    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++
++    public PipelineVar_9_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
++                _collector.emit("PipelineVar_9_FamilyElement1PairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                    alg = (IFCorrelationFinancial) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
++            streamId = "PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fCorrelationFinancial"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
++            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
++            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputPreprocessedStream));
++            }
++        }
++
++        if(tupleItem instanceof ISpringFinancialDataSymbolListOutput) {
++            iTupleSymbolList = (ISpringFinancialDataSymbolListOutput)tupleItem;
++            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputSymbolList));
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("PipelineVar_9_FamilyElement1PairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TopoSoftwareCorrelationFinancial":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "GenTopoHardwareCorrelationFinancial":
++            case "GenTopoHardwareCorrelationFinancialSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("ReplayPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("ReplayPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_9_FamilyElement1GenTopoHardwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSW":
++            case "CorrelationSWSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_9_FamilyElement1CorrelationSW";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "TransferEntropyHardware":
++            case "TransferEntropyHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("ReplayPip",
++                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("ReplayPip",
++                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_9_FamilyElement1TransferEntropyHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "MutualInformationHardware":
++            case "MutualInformationHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("ReplayPip",
++                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("ReplayPip",
++                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_9_FamilyElement1MutualInformationHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSWAlternative":
++            case "CorrelationSWAlternativeSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_9_FamilyElement1CorrelationSWAlternative";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_9_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_9_FamilyElement1PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_9_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_9_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_9_FamilyElement1CorrelationSW", new Fields("PipelineVar_9_FamilyElement1CorrelationSWFields"));
++        declarer.declareStream("PipelineVar_9_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_9_FamilyElement1TransferEntropyHardwareFields"));
++        declarer.declareStream("PipelineVar_9_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_9_FamilyElement1MutualInformationHardwareFields"));
++        declarer.declareStream("PipelineVar_9_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_9_FamilyElement1CorrelationSWAlternativeFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_ReplaySink0ReplaySink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_ReplaySink0ReplaySink.java
+new file mode 100644
+index 0000000..20bb7e0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_ReplaySink0ReplaySink.java
+@@ -0,0 +1,171 @@
++package eu.qualimaster.ReplayPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IPriorityDataSink;
++import eu.qualimaster.data.inf.IPriorityDataSink.*;
++import eu.qualimaster.data.imp.PriorityDataSink;
++import eu.qualimaster.data.imp.PriorityDataSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_9_ReplaySink0ReplaySink extends AbstractReplaySink {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_9_ReplaySink0ReplaySink.class);
++    transient OutputCollector _collector;
++    transient IPriorityDataSink sinkHandler;
++private int counter = 0;
++    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
++    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
++
++	public PipelineVar_9_ReplaySink0ReplaySink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    public class IPriorityDataSinkPairwiseFinancialInputEmitter<IPriorityDataSinkPairwiseFinancialInput> implements AbstractReplaySink.ITupleEmitter<IPriorityDataSinkPairwiseFinancialInput> {
++        @Override
++        public void emit(int ticket, IPriorityDataSinkPairwiseFinancialInput tuple) {
++            //call from sink implementation
++            sinkHandler.emit(ticket, (IPriorityDataSink.IPriorityDataSinkPairwiseFinancialInput)tuple);
++        }
++    }
++    public class IPriorityDataSinkAnalyzedStreamInputEmitter<IPriorityDataSinkAnalyzedStreamInput> implements AbstractReplaySink.ITupleEmitter<IPriorityDataSinkAnalyzedStreamInput> {
++        @Override
++        public void emit(int ticket, IPriorityDataSinkAnalyzedStreamInput tuple) {
++            //call from sink implementation
++            sinkHandler.emit(ticket, (IPriorityDataSink.IPriorityDataSinkAnalyzedStreamInput)tuple);
++        }
++    }
++    @Override
++    protected void registerHandlers(Map conf, TopologyContext context) {
++        eu.qualimaster.dataManagement.common.replay.Tuple schema;
++        schema = new eu.qualimaster.dataManagement.common.replay.Tuple("pairwiseFinancial");
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("id0", String.class, true, false));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("id1", String.class, true, false));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("date", String.class, false, true));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("value", double.class, false, false));
++        addTupleHandler(PriorityDataSinkPairwiseFinancialInput.class, schema, "output/prior", NoStorageStrategyDescriptor.INSTANCE, new IPriorityDataSinkPairwiseFinancialInputEmitter());
++        schema = new eu.qualimaster.dataManagement.common.replay.Tuple("analyzedStream");
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("symbolId", String.class, false, false));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("timestamp", long.class, false, false));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("value", double.class, false, false));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("volume", int.class, false, false));
++        addTupleHandler(PriorityDataSinkAnalyzedStreamInput.class, schema, "output/prior", NoStorageStrategyDescriptor.INSTANCE, new IPriorityDataSinkAnalyzedStreamInputEmitter());
++}
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
++            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
++            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++            store(inputPairwiseFinancial);
++            emitted(inputPairwiseFinancial);
++        }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_9_ReplaySink0PairwiseFinancial", new Fields("PipelineVar_9_ReplaySink0PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_9_ReplaySink0AnalyzedStream", new Fields("PipelineVar_9_ReplaySink0AnalyzedStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Sink1Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Sink1Sink.java
+new file mode 100644
+index 0000000..323fae9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Sink1Sink.java
+@@ -0,0 +1,140 @@
++package eu.qualimaster.ReplayPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IPriorityDataSink;
++import eu.qualimaster.data.inf.IPriorityDataSink.*;
++import eu.qualimaster.data.imp.PriorityDataSink;
++import eu.qualimaster.data.imp.PriorityDataSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_9_Sink1Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_9_Sink1Sink.class);
++    transient OutputCollector _collector;
++    transient IPriorityDataSink sinkHandler;
++private int counter = 0;
++    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
++    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
++
++	public PipelineVar_9_Sink1Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
++            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
++            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++            sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
++            emitted(inputPairwiseFinancial);
++        }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
++        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_9_Sink1PairwiseFinancial", new Fields("PipelineVar_9_Sink1PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_9_Sink1AnalyzedStream", new Fields("PipelineVar_9_Sink1AnalyzedStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Source0Source.java
+new file mode 100644
+index 0000000..4f4e42a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Source0Source.java
+@@ -0,0 +1,200 @@
++package eu.qualimaster.ReplayPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ISpringFinancialData;
++import eu.qualimaster.data.inf.ISpringFinancialData.*;
++import eu.qualimaster.data.imp.SpringFinancialData;
++import eu.qualimaster.algorithms.imp.correlation.SpringClient;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_9_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_9_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ISpringFinancialData sourceData;
++
++    public PipelineVar_9_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("ReplayPip", "PipelineVar_9_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSymbolListOutput>(ISpringFinancialDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSpringStreamOutput>(ISpringFinancialDataSpringStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ISpringFinancialData> cls = (Class<? extends ISpringFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClient");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("SpringClient", null);
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("ReplayPip", "PipelineVar_9_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_9_Source0StreamSymbolList".
++        ISpringFinancialDataSymbolListOutput dataItemSymbolList = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PipelineVar_9_Source0SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PipelineVar_9_Source0SpringStream".
++        ISpringFinancialDataSpringStreamOutput dataItemSpringStream = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
++        try {
++            dataItemSpringStream = sourceData.getSpringStream();
++        } catch(DefaultModeException e) {
++            dataItemSpringStream.setSymbolTuple("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSpringStream!=null){
++            _collector.emit("PipelineVar_9_Source0SpringStream", new Values(dataItemSpringStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_9_Source0SymbolList", new Fields("PipelineVar_9_Source0SymbolListFields"));
++        declarer.declareStream("PipelineVar_9_Source0SpringStream", new Fields("PipelineVar_9_Source0SpringStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/Topology.java
+new file mode 100644
+index 0000000..b0c84e4
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/Topology.java
+@@ -0,0 +1,160 @@
++package eu.qualimaster.ReplayPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "ReplayPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 1; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "FinancialDataSource"
++
++            builder.setSpout("PipelineVar_9_Source0", new PipelineVar_9_Source0Source("PipelineVar_9_Source0", "ReplayPip"), 1);
++            // Declare a Bolt "Preprocessor"
++
++            BoltDeclarer PipelineVar_9_FamilyElement0=builder.setBolt("PipelineVar_9_FamilyElement0", new PipelineVar_9_FamilyElement0FamilyElement("PipelineVar_9_FamilyElement0", "ReplayPip"), 1);
++            PipelineVar_9_FamilyElement0.shuffleGrouping("PipelineVar_9_Source0", "PipelineVar_9_Source0SpringStream");
++            // Declare a Bolt "FinancialCorrelation"
++
++            BoltDeclarer PipelineVar_9_FamilyElement1=builder.setBolt("PipelineVar_9_FamilyElement1", new PipelineVar_9_FamilyElement1FamilyElement("PipelineVar_9_FamilyElement1", "ReplayPip"), 1);
++            PipelineVar_9_FamilyElement1.shuffleGrouping("PipelineVar_9_FamilyElement0", "PipelineVar_9_FamilyElement0PreprocessedStream");
++            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
++            }
++            builder.startRecording("TopoSoftwareCorrelationFinancial");
++            ITopologyCreate PipelineVar_9_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
++            SubTopologyOutput PipelineVar_9_FamilyElement11SubOutput = PipelineVar_9_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial");
++            builder.endRecording(PipelineVar_9_FamilyElement11SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement11SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement11SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
++            ITopologyCreate PipelineVar_9_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
++            SubTopologyOutput PipelineVar_9_FamilyElement12SubOutput = PipelineVar_9_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1GenTopoHardwareCorrelationFinancial");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement12SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement12SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
++            ITopologyCreate PipelineVar_9_FamilyElement13SubCreator = new CorrelationSWSubTopology();
++            SubTopologyOutput PipelineVar_9_FamilyElement13SubOutput = PipelineVar_9_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1CorrelationSW");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement13SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement13SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
++            ITopologyCreate PipelineVar_9_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
++            SubTopologyOutput PipelineVar_9_FamilyElement14SubOutput = PipelineVar_9_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1TransferEntropyHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement14SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement14SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
++            ITopologyCreate PipelineVar_9_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
++            SubTopologyOutput PipelineVar_9_FamilyElement15SubOutput = PipelineVar_9_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1MutualInformationHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement15SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement15SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
++            ITopologyCreate PipelineVar_9_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
++            SubTopologyOutput PipelineVar_9_FamilyElement16SubOutput = PipelineVar_9_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1CorrelationSWAlternative");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement16SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement16SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "ReplaySink"
++
++            BoltDeclarer PipelineVar_9_ReplaySink0=builder.setBolt("PipelineVar_9_ReplaySink0", new PipelineVar_9_ReplaySink0ReplaySink("PipelineVar_9_ReplaySink0", "ReplayPip"), 1);
++            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement11SubOutput.getBoltName(), PipelineVar_9_FamilyElement11SubOutput.getStreamId());
++            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement12SubOutput.getBoltName(), PipelineVar_9_FamilyElement12SubOutput.getStreamId());
++            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement13SubOutput.getBoltName(), PipelineVar_9_FamilyElement13SubOutput.getStreamId());
++            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement14SubOutput.getBoltName(), PipelineVar_9_FamilyElement14SubOutput.getStreamId());
++            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement15SubOutput.getBoltName(), PipelineVar_9_FamilyElement15SubOutput.getStreamId());
++            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement16SubOutput.getBoltName(), PipelineVar_9_FamilyElement16SubOutput.getStreamId());
++            // Declare a Bolt "Sink"
++
++            BoltDeclarer PipelineVar_9_Sink1=builder.setBolt("PipelineVar_9_Sink1", new PipelineVar_9_Sink1Sink("PipelineVar_9_Sink1", "ReplayPip"), 1);
++            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement11SubOutput.getBoltName(), PipelineVar_9_FamilyElement11SubOutput.getStreamId());
++            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement12SubOutput.getBoltName(), PipelineVar_9_FamilyElement12SubOutput.getStreamId());
++            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement13SubOutput.getBoltName(), PipelineVar_9_FamilyElement13SubOutput.getStreamId());
++            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement14SubOutput.getBoltName(), PipelineVar_9_FamilyElement14SubOutput.getStreamId());
++            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement15SubOutput.getBoltName(), PipelineVar_9_FamilyElement15SubOutput.getStreamId());
++            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement16SubOutput.getBoltName(), PipelineVar_9_FamilyElement16SubOutput.getStreamId());
++            PipelineVar_9_FamilyElement1.shuffleGrouping("PipelineVar_9_Source0", "PipelineVar_9_Source0SymbolList");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/mapping.xml
+new file mode 100644
+index 0000000..fb4ca52
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/mapping.xml
+@@ -0,0 +1,23 @@
++<mapping>
++  <pipeline name="SwitchPip" class="eu.qualimaster.SwitchPip.topology.Topology">
++      <node name="src" type="source">
++          <component name="PipelineVar_2_Source0" container="SwitchPip" class="eu.qualimaster.SwitchPip.topology.PipelineVar_2_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="processor" type="family">
++          <component name="PipelineVar_2_FamilyElement0" container="SwitchPip" class="eu.qualimaster.SwitchPip.topology.PipelineVar_2_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SwitchProcessor1" alternative1 = "SwitchProcessor2"/>
++      </node>
++      <node name="snk" type="sink">
++          <component name="PipelineVar_2_Sink0" container="SwitchPip" class="eu.qualimaster.SwitchPip.topology.PipelineVar_2_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="SwitchProcessor1" implName="SwitchProcessor1" class="eu.qualimaster.algorithms.SwitchProcessor1"/>
++      <algorithm name="SwitchProcessor2" implName="SwitchProcessor2" class="eu.qualimaster.algorithms.SwitchProcessor2"/>
++      <algorithm name="Random Source" implName="RandomSourceAlg" class="eu.qualimaster.algorithms.RandomSourceAlg"/>
++      <algorithm name="Random Sink" implName="RandomSinkAlg" class="eu.qualimaster.algorithms.RandomSinkAlg"/>
++      <parameter parameter="delay" name="src" receiver="PipelineVar_2_Source0"/> 
++      <parameter parameter="aggregationFactor" name="processor" receiver="PipelineVar_2_FamilyElement0"/> 
++      <parameter parameter="delay" name="processor" receiver="PipelineVar_2_FamilyElement0"/> 
++      <parameter parameter="flag" name="processor" receiver="PipelineVar_2_FamilyElement0"/> 
++      <parameter parameter="windowSize" name="processor" receiver="PipelineVar_2_FamilyElement0"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/pom.xml
+new file mode 100644
+index 0000000..2326046
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/pom.xml
+@@ -0,0 +1,260 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster.test</groupId>
++  <artifactId>SwitchPip</artifactId>
++  <version>0.0.2-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomSourceAlg</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>SwitchProcessor1</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>SwitchProcessor2</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster.test</groupId>
++      <artifactId>RandomSinkAlg</artifactId>
++      <version>0.0.2-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/settings.xml
+new file mode 100644
+index 0000000..e98f352
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/settings.xml
+@@ -0,0 +1,63 @@
++<pipeline>
++    <name>SwitchPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..3e0d743
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_FamilyElement0FamilyElement.java
+@@ -0,0 +1,336 @@
++package eu.qualimaster.SwitchPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.ISwitchFamily.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.SwitchProcessor1;
++import eu.qualimaster.algorithms.SwitchProcessor2;
++import eu.qualimaster.data.inf.IRandomSource.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_2_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_2_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient SwitchFamily.ISwitchFamilyRandomDataOutput randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++    private transient ISwitchFamily alg = null; 
++    transient IRandomSourceRandomDataOutput iTupleRandomData = null;
++    transient IISwitchFamilyRandomDataInput inputRandomData = null;
++
++    public PipelineVar_2_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
++        IItemEmitter<IISwitchFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IISwitchFamilyRandomDataOutput>() {
++            @Override
++            public void emitDirect(String streamId, IISwitchFamilyRandomDataOutput item) {
++                _collector.emit("PipelineVar_2_FamilyElement0RandomData", new Values(item));
++            }
++        };
++        randomDataResult.setEmitter(randomDataEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
++                    alg = (ISwitchFamily) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterAggregationFactor(PipelineOptions.getExecutorIntArgument(map, getName(), "aggregationFactor", 0));
++                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 0));
++                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", true));
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("SwitchProcessor1", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "switchFamily"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IRandomSourceRandomDataOutput) {
++        iTupleRandomData = (IRandomSourceRandomDataOutput)tupleItem;
++        inputRandomData = new SwitchFamily.ISwitchFamilyRandomDataInput();
++        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
++        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
++        try {
++            if(alg != null) {
++                alg.calculate(inputRandomData, randomDataResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            randomDataResult.setRandomInteger(0);
++            randomDataResult.setTimestamp(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IISwitchFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
++            iterRandomData.reset();
++            while (iterRandomData.hasNext()) {
++                IISwitchFamilyRandomDataOutput out = iterRandomData.next();
++                _collector.emit("PipelineVar_2_FamilyElement0RandomData", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "aggregationFactor" :
++                    try {
++                        System.out.println("Received parameter changing signal aggregationFactor");
++                        alg.setParameterAggregationFactor(para.getIntValue()); 
++                        sendParameterChangeEvent("aggregationFactor", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "delay" :
++                    try {
++                        System.out.println("Received parameter changing signal delay");
++                        alg.setParameterDelay(para.getIntValue()); 
++                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "flag" :
++                    try {
++                        System.out.println("Received parameter changing signal flag");
++                        alg.setParameterFlag(para.getBooleanValue()); 
++                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "SwitchProcessor1":
++                if (!algChange || !(alg instanceof SwitchProcessor1)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
++                        alg = (ISwitchFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterAggregationFactor(0);
++                    alg.setParameterDelay(0);
++                    alg.setParameterFlag(true);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("SwitchProcessor1", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++            case "SwitchProcessor2":
++                if (!algChange || !(alg instanceof SwitchProcessor2)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor2");
++                        alg = (ISwitchFamily) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterAggregationFactor(0);
++                    alg.setParameterDelay(0);
++                    alg.setParameterFlag(true);
++                    alg.setParameterWindowSize(10);
++                    sendAlgorithmChangeEvent("SwitchProcessor2", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_2_FamilyElement0RandomData", new Fields("PipelineVar_2_FamilyElement0RandomDataFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Sink0Sink.java
+new file mode 100644
+index 0000000..7b36d6f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Sink0Sink.java
+@@ -0,0 +1,133 @@
++package eu.qualimaster.SwitchPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.IRandomSink;
++import eu.qualimaster.data.inf.IRandomSink.*;
++import eu.qualimaster.data.imp.RandomSink;
++import eu.qualimaster.data.imp.RandomSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.ISwitchFamily.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_2_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_2_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient IRandomSink sinkHandler;
++private int counter = 0;
++    transient IISwitchFamilyRandomDataOutput iTupleRandomData = null;
++    transient IRandomSinkRandomDataInput inputRandomData = null;
++
++	public PipelineVar_2_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++    if(tupleItem instanceof IISwitchFamilyRandomDataOutput) {
++        iTupleRandomData = (IISwitchFamilyRandomDataOutput)tupleItem;
++        inputRandomData = new RandomSink.RandomSinkRandomDataInput();
++        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
++        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
++        sinkHandler.postDataRandomData(inputRandomData);
++        emitted(inputRandomData);
++    }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new RandomSink.RandomSinkRandomDataInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IRandomSink> cls = (Class<? extends IRandomSink>)Class.forName("eu.qualimaster.algorithms.RandomSinkAlg");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("RandomSinkAlg", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_2_Sink0RandomData", new Fields("PipelineVar_2_Sink0RandomDataFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Source0Source.java
+new file mode 100644
+index 0000000..d20956c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Source0Source.java
+@@ -0,0 +1,192 @@
++package eu.qualimaster.SwitchPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.IRandomSource;
++import eu.qualimaster.data.inf.IRandomSource.*;
++import eu.qualimaster.data.imp.RandomSource;
++import eu.qualimaster.algorithms.RandomSourceAlg;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_2_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_2_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient IRandomSource sourceData;
++
++    public PipelineVar_2_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("SwitchPip", "PipelineVar_2_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IRandomSourceRandomDataOutput>(IRandomSourceRandomDataOutput.class) {
++            @Override
++            public String getAggregationKey(IRandomSourceRandomDataOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IRandomSource> cls = (Class<? extends IRandomSource>) Class.forName("eu.qualimaster.algorithms.RandomSourceAlg");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("RandomSourceAlg", null);
++            sourceData.setParameterDelay(PipelineOptions.getExecutorIntArgument(conf, getName(), "delay", 0));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("SwitchPip", "PipelineVar_2_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_2_Source0StreamRandomData".
++        IRandomSourceRandomDataOutput dataItemRandomData = new RandomSource.RandomSourceRandomDataOutput();
++        try {
++            dataItemRandomData = sourceData.getRandomData();
++        } catch(DefaultModeException e) {
++            dataItemRandomData.setRandomInteger(0);
++            dataItemRandomData.setTimestamp(0);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemRandomData!=null){
++            _collector.emit("PipelineVar_2_Source0RandomData", new Values(dataItemRandomData));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "delay" :
++                    try {
++                        logger.info("Received the parameter delay!");
++                        sourceData.setParameterDelay(para.getIntValue()); 
++                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_2_Source0RandomData", new Fields("PipelineVar_2_Source0RandomDataFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/Topology.java
+new file mode 100644
+index 0000000..6fdf542
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/Topology.java
+@@ -0,0 +1,101 @@
++package eu.qualimaster.SwitchPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.SwitchProcessor1;
++import eu.qualimaster.algorithms.SwitchProcessor2;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "SwitchPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 1; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "src"
++
++            builder.setSpout("PipelineVar_2_Source0", new PipelineVar_2_Source0Source("PipelineVar_2_Source0", "SwitchPip"), 1);
++            // Declare a Bolt "processor"
++
++            BoltDeclarer PipelineVar_2_FamilyElement0=builder.setBolt("PipelineVar_2_FamilyElement0", new PipelineVar_2_FamilyElement0FamilyElement("PipelineVar_2_FamilyElement0", "SwitchPip"), 1);
++            PipelineVar_2_FamilyElement0.shuffleGrouping("PipelineVar_2_Source0", "PipelineVar_2_Source0RandomData");
++            // Declare a Bolt "snk"
++
++            BoltDeclarer PipelineVar_2_Sink0=builder.setBolt("PipelineVar_2_Sink0", new PipelineVar_2_Sink0Sink("PipelineVar_2_Sink0", "SwitchPip"), 1);
++            PipelineVar_2_Sink0.shuffleGrouping("PipelineVar_2_FamilyElement0", "PipelineVar_2_FamilyElement0RandomData");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/mapping.xml
+new file mode 100644
+index 0000000..a0f2837
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/mapping.xml
+@@ -0,0 +1,68 @@
++<mapping>
++  <pipeline name="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.Topology">
++      <node name="FinancialDataSource" type="source">
++          <component name="PipelineVar_10_Source0" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="Preprocessor" type="family">
++          <component name="PipelineVar_10_FamilyElement0" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
++      </node>
++      <node name="FinancialCorrelation" type="family">
++          <component name="PipelineVar_10_FamilyElement1" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
++      </node>
++      <node name="DynamicGraphCompilation" type="family">
++          <component name="PipelineVar_10_FamilyElement2" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "DynamicGraphCompilation"/>
++      </node>
++      <node name="TimeGraphMapper" type="family">
++          <component name="PipelineVar_10_FamilyElement3" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement3FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphMapper"/>
++      </node>
++      <node name="TimeGraphIndexer" type="family">
++          <component name="PipelineVar_10_FamilyElement4" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement4FamilyElement" receiver="true" thrift="false" tasks="5" alternative0 = "TimeGraphIndexer"/>
++      </node>
++      <node name="TimeGraphQueryExecutor" type="family">
++          <component name="PipelineVar_10_FamilyElement5" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement5FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphQueryExecutor"/>
++      </node>
++      <node name="TimeTravelSink" type="sink">
++          <component name="PipelineVar_10_Sink0" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="queries" type="source">
++          <component name="PipelineVar_10_Source1" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_Source1Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
++      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
++      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
++              <component name="CorrelationSWMapper" container="TimeTravelPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWHayashiYoshida" container="TimeTravelPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
++          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
++          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
++      </algorithm>
++      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
++              <component name="CorrelationSWAlternativeMP" container="TimeTravelPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
++              <component name="CorrelationSWAlternativeHY" container="TimeTravelPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
++      </algorithm>
++      <algorithm name="DynamicGraphCompilation" implName="DynamicGraphCompilation" class="eu.qualimaster.dynamicgraph.DynamicGraphCompilation"/>
++      <algorithm name="TimeGraphMapper" implName="TimeGraphMapper" class="eu.qualimaster.timegraph.TimeGraphMapper"/>
++      <algorithm name="TimeGraphIndexer" implName="TimeGraphIndexer" class="eu.qualimaster.timegraph.TimeGraphIndexer"/>
++      <algorithm name="TimeGraphQueryExecutor" implName="TimeGraphQueryExecutor" class="eu.qualimaster.timegraph.TimeGraphQueryExecutor"/>
++      <algorithm name="SimulatedFinancialData" implName="SpringClientSimulator" class="eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator"/>
++      <algorithm name="TimeGraphQueriesSource" implName="QueriesSource" class="eu.qualimaster.timegraph.QueriesSource"/>
++      <algorithm name="TimeTravelSink" implName="TimeTravelSink" class="eu.qualimaster.timegraph.TimeTravelSink"/>
++      <parameter parameter="speedFactor" name="FinancialDataSource" receiver="PipelineVar_10_Source0"/> 
++      <parameter parameter="windowSize" name="FinancialCorrelation" receiver="PipelineVar_10_FamilyElement1"/> 
++      <parameter parameter="correlationThreshold" name="DynamicGraphCompilation" receiver="PipelineVar_10_FamilyElement2"/> 
++      <parameter parameter="snapshotQuery" name="queries" receiver="PipelineVar_10_Source1"/> 
++      <parameter parameter="pathQuery" name="queries" receiver="PipelineVar_10_Source1"/> 
++      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
++      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/pom.xml
+new file mode 100644
+index 0000000..d63aac6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/pom.xml
+@@ -0,0 +1,305 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>TimeTravelPip</artifactId>
++  <version>0.0.2-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>spring-client-simulator</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-preprocessor</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-correlation-financial-software</artifactId>
++      <version>3.2-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSW</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>TransferEntropyHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>MutualInformationHardware</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>CorrelationSWAlternative</artifactId>
++      <version>0.0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>dynamic-graph-compilation</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>time-graph</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>time-graph-external</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>time-travel-sink</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>time-graph-spout</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/settings.xml
+new file mode 100644
+index 0000000..031fb2d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/settings.xml
+@@ -0,0 +1,128 @@
++<pipeline>
++    <name>TimeTravelPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changespeedFactor</name>
++			<request>
++				<field sequence="0">changespeedFactor</field>
++				<field sequence="1">%newSpeedFactor%</field>
++			</request>
++			<response>
++				<field sequence="0">changespeedFactor_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newSpeedFactor%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changecorrelationThreshold</name>
++			<request>
++				<field sequence="0">changecorrelationThreshold</field>
++				<field sequence="1">%newCorrelationThreshold%</field>
++			</request>
++			<response>
++				<field sequence="0">changecorrelationThreshold_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newCorrelationThreshold%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changesnapshotQuery</name>
++			<request>
++				<field sequence="0">changesnapshotQuery</field>
++				<field sequence="1">%newSnapshotQuery%</field>
++			</request>
++			<response>
++				<field sequence="0">changesnapshotQuery_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newSnapshotQuery%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changepathQuery</name>
++			<request>
++				<field sequence="0">changepathQuery</field>
++				<field sequence="1">%newPathQuery%</field>
++			</request>
++			<response>
++				<field sequence="0">changepathQuery_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newPathQuery%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..6dc0c65
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement0FamilyElement.java
+@@ -0,0 +1,250 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++    private transient IFPreprocessor alg = null; 
++    transient ISimulatedFinancialDataSpringStreamOutput iTupleSpringStream = null;
++    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
++
++    public PipelineVar_10_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
++                _collector.emit("PipelineVar_10_FamilyElement0PreprocessedStream", new Values(item));
++            }
++        };
++        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                    alg = (IFPreprocessor) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Preprocessor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fPreprocessor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof ISimulatedFinancialDataSpringStreamOutput) {
++        iTupleSpringStream = (ISimulatedFinancialDataSpringStreamOutput)tupleItem;
++        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
++        try {
++            if(alg != null) {
++                alg.calculate(inputSpringStream, preprocessedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            preprocessedStreamResult.setSymbolId("");
++            preprocessedStreamResult.setTimestamp(0);
++            preprocessedStreamResult.setValue(0.0);
++            preprocessedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
++            iterPreprocessedStream.reset();
++            while (iterPreprocessedStream.hasNext()) {
++                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
++                _collector.emit("PipelineVar_10_FamilyElement0PreprocessedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Preprocessor":
++                if (!algChange || !(alg instanceof Preprocessor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                        alg = (IFPreprocessor) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_FamilyElement0PreprocessedStream", new Fields("PipelineVar_10_FamilyElement0PreprocessedStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..b72defe
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement1FamilyElement.java
+@@ -0,0 +1,544 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
++import eu.qualimaster.common.hardware.*;
++import com.google.protobuf.ByteString;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private String streamId = "PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial";
++    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++    private transient IFCorrelationFinancial alg = null; 
++    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
++    transient ISimulatedFinancialDataSymbolListOutput iTupleSymbolList = null;
++    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
++
++    public PipelineVar_10_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
++        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
++                _collector.emit("PipelineVar_10_FamilyElement1PairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                    alg = (IFCorrelationFinancial) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
++            streamId = "PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial";
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fCorrelationFinancial"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
++            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
++            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputPreprocessedStream));
++            }
++        }
++
++        if(tupleItem instanceof ISimulatedFinancialDataSymbolListOutput) {
++            iTupleSymbolList = (ISimulatedFinancialDataSymbolListOutput)tupleItem;
++            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++            if(alg instanceof ITopologyCreate) {
++                _collector.emit(streamId, new Values(inputSymbolList));
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("PipelineVar_10_FamilyElement1PairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TopoSoftwareCorrelationFinancial":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "GenTopoHardwareCorrelationFinancial":
++            case "GenTopoHardwareCorrelationFinancialSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("TimeTravelPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("TimeTravelPip",
++                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_10_FamilyElement1GenTopoHardwareCorrelationFinancial";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSW":
++            case "CorrelationSWSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_10_FamilyElement1CorrelationSW";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "TransferEntropyHardware":
++            case "TransferEntropyHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("TimeTravelPip",
++                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("TimeTravelPip",
++                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_10_FamilyElement1TransferEntropyHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "MutualInformationHardware":
++            case "MutualInformationHardwareSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    try {
++                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
++                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
++                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
++                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
++                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
++                        ByteString executable = ByteString.copyFromUtf8(url);
++                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
++                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("TimeTravelPip",
++                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
++                        sendSignal(signalForBolt);
++                        String ports = "";
++                        ports = ports + msg.getPortOut(0);
++                        for (int i=1; i<msg.getPortOutCount(); i++) {
++                            ports = ports + "," + msg.getPortOut(i);
++                        }
++                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("TimeTravelPip",
++                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
++                        sendSignal(signalForSpout);
++                    } catch (IOException e) {
++                        e.printStackTrace();
++                    } catch (SignalException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_10_FamilyElement1MutualInformationHardware";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++            case "CorrelationSWAlternative":
++            case "CorrelationSWAlternativeSubTopology":
++                logger.info("Is it the first change? " + algChange);
++                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
++                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
++                        alg = (IFCorrelationFinancial) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    streamId = "PipelineVar_10_FamilyElement1CorrelationSWAlternative";
++                    alg.setParameterWindowSize(30);
++                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                    algChange = true;
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_10_FamilyElement1PairwiseFinancialFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_10_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement1CorrelationSW", new Fields("PipelineVar_10_FamilyElement1CorrelationSWFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_10_FamilyElement1TransferEntropyHardwareFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_10_FamilyElement1MutualInformationHardwareFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_10_FamilyElement1CorrelationSWAlternativeFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement2FamilyElement.java
+new file mode 100644
+index 0000000..68494a8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement2FamilyElement.java
+@@ -0,0 +1,281 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
++import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.families.inf.IFHayashiYoshida.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_FamilyElement2FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement2FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++    private transient IFDynamicGraphCompilation alg = null; 
++    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient IIFDynamicGraphCompilationPairwiseFinancialInput inputPairwiseFinancial = null;
++
++    public PipelineVar_10_FamilyElement2FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
++        IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput> edgeStreamEmitter = new IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFDynamicGraphCompilationEdgeStreamOutput item) {
++                _collector.emit("PipelineVar_10_FamilyElement2EdgeStream", new Values(item));
++            }
++        };
++        edgeStreamResult.setEmitter(edgeStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
++                    alg = (IFDynamicGraphCompilation) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (PipelineOptions.hasExecutorArgument(map, getName(), "correlationThreshold")) {
++                    alg.setParameterCorrelationThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "correlationThreshold", 0.0));
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("DynamicGraphCompilation", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fDynamicGraphCompilation"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
++        iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
++        inputPairwiseFinancial = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
++        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++        try {
++            if(alg != null) {
++                alg.calculate(inputPairwiseFinancial, edgeStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            edgeStreamResult.setEdge("");
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFDynamicGraphCompilationEdgeStreamOutput> iterEdgeStream = edgeStreamResult.iterator();
++            iterEdgeStream.reset();
++            while (iterEdgeStream.hasNext()) {
++                IIFDynamicGraphCompilationEdgeStreamOutput out = iterEdgeStream.next();
++                _collector.emit("PipelineVar_10_FamilyElement2EdgeStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "correlationThreshold" :
++                    try {
++                        System.out.println("Received parameter changing signal correlationThreshold");
++                        alg.setParameterCorrelationThreshold(para.getDoubleValue()); 
++                        sendParameterChangeEvent("correlationThreshold", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "DynamicGraphCompilation":
++                if (!algChange || !(alg instanceof DynamicGraphCompilation)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
++                        alg = (IFDynamicGraphCompilation) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterCorrelationThreshold(0.0);
++                    sendAlgorithmChangeEvent("DynamicGraphCompilation", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_FamilyElement2EdgeStream", new Fields("PipelineVar_10_FamilyElement2EdgeStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement3FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement3FamilyElement.java
+new file mode 100644
+index 0000000..a6dfcdd
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement3FamilyElement.java
+@@ -0,0 +1,262 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFTimeGraphMapper.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.timegraph.TimeGraphMapper;
++import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_FamilyElement3FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement3FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput dataStreamResult = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
++    private transient IFTimeGraphMapper alg = null; 
++    private transient List<Integer> taskIdTimeGraphIndexer;
++    private int PipelineVar_10_FamilyElement3TaskId;
++    transient IIFDynamicGraphCompilationEdgeStreamOutput iTupleEdgeStream = null;
++    transient IIFTimeGraphMapperEdgeStreamInput inputEdgeStream = null;
++
++    public PipelineVar_10_FamilyElement3FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_10_FamilyElement4");
++        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
++        PipelineVar_10_FamilyElement3TaskId = topologyContext.getThisTaskId();
++        logger.info("PipelineVar_10_FamilyElement3TaskId = " + PipelineVar_10_FamilyElement3TaskId);
++
++        dataStreamResult = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
++        IItemEmitter<IIFTimeGraphMapperDataStreamOutput> dataStreamEmitter = new IItemEmitter<IIFTimeGraphMapperDataStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphMapperDataStreamOutput item) {
++                _collector.emitDirect(item.getTaskId(), "PipelineVar_10_FamilyElement3DataStream", new Values(item));
++            }
++        };
++        dataStreamResult.setEmitter(dataStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphMapper");
++                    alg = (IFTimeGraphMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_10_FamilyElement3TaskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                } catch (NoSuchMethodException e) {
++                    e.printStackTrace();
++                } catch (InvocationTargetException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TimeGraphMapper", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fTimeGraphMapper"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IIFDynamicGraphCompilationEdgeStreamOutput) {
++        iTupleEdgeStream = (IIFDynamicGraphCompilationEdgeStreamOutput)tupleItem;
++        inputEdgeStream = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
++        inputEdgeStream.setEdge(iTupleEdgeStream.getEdge());
++        try {
++            if(alg != null) {
++                alg.calculate(inputEdgeStream, dataStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            dataStreamResult.setUpdate(null);
++            dataStreamResult.setIsAddition(false);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphMapperDataStreamOutput> iterDataStream = dataStreamResult.iterator();
++            iterDataStream.reset();
++            while (iterDataStream.hasNext()) {
++                IIFTimeGraphMapperDataStreamOutput out = iterDataStream.next();
++                _collector.emitDirect(out.getTaskId(), "PipelineVar_10_FamilyElement3DataStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TimeGraphMapper":
++                if (!algChange || !(alg instanceof TimeGraphMapper)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphMapper");
++                        alg = (IFTimeGraphMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_10_FamilyElement3TaskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    } catch (NoSuchMethodException e) {
++                        e.printStackTrace();
++                    } catch (InvocationTargetException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("TimeGraphMapper", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_FamilyElement3DataStream", new Fields("PipelineVar_10_FamilyElement3DataStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement4FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement4FamilyElement.java
+new file mode 100644
+index 0000000..ca2fae3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement4FamilyElement.java
+@@ -0,0 +1,375 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.timegraph.TimeGraphIndexer;
++import eu.qualimaster.families.inf.IFTimeGraphMapper.*;
++import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
++import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_FamilyElement4FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement4FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput externalResponsesResult = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
++    private transient FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput internalRequestsResult = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
++    private transient IFTimeGraphIndexer alg = null; 
++    private transient List<Integer> taskIdTimeGraphIndexer;
++    private transient List<Integer> taskIdTimeGraphQueryExecutor;
++    private int PipelineVar_10_FamilyElement4TaskId;
++    transient IIFTimeGraphMapperDataStreamOutput iTupleDataStream = null;
++    transient IIFTimeGraphIndexerInternalRequestsOutput iTupleInternalRequests = null;
++    transient IIFTimeGraphQueryExecutorUnicastRequestsOutput iTupleUnicastRequests = null;
++    transient IIFTimeGraphQueryExecutorBroadcastRequestsOutput iTupleBroadcastRequests = null;
++    transient IIFTimeGraphIndexerDataStreamInput inputDataStream = null;
++    transient IIFTimeGraphIndexerInternalRequestsInput inputInternalRequests = null;
++    transient IIFTimeGraphIndexerUnicastRequestsInput inputUnicastRequests = null;
++    transient IIFTimeGraphIndexerBroadcastRequestsInput inputBroadcastRequests = null;
++
++    public PipelineVar_10_FamilyElement4FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_10_FamilyElement4");
++        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
++        taskIdTimeGraphQueryExecutor = topologyContext.getComponentTasks("PipelineVar_10_FamilyElement5");
++        logger.info("taskIdsTimeGraphQueryExecutor = " + taskIdTimeGraphQueryExecutor);
++        PipelineVar_10_FamilyElement4TaskId = topologyContext.getThisTaskId();
++        logger.info("PipelineVar_10_FamilyElement4TaskId = " + PipelineVar_10_FamilyElement4TaskId);
++
++        externalResponsesResult = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
++        IItemEmitter<IIFTimeGraphIndexerExternalResponsesOutput> externalResponsesEmitter = new IItemEmitter<IIFTimeGraphIndexerExternalResponsesOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphIndexerExternalResponsesOutput item) {
++                _collector.emitDirect(item.getTaskId(), "PipelineVar_10_FamilyElement4ExternalResponses", new Values(item));
++            }
++        };
++        externalResponsesResult.setEmitter(externalResponsesEmitter);
++
++        internalRequestsResult = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
++        IItemEmitter<IIFTimeGraphIndexerInternalRequestsOutput> internalRequestsEmitter = new IItemEmitter<IIFTimeGraphIndexerInternalRequestsOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphIndexerInternalRequestsOutput item) {
++                _collector.emitDirect(item.getTaskId(), "PipelineVar_10_FamilyElement4InternalRequests", new Values(item));
++            }
++        };
++        internalRequestsResult.setEmitter(internalRequestsEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphIndexer");
++                    alg = (IFTimeGraphIndexer) cls.getConstructor(List.class, List.class, int.class).newInstance(taskIdTimeGraphIndexer, taskIdTimeGraphQueryExecutor, PipelineVar_10_FamilyElement4TaskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                } catch (NoSuchMethodException e) {
++                    e.printStackTrace();
++                } catch (InvocationTargetException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TimeGraphIndexer", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fTimeGraphIndexer"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFTimeGraphMapperDataStreamOutput) {
++            iTupleDataStream = (IIFTimeGraphMapperDataStreamOutput)tupleItem;
++            inputDataStream = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
++            inputDataStream.setUpdate(iTupleDataStream.getUpdate());
++            inputDataStream.setIsAddition(iTupleDataStream.getIsAddition());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputDataStream, externalResponsesResult, internalRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                externalResponsesResult.setExternalResponse(null);
++                internalRequestsResult.setInternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFTimeGraphIndexerInternalRequestsOutput) {
++            iTupleInternalRequests = (IIFTimeGraphIndexerInternalRequestsOutput)tupleItem;
++            inputInternalRequests = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
++            inputInternalRequests.setInternalRequest(iTupleInternalRequests.getInternalRequest());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputInternalRequests, externalResponsesResult, internalRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                externalResponsesResult.setExternalResponse(null);
++                internalRequestsResult.setInternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFTimeGraphQueryExecutorUnicastRequestsOutput) {
++            iTupleUnicastRequests = (IIFTimeGraphQueryExecutorUnicastRequestsOutput)tupleItem;
++            inputUnicastRequests = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
++            inputUnicastRequests.setUnicastExternalRequest(iTupleUnicastRequests.getUnicastExternalRequest());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputUnicastRequests, externalResponsesResult, internalRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                externalResponsesResult.setExternalResponse(null);
++                internalRequestsResult.setInternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFTimeGraphQueryExecutorBroadcastRequestsOutput) {
++            iTupleBroadcastRequests = (IIFTimeGraphQueryExecutorBroadcastRequestsOutput)tupleItem;
++            inputBroadcastRequests = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
++            inputBroadcastRequests.setBroadcastExternalRequest(iTupleBroadcastRequests.getBroadcastExternalRequest());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputBroadcastRequests, externalResponsesResult, internalRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                externalResponsesResult.setExternalResponse(null);
++                internalRequestsResult.setInternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphIndexerExternalResponsesOutput> iterExternalResponses = externalResponsesResult.iterator();
++            iterExternalResponses.reset();
++            while (iterExternalResponses.hasNext()) {
++                IIFTimeGraphIndexerExternalResponsesOutput out = iterExternalResponses.next();
++                _collector.emitDirect(out.getTaskId(), "PipelineVar_10_FamilyElement4ExternalResponses", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphIndexerInternalRequestsOutput> iterInternalRequests = internalRequestsResult.iterator();
++            iterInternalRequests.reset();
++            while (iterInternalRequests.hasNext()) {
++                IIFTimeGraphIndexerInternalRequestsOutput out = iterInternalRequests.next();
++                _collector.emitDirect(out.getTaskId(), "PipelineVar_10_FamilyElement4InternalRequests", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TimeGraphIndexer":
++                if (!algChange || !(alg instanceof TimeGraphIndexer)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphIndexer");
++                        alg = (IFTimeGraphIndexer) cls.getConstructor(List.class, List.class, int.class).newInstance(taskIdTimeGraphIndexer, taskIdTimeGraphQueryExecutor, PipelineVar_10_FamilyElement4TaskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    } catch (NoSuchMethodException e) {
++                        e.printStackTrace();
++                    } catch (InvocationTargetException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("TimeGraphIndexer", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_FamilyElement4ExternalResponses", new Fields("PipelineVar_10_FamilyElement4ExternalResponsesFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement4InternalRequests", new Fields("PipelineVar_10_FamilyElement4InternalRequestsFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement5FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement5FamilyElement.java
+new file mode 100644
+index 0000000..4ed0e03
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement5FamilyElement.java
+@@ -0,0 +1,385 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.timegraph.TimeGraphQueryExecutor;
++import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
++import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_FamilyElement5FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement5FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
++    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput pathStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
++    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
++    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
++    private transient IFTimeGraphQueryExecutor alg = null; 
++    private transient List<Integer> taskIdTimeGraphIndexer;
++    private int PipelineVar_10_FamilyElement5TaskId;
++    transient ITimeGraphQueriesSourceSnapshotQueryStreamOutput iTupleSnapshotQueryStream = null;
++    transient ITimeGraphQueriesSourcePathQueryStreamOutput iTuplePathQueryStream = null;
++    transient IIFTimeGraphIndexerExternalResponsesOutput iTupleExternalResponses = null;
++    transient IIFTimeGraphQueryExecutorSnapshotQueryStreamInput inputSnapshotQueryStream = null;
++    transient IIFTimeGraphQueryExecutorPathQueryStreamInput inputPathQueryStream = null;
++    transient IIFTimeGraphQueryExecutorExternalResponsesInput inputExternalResponses = null;
++
++    public PipelineVar_10_FamilyElement5FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_10_FamilyElement4");
++        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
++        PipelineVar_10_FamilyElement5TaskId = topologyContext.getThisTaskId();
++        logger.info("PipelineVar_10_FamilyElement5TaskId = " + PipelineVar_10_FamilyElement5TaskId);
++
++        snapshotStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
++        IItemEmitter<IIFTimeGraphQueryExecutorSnapshotStreamOutput> snapshotStreamEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorSnapshotStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorSnapshotStreamOutput item) {
++                _collector.emit("PipelineVar_10_FamilyElement5SnapshotStream", new Values(item));
++            }
++        };
++        snapshotStreamResult.setEmitter(snapshotStreamEmitter);
++
++        pathStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
++        IItemEmitter<IIFTimeGraphQueryExecutorPathStreamOutput> pathStreamEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorPathStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorPathStreamOutput item) {
++                _collector.emit("PipelineVar_10_FamilyElement5PathStream", new Values(item));
++            }
++        };
++        pathStreamResult.setEmitter(pathStreamEmitter);
++
++        unicastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
++        IItemEmitter<IIFTimeGraphQueryExecutorUnicastRequestsOutput> unicastRequestsEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorUnicastRequestsOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorUnicastRequestsOutput item) {
++                _collector.emitDirect(item.getTaskId(), "PipelineVar_10_FamilyElement5UnicastRequests", new Values(item));
++            }
++        };
++        unicastRequestsResult.setEmitter(unicastRequestsEmitter);
++
++        broadcastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
++        IItemEmitter<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> broadcastRequestsEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorBroadcastRequestsOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorBroadcastRequestsOutput item) {
++                _collector.emit("PipelineVar_10_FamilyElement5BroadcastRequests", new Values(item));
++            }
++        };
++        broadcastRequestsResult.setEmitter(broadcastRequestsEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphQueryExecutor");
++                    alg = (IFTimeGraphQueryExecutor) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_10_FamilyElement5TaskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                } catch (NoSuchMethodException e) {
++                    e.printStackTrace();
++                } catch (InvocationTargetException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TimeGraphQueryExecutor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fTimeGraphQueryExecutor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof ITimeGraphQueriesSourceSnapshotQueryStreamOutput) {
++            iTupleSnapshotQueryStream = (ITimeGraphQueriesSourceSnapshotQueryStreamOutput)tupleItem;
++            inputSnapshotQueryStream = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
++            inputSnapshotQueryStream.setStart(iTupleSnapshotQueryStream.getStart());
++            inputSnapshotQueryStream.setEnd(iTupleSnapshotQueryStream.getEnd());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSnapshotQueryStream, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                snapshotStreamResult.setSnapshot("");
++                pathStreamResult.setPath("");
++                unicastRequestsResult.setUnicastExternalRequest(null);
++                broadcastRequestsResult.setBroadcastExternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof ITimeGraphQueriesSourcePathQueryStreamOutput) {
++            iTuplePathQueryStream = (ITimeGraphQueriesSourcePathQueryStreamOutput)tupleItem;
++            inputPathQueryStream = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
++            inputPathQueryStream.setStart(iTuplePathQueryStream.getStart());
++            inputPathQueryStream.setEnd(iTuplePathQueryStream.getEnd());
++            inputPathQueryStream.setVertexA(iTuplePathQueryStream.getVertexA());
++            inputPathQueryStream.setVertexB(iTuplePathQueryStream.getVertexB());
++            inputPathQueryStream.setType(iTuplePathQueryStream.getType());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPathQueryStream, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                snapshotStreamResult.setSnapshot("");
++                pathStreamResult.setPath("");
++                unicastRequestsResult.setUnicastExternalRequest(null);
++                broadcastRequestsResult.setBroadcastExternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFTimeGraphIndexerExternalResponsesOutput) {
++            iTupleExternalResponses = (IIFTimeGraphIndexerExternalResponsesOutput)tupleItem;
++            inputExternalResponses = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
++            inputExternalResponses.setExternalResponse(iTupleExternalResponses.getExternalResponse());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputExternalResponses, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                snapshotStreamResult.setSnapshot("");
++                pathStreamResult.setPath("");
++                unicastRequestsResult.setUnicastExternalRequest(null);
++                broadcastRequestsResult.setBroadcastExternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorSnapshotStreamOutput> iterSnapshotStream = snapshotStreamResult.iterator();
++            iterSnapshotStream.reset();
++            while (iterSnapshotStream.hasNext()) {
++                IIFTimeGraphQueryExecutorSnapshotStreamOutput out = iterSnapshotStream.next();
++                _collector.emit("PipelineVar_10_FamilyElement5SnapshotStream", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorPathStreamOutput> iterPathStream = pathStreamResult.iterator();
++            iterPathStream.reset();
++            while (iterPathStream.hasNext()) {
++                IIFTimeGraphQueryExecutorPathStreamOutput out = iterPathStream.next();
++                _collector.emit("PipelineVar_10_FamilyElement5PathStream", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorUnicastRequestsOutput> iterUnicastRequests = unicastRequestsResult.iterator();
++            iterUnicastRequests.reset();
++            while (iterUnicastRequests.hasNext()) {
++                IIFTimeGraphQueryExecutorUnicastRequestsOutput out = iterUnicastRequests.next();
++                _collector.emitDirect(out.getTaskId(), "PipelineVar_10_FamilyElement5UnicastRequests", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> iterBroadcastRequests = broadcastRequestsResult.iterator();
++            iterBroadcastRequests.reset();
++            while (iterBroadcastRequests.hasNext()) {
++                IIFTimeGraphQueryExecutorBroadcastRequestsOutput out = iterBroadcastRequests.next();
++                _collector.emit("PipelineVar_10_FamilyElement5BroadcastRequests", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TimeGraphQueryExecutor":
++                if (!algChange || !(alg instanceof TimeGraphQueryExecutor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphQueryExecutor");
++                        alg = (IFTimeGraphQueryExecutor) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_10_FamilyElement5TaskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    } catch (NoSuchMethodException e) {
++                        e.printStackTrace();
++                    } catch (InvocationTargetException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("TimeGraphQueryExecutor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_FamilyElement5SnapshotStream", new Fields("PipelineVar_10_FamilyElement5SnapshotStreamFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement5PathStream", new Fields("PipelineVar_10_FamilyElement5PathStreamFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement5UnicastRequests", new Fields("PipelineVar_10_FamilyElement5UnicastRequestsFields"));
++        declarer.declareStream("PipelineVar_10_FamilyElement5BroadcastRequests", new Fields("PipelineVar_10_FamilyElement5BroadcastRequestsFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Sink0Sink.java
+new file mode 100644
+index 0000000..44df1e5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Sink0Sink.java
+@@ -0,0 +1,144 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.ITimeTravelSink;
++import eu.qualimaster.data.inf.ITimeTravelSink.*;
++import eu.qualimaster.data.imp.TimeTravelSink;
++import eu.qualimaster.data.imp.TimeTravelSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient ITimeTravelSink sinkHandler;
++private int counter = 0;
++    transient IIFTimeGraphQueryExecutorSnapshotStreamOutput iTupleSnapshotStream = null;
++    transient IIFTimeGraphQueryExecutorPathStreamOutput iTuplePathStream = null;
++    transient ITimeTravelSinkSnapshotStreamInput inputSnapshotStream = null;
++    transient ITimeTravelSinkPathStreamInput inputPathStream = null;
++
++	public PipelineVar_10_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++        if(tupleItem instanceof IIFTimeGraphQueryExecutorSnapshotStreamOutput) {
++            iTupleSnapshotStream = (IIFTimeGraphQueryExecutorSnapshotStreamOutput)tupleItem;
++            inputSnapshotStream = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
++            inputSnapshotStream.setSnapshot(iTupleSnapshotStream.getSnapshot());
++            sinkHandler.postDataSnapshotStream(inputSnapshotStream);
++            emitted(inputSnapshotStream);
++        }
++
++        if(tupleItem instanceof IIFTimeGraphQueryExecutorPathStreamOutput) {
++            iTuplePathStream = (IIFTimeGraphQueryExecutorPathStreamOutput)tupleItem;
++            inputPathStream = new TimeTravelSink.TimeTravelSinkPathStreamInput();
++            inputPathStream.setPath(iTuplePathStream.getPath());
++            sinkHandler.postDataPathStream(inputPathStream);
++            emitted(inputPathStream);
++        }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
++        new TimeTravelSink.TimeTravelSinkPathStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ITimeTravelSink> cls = (Class<? extends ITimeTravelSink>)Class.forName("eu.qualimaster.timegraph.TimeTravelSink");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("TimeTravelSink", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_Sink0SnapshotStream", new Fields("PipelineVar_10_Sink0SnapshotStreamFields"));
++        declarer.declareStream("PipelineVar_10_Sink0PathStream", new Fields("PipelineVar_10_Sink0PathStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source0Source.java
+new file mode 100644
+index 0000000..d45cd96
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source0Source.java
+@@ -0,0 +1,210 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ISimulatedFinancialData;
++import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
++import eu.qualimaster.data.imp.SimulatedFinancialData;
++import eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ISimulatedFinancialData sourceData;
++
++    public PipelineVar_10_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("TimeTravelPip", "PipelineVar_10_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedFinancialDataSymbolListOutput>(ISimulatedFinancialDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(ISimulatedFinancialDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedFinancialDataSpringStreamOutput>(ISimulatedFinancialDataSpringStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ISimulatedFinancialDataSpringStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ISimulatedFinancialData> cls = (Class<? extends ISimulatedFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("SpringClientSimulator", null);
++            sourceData.setParameterSpeedFactor(PipelineOptions.getExecutorDoubleArgument(conf, getName(), "speedFactor", 1.0));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("TimeTravelPip", "PipelineVar_10_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_10_Source0StreamSymbolList".
++        ISimulatedFinancialDataSymbolListOutput dataItemSymbolList = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PipelineVar_10_Source0SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PipelineVar_10_Source0SpringStream".
++        ISimulatedFinancialDataSpringStreamOutput dataItemSpringStream = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
++        try {
++            dataItemSpringStream = sourceData.getSpringStream();
++        } catch(DefaultModeException e) {
++            dataItemSpringStream.setSymbolTuple("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSpringStream!=null){
++            _collector.emit("PipelineVar_10_Source0SpringStream", new Values(dataItemSpringStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "speedFactor" :
++                    try {
++                        logger.info("Received the parameter speedFactor!");
++                        sourceData.setParameterSpeedFactor(para.getDoubleValue()); 
++                        sendParameterChangeEvent("speedFactor", para.getDoubleValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_Source0SymbolList", new Fields("PipelineVar_10_Source0SymbolListFields"));
++        declarer.declareStream("PipelineVar_10_Source0SpringStream", new Fields("PipelineVar_10_Source0SpringStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source1Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source1Source.java
+new file mode 100644
+index 0000000..6489f05
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source1Source.java
+@@ -0,0 +1,221 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ITimeGraphQueriesSource;
++import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
++import eu.qualimaster.data.imp.TimeGraphQueriesSource;
++import eu.qualimaster.timegraph.QueriesSource;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_10_Source1Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_10_Source1Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ITimeGraphQueriesSource sourceData;
++
++    public PipelineVar_10_Source1Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("TimeTravelPip", "PipelineVar_10_Source1", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITimeGraphQueriesSourceSnapshotQueryStreamOutput>(ITimeGraphQueriesSourceSnapshotQueryStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ITimeGraphQueriesSourceSnapshotQueryStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITimeGraphQueriesSourcePathQueryStreamOutput>(ITimeGraphQueriesSourcePathQueryStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ITimeGraphQueriesSourcePathQueryStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ITimeGraphQueriesSource> cls = (Class<? extends ITimeGraphQueriesSource>) Class.forName("eu.qualimaster.timegraph.QueriesSource");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("QueriesSource", null);
++            if (PipelineOptions.hasExecutorArgument(conf, getName(), "snapshotQuery")) {
++                sourceData.setParameterSnapshotQuery(PipelineOptions.getExecutorStringArgument(conf, getName(), "snapshotQuery", ""));
++            }
++            if (PipelineOptions.hasExecutorArgument(conf, getName(), "pathQuery")) {
++                sourceData.setParameterPathQuery(PipelineOptions.getExecutorStringArgument(conf, getName(), "pathQuery", ""));
++            }
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("TimeTravelPip", "PipelineVar_10_Source1", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_10_Source1StreamSnapshotQueryStream".
++        ITimeGraphQueriesSourceSnapshotQueryStreamOutput dataItemSnapshotQueryStream = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
++        try {
++            dataItemSnapshotQueryStream = sourceData.getSnapshotQueryStream();
++        } catch(DefaultModeException e) {
++            dataItemSnapshotQueryStream.setStart(0);
++            dataItemSnapshotQueryStream.setEnd(0);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSnapshotQueryStream!=null){
++            _collector.emit("PipelineVar_10_Source1SnapshotQueryStream", new Values(dataItemSnapshotQueryStream));
++        }
++
++        // Emitting stream "PipelineVar_10_Source1PathQueryStream".
++        ITimeGraphQueriesSourcePathQueryStreamOutput dataItemPathQueryStream = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
++        try {
++            dataItemPathQueryStream = sourceData.getPathQueryStream();
++        } catch(DefaultModeException e) {
++            dataItemPathQueryStream.setStart(0);
++            dataItemPathQueryStream.setEnd(0);
++            dataItemPathQueryStream.setVertexA("");
++            dataItemPathQueryStream.setVertexB("");
++            dataItemPathQueryStream.setType("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemPathQueryStream!=null){
++            _collector.emit("PipelineVar_10_Source1PathQueryStream", new Values(dataItemPathQueryStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "snapshotQuery" :
++                    logger.info("Received the parameter snapshotQuery!");
++                    sourceData.setParameterSnapshotQuery(para.getStringValue()); 
++                    sendParameterChangeEvent("snapshotQuery", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "pathQuery" :
++                    logger.info("Received the parameter pathQuery!");
++                    sourceData.setParameterPathQuery(para.getStringValue()); 
++                    sendParameterChangeEvent("pathQuery", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_10_Source1SnapshotQueryStream", new Fields("PipelineVar_10_Source1SnapshotQueryStreamFields"));
++        declarer.declareStream("PipelineVar_10_Source1PathQueryStream", new Fields("PipelineVar_10_Source1PathQueryStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/Topology.java
+new file mode 100644
+index 0000000..bb668f6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/Topology.java
+@@ -0,0 +1,180 @@
++package eu.qualimaster.TimeTravelPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
++import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
++import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
++import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
++import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
++import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
++import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
++import eu.qualimaster.timegraph.TimeGraphMapper;
++import eu.qualimaster.timegraph.TimeGraphIndexer;
++import eu.qualimaster.timegraph.TimeGraphQueryExecutor;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "TimeTravelPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 18; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "FinancialDataSource"
++
++            builder.setSpout("PipelineVar_10_Source0", new PipelineVar_10_Source0Source("PipelineVar_10_Source0", "TimeTravelPip"), 1);
++            // Declare a Bolt "Preprocessor"
++
++            BoltDeclarer PipelineVar_10_FamilyElement0=builder.setBolt("PipelineVar_10_FamilyElement0", new PipelineVar_10_FamilyElement0FamilyElement("PipelineVar_10_FamilyElement0", "TimeTravelPip"), 1);
++            PipelineVar_10_FamilyElement0.shuffleGrouping("PipelineVar_10_Source0", "PipelineVar_10_Source0SpringStream");
++            // Declare a Bolt "FinancialCorrelation"
++
++            BoltDeclarer PipelineVar_10_FamilyElement1=builder.setBolt("PipelineVar_10_FamilyElement1", new PipelineVar_10_FamilyElement1FamilyElement("PipelineVar_10_FamilyElement1", "TimeTravelPip"), 1);
++            PipelineVar_10_FamilyElement1.shuffleGrouping("PipelineVar_10_FamilyElement0", "PipelineVar_10_FamilyElement0PreprocessedStream");
++            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
++            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
++                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
++            }
++            builder.startRecording("TopoSoftwareCorrelationFinancial");
++            ITopologyCreate PipelineVar_10_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
++            SubTopologyOutput PipelineVar_10_FamilyElement11SubOutput = PipelineVar_10_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial");
++            builder.endRecording(PipelineVar_10_FamilyElement11SubCreator);
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement11SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement11SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
++            ITopologyCreate PipelineVar_10_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
++            SubTopologyOutput PipelineVar_10_FamilyElement12SubOutput = PipelineVar_10_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1GenTopoHardwareCorrelationFinancial");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement12SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement12SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
++            ITopologyCreate PipelineVar_10_FamilyElement13SubCreator = new CorrelationSWSubTopology();
++            SubTopologyOutput PipelineVar_10_FamilyElement13SubOutput = PipelineVar_10_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1CorrelationSW");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement13SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement13SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
++            ITopologyCreate PipelineVar_10_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
++            SubTopologyOutput PipelineVar_10_FamilyElement14SubOutput = PipelineVar_10_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1TransferEntropyHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement14SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement14SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
++            ITopologyCreate PipelineVar_10_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
++            SubTopologyOutput PipelineVar_10_FamilyElement15SubOutput = PipelineVar_10_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1MutualInformationHardware");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement15SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement15SubOutput.getMaxTaskParallelism());
++            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
++            ITopologyCreate PipelineVar_10_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
++            SubTopologyOutput PipelineVar_10_FamilyElement16SubOutput = PipelineVar_10_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1CorrelationSWAlternative");
++            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement16SubOutput.getNumWorkers());
++            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement16SubOutput.getMaxTaskParallelism());
++            // Declare a Bolt "DynamicGraphCompilation"
++
++            BoltDeclarer PipelineVar_10_FamilyElement2=builder.setBolt("PipelineVar_10_FamilyElement2", new PipelineVar_10_FamilyElement2FamilyElement("PipelineVar_10_FamilyElement2", "TimeTravelPip"), 1);
++            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement11SubOutput.getBoltName(), PipelineVar_10_FamilyElement11SubOutput.getStreamId());
++            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement12SubOutput.getBoltName(), PipelineVar_10_FamilyElement12SubOutput.getStreamId());
++            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement13SubOutput.getBoltName(), PipelineVar_10_FamilyElement13SubOutput.getStreamId());
++            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement14SubOutput.getBoltName(), PipelineVar_10_FamilyElement14SubOutput.getStreamId());
++            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement15SubOutput.getBoltName(), PipelineVar_10_FamilyElement15SubOutput.getStreamId());
++            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement16SubOutput.getBoltName(), PipelineVar_10_FamilyElement16SubOutput.getStreamId());
++            // Declare a Bolt "TimeGraphMapper"
++
++            BoltDeclarer PipelineVar_10_FamilyElement3=builder.setBolt("PipelineVar_10_FamilyElement3", new PipelineVar_10_FamilyElement3FamilyElement("PipelineVar_10_FamilyElement3", "TimeTravelPip"), 1);
++            PipelineVar_10_FamilyElement3.shuffleGrouping("PipelineVar_10_FamilyElement2", "PipelineVar_10_FamilyElement2EdgeStream");
++            // Declare a Bolt "TimeGraphIndexer"
++
++            BoltDeclarer PipelineVar_10_FamilyElement4=builder.setBolt("PipelineVar_10_FamilyElement4", new PipelineVar_10_FamilyElement4FamilyElement("PipelineVar_10_FamilyElement4", "TimeTravelPip"), 5);
++            PipelineVar_10_FamilyElement4.directGrouping("PipelineVar_10_FamilyElement3", "PipelineVar_10_FamilyElement3DataStream");
++            PipelineVar_10_FamilyElement4.directGrouping("PipelineVar_10_FamilyElement4", "PipelineVar_10_FamilyElement4InternalRequests");
++            // Declare a Bolt "TimeGraphQueryExecutor"
++
++            BoltDeclarer PipelineVar_10_FamilyElement5=builder.setBolt("PipelineVar_10_FamilyElement5", new PipelineVar_10_FamilyElement5FamilyElement("PipelineVar_10_FamilyElement5", "TimeTravelPip"), 1);
++            PipelineVar_10_FamilyElement5.directGrouping("PipelineVar_10_FamilyElement4", "PipelineVar_10_FamilyElement4ExternalResponses");
++            PipelineVar_10_FamilyElement4.allGrouping("PipelineVar_10_FamilyElement5", "PipelineVar_10_FamilyElement5BroadcastRequests");
++            PipelineVar_10_FamilyElement4.directGrouping("PipelineVar_10_FamilyElement5", "PipelineVar_10_FamilyElement5UnicastRequests");
++            // Declare a Bolt "TimeTravelSink"
++
++            BoltDeclarer PipelineVar_10_Sink0=builder.setBolt("PipelineVar_10_Sink0", new PipelineVar_10_Sink0Sink("PipelineVar_10_Sink0", "TimeTravelPip"), 1);
++            PipelineVar_10_Sink0.shuffleGrouping("PipelineVar_10_FamilyElement5", "PipelineVar_10_FamilyElement5SnapshotStream");
++            PipelineVar_10_Sink0.shuffleGrouping("PipelineVar_10_FamilyElement5", "PipelineVar_10_FamilyElement5PathStream");
++            PipelineVar_10_FamilyElement1.shuffleGrouping("PipelineVar_10_Source0", "PipelineVar_10_Source0SymbolList");
++            // Declare a Spout "queries"
++
++            builder.setSpout("PipelineVar_10_Source1", new PipelineVar_10_Source1Source("PipelineVar_10_Source1", "TimeTravelPip"), 1);
++            PipelineVar_10_FamilyElement5.shuffleGrouping("PipelineVar_10_Source1", "PipelineVar_10_Source1SnapshotQueryStream");
++            PipelineVar_10_FamilyElement5.shuffleGrouping("PipelineVar_10_Source1", "PipelineVar_10_Source1PathQueryStream");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/mapping.xml
+new file mode 100644
+index 0000000..d215fee
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/mapping.xml
+@@ -0,0 +1,31 @@
++<mapping>
++  <pipeline name="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.Topology">
++      <node name="GraphDataSource" type="source">
++          <component name="PipelineVar_18_Source0" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="TimeGraphMapper" type="family">
++          <component name="PipelineVar_18_FamilyElement0" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphMapper"/>
++      </node>
++      <node name="TimeGraphIndexer" type="family">
++          <component name="PipelineVar_18_FamilyElement1" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphIndexer"/>
++      </node>
++      <node name="TimeGraphQueryExecutor" type="family">
++          <component name="PipelineVar_18_FamilyElement2" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphQueryExecutor"/>
++      </node>
++      <node name="TimeTravelSink" type="sink">
++          <component name="PipelineVar_18_Sink0" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="queries" type="source">
++          <component name="PipelineVar_18_Source1" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_Source1Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="TimeGraphMapper" implName="TimeGraphMapper" class="eu.qualimaster.timegraph.TimeGraphMapper"/>
++      <algorithm name="TimeGraphIndexer" implName="TimeGraphIndexer" class="eu.qualimaster.timegraph.TimeGraphIndexer"/>
++      <algorithm name="TimeGraphQueryExecutor" implName="TimeGraphQueryExecutor" class="eu.qualimaster.timegraph.TimeGraphQueryExecutor"/>
++      <algorithm name="SimulatedGraphData" implName="SimulatedGraphDataAlgorithm" class="eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm"/>
++      <algorithm name="TimeGraphQueriesSource" implName="QueriesSource" class="eu.qualimaster.timegraph.QueriesSource"/>
++      <algorithm name="TimeTravelSink" implName="TimeTravelSink" class="eu.qualimaster.timegraph.TimeTravelSink"/>
++      <parameter parameter="snapshotQuery" name="queries" receiver="PipelineVar_18_Source1"/> 
++      <parameter parameter="pathQuery" name="queries" receiver="PipelineVar_18_Source1"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/pom.xml
+new file mode 100644
+index 0000000..6cbcd7b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/pom.xml
+@@ -0,0 +1,260 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>TimeTravelSimPip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>time-graph-spout</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>time-graph</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>time-graph-external</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>time-travel-sink</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/settings.xml
+new file mode 100644
+index 0000000..bb27d5f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/settings.xml
+@@ -0,0 +1,89 @@
++<pipeline>
++    <name>TimeTravelSimPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changepathQuery</name>
++			<request>
++				<field sequence="0">changepathQuery</field>
++				<field sequence="1">%newPathQuery%</field>
++			</request>
++			<response>
++				<field sequence="0">changepathQuery_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newPathQuery%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changesnapshotQuery</name>
++			<request>
++				<field sequence="0">changesnapshotQuery</field>
++				<field sequence="1">%newSnapshotQuery%</field>
++			</request>
++			<response>
++				<field sequence="0">changesnapshotQuery_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newSnapshotQuery%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..2252d23
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement0FamilyElement.java
+@@ -0,0 +1,262 @@
++package eu.qualimaster.TimeTravelSimPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFTimeGraphMapper.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.timegraph.TimeGraphMapper;
++import eu.qualimaster.data.inf.ISimulatedGraphData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_18_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_18_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput dataStreamResult = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
++    private transient IFTimeGraphMapper alg = null; 
++    private transient List<Integer> taskIdTimeGraphIndexer;
++    private int PipelineVar_18_FamilyElement0TaskId;
++    transient ISimulatedGraphDataEdgeStreamOutput iTupleEdgeStream = null;
++    transient IIFTimeGraphMapperEdgeStreamInput inputEdgeStream = null;
++
++    public PipelineVar_18_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_18_FamilyElement1");
++        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
++        PipelineVar_18_FamilyElement0TaskId = topologyContext.getThisTaskId();
++        logger.info("PipelineVar_18_FamilyElement0TaskId = " + PipelineVar_18_FamilyElement0TaskId);
++
++        dataStreamResult = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
++        IItemEmitter<IIFTimeGraphMapperDataStreamOutput> dataStreamEmitter = new IItemEmitter<IIFTimeGraphMapperDataStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphMapperDataStreamOutput item) {
++                _collector.emitDirect(item.getTaskId(), "PipelineVar_18_FamilyElement0DataStream", new Values(item));
++            }
++        };
++        dataStreamResult.setEmitter(dataStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphMapper");
++                    alg = (IFTimeGraphMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_18_FamilyElement0TaskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                } catch (NoSuchMethodException e) {
++                    e.printStackTrace();
++                } catch (InvocationTargetException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TimeGraphMapper", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fTimeGraphMapper"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof ISimulatedGraphDataEdgeStreamOutput) {
++        iTupleEdgeStream = (ISimulatedGraphDataEdgeStreamOutput)tupleItem;
++        inputEdgeStream = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
++        inputEdgeStream.setEdge(iTupleEdgeStream.getEdge());
++        try {
++            if(alg != null) {
++                alg.calculate(inputEdgeStream, dataStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            dataStreamResult.setUpdate(null);
++            dataStreamResult.setIsAddition(false);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphMapperDataStreamOutput> iterDataStream = dataStreamResult.iterator();
++            iterDataStream.reset();
++            while (iterDataStream.hasNext()) {
++                IIFTimeGraphMapperDataStreamOutput out = iterDataStream.next();
++                _collector.emitDirect(out.getTaskId(), "PipelineVar_18_FamilyElement0DataStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TimeGraphMapper":
++                if (!algChange || !(alg instanceof TimeGraphMapper)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphMapper");
++                        alg = (IFTimeGraphMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_18_FamilyElement0TaskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    } catch (NoSuchMethodException e) {
++                        e.printStackTrace();
++                    } catch (InvocationTargetException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("TimeGraphMapper", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_18_FamilyElement0DataStream", new Fields("PipelineVar_18_FamilyElement0DataStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..45a1187
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement1FamilyElement.java
+@@ -0,0 +1,375 @@
++package eu.qualimaster.TimeTravelSimPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.timegraph.TimeGraphIndexer;
++import eu.qualimaster.families.inf.IFTimeGraphMapper.*;
++import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
++import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_18_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_18_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput externalResponsesResult = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
++    private transient FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput internalRequestsResult = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
++    private transient IFTimeGraphIndexer alg = null; 
++    private transient List<Integer> taskIdTimeGraphIndexer;
++    private transient List<Integer> taskIdTimeGraphQueryExecutor;
++    private int PipelineVar_18_FamilyElement1TaskId;
++    transient IIFTimeGraphMapperDataStreamOutput iTupleDataStream = null;
++    transient IIFTimeGraphIndexerInternalRequestsOutput iTupleInternalRequests = null;
++    transient IIFTimeGraphQueryExecutorUnicastRequestsOutput iTupleUnicastRequests = null;
++    transient IIFTimeGraphQueryExecutorBroadcastRequestsOutput iTupleBroadcastRequests = null;
++    transient IIFTimeGraphIndexerDataStreamInput inputDataStream = null;
++    transient IIFTimeGraphIndexerInternalRequestsInput inputInternalRequests = null;
++    transient IIFTimeGraphIndexerUnicastRequestsInput inputUnicastRequests = null;
++    transient IIFTimeGraphIndexerBroadcastRequestsInput inputBroadcastRequests = null;
++
++    public PipelineVar_18_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_18_FamilyElement1");
++        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
++        taskIdTimeGraphQueryExecutor = topologyContext.getComponentTasks("PipelineVar_18_FamilyElement2");
++        logger.info("taskIdsTimeGraphQueryExecutor = " + taskIdTimeGraphQueryExecutor);
++        PipelineVar_18_FamilyElement1TaskId = topologyContext.getThisTaskId();
++        logger.info("PipelineVar_18_FamilyElement1TaskId = " + PipelineVar_18_FamilyElement1TaskId);
++
++        externalResponsesResult = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
++        IItemEmitter<IIFTimeGraphIndexerExternalResponsesOutput> externalResponsesEmitter = new IItemEmitter<IIFTimeGraphIndexerExternalResponsesOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphIndexerExternalResponsesOutput item) {
++                _collector.emitDirect(item.getTaskId(), "PipelineVar_18_FamilyElement1ExternalResponses", new Values(item));
++            }
++        };
++        externalResponsesResult.setEmitter(externalResponsesEmitter);
++
++        internalRequestsResult = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
++        IItemEmitter<IIFTimeGraphIndexerInternalRequestsOutput> internalRequestsEmitter = new IItemEmitter<IIFTimeGraphIndexerInternalRequestsOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphIndexerInternalRequestsOutput item) {
++                _collector.emitDirect(item.getTaskId(), "PipelineVar_18_FamilyElement1InternalRequests", new Values(item));
++            }
++        };
++        internalRequestsResult.setEmitter(internalRequestsEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphIndexer");
++                    alg = (IFTimeGraphIndexer) cls.getConstructor(List.class, List.class, int.class).newInstance(taskIdTimeGraphIndexer, taskIdTimeGraphQueryExecutor, PipelineVar_18_FamilyElement1TaskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                } catch (NoSuchMethodException e) {
++                    e.printStackTrace();
++                } catch (InvocationTargetException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TimeGraphIndexer", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fTimeGraphIndexer"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFTimeGraphMapperDataStreamOutput) {
++            iTupleDataStream = (IIFTimeGraphMapperDataStreamOutput)tupleItem;
++            inputDataStream = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
++            inputDataStream.setUpdate(iTupleDataStream.getUpdate());
++            inputDataStream.setIsAddition(iTupleDataStream.getIsAddition());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputDataStream, externalResponsesResult, internalRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                externalResponsesResult.setExternalResponse(null);
++                internalRequestsResult.setInternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFTimeGraphIndexerInternalRequestsOutput) {
++            iTupleInternalRequests = (IIFTimeGraphIndexerInternalRequestsOutput)tupleItem;
++            inputInternalRequests = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
++            inputInternalRequests.setInternalRequest(iTupleInternalRequests.getInternalRequest());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputInternalRequests, externalResponsesResult, internalRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                externalResponsesResult.setExternalResponse(null);
++                internalRequestsResult.setInternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFTimeGraphQueryExecutorUnicastRequestsOutput) {
++            iTupleUnicastRequests = (IIFTimeGraphQueryExecutorUnicastRequestsOutput)tupleItem;
++            inputUnicastRequests = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
++            inputUnicastRequests.setUnicastExternalRequest(iTupleUnicastRequests.getUnicastExternalRequest());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputUnicastRequests, externalResponsesResult, internalRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                externalResponsesResult.setExternalResponse(null);
++                internalRequestsResult.setInternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFTimeGraphQueryExecutorBroadcastRequestsOutput) {
++            iTupleBroadcastRequests = (IIFTimeGraphQueryExecutorBroadcastRequestsOutput)tupleItem;
++            inputBroadcastRequests = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
++            inputBroadcastRequests.setBroadcastExternalRequest(iTupleBroadcastRequests.getBroadcastExternalRequest());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputBroadcastRequests, externalResponsesResult, internalRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                externalResponsesResult.setExternalResponse(null);
++                internalRequestsResult.setInternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphIndexerExternalResponsesOutput> iterExternalResponses = externalResponsesResult.iterator();
++            iterExternalResponses.reset();
++            while (iterExternalResponses.hasNext()) {
++                IIFTimeGraphIndexerExternalResponsesOutput out = iterExternalResponses.next();
++                _collector.emitDirect(out.getTaskId(), "PipelineVar_18_FamilyElement1ExternalResponses", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphIndexerInternalRequestsOutput> iterInternalRequests = internalRequestsResult.iterator();
++            iterInternalRequests.reset();
++            while (iterInternalRequests.hasNext()) {
++                IIFTimeGraphIndexerInternalRequestsOutput out = iterInternalRequests.next();
++                _collector.emitDirect(out.getTaskId(), "PipelineVar_18_FamilyElement1InternalRequests", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TimeGraphIndexer":
++                if (!algChange || !(alg instanceof TimeGraphIndexer)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphIndexer");
++                        alg = (IFTimeGraphIndexer) cls.getConstructor(List.class, List.class, int.class).newInstance(taskIdTimeGraphIndexer, taskIdTimeGraphQueryExecutor, PipelineVar_18_FamilyElement1TaskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    } catch (NoSuchMethodException e) {
++                        e.printStackTrace();
++                    } catch (InvocationTargetException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("TimeGraphIndexer", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_18_FamilyElement1ExternalResponses", new Fields("PipelineVar_18_FamilyElement1ExternalResponsesFields"));
++        declarer.declareStream("PipelineVar_18_FamilyElement1InternalRequests", new Fields("PipelineVar_18_FamilyElement1InternalRequestsFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement2FamilyElement.java
+new file mode 100644
+index 0000000..3b6049b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement2FamilyElement.java
+@@ -0,0 +1,385 @@
++package eu.qualimaster.TimeTravelSimPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.timegraph.TimeGraphQueryExecutor;
++import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
++import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_18_FamilyElement2FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_18_FamilyElement2FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
++    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput pathStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
++    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
++    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
++    private transient IFTimeGraphQueryExecutor alg = null; 
++    private transient List<Integer> taskIdTimeGraphIndexer;
++    private int PipelineVar_18_FamilyElement2TaskId;
++    transient ITimeGraphQueriesSourceSnapshotQueryStreamOutput iTupleSnapshotQueryStream = null;
++    transient ITimeGraphQueriesSourcePathQueryStreamOutput iTuplePathQueryStream = null;
++    transient IIFTimeGraphIndexerExternalResponsesOutput iTupleExternalResponses = null;
++    transient IIFTimeGraphQueryExecutorSnapshotQueryStreamInput inputSnapshotQueryStream = null;
++    transient IIFTimeGraphQueryExecutorPathQueryStreamInput inputPathQueryStream = null;
++    transient IIFTimeGraphQueryExecutorExternalResponsesInput inputExternalResponses = null;
++
++    public PipelineVar_18_FamilyElement2FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_18_FamilyElement1");
++        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
++        PipelineVar_18_FamilyElement2TaskId = topologyContext.getThisTaskId();
++        logger.info("PipelineVar_18_FamilyElement2TaskId = " + PipelineVar_18_FamilyElement2TaskId);
++
++        snapshotStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
++        IItemEmitter<IIFTimeGraphQueryExecutorSnapshotStreamOutput> snapshotStreamEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorSnapshotStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorSnapshotStreamOutput item) {
++                _collector.emit("PipelineVar_18_FamilyElement2SnapshotStream", new Values(item));
++            }
++        };
++        snapshotStreamResult.setEmitter(snapshotStreamEmitter);
++
++        pathStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
++        IItemEmitter<IIFTimeGraphQueryExecutorPathStreamOutput> pathStreamEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorPathStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorPathStreamOutput item) {
++                _collector.emit("PipelineVar_18_FamilyElement2PathStream", new Values(item));
++            }
++        };
++        pathStreamResult.setEmitter(pathStreamEmitter);
++
++        unicastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
++        IItemEmitter<IIFTimeGraphQueryExecutorUnicastRequestsOutput> unicastRequestsEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorUnicastRequestsOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorUnicastRequestsOutput item) {
++                _collector.emitDirect(item.getTaskId(), "PipelineVar_18_FamilyElement2UnicastRequests", new Values(item));
++            }
++        };
++        unicastRequestsResult.setEmitter(unicastRequestsEmitter);
++
++        broadcastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
++        IItemEmitter<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> broadcastRequestsEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorBroadcastRequestsOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorBroadcastRequestsOutput item) {
++                _collector.emit("PipelineVar_18_FamilyElement2BroadcastRequests", new Values(item));
++            }
++        };
++        broadcastRequestsResult.setEmitter(broadcastRequestsEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphQueryExecutor");
++                    alg = (IFTimeGraphQueryExecutor) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_18_FamilyElement2TaskId);
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                } catch (NoSuchMethodException e) {
++                    e.printStackTrace();
++                } catch (InvocationTargetException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TimeGraphQueryExecutor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fTimeGraphQueryExecutor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof ITimeGraphQueriesSourceSnapshotQueryStreamOutput) {
++            iTupleSnapshotQueryStream = (ITimeGraphQueriesSourceSnapshotQueryStreamOutput)tupleItem;
++            inputSnapshotQueryStream = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
++            inputSnapshotQueryStream.setStart(iTupleSnapshotQueryStream.getStart());
++            inputSnapshotQueryStream.setEnd(iTupleSnapshotQueryStream.getEnd());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSnapshotQueryStream, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                snapshotStreamResult.setSnapshot("");
++                pathStreamResult.setPath("");
++                unicastRequestsResult.setUnicastExternalRequest(null);
++                broadcastRequestsResult.setBroadcastExternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof ITimeGraphQueriesSourcePathQueryStreamOutput) {
++            iTuplePathQueryStream = (ITimeGraphQueriesSourcePathQueryStreamOutput)tupleItem;
++            inputPathQueryStream = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
++            inputPathQueryStream.setStart(iTuplePathQueryStream.getStart());
++            inputPathQueryStream.setEnd(iTuplePathQueryStream.getEnd());
++            inputPathQueryStream.setVertexA(iTuplePathQueryStream.getVertexA());
++            inputPathQueryStream.setVertexB(iTuplePathQueryStream.getVertexB());
++            inputPathQueryStream.setType(iTuplePathQueryStream.getType());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPathQueryStream, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                snapshotStreamResult.setSnapshot("");
++                pathStreamResult.setPath("");
++                unicastRequestsResult.setUnicastExternalRequest(null);
++                broadcastRequestsResult.setBroadcastExternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IIFTimeGraphIndexerExternalResponsesOutput) {
++            iTupleExternalResponses = (IIFTimeGraphIndexerExternalResponsesOutput)tupleItem;
++            inputExternalResponses = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
++            inputExternalResponses.setExternalResponse(iTupleExternalResponses.getExternalResponse());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputExternalResponses, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                snapshotStreamResult.setSnapshot("");
++                pathStreamResult.setPath("");
++                unicastRequestsResult.setUnicastExternalRequest(null);
++                broadcastRequestsResult.setBroadcastExternalRequest(null);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorSnapshotStreamOutput> iterSnapshotStream = snapshotStreamResult.iterator();
++            iterSnapshotStream.reset();
++            while (iterSnapshotStream.hasNext()) {
++                IIFTimeGraphQueryExecutorSnapshotStreamOutput out = iterSnapshotStream.next();
++                _collector.emit("PipelineVar_18_FamilyElement2SnapshotStream", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorPathStreamOutput> iterPathStream = pathStreamResult.iterator();
++            iterPathStream.reset();
++            while (iterPathStream.hasNext()) {
++                IIFTimeGraphQueryExecutorPathStreamOutput out = iterPathStream.next();
++                _collector.emit("PipelineVar_18_FamilyElement2PathStream", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorUnicastRequestsOutput> iterUnicastRequests = unicastRequestsResult.iterator();
++            iterUnicastRequests.reset();
++            while (iterUnicastRequests.hasNext()) {
++                IIFTimeGraphQueryExecutorUnicastRequestsOutput out = iterUnicastRequests.next();
++                _collector.emitDirect(out.getTaskId(), "PipelineVar_18_FamilyElement2UnicastRequests", new Values(out));
++            }
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> iterBroadcastRequests = broadcastRequestsResult.iterator();
++            iterBroadcastRequests.reset();
++            while (iterBroadcastRequests.hasNext()) {
++                IIFTimeGraphQueryExecutorBroadcastRequestsOutput out = iterBroadcastRequests.next();
++                _collector.emit("PipelineVar_18_FamilyElement2BroadcastRequests", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TimeGraphQueryExecutor":
++                if (!algChange || !(alg instanceof TimeGraphQueryExecutor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphQueryExecutor");
++                        alg = (IFTimeGraphQueryExecutor) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_18_FamilyElement2TaskId);
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    } catch (NoSuchMethodException e) {
++                        e.printStackTrace();
++                    } catch (InvocationTargetException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("TimeGraphQueryExecutor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_18_FamilyElement2SnapshotStream", new Fields("PipelineVar_18_FamilyElement2SnapshotStreamFields"));
++        declarer.declareStream("PipelineVar_18_FamilyElement2PathStream", new Fields("PipelineVar_18_FamilyElement2PathStreamFields"));
++        declarer.declareStream("PipelineVar_18_FamilyElement2UnicastRequests", new Fields("PipelineVar_18_FamilyElement2UnicastRequestsFields"));
++        declarer.declareStream("PipelineVar_18_FamilyElement2BroadcastRequests", new Fields("PipelineVar_18_FamilyElement2BroadcastRequestsFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Sink0Sink.java
+new file mode 100644
+index 0000000..872455f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Sink0Sink.java
+@@ -0,0 +1,144 @@
++package eu.qualimaster.TimeTravelSimPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.ITimeTravelSink;
++import eu.qualimaster.data.inf.ITimeTravelSink.*;
++import eu.qualimaster.data.imp.TimeTravelSink;
++import eu.qualimaster.data.imp.TimeTravelSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_18_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_18_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient ITimeTravelSink sinkHandler;
++private int counter = 0;
++    transient IIFTimeGraphQueryExecutorSnapshotStreamOutput iTupleSnapshotStream = null;
++    transient IIFTimeGraphQueryExecutorPathStreamOutput iTuplePathStream = null;
++    transient ITimeTravelSinkSnapshotStreamInput inputSnapshotStream = null;
++    transient ITimeTravelSinkPathStreamInput inputPathStream = null;
++
++	public PipelineVar_18_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++        if(tupleItem instanceof IIFTimeGraphQueryExecutorSnapshotStreamOutput) {
++            iTupleSnapshotStream = (IIFTimeGraphQueryExecutorSnapshotStreamOutput)tupleItem;
++            inputSnapshotStream = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
++            inputSnapshotStream.setSnapshot(iTupleSnapshotStream.getSnapshot());
++            sinkHandler.postDataSnapshotStream(inputSnapshotStream);
++            emitted(inputSnapshotStream);
++        }
++
++        if(tupleItem instanceof IIFTimeGraphQueryExecutorPathStreamOutput) {
++            iTuplePathStream = (IIFTimeGraphQueryExecutorPathStreamOutput)tupleItem;
++            inputPathStream = new TimeTravelSink.TimeTravelSinkPathStreamInput();
++            inputPathStream.setPath(iTuplePathStream.getPath());
++            sinkHandler.postDataPathStream(inputPathStream);
++            emitted(inputPathStream);
++        }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
++        new TimeTravelSink.TimeTravelSinkPathStreamInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ITimeTravelSink> cls = (Class<? extends ITimeTravelSink>)Class.forName("eu.qualimaster.timegraph.TimeTravelSink");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("TimeTravelSink", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_18_Sink0SnapshotStream", new Fields("PipelineVar_18_Sink0SnapshotStreamFields"));
++        declarer.declareStream("PipelineVar_18_Sink0PathStream", new Fields("PipelineVar_18_Sink0PathStreamFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source0Source.java
+new file mode 100644
+index 0000000..f8679fe
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source0Source.java
+@@ -0,0 +1,171 @@
++package eu.qualimaster.TimeTravelSimPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ISimulatedGraphData;
++import eu.qualimaster.data.inf.ISimulatedGraphData.*;
++import eu.qualimaster.data.imp.SimulatedGraphData;
++import eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_18_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_18_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ISimulatedGraphData sourceData;
++
++    public PipelineVar_18_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("TimeTravelSimPip", "PipelineVar_18_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedGraphDataEdgeStreamOutput>(ISimulatedGraphDataEdgeStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ISimulatedGraphDataEdgeStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ISimulatedGraphData> cls = (Class<? extends ISimulatedGraphData>) Class.forName("eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("SimulatedGraphDataAlgorithm", null);
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("TimeTravelSimPip", "PipelineVar_18_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_18_Source0StreamEdgeStream".
++        ISimulatedGraphDataEdgeStreamOutput dataItemEdgeStream = new SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput();
++        try {
++            dataItemEdgeStream = sourceData.getEdgeStream();
++        } catch(DefaultModeException e) {
++            dataItemEdgeStream.setEdge("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemEdgeStream!=null){
++            _collector.emit("PipelineVar_18_Source0EdgeStream", new Values(dataItemEdgeStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_18_Source0EdgeStream", new Fields("PipelineVar_18_Source0EdgeStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source1Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source1Source.java
+new file mode 100644
+index 0000000..760017c
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source1Source.java
+@@ -0,0 +1,221 @@
++package eu.qualimaster.TimeTravelSimPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.ITimeGraphQueriesSource;
++import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
++import eu.qualimaster.data.imp.TimeGraphQueriesSource;
++import eu.qualimaster.timegraph.QueriesSource;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_18_Source1Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_18_Source1Source.class);
++    transient SpoutOutputCollector _collector;
++    transient ITimeGraphQueriesSource sourceData;
++
++    public PipelineVar_18_Source1Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("TimeTravelSimPip", "PipelineVar_18_Source1", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITimeGraphQueriesSourceSnapshotQueryStreamOutput>(ITimeGraphQueriesSourceSnapshotQueryStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ITimeGraphQueriesSourceSnapshotQueryStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITimeGraphQueriesSourcePathQueryStreamOutput>(ITimeGraphQueriesSourcePathQueryStreamOutput.class) {
++            @Override
++            public String getAggregationKey(ITimeGraphQueriesSourcePathQueryStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ITimeGraphQueriesSource> cls = (Class<? extends ITimeGraphQueriesSource>) Class.forName("eu.qualimaster.timegraph.QueriesSource");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("QueriesSource", null);
++            if (PipelineOptions.hasExecutorArgument(conf, getName(), "snapshotQuery")) {
++                sourceData.setParameterSnapshotQuery(PipelineOptions.getExecutorStringArgument(conf, getName(), "snapshotQuery", ""));
++            }
++            if (PipelineOptions.hasExecutorArgument(conf, getName(), "pathQuery")) {
++                sourceData.setParameterPathQuery(PipelineOptions.getExecutorStringArgument(conf, getName(), "pathQuery", ""));
++            }
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("TimeTravelSimPip", "PipelineVar_18_Source1", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_18_Source1StreamSnapshotQueryStream".
++        ITimeGraphQueriesSourceSnapshotQueryStreamOutput dataItemSnapshotQueryStream = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
++        try {
++            dataItemSnapshotQueryStream = sourceData.getSnapshotQueryStream();
++        } catch(DefaultModeException e) {
++            dataItemSnapshotQueryStream.setStart(0);
++            dataItemSnapshotQueryStream.setEnd(0);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSnapshotQueryStream!=null){
++            _collector.emit("PipelineVar_18_Source1SnapshotQueryStream", new Values(dataItemSnapshotQueryStream));
++        }
++
++        // Emitting stream "PipelineVar_18_Source1PathQueryStream".
++        ITimeGraphQueriesSourcePathQueryStreamOutput dataItemPathQueryStream = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
++        try {
++            dataItemPathQueryStream = sourceData.getPathQueryStream();
++        } catch(DefaultModeException e) {
++            dataItemPathQueryStream.setStart(0);
++            dataItemPathQueryStream.setEnd(0);
++            dataItemPathQueryStream.setVertexA("");
++            dataItemPathQueryStream.setVertexB("");
++            dataItemPathQueryStream.setType("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemPathQueryStream!=null){
++            _collector.emit("PipelineVar_18_Source1PathQueryStream", new Values(dataItemPathQueryStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "snapshotQuery" :
++                    logger.info("Received the parameter snapshotQuery!");
++                    sourceData.setParameterSnapshotQuery(para.getStringValue()); 
++                    sendParameterChangeEvent("snapshotQuery", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++                case "pathQuery" :
++                    logger.info("Received the parameter pathQuery!");
++                    sourceData.setParameterPathQuery(para.getStringValue()); 
++                    sendParameterChangeEvent("pathQuery", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_18_Source1SnapshotQueryStream", new Fields("PipelineVar_18_Source1SnapshotQueryStreamFields"));
++        declarer.declareStream("PipelineVar_18_Source1PathQueryStream", new Fields("PipelineVar_18_Source1PathQueryStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/Topology.java
+new file mode 100644
+index 0000000..19e6d6a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/Topology.java
+@@ -0,0 +1,119 @@
++package eu.qualimaster.TimeTravelSimPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.timegraph.TimeGraphMapper;
++import eu.qualimaster.timegraph.TimeGraphIndexer;
++import eu.qualimaster.timegraph.TimeGraphQueryExecutor;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "TimeTravelSimPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 18; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "GraphDataSource"
++
++            builder.setSpout("PipelineVar_18_Source0", new PipelineVar_18_Source0Source("PipelineVar_18_Source0", "TimeTravelSimPip"), 1);
++            // Declare a Bolt "TimeGraphMapper"
++
++            BoltDeclarer PipelineVar_18_FamilyElement0=builder.setBolt("PipelineVar_18_FamilyElement0", new PipelineVar_18_FamilyElement0FamilyElement("PipelineVar_18_FamilyElement0", "TimeTravelSimPip"), 1);
++            PipelineVar_18_FamilyElement0.shuffleGrouping("PipelineVar_18_Source0", "PipelineVar_18_Source0EdgeStream");
++            // Declare a Bolt "TimeGraphIndexer"
++
++            BoltDeclarer PipelineVar_18_FamilyElement1=builder.setBolt("PipelineVar_18_FamilyElement1", new PipelineVar_18_FamilyElement1FamilyElement("PipelineVar_18_FamilyElement1", "TimeTravelSimPip"), 1);
++            PipelineVar_18_FamilyElement1.directGrouping("PipelineVar_18_FamilyElement0", "PipelineVar_18_FamilyElement0DataStream");
++            PipelineVar_18_FamilyElement1.directGrouping("PipelineVar_18_FamilyElement1", "PipelineVar_18_FamilyElement1InternalRequests");
++            // Declare a Bolt "TimeGraphQueryExecutor"
++
++            BoltDeclarer PipelineVar_18_FamilyElement2=builder.setBolt("PipelineVar_18_FamilyElement2", new PipelineVar_18_FamilyElement2FamilyElement("PipelineVar_18_FamilyElement2", "TimeTravelSimPip"), 1);
++            PipelineVar_18_FamilyElement2.directGrouping("PipelineVar_18_FamilyElement1", "PipelineVar_18_FamilyElement1ExternalResponses");
++            PipelineVar_18_FamilyElement1.directGrouping("PipelineVar_18_FamilyElement2", "PipelineVar_18_FamilyElement2UnicastRequests");
++            // Declare a Bolt "TimeTravelSink"
++
++            BoltDeclarer PipelineVar_18_Sink0=builder.setBolt("PipelineVar_18_Sink0", new PipelineVar_18_Sink0Sink("PipelineVar_18_Sink0", "TimeTravelSimPip"), 1);
++            PipelineVar_18_Sink0.shuffleGrouping("PipelineVar_18_FamilyElement2", "PipelineVar_18_FamilyElement2SnapshotStream");
++            PipelineVar_18_Sink0.shuffleGrouping("PipelineVar_18_FamilyElement2", "PipelineVar_18_FamilyElement2PathStream");
++            PipelineVar_18_FamilyElement1.allGrouping("PipelineVar_18_FamilyElement2", "PipelineVar_18_FamilyElement2BroadcastRequests");
++            // Declare a Spout "queries"
++
++            builder.setSpout("PipelineVar_18_Source1", new PipelineVar_18_Source1Source("PipelineVar_18_Source1", "TimeTravelSimPip"), 1);
++            PipelineVar_18_FamilyElement2.shuffleGrouping("PipelineVar_18_Source1", "PipelineVar_18_Source1SnapshotQueryStream");
++            PipelineVar_18_FamilyElement2.shuffleGrouping("PipelineVar_18_Source1", "PipelineVar_18_Source1PathQueryStream");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/mapping.xml
+new file mode 100644
+index 0000000..2bd4279
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/mapping.xml
+@@ -0,0 +1,29 @@
++<mapping>
++  <pipeline name="TransferPip" class="eu.qualimaster.TransferPip.topology.Topology">
++      <node name="SpringDataSource" type="source">
++          <component name="PipelineVar_13_Source0" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_Source0Source" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="Preprocessor" type="family">
++          <component name="PipelineVar_13_FamilyElement0" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
++      </node>
++      <node name="TransferEntropyCalculation" type="family">
++          <component name="PipelineVar_13_FamilyElement1" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TransferEntropySoftware"/>
++      </node>
++      <node name="Sink" type="sink">
++          <component name="PipelineVar_13_Sink0" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <node name="ReplaySink" type="replaySink">
++          <component name="PipelineVar_13_ReplaySink1" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_ReplaySink1ReplaySink" receiver="true" thrift="false" tasks="1"/>
++      </node>
++      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
++      <algorithm name="TransferEntropySoftware" implName="TransferEntropy" class="eu.qualimaster.algorithms.imp.TransferEntropy"/>
++      <algorithm name="FocusFincancialData" implName="FocusedSpringClient" class="eu.qualimaster.focus.FocusedSpringClient"/>
++      <algorithm name="TransferSink" implName="TransferSink" class="eu.qualimaster.algorithms.imp.TransferSink"/>
++      <algorithm name="TransferSink" implName="TransferSink" class="eu.qualimaster.algorithms.imp.TransferSink"/>
++      <parameter parameter="playerList" name="SpringDataSource" receiver="PipelineVar_13_Source0"/> 
++      <parameter parameter="windowSize" name="TransferEntropyCalculation" receiver="PipelineVar_13_FamilyElement1"/> 
++      <parameter parameter="windowAdvance" name="TransferEntropyCalculation" receiver="PipelineVar_13_FamilyElement1"/> 
++      <parameter parameter="densitySize" name="TransferEntropyCalculation" receiver="PipelineVar_13_FamilyElement1"/> 
++  </pipeline>
++
++</mapping>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/pom.xml
+new file mode 100644
+index 0000000..4c68527
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/pom.xml
+@@ -0,0 +1,260 @@
++<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
++  <modelVersion>4.0.0</modelVersion>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>TransferPip</artifactId>
++  <version>0.0.1-SNAPSHOT</version>
++  <packaging>jar</packaging>
++
++  <properties>
++    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
++  </properties>
++  <repositories>
++    <repository>
++      <id>qm.eu</id>
++      <name>qm.eu</name>
++      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
++    </repository>
++  </repositories>
++  <build>
++    <sourceDirectory>${basedir}/topology</sourceDirectory>
++        <plugins>
++            <plugin>
++          <groupId>org.apache.maven.plugins</groupId>
++          <artifactId>maven-shade-plugin</artifactId>
++          <version>2.3</version>
++          <executions>
++            <execution>
++            <phase>package</phase>
++            <goals>
++                <goal>shade</goal>
++            </goals>
++            <configuration>
++            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
++            <filters>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSW</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++                <filter>
++                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
++                    <excludes>
++                      <exclude>mapping.xml</exclude>
++                    </excludes>
++                </filter>
++            </filters>
++            </configuration>
++              </execution>
++          </executions>
++        </plugin>
++            <plugin>
++				<artifactId>maven-install-plugin</artifactId>
++				<version>2.3.1</version>
++				<configuration>
++					<createChecksum>true</createChecksum>
++				</configuration>
++			</plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.0</version>
++                <configuration>
++                    <source>1.7</source>
++                    <target>1.7</target>
++                </configuration>              
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>2.4</version>
++                <configuration>
++                    <useDefaultManifestFile>true</useDefaultManifestFile>
++					<archive>
++						<manifest>
++							<addClasspath>true</addClasspath>
++							<mainClass>TestFramework</mainClass>
++						</manifest>
++					</archive>
++                </configuration>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-source-plugin</artifactId>
++                <version>2.2.1</version>
++                <executions>
++                    <execution>
++                        <id>attach-sources</id>
++                        <phase>verify</phase>
++                        <goals>
++                            <goal>jar</goal>
++                        </goals>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++		        <groupId>org.codehaus.mojo</groupId>
++		        <artifactId>exec-maven-plugin</artifactId>
++		        <version>1.3</version>
++		        <executions>
++		          <execution>
++		            <goals>
++		              <goal>exec</goal>
++		            </goals>
++		          </execution>
++		        </executions>
++		        <configuration>
++		          <executable>java</executable>
++		          <includeProjectDependencies>true</includeProjectDependencies>
++		          <includePluginDependencies>false</includePluginDependencies>
++		          <classpathScope>compile</classpathScope>
++		          <mainClass>${storm.topology}</mainClass>
++		        </configuration>
++		    </plugin>
++            <plugin>
++					<groupId>org.eclipse.m2e</groupId>
++					<artifactId>lifecycle-mapping</artifactId>
++					<version>1.0.0</version>
++					<configuration>
++						<lifecycleMappingMetadata>
++							<pluginExecutions>
++								<pluginExecution>
++									<pluginExecutionFilter>
++										<groupId>org.apache.maven.plugins</groupId>
++										<artifactId>maven-dependency-plugin</artifactId>
++										<versionRange>[2.0,)</versionRange>
++										<goals>
++											<goal>copy-dependencies</goal>
++										</goals>
++									</pluginExecutionFilter>
++									<action>
++										<execute />
++									</action>
++								</pluginExecution>
++							</pluginExecutions>
++						</lifecycleMappingMetadata>
++					</configuration>
++				</plugin>
++        </plugins>
++    <resources>
++        <resource>
++            <directory>${basedir}/</directory>
++            <filtering>false</filtering>
++            <includes>
++            <include>mapping.xml</include>
++			<include>settings.xml</include>
++            </includes>
++        </resource>
++    </resources>
++  </build>
++
++
++<dependencyManagement>
++    <dependencies>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>InfrastructureDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>
++        <dependency>
++            <groupId>eu.qualimaster</groupId>
++            <artifactId>PipelineDependencies</artifactId>
++            <version>0.5.0-SNAPSHOT</version>
++            <type>pom</type>
++            <scope>import</scope>
++        </dependency>            
++    </dependencies>
++</dependencyManagement>
++  <dependencies>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>StormCommons</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>DataManagementLayer</artifactId>
++   </dependency>
++   <dependency>
++     <groupId>eu.qualimaster</groupId>
++     <artifactId>QualiMaster.Events</artifactId>
++   </dependency>
++    <dependency>
++  <groupId>eu.qualimaster</groupId>
++  <artifactId>PriorityPipelineInterfaces</artifactId>
++  <version>0.5.0-SNAPSHOT</version>
++    </dependency>
++    <dependency>      
++      <groupId>org.apache.storm</groupId>
++      <artifactId>storm-core</artifactId>
++    </dependency>
++   <dependency>
++     <groupId>com.github.ptgoetz</groupId>
++     <artifactId>storm-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-hdfs</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hadoop</groupId>
++     <artifactId>hadoop-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-common</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-protocol</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++   <dependency>
++     <groupId>org.apache.hbase</groupId>
++     <artifactId>hbase-client</artifactId>
++	 <scope>compile</scope>
++   </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>focused-spring-client</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>hy-preprocessor</artifactId>
++      <version>3.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>transfer-entropy</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++    <dependency>
++      <groupId>eu.qualimaster</groupId>
++      <artifactId>transfer-sink</artifactId>
++      <version>0.1-SNAPSHOT</version>
++    </dependency>
++  </dependencies>
++</project>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/settings.xml
+new file mode 100644
+index 0000000..a0f932f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/settings.xml
+@@ -0,0 +1,115 @@
++<pipeline>
++    <name>TransferPip</name>
++    <external_service_settings>
++        <packet_delimiter>!</packet_delimiter>
++        <main_delimiter>,</main_delimiter>
++        <secondary_delimiter>|</secondary_delimiter>
++        <line_delimiter>"Lf"</line_delimiter>
++    </external_service_settings>
++    <commands>
++        <command>
++			<name>login</name>
++			<request>
++				<field sequence="0">login</field>
++				<field sequence="1">%username%</field>
++				<field sequence="2">%password%</field>
++			</request>
++			<response>
++				<field sequence="0">login_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>logout</name>
++			<request>
++				<field sequence="0">logout</field>
++			</request>
++			<response>
++				<field sequence="0">logout_response</field>
++				<field sequence= "1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>quoteList</name>
++			<request>
++				<field sequence="0">quoteList</field>
++			</request>
++			<response>
++				<field sequence="0">quoteList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++		
++		<command>
++			<name>requestHistoricalSentiment</name>
++			<request>
++				<field sequence="0">requestHistoricalSentiment</field>
++				<field sequence="1">%startDate%</field>
++				<field sequence="2">%endDate%</field>
++				<field sequence="3">%listOfIds%</field>
++			</request>
++			<response>
++				<field sequence="0">historicalSentiment_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%result%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changeplayerList</name>
++			<request>
++				<field sequence="0">changeplayerList</field>
++				<field sequence="1">%newPlayerList%</field>
++			</request>
++			<response>
++				<field sequence="0">changeplayerList_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newPlayerList%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changedensitySize</name>
++			<request>
++				<field sequence="0">changedensitySize</field>
++				<field sequence="1">%newDensitySize%</field>
++			</request>
++			<response>
++				<field sequence="0">changedensitySize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newDensitySize%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowSize</name>
++			<request>
++				<field sequence="0">changewindowSize</field>
++				<field sequence="1">%newWindowSize%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowSize_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowSize%</field>
++			</response>
++		</command>
++        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
++        <command>									
++			<name>changewindowAdvance</name>
++			<request>
++				<field sequence="0">changewindowAdvance</field>
++				<field sequence="1">%newWindowAdvance%</field>
++			</request>
++			<response>
++				<field sequence="0">changewindowAdvance_response</field>
++				<field sequence="1">%status%</field>
++				<field sequence="2">%newWindowAdvance%</field>
++			</response>
++		</command>
++    </commands>
++</pipeline>
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement0FamilyElement.java
+new file mode 100644
+index 0000000..cb87ecf
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement0FamilyElement.java
+@@ -0,0 +1,250 @@
++package eu.qualimaster.TransferPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.data.inf.IFocusFincancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_13_FamilyElement0FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_13_FamilyElement0FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++    private transient IFPreprocessor alg = null; 
++    transient IFocusFincancialDataSpringStreamOutput iTupleSpringStream = null;
++    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
++
++    public PipelineVar_13_FamilyElement0FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
++        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
++                _collector.emit("PipelineVar_13_FamilyElement0PreprocessedStream", new Values(item));
++            }
++        };
++        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                    alg = (IFPreprocessor) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("Preprocessor", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fPreprocessor"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++    if(tupleItem instanceof IFocusFincancialDataSpringStreamOutput) {
++        iTupleSpringStream = (IFocusFincancialDataSpringStreamOutput)tupleItem;
++        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
++        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
++        try {
++            if(alg != null) {
++                alg.calculate(inputSpringStream, preprocessedStreamResult);
++            } else {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                logger.error("Algorithm is not assigned!");
++                record = now;
++            }
++            }
++        } catch(Throwable e) {
++            long now = System.currentTimeMillis();
++            if ((now - record) > 1000) {//print this error log once per second
++                e.printStackTrace();
++                record = now;
++            }
++            preprocessedStreamResult.setSymbolId("");
++            preprocessedStreamResult.setTimestamp(0);
++            preprocessedStreamResult.setValue(0.0);
++            preprocessedStreamResult.setVolume(0);
++            if (e instanceof DefaultModeException) {
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
++            iterPreprocessedStream.reset();
++            while (iterPreprocessedStream.hasNext()) {
++                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
++                _collector.emit("PipelineVar_13_FamilyElement0PreprocessedStream", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "Preprocessor":
++                if (!algChange || !(alg instanceof Preprocessor)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
++                        alg = (IFPreprocessor) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_13_FamilyElement0PreprocessedStream", new Fields("PipelineVar_13_FamilyElement0PreprocessedStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement1FamilyElement.java
+new file mode 100644
+index 0000000..87a469b
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement1FamilyElement.java
+@@ -0,0 +1,335 @@
++package eu.qualimaster.TransferPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.lang.NoSuchMethodException;
++import java.lang.reflect.InvocationTargetException;
++import java.io.OutputStream;
++import java.io.Serializable;
++import java.net.Socket;
++import java.io.PrintWriter;
++import eu.qualimaster.common.logging.DataLogger;
++import java.net.UnknownHostException;
++import com.esotericsoftware.kryo.io.Output;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.families.inf.*;
++import eu.qualimaster.families.inf.IFTransferEntropy.*;
++import eu.qualimaster.families.imp.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.base.algorithm.IFamily.State;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
++import backtype.storm.Config;
++import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
++import eu.qualimaster.pipeline.AlgorithmChangeParameter;
++import eu.qualimaster.algorithms.imp.TransferEntropy;
++import eu.qualimaster.families.inf.IFPreprocessor.*;
++import eu.qualimaster.data.inf.IFocusFincancialData.*;
++import eu.qualimaster.base.algorithm.IItemEmitter;
++
++/**
++* Defines the FamilyElment in the pipeline(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_13_FamilyElement1FamilyElement extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_13_FamilyElement1FamilyElement.class);
++    transient OutputCollector _collector;
++    private boolean algChange = false;
++    private boolean firstTuple = false;
++    private long record = 0;
++    private int taskId;
++    private transient FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
++    private transient IFTransferEntropy alg = null; 
++    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
++    transient IFocusFincancialDataSymbolListOutput iTupleSymbolList = null;
++    transient IIFTransferEntropyPreprocessedStreamInput inputPreprocessedStream = null;
++    transient IIFTransferEntropySymbolListInput inputSymbolList = null;
++
++    public PipelineVar_13_FamilyElement1FamilyElement(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
++    }
++
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++        super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        taskId = topologyContext.getThisTaskId();
++        algChange = false;
++
++        pairwiseFinancialResult = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
++        IItemEmitter<IIFTransferEntropyPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFTransferEntropyPairwiseFinancialOutput>() {
++            @Override
++            public void emitDirect(String streamId, IIFTransferEntropyPairwiseFinancialOutput item) {
++                _collector.emit("PipelineVar_13_FamilyElement1PairwiseFinancial", new Values(item));
++            }
++        };
++        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
++
++        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
++            try {
++                try {
++                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.TransferEntropy");
++                    alg = (IFTransferEntropy) cls.newInstance();
++                } catch (ClassNotFoundException e) {
++                    e.printStackTrace();
++                } catch (InstantiationException e) {
++                    e.printStackTrace();
++                } catch (IllegalAccessException e) {
++                    e.printStackTrace();
++                }
++                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 300));
++                alg.setParameterWindowAdvance(PipelineOptions.getExecutorIntArgument(map, getName(), "windowAdvance", 1));
++                alg.setParameterDensitySize(PipelineOptions.getExecutorIntArgument(map, getName(), "densitySize", 128));
++                if (alg != null) {
++            	alg.switchState(State.ACTIVATE); //activate the current algorithm
++                }
++		    	sendAlgorithmChangeEvent("TransferEntropy", null);
++                algChange = true;
++            } catch (Throwable e) {
++                if (e instanceof DefaultModeException) {
++                    logger.error("Throwable caught - turning to default mode");
++                    e.printStackTrace();
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++        initMonitor();
++
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        // delegate to family "fTransferEntropy"
++        if (!firstTuple) {//the first tuple arrived
++            firstTuple = true;
++            record = System.currentTimeMillis();
++        }
++        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
++            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
++            inputPreprocessedStream = new FTransferEntropy.IFTransferEntropyPreprocessedStreamInput();
++            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
++            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
++            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
++            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(tupleItem instanceof IFocusFincancialDataSymbolListOutput) {
++            iTupleSymbolList = (IFocusFincancialDataSymbolListOutput)tupleItem;
++            inputSymbolList = new FTransferEntropy.IFTransferEntropySymbolListInput();
++            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
++            try {
++                if(alg != null) {
++                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
++                } else {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    logger.error("Algorithm is not assigned!");
++                    record = now;
++                }
++                }
++            } catch(Throwable e) {
++                long now = System.currentTimeMillis();
++                if ((now - record) > 1000) {//print this error log once per second
++                    e.printStackTrace();
++                    record = now;
++                }
++                pairwiseFinancialResult.setId0("");
++                pairwiseFinancialResult.setId1("");
++                pairwiseFinancialResult.setDate("");
++                pairwiseFinancialResult.setValue(0.0);
++                if (e instanceof DefaultModeException) {
++                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
++                }
++            }
++        }
++
++        if(!(alg instanceof ITopologyCreate)) {
++            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTransferEntropyPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
++            iterPairwiseFinancial.reset();
++            while (iterPairwiseFinancial.hasNext()) {
++                IIFTransferEntropyPairwiseFinancialOutput out = iterPairwiseFinancial.next();
++                _collector.emit("PipelineVar_13_FamilyElement1PairwiseFinancial", new Values(out));
++            }
++        }
++//		 _collector.ack(tuple);
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++        try {
++        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "windowSize" :
++                    try {
++                        System.out.println("Received parameter changing signal windowSize");
++                        alg.setParameterWindowSize(para.getIntValue()); 
++                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "windowAdvance" :
++                    try {
++                        System.out.println("Received parameter changing signal windowAdvance");
++                        alg.setParameterWindowAdvance(para.getIntValue()); 
++                        sendParameterChangeEvent("windowAdvance", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++                case "densitySize" :
++                    try {
++                        System.out.println("Received parameter changing signal densitySize");
++                        alg.setParameterDensitySize(para.getIntValue()); 
++                        sendParameterChangeEvent("densitySize", para.getIntValue(), signal.getCauseMessageId());
++                    } catch (ValueFormatException e) {
++                        e.printStackTrace();
++                    }
++                    break;
++            }
++        }
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
++        try {
++        switch (signal.getAlgorithm()) {
++            case "TransferEntropy":
++                if (!algChange || !(alg instanceof TransferEntropy)) {
++                    algChange = true;
++                    if(alg != null) {
++                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
++                    }
++                    try {
++                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.TransferEntropy");
++                        alg = (IFTransferEntropy) cls.newInstance();
++                    } catch (ClassNotFoundException e) {
++                        e.printStackTrace();
++                    } catch (InstantiationException e) {
++                        e.printStackTrace();
++                    } catch (IllegalAccessException e) {
++                        e.printStackTrace();
++                    }
++                    alg.setParameterWindowSize(300);
++                    alg.setParameterWindowAdvance(1);
++                    alg.setParameterDensitySize(128);
++                    sendAlgorithmChangeEvent("TransferEntropy", signal.getCauseMessageId());
++                    if(alg != null) {
++                        alg.switchState(State.ACTIVATE); //activate the current algorithm
++                    }
++                }
++                break;
++        }
++        super.notifyAlgorithmChange(signal);
++        } catch (Throwable e) {
++            if (e instanceof DefaultModeException) {
++                logger.error("Throwable caught - turning to default mode");
++                e.printStackTrace();
++                sendDefaultModeMonitoringEvent((DefaultModeException) e);
++            }
++        }
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_13_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_13_FamilyElement1PairwiseFinancialFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        if(alg != null) {
++            alg.switchState(State.TERMINATING);
++        }
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_ReplaySink1ReplaySink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_ReplaySink1ReplaySink.java
+new file mode 100644
+index 0000000..b4b1702
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_ReplaySink1ReplaySink.java
+@@ -0,0 +1,153 @@
++package eu.qualimaster.TransferPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.ITransferSink;
++import eu.qualimaster.data.inf.ITransferSink.*;
++import eu.qualimaster.data.imp.TransferSink;
++import eu.qualimaster.data.imp.TransferSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFTransferEntropy.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_13_ReplaySink1ReplaySink extends AbstractReplaySink {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_13_ReplaySink1ReplaySink.class);
++    transient OutputCollector _collector;
++    transient ITransferSink sinkHandler;
++private int counter = 0;
++    transient IIFTransferEntropyPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient ITransferSinkPairwiseFinancialInput inputPairwiseFinancial = null;
++
++	public PipelineVar_13_ReplaySink1ReplaySink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++    public class ITransferSinkPairwiseFinancialInputEmitter<ITransferSinkPairwiseFinancialInput> implements AbstractReplaySink.ITupleEmitter<ITransferSinkPairwiseFinancialInput> {
++        @Override
++        public void emit(int ticket, ITransferSinkPairwiseFinancialInput tuple) {
++            //call from sink implementation
++            sinkHandler.emit(ticket, (ITransferSink.ITransferSinkPairwiseFinancialInput)tuple);
++        }
++    }
++    @Override
++    protected void registerHandlers(Map conf, TopologyContext context) {
++        eu.qualimaster.dataManagement.common.replay.Tuple schema;
++        schema = new eu.qualimaster.dataManagement.common.replay.Tuple("pairwiseFinancial");
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("id0", String.class, true, false));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("id1", String.class, true, false));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("date", String.class, false, true));
++        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("value", double.class, false, false));
++        addTupleHandler(TransferSinkPairwiseFinancialInput.class, schema, "output/prior", NoStorageStrategyDescriptor.INSTANCE, new ITransferSinkPairwiseFinancialInputEmitter());
++}
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++    if(tupleItem instanceof IIFTransferEntropyPairwiseFinancialOutput) {
++        iTuplePairwiseFinancial = (IIFTransferEntropyPairwiseFinancialOutput)tupleItem;
++        inputPairwiseFinancial = new TransferSink.TransferSinkPairwiseFinancialInput();
++        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++        store(inputPairwiseFinancial);
++        emitted(inputPairwiseFinancial);
++    }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new TransferSink.TransferSinkPairwiseFinancialInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ITransferSink> cls = (Class<? extends ITransferSink>)Class.forName("eu.qualimaster.algorithms.imp.TransferSink");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("TransferSink", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_13_ReplaySink1PairwiseFinancial", new Fields("PipelineVar_13_ReplaySink1PairwiseFinancialFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Sink0Sink.java
+new file mode 100644
+index 0000000..4b63545
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Sink0Sink.java
+@@ -0,0 +1,135 @@
++package eu.qualimaster.TransferPip.topology;
++
++import java.util.*;
++import java.io.IOException;
++import java.net.InetAddress;
++import java.net.UnknownHostException;
++import org.apache.log4j.Logger;
++import backtype.storm.tuple.*;
++import backtype.storm.task.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.data.inf.ITransferSink;
++import eu.qualimaster.data.inf.ITransferSink.*;
++import eu.qualimaster.data.imp.TransferSink;
++import eu.qualimaster.data.imp.TransferSink.*;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++import eu.qualimaster.families.inf.IFTransferEntropy.*;
++
++/**
++* Defines the Sink class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_13_Sink0Sink extends BaseSignalBolt {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_13_Sink0Sink.class);
++    transient OutputCollector _collector;
++    transient ITransferSink sinkHandler;
++private int counter = 0;
++    transient IIFTransferEntropyPairwiseFinancialOutput iTuplePairwiseFinancial = null;
++    transient ITransferSinkPairwiseFinancialInput inputPairwiseFinancial = null;
++
++	public PipelineVar_13_Sink0Sink(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    public void forwardTuple(Object tupleItem) {
++        startMonitoring();
++        //for now, sink just emits the tuple that get from last familyelement
++    if(tupleItem instanceof IIFTransferEntropyPairwiseFinancialOutput) {
++        iTuplePairwiseFinancial = (IIFTransferEntropyPairwiseFinancialOutput)tupleItem;
++        inputPairwiseFinancial = new TransferSink.TransferSinkPairwiseFinancialInput();
++        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
++        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
++        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
++        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
++        sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
++        emitted(inputPairwiseFinancial);
++    }
++
++        endMonitoring();
++    }
++
++    @Override
++    public void execute(Tuple tuple) {
++        forwardTuple(tuple.getValue(0));
++    }
++
++    @Override
++    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
++		super.prepare(map, topologyContext, collector);
++        _collector = collector;
++        new TransferSink.TransferSinkPairwiseFinancialInput();
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends ITransferSink> cls = (Class<? extends ITransferSink>)Class.forName("eu.qualimaster.algorithms.imp.TransferSink");
++			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
++			} else {
++            	sinkHandler = cls.newInstance();
++			}
++			if (!autoConnect) {
++		    	sinkHandler.connect();
++			}
++		    sendAlgorithmChangeEvent("TransferSink", null);
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the prepare method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringPrepare() {
++        return false;
++    }
++
++    @Override
++    public void cleanup() {
++        super.cleanup();
++		 sinkHandler.disconnect();
++    }
++
++    @Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_13_Sink0PairwiseFinancial", new Fields("PipelineVar_13_Sink0PairwiseFinancialFields"));
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sinkHandler.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Source0Source.java
+new file mode 100644
+index 0000000..9051b65
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Source0Source.java
+@@ -0,0 +1,206 @@
++package eu.qualimaster.TransferPip.topology;
++
++import java.util.*;
++import java.io.Serializable;
++import org.apache.log4j.Logger;
++import backtype.storm.topology.*;
++import backtype.storm.task.*;
++import backtype.storm.spout.*;
++import backtype.storm.tuple.*;
++import eu.qualimaster.data.inf.IFocusFincancialData;
++import eu.qualimaster.data.inf.IFocusFincancialData.*;
++import eu.qualimaster.data.imp.FocusFincancialData;
++import eu.qualimaster.focus.FocusedSpringClient;
++import eu.qualimaster.common.signal.*;
++import eu.qualimaster.events.EventManager;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.pipeline.DefaultModeException;
++import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
++import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
++import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
++import eu.qualimaster.dataManagement.sources.*;
++import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
++import eu.qualimaster.dataManagement.strategies.*;
++import eu.qualimaster.dataManagement.DataManager;
++
++/**
++* Define the source Spout class(GEN).
++**/
++@SuppressWarnings({ "rawtypes", "serial" })
++public class PipelineVar_13_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
++
++    final static Logger logger = Logger.getLogger(PipelineVar_13_Source0Source.class);
++    transient SpoutOutputCollector _collector;
++    transient IFocusFincancialData sourceData;
++
++    public PipelineVar_13_Source0Source(String name, String namespace) {
++        super(name, namespace, true);
++    }
++
++
++    /**
++     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param algorithm the new algorithm
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
++        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
++    }
++
++
++    /**
++     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
++     * testing.
++     * @param parameter the parameter to be changed
++     * @param value the new value
++     * @param causeMsgId the message id of the causing message (may be empty or null)
++     */
++    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
++        EventManager.send(new ParameterChangedMonitoringEvent("TransferPip", "PipelineVar_13_Source0", parameter, value, causeMsgId));
++    }
++
++    /**
++     * Sends an event for registering the historical data provider of a data source.
++     * @param source the data source
++     */
++    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
++        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
++    }
++
++    protected void configure(SourceMonitor monitor) {
++        monitor.setAggregationInterval(60000);
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFocusFincancialDataSymbolListOutput>(IFocusFincancialDataSymbolListOutput.class) {
++            @Override
++            public String getAggregationKey(IFocusFincancialDataSymbolListOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFocusFincancialDataSpringStreamOutput>(IFocusFincancialDataSpringStreamOutput.class) {
++            @Override
++            public String getAggregationKey(IFocusFincancialDataSpringStreamOutput tuple) {
++                return sourceData.getAggregationKey(tuple);
++            }
++        });
++    }
++
++    @Override
++    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
++		 super.open(conf, context, collector);
++        _collector = collector;
++        try {
++            @SuppressWarnings("unchecked")
++            Class<? extends IFocusFincancialData> cls = (Class<? extends IFocusFincancialData>) Class.forName("eu.qualimaster.focus.FocusedSpringClient");
++			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
++			if(autoConnect) {
++            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
++			} else {
++            	sourceData = cls.newInstance();
++			}
++			sendHistoricalDataProviderRegistrationEvent(sourceData);
++		    sendAlgorithmChangeEvent("FocusedSpringClient", null);
++            sourceData.setParameterPlayerList(PipelineOptions.getExecutorStringArgument(conf, getName(), "playerList", ""));
++			if(!autoConnect) {
++		    	sourceData.connect();
++			}
++        } catch (ClassNotFoundException e) {
++            e.printStackTrace();
++        } catch (InstantiationException e) {
++            e.printStackTrace();
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        } catch (ClassCastException e) {
++            e.printStackTrace();
++        }
++        initMonitor();
++        logger.info("The end of the open method.");
++    }
++
++    @Override
++    protected boolean initMonitorDuringOpen() {
++        return false;
++    }
++
++    /**
++     * Sends an a default mode monitoring event with a DefaultModeException case.
++     * @param exceptionCase the DefaultModeException case
++     */
++    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
++        EventManager.send(new DefaultModeMonitoringEvent("TransferPip", "PipelineVar_13_Source0", exceptionCase));
++    }
++    @Override
++    public void nextTuple() {
++        startMonitoring();
++        // Emitting stream "PipelineVar_13_Source0StreamSymbolList".
++        IFocusFincancialDataSymbolListOutput dataItemSymbolList = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
++        try {
++            dataItemSymbolList = sourceData.getSymbolList();
++        } catch(DefaultModeException e) {
++            dataItemSymbolList.setAllSymbols(null);
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSymbolList!=null){
++            _collector.emit("PipelineVar_13_Source0SymbolList", new Values(dataItemSymbolList));
++        }
++
++        // Emitting stream "PipelineVar_13_Source0SpringStream".
++        IFocusFincancialDataSpringStreamOutput dataItemSpringStream = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
++        try {
++            dataItemSpringStream = sourceData.getSpringStream();
++        } catch(DefaultModeException e) {
++            dataItemSpringStream.setSymbolTuple("");
++            sendDefaultModeMonitoringEvent(e);
++        }
++        if(dataItemSpringStream!=null){
++            _collector.emit("PipelineVar_13_Source0SpringStream", new Values(dataItemSpringStream));
++        }
++
++        endMonitoring();
++        
++    }
++
++    @Override
++    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
++    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
++    super.notifyAlgorithmChange(signal);
++}
++    @Override
++    public void notifyParameterChange(ParameterChangeSignal signal) {
++    logger.info("Received the parameter change signal!");
++        for(int i = 0; i < signal.getChangeCount(); i++) {
++        logger.info("For-loop: Checking each parameter!");
++            ParameterChange para = signal.getChange(i);
++            switch (para.getName()) {
++                case "playerList" :
++                    logger.info("Received the parameter playerList!");
++                    sourceData.setParameterPlayerList(para.getStringValue()); 
++                    sendParameterChangeEvent("playerList", para.getStringValue(), signal.getCauseMessageId());
++                    break;
++            }
++        }
++    }
++
++    @Override
++    public void notifyIdsNamesMapChanged() {
++        sendHistoricalDataProviderRegistrationEvent(sourceData);
++    }
++
++    @Override
++    public void close() {
++        super.close();
++		 sourceData.disconnect();
++    }
++
++	@Override
++    public void declareOutputFields(OutputFieldsDeclarer declarer) {
++        declarer.declareStream("PipelineVar_13_Source0SymbolList", new Fields("PipelineVar_13_Source0SymbolListFields"));
++        declarer.declareStream("PipelineVar_13_Source0SpringStream", new Fields("PipelineVar_13_Source0SpringStreamFields"));
++    }
++
++    @Override
++    protected void prepareShutdown(ShutdownSignal signal) {
++        super.prepareShutdown(signal);
++        sourceData.disconnect();
++    }
++
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/Topology.java
+new file mode 100644
+index 0000000..8559430
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/Topology.java
+@@ -0,0 +1,110 @@
++package eu.qualimaster.TransferPip.topology;
++
++import org.apache.log4j.Logger;
++import backtype.storm.*;
++import backtype.storm.topology.*;
++import eu.qualimaster.Configuration;
++import eu.qualimaster.base.algorithm.*;
++import eu.qualimaster.infrastructure.PipelineOptions;
++import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
++import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
++import eu.qualimaster.algorithms.imp.TransferEntropy;
++
++/**
++* Define the main topology class(GEN).
++**/
++public class Topology{
++    final static Logger logger = Logger.getLogger(Topology.class);
++    static final String TOPOLOGY_NAME = "TransferPip";
++    private static int maxNumWorkers = 1; //initialized by default value
++    private static int maxTaskParallelism = 1; //initialized by default value
++    private static PipelineOptions options = null; //initialized by default value
++
++    /**
++     * Define a class for creating the main topology.
++     */
++    public static class MainTopologyCreator implements IMainTopologyCreate {
++        /**
++         * Create a main topology.
++         * @return a TopologyOutput carring the storm config and TopologyBuilder information
++         */
++        public TopologyOutput createMainTopology() {
++            int numWorkers = 5; //initialized by the pipeline configuration
++            Config config = new Config();
++            config.setMessageTimeoutSecs(100);
++            config.setDebug(false);
++            config.put("windowSize", 1 * 30);  // Window size (in secs)
++            config.put("windowAdvance", 1);  // Advance of the window (in secs)
++            if(options.isSubPipeline()) {
++                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
++            } else {
++            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
++            }
++			//The settings to optimize the storm performance.
++			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
++			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
++			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
++			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
++            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
++            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
++            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
++			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
++            options.toConf(config);
++
++            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
++            // Declare a Spout "SpringDataSource"
++
++            builder.setSpout("PipelineVar_13_Source0", new PipelineVar_13_Source0Source("PipelineVar_13_Source0", "TransferPip"), 1);
++            // Declare a Bolt "Preprocessor"
++
++            BoltDeclarer PipelineVar_13_FamilyElement0=builder.setBolt("PipelineVar_13_FamilyElement0", new PipelineVar_13_FamilyElement0FamilyElement("PipelineVar_13_FamilyElement0", "TransferPip"), 1);
++            PipelineVar_13_FamilyElement0.shuffleGrouping("PipelineVar_13_Source0", "PipelineVar_13_Source0SpringStream");
++            // Declare a Bolt "TransferEntropyCalculation"
++
++            BoltDeclarer PipelineVar_13_FamilyElement1=builder.setBolt("PipelineVar_13_FamilyElement1", new PipelineVar_13_FamilyElement1FamilyElement("PipelineVar_13_FamilyElement1", "TransferPip"), 1);
++            PipelineVar_13_FamilyElement1.shuffleGrouping("PipelineVar_13_FamilyElement0", "PipelineVar_13_FamilyElement0PreprocessedStream");
++            // Declare a Bolt "Sink"
++
++            BoltDeclarer PipelineVar_13_Sink0=builder.setBolt("PipelineVar_13_Sink0", new PipelineVar_13_Sink0Sink("PipelineVar_13_Sink0", "TransferPip"), 1);
++            PipelineVar_13_Sink0.shuffleGrouping("PipelineVar_13_FamilyElement1", "PipelineVar_13_FamilyElement1PairwiseFinancial");
++            // Declare a Bolt "ReplaySink"
++
++            BoltDeclarer PipelineVar_13_ReplaySink1=builder.setBolt("PipelineVar_13_ReplaySink1", new PipelineVar_13_ReplaySink1ReplaySink("PipelineVar_13_ReplaySink1", "TransferPip"), 1);
++            PipelineVar_13_ReplaySink1.shuffleGrouping("PipelineVar_13_FamilyElement1", "PipelineVar_13_FamilyElement1PairwiseFinancial");
++            PipelineVar_13_FamilyElement1.shuffleGrouping("PipelineVar_13_Source0", "PipelineVar_13_Source0SymbolList");
++            builder.close(TOPOLOGY_NAME, config);
++            return new TopologyOutput(config, builder, numWorkers);
++        }
++
++    }
++    /**
++     * Main method.
++     */
++    public static void main(String[] args) throws Exception {
++        //create the main topology.
++        options = new PipelineOptions(args);
++        MainTopologyCreator topoCreator = new MainTopologyCreator();
++        TopologyOutput topo = topoCreator.createMainTopology();
++        //get the topology information
++        Config config = topo.getConfig();
++        TopologyBuilder builder = topo.getBuilder();
++        int defNumWorkers = topo.getNumWorkers();
++        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
++
++        //submit the topology in the real cluster
++        if (args != null && args.length > 0) {
++            if(!options.isInProfilingMode()) {
++                if(maxNumWorkers > numWorkers) {
++                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
++                }
++            }
++            config.setNumWorkers(numWorkers);
++            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
++        }
++        else{ //submit the topology locally
++           config.setMaxTaskParallelism(maxTaskParallelism);
++           final LocalCluster cluster = new LocalCluster();
++           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
++        }
++    }
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_1.ivml
+new file mode 100644
+index 0000000..db876c1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_1.ivml
+@@ -0,0 +1,679 @@
++project AlgorithmsCfg {
++
++	import ReconfigurableHardware;
++	import ReconfigurableHardwareCfg;
++	import Algorithms;
++	import BasicsCfg;
++	import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++	algorithms = {
++		refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++	};
++	algorithms.bindingTime = BindingTime.compile;
++	swPreprocessor = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++		algTopologyClass = null, 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "Preprocessor", 
++		input = {
++			Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	SWTopoCorrelationFinancial = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++		algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++		scalable = true, 
++		parallelism = 14, 
++		minParallelism = 4, 
++		minNumtasks = 1, 
++		name = "TopoSoftwareCorrelationFinancial", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType)
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items < 850
++		}, 
++		isValid = true
++	};
++	GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++		hwNode = refBy(cluster2), 
++		scalable = false, 
++		senderParallelism = 1, 
++		receiverParallelism = 12, 
++		name = "GenTopoHardwareCorrelationFinancial", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType)
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items >= 850
++		}, 
++		isValid = true
++	};
++	topoSentiWord = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++		algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SentimentAnaylsisSentiWordNetTopology", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 60, 
++				name = "timeSeriesGranularity"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "sentimentClass"
++			}, RealParameter {
++				defaultValue = 2.5, 
++				name = "classificationThreshold"
++			}
++		}, 
++		artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	topoSVM = SoftwareAlgorithm {
++		class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++		algTopologyClass = "SentimentAnaylsisSVMTopology", 
++		scalable = false, 
++		parallelism = 1, 
++		minParallelism = 1, 
++		minNumtasks = 1, 
++		name = "SentimentAnaylsisSVMTopology", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 60, 
++				name = "timeSeriesGranularity"
++			}, IntegerParameter {
++				defaultValue = 10, 
++				name = "sentimentClass"
++			}, RealParameter {
++				defaultValue = 2.5, 
++				name = "classificationThreshold"
++			}
++		}, 
++		artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++	correlationSW = SubPipelineAlgorithm {
++		subPipeline = refBy(SubTopology), 
++		name = "CorrelationSW", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType)
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType)
++					}, Field {
++						name = "value", 
++						type = refBy(RealType)
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType)
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType)
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType)
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType)
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++		successor = null, 
++		constraints = {
++			family_Items == 0 or family_Items < 850
++		}, 
++		isValid = true
++	};
++	HardwareAlgorithmVar_30 = HardwareAlgorithm {
++		hwNode = refBy(cluster1), 
++		scalable = false, 
++		senderParallelism = 1, 
++		receiverParallelism = 1, 
++		name = "TransferEntropyHardware", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	HardwareAlgorithmVar_31 = HardwareAlgorithm {
++		hwNode = refBy(cluster1), 
++		scalable = false, 
++		senderParallelism = 1, 
++		receiverParallelism = 1, 
++		name = "MutualInformationHardware", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				defaultValue = 30, 
++				name = "windowSize"
++			}
++		}, 
++		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++		successor = null, 
++		isValid = true
++	};
++	freeze {
++		algorithms;
++		swPreprocessor;
++		SWTopoCorrelationFinancial;
++		GenHWTopoCorrelationFinancial;
++		topoSentiWord;
++		topoSVM;
++        aMapper;
++        aHayashiYoshida;
++		correlationSW;
++		HardwareAlgorithmVar_30;
++		HardwareAlgorithmVar_31;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_10.ivml
+new file mode 100644
+index 0000000..751866f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_10.ivml
+@@ -0,0 +1,1589 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm AlgorithmVar_26;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    SoftwareAlgorithm SoftwareAlgorithmVar_33;
++    SoftwareAlgorithm SoftwareAlgorithmVar_34;
++    SoftwareAlgorithm SoftwareAlgorithmVar_35;
++    SoftwareAlgorithm SoftwareAlgorithmVar_36;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_26 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++        algTopologyClass = "TopoDynamicHubComputation", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TopoDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TransferEntropySoftware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        AlgorithmVar_26;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++        SoftwareAlgorithmVar_33;
++        SoftwareAlgorithmVar_34;
++        SoftwareAlgorithmVar_35;
++        SoftwareAlgorithmVar_36;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_11.ivml
+new file mode 100644
+index 0000000..751866f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_11.ivml
+@@ -0,0 +1,1589 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm AlgorithmVar_26;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    SoftwareAlgorithm SoftwareAlgorithmVar_33;
++    SoftwareAlgorithm SoftwareAlgorithmVar_34;
++    SoftwareAlgorithm SoftwareAlgorithmVar_35;
++    SoftwareAlgorithm SoftwareAlgorithmVar_36;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_26 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++        algTopologyClass = "TopoDynamicHubComputation", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TopoDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TransferEntropySoftware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        AlgorithmVar_26;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++        SoftwareAlgorithmVar_33;
++        SoftwareAlgorithmVar_34;
++        SoftwareAlgorithmVar_35;
++        SoftwareAlgorithmVar_36;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_12.ivml
+new file mode 100644
+index 0000000..751866f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_12.ivml
+@@ -0,0 +1,1589 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm AlgorithmVar_26;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    SoftwareAlgorithm SoftwareAlgorithmVar_33;
++    SoftwareAlgorithm SoftwareAlgorithmVar_34;
++    SoftwareAlgorithm SoftwareAlgorithmVar_35;
++    SoftwareAlgorithm SoftwareAlgorithmVar_36;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_26 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++        algTopologyClass = "TopoDynamicHubComputation", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TopoDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TransferEntropySoftware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        AlgorithmVar_26;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++        SoftwareAlgorithmVar_33;
++        SoftwareAlgorithmVar_34;
++        SoftwareAlgorithmVar_35;
++        SoftwareAlgorithmVar_36;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_2.ivml
+new file mode 100644
+index 0000000..af6b970
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_2.ivml
+@@ -0,0 +1,795 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_3.ivml
+new file mode 100644
+index 0000000..8275bf1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_3.ivml
+@@ -0,0 +1,917 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_4.ivml
+new file mode 100644
+index 0000000..4d92076
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_4.ivml
+@@ -0,0 +1,1253 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_5.ivml
+new file mode 100644
+index 0000000..e479d58
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_5.ivml
+@@ -0,0 +1,1299 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm AlgorithmVar_26;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_26 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++        algTopologyClass = "TopoDynamicHubComputation", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TopoDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        AlgorithmVar_26;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_6.ivml
+new file mode 100644
+index 0000000..e479d58
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_6.ivml
+@@ -0,0 +1,1299 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm AlgorithmVar_26;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_26 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++        algTopologyClass = "TopoDynamicHubComputation", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TopoDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        AlgorithmVar_26;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_7.ivml
+new file mode 100644
+index 0000000..dc6cef7
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_7.ivml
+@@ -0,0 +1,1505 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm AlgorithmVar_26;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    SoftwareAlgorithm SoftwareAlgorithmVar_34;
++    SoftwareAlgorithm SoftwareAlgorithmVar_35;
++    SoftwareAlgorithm SoftwareAlgorithmVar_36;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_26 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++        algTopologyClass = "TopoDynamicHubComputation", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TopoDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        AlgorithmVar_26;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++        SoftwareAlgorithmVar_34;
++        SoftwareAlgorithmVar_35;
++        SoftwareAlgorithmVar_36;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_8.ivml
+new file mode 100644
+index 0000000..751866f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_8.ivml
+@@ -0,0 +1,1589 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm AlgorithmVar_26;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    SoftwareAlgorithm SoftwareAlgorithmVar_33;
++    SoftwareAlgorithm SoftwareAlgorithmVar_34;
++    SoftwareAlgorithm SoftwareAlgorithmVar_35;
++    SoftwareAlgorithm SoftwareAlgorithmVar_36;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_26 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++        algTopologyClass = "TopoDynamicHubComputation", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TopoDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TransferEntropySoftware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        AlgorithmVar_26;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++        SoftwareAlgorithmVar_33;
++        SoftwareAlgorithmVar_34;
++        SoftwareAlgorithmVar_35;
++        SoftwareAlgorithmVar_36;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_9.ivml
+new file mode 100644
+index 0000000..751866f
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_9.ivml
+@@ -0,0 +1,1589 @@
++project AlgorithmsCfg {
++
++    import ReconfigurableHardware;
++    import ReconfigurableHardwareCfg;
++    import Algorithms;
++    import BasicsCfg;
++    import PipelinesCfg;
++    SoftwareAlgorithm swPreprocessor;
++    SoftwareAlgorithm SWTopoCorrelationFinancial;
++    HardwareAlgorithm GenHWTopoCorrelationFinancial;
++    SoftwareAlgorithm topoSentiWord;
++    SoftwareAlgorithm topoSVM;
++    SoftwareAlgorithm randomAlg1;
++    SoftwareAlgorithm randomAlg2;
++    SoftwareAlgorithm switchAlg1;
++    SoftwareAlgorithm switchAlg2;
++    SoftwareAlgorithm AlgorithmVar_22;
++    SoftwareAlgorithm AlgorithmVar_24;
++    SoftwareAlgorithm AlgorithmVar_26;
++    SoftwareAlgorithm recommendations;
++    SoftwareAlgorithm keywordAnalyzer;
++    SoftwareAlgorithm spamRemoval;
++    SoftwareAlgorithm spamDetection;
++    SoftwareAlgorithm AlgorithmVar_25;
++    SoftwareAlgorithm aMapper;
++    SoftwareAlgorithm aHayashiYoshida;
++    SubPipelineAlgorithm correlationSW;
++    HardwareAlgorithm HardwareAlgorithmVar_30;
++    HardwareAlgorithm HardwareAlgorithmVar_31;
++    SoftwareAlgorithm SoftwareAlgorithmVar_33;
++    SoftwareAlgorithm SoftwareAlgorithmVar_34;
++    SoftwareAlgorithm SoftwareAlgorithmVar_35;
++    SoftwareAlgorithm SoftwareAlgorithmVar_36;
++    algorithms = {
++        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
++    };
++    algorithms.bindingTime = BindingTime.compile;
++    swPreprocessor = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Preprocessor", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SWTopoCorrelationFinancial = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
++        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
++        scalable = true, 
++        parallelism = 14, 
++        minParallelism = 4, 
++        minNumtasks = 1, 
++        name = "TopoSoftwareCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
++        hwNode = refBy(cluster2), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 12, 
++        name = "GenTopoHardwareCorrelationFinancial", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 850
++        }, 
++        isValid = true
++    };
++    topoSentiWord = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
++        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSentiWordNetTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    topoSVM = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
++        algTopologyClass = "SentimentAnaylsisSVMTopology", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SentimentAnaylsisSVMTopology", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 60, 
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "sentimentClass"
++            }, RealParameter {
++                defaultValue = 2.5, 
++                name = "classificationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    randomAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor1", 
++        algTopologyClass = "RandomProcessor1", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 5, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    randomAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.RandomProcessor2", 
++        algTopologyClass = "RandomProcessor2", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "RandomProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = false, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    switchAlg1 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor1", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 500
++        }, 
++        isValid = true
++    };
++    switchAlg2 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SwitchProcessor2", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }, BooleanParameter {
++                defaultValue = true, 
++                name = "flag"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items >= 500
++        }, 
++        isValid = true
++    };
++    keywordAnalyzer = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "KeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamRemoval = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    spamDetection = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "SpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_22 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "StockParser  ", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_24 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "EventDetectionHardThreshold", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_25 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "DynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    AlgorithmVar_26 = SoftwareAlgorithm {
++        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
++        algTopologyClass = "TopoDynamicHubComputation", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TopoDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    recommendations = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Recommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aMapper = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "Mapper", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    aHayashiYoshida = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
++        algTopologyClass = null, 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "HayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    correlationSW = SubPipelineAlgorithm {
++        subPipeline = refBy(SubTopology), 
++        name = "CorrelationSW", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType)
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType)
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
++        successor = null, 
++        constraints = {
++            family_Items == 0 or family_Items < 850
++        }, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_30 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "TransferEntropyHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    HardwareAlgorithmVar_31 = HardwareAlgorithm {
++        hwNode = refBy(cluster1), 
++        scalable = false, 
++        senderParallelism = 1, 
++        receiverParallelism = 1, 
++        name = "MutualInformationHardware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }
++        }, 
++        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
++        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TransferEntropySoftware", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
++        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
++        algTopologyClass = "", 
++        scalable = false, 
++        parallelism = 1, 
++        minParallelism = 1, 
++        minNumtasks = 1, 
++        name = "TimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
++        successor = null, 
++        isValid = true
++    };
++    freeze {
++        algorithms;
++        swPreprocessor;
++        SWTopoCorrelationFinancial;
++        GenHWTopoCorrelationFinancial;
++        topoSentiWord;
++        topoSVM;
++        randomAlg1;
++        randomAlg2;
++        switchAlg1;
++        switchAlg2;
++        AlgorithmVar_22;
++        AlgorithmVar_24;
++        AlgorithmVar_25;
++        AlgorithmVar_26;
++        recommendations;
++        keywordAnalyzer;
++        spamRemoval;
++        spamDetection;
++        aMapper;
++        aHayashiYoshida;
++        correlationSW;
++        HardwareAlgorithmVar_30;
++        HardwareAlgorithmVar_31;
++        SoftwareAlgorithmVar_33;
++        SoftwareAlgorithmVar_34;
++        SoftwareAlgorithmVar_35;
++        SoftwareAlgorithmVar_36;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_1.ivml
+new file mode 100644
+index 0000000..b4d7e79
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_1.ivml
+@@ -0,0 +1,193 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSink priorSnk;
++    PersistentDataElement hBaseDataManagement;
++	dataSources = {
++		refBy(spring), refBy(twitter)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++		priorSnk;
++		hBaseDataManagement;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_10.ivml
+new file mode 100644
+index 0000000..19f6c58
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_10.ivml
+@@ -0,0 +1,505 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_2;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++    DataSource DataSourceVar_7;
++    DataSource DataSourceVar_9;
++    DataSink DataSinkVar_5;
++    DataSink DataSinkVar_6;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_2 = DataSink {
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++        isValid = true, 
++        name = "DynamicGraphSink", 
++        description = "", 
++        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_5 = DataSink {
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
++        isValid = true, 
++        name = "TimeTravelSink", 
++        description = "", 
++        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_6 = DataSink {
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
++        isValid = true, 
++        name = "TransferSink", 
++        description = "", 
++        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	DataSourceVar_7 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 1.0, 
++                name = "speedFactor"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "SimulatedFinancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++    DataSourceVar_9 = DataSource {
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                name = "snapshotQuery"
++            }, StringParameter {
++                name = "pathQuery"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "TimeGraphQueriesSource", 
++        description = "", 
++        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++        storageLocation = "input/query", 
++        strategy = DataManagementStrategy.None
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_2;
++        DataSinkVar_3;
++        DataSinkVar_5;
++        DataSinkVar_6;
++        DataSourceVar_6;
++        DataSourceVar_7;
++        DataSourceVar_9;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_11.ivml
+new file mode 100644
+index 0000000..3a60719
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_11.ivml
+@@ -0,0 +1,538 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_2;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++    DataSource DataSourceVar_7;
++    DataSource DataSourceVar_9;
++    DataSource DataSourceVar_10;
++    DataSink DataSinkVar_5;
++    DataSink DataSinkVar_6;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9), refBy(DataSourceVar_10)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_2 = DataSink {
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++        isValid = true, 
++        name = "DynamicGraphSink", 
++        description = "", 
++        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_5 = DataSink {
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
++        isValid = true, 
++        name = "TimeTravelSink", 
++        description = "", 
++        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_6 = DataSink {
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
++        isValid = true, 
++        name = "TransferSink", 
++        description = "", 
++        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	DataSourceVar_7 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 1.0, 
++                name = "speedFactor"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "SimulatedFinancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++    DataSourceVar_9 = DataSource {
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                name = "snapshotQuery"
++            }, StringParameter {
++                name = "pathQuery"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "TimeGraphQueriesSource", 
++        description = "", 
++        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++        storageLocation = "input/query", 
++        strategy = DataManagementStrategy.None
++    };
++    DataSourceVar_10 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {}, 
++        sourceCls = "eu.qualimaster.algorithm.FixRateFinancialDataSource", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FixedRateSimulatedFinancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:DataSourceSimulator:0.0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_2;
++        DataSinkVar_3;
++        DataSinkVar_5;
++        DataSinkVar_6;
++        DataSourceVar_6;
++        DataSourceVar_7;
++        DataSourceVar_9;
++        DataSourceVar_10;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_12.ivml
+new file mode 100644
+index 0000000..0e1719d
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_12.ivml
+@@ -0,0 +1,563 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_2;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++    DataSource DataSourceVar_7;
++    DataSource DataSourceVar_9;
++    DataSource DataSourceVar_10;
++    DataSource DataSourceVar_11;
++    DataSink DataSinkVar_5;
++    DataSink DataSinkVar_6;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9), refBy(DataSourceVar_10), refBy(DataSourceVar_11)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_2 = DataSink {
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++        isValid = true, 
++        name = "DynamicGraphSink", 
++        description = "", 
++        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_5 = DataSink {
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
++        isValid = true, 
++        name = "TimeTravelSink", 
++        description = "", 
++        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_6 = DataSink {
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
++        isValid = true, 
++        name = "TransferSink", 
++        description = "", 
++        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	DataSourceVar_7 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 1.0, 
++                name = "speedFactor"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "SimulatedFinancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++    DataSourceVar_9 = DataSource {
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                name = "snapshotQuery"
++            }, StringParameter {
++                name = "pathQuery"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "TimeGraphQueriesSource", 
++        description = "", 
++        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++        storageLocation = "input/query", 
++        strategy = DataManagementStrategy.None
++    };
++    DataSourceVar_10 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {}, 
++        sourceCls = "eu.qualimaster.algorithm.FixRateFinancialDataSource", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FixedRateSimulatedFinancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:DataSourceSimulator:0.0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed
++    };
++    DataSourceVar_11 = DataSource {
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sourceCls = "eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "SimulatedGraphData", 
++        description = "", 
++        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++        storageLocation = "input/simulatedGraphData", 
++        strategy = DataManagementStrategy.None
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_2;
++        DataSinkVar_3;
++        DataSinkVar_5;
++        DataSinkVar_6;
++        DataSourceVar_6;
++        DataSourceVar_7;
++        DataSourceVar_9;
++        DataSourceVar_10;
++        DataSourceVar_11;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_2.ivml
+new file mode 100644
+index 0000000..824a17a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_2.ivml
+@@ -0,0 +1,252 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_3.ivml
+new file mode 100644
+index 0000000..824a17a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_3.ivml
+@@ -0,0 +1,252 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_4.ivml
+new file mode 100644
+index 0000000..5781953
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_4.ivml
+@@ -0,0 +1,323 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_3)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_3;
++        DataSourceVar_6;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_5.ivml
+new file mode 100644
+index 0000000..287d721
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_5.ivml
+@@ -0,0 +1,347 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_2;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_2 = DataSink {
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++        isValid = true, 
++        name = "DynamicGraphSink", 
++        description = "", 
++        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_2;
++        DataSinkVar_3;
++        DataSourceVar_6;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_6.ivml
+new file mode 100644
+index 0000000..287d721
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_6.ivml
+@@ -0,0 +1,347 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_2;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_2 = DataSink {
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++        isValid = true, 
++        name = "DynamicGraphSink", 
++        description = "", 
++        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_2;
++        DataSinkVar_3;
++        DataSourceVar_6;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_7.ivml
+new file mode 100644
+index 0000000..f6b8241
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_7.ivml
+@@ -0,0 +1,471 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_2;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++    DataSource DataSourceVar_7;
++    DataSource DataSourceVar_9;
++    DataSink DataSinkVar_5;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_2 = DataSink {
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++        isValid = true, 
++        name = "DynamicGraphSink", 
++        description = "", 
++        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_5 = DataSink {
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
++        isValid = true, 
++        name = "TimeTravelSink", 
++        description = "", 
++        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	DataSourceVar_7 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 1.0, 
++                name = "speedFactor"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "SimulatedFinancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++    DataSourceVar_9 = DataSource {
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                name = "snapshotQuery"
++            }, StringParameter {
++                name = "pathQuery"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "TimeGraphQueriesSource", 
++        description = "", 
++        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++        storageLocation = "input/query", 
++        strategy = DataManagementStrategy.None
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_2;
++        DataSinkVar_3;
++        DataSinkVar_5;
++        DataSourceVar_6;
++        DataSourceVar_7;
++        DataSourceVar_9;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_8.ivml
+new file mode 100644
+index 0000000..19f6c58
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_8.ivml
+@@ -0,0 +1,505 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_2;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++    DataSource DataSourceVar_7;
++    DataSource DataSourceVar_9;
++    DataSink DataSinkVar_5;
++    DataSink DataSinkVar_6;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_2 = DataSink {
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++        isValid = true, 
++        name = "DynamicGraphSink", 
++        description = "", 
++        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_5 = DataSink {
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
++        isValid = true, 
++        name = "TimeTravelSink", 
++        description = "", 
++        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_6 = DataSink {
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
++        isValid = true, 
++        name = "TransferSink", 
++        description = "", 
++        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	DataSourceVar_7 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 1.0, 
++                name = "speedFactor"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "SimulatedFinancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++    DataSourceVar_9 = DataSource {
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                name = "snapshotQuery"
++            }, StringParameter {
++                name = "pathQuery"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "TimeGraphQueriesSource", 
++        description = "", 
++        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++        storageLocation = "input/query", 
++        strategy = DataManagementStrategy.None
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_2;
++        DataSinkVar_3;
++        DataSinkVar_5;
++        DataSinkVar_6;
++        DataSourceVar_6;
++        DataSourceVar_7;
++        DataSourceVar_9;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_9.ivml
+new file mode 100644
+index 0000000..19f6c58
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_9.ivml
+@@ -0,0 +1,505 @@
++project DataManagementCfg {
++
++	import DataManagement;
++	import BasicsCfg;
++    DataSource spring;
++    DataSource twitter;
++    DataSource randomSource;
++    DataSink priorSnk;
++    DataSink randomSink;
++    PersistentDataElement hBaseDataManagement;
++    DataSink DataSinkVar_2;
++    DataSink DataSinkVar_3;
++    DataSource DataSourceVar_6;
++    DataSource DataSourceVar_7;
++    DataSource DataSourceVar_9;
++    DataSink DataSinkVar_5;
++    DataSink DataSinkVar_6;
++	dataSources = {
++		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9)
++	};
++	dataSources.userVisible = true;
++	dataSources.bindingTime = BindingTime.compile;
++	dataSinks = {
++		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
++	};
++	dataSinks.userVisible = true;
++	dataSinks.bindingTime = BindingTime.compile;
++	persistentDataElements = {
++		refBy(hBaseDataManagement)
++	};
++	persistentDataElements.userVisible = true;
++	persistentDataElements.bindingTime = BindingTime.compile;
++	spring = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType)
++					}
++				}
++			}
++		}, 
++		parameters = {}, 
++		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Spring Financial Data", 
++		description = "", 
++		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
++		storageLocation = "input/spring", 
++		strategy = DataManagementStrategy.LeastRecentlyUsed, 
++		timeLine = 1000
++	};
++	twitter = DataSource {
++		input = {
++			Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType)
++					}
++				}
++			}, Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16)
++					}
++				}
++			}
++		}, 
++		parameters = {
++			StringParameter {
++				defaultValue = "", 
++				name = "consumerKey"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "consumerSecret"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessToken"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "accessTokenSecret"
++			}, IntegerParameter {
++				defaultValue = 0, 
++				name = "queueSize"
++			}, StringParameter {
++				defaultValue = "/user/storm/resultSymbols", 
++				name = "tweetDirectory"
++			}, RealParameter {
++				defaultValue = 0.0, 
++				name = "speedFactor"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "runLocally"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "adjustTimeToNow"
++			}, BooleanParameter {
++				defaultValue = false, 
++				name = "realLoops"
++			}, StringParameter {
++				defaultValue = "", 
++				name = "setAdditionalKeywords"
++			}
++		}, 
++		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
++		aggregationFrequency = 60000, 
++		profilingSource = false, 
++		isValid = true, 
++		name = "Twitter Stream Data", 
++		description = "", 
++		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
++		storageLocation = "input/twitter", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSource = DataSource {
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType)
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 0, 
++                name = "delay"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "Random Source", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	priorSnk = DataSink {
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = true
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
++		isValid = true, 
++		name = "Priority Data Sink", 
++		description = "", 
++		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
++		storageLocation = "output/prior", 
++		strategy = DataManagementStrategy.None, 
++		timeLine = 0
++	};
++    randomSink = DataSink {
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = true
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
++        isValid = true, 
++        name = "Random Sink", 
++        description = "", 
++        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
++        storageLocation = "random", 
++        strategy = DataManagementStrategy.None
++    };
++	hBaseDataManagement = PersistentDataElement {
++		name = "hBase DataManagement", 
++		storageLocation = "hBase-l3s", 
++		strategy = DataManagementStrategy.FirstInFirstOut, 
++		timeLine = 0
++	};
++    DataSinkVar_2 = DataSink {
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
++        isValid = true, 
++        name = "DynamicGraphSink", 
++        description = "", 
++        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_3 = DataSink {
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
++        isValid = true, 
++        name = "FocusSink", 
++        description = "", 
++        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_5 = DataSink {
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
++        isValid = true, 
++        name = "TimeTravelSink", 
++        description = "", 
++        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSinkVar_6 = DataSink {
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = true
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
++        isValid = true, 
++        name = "TransferSink", 
++        description = "", 
++        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
++        storageLocation = "output/prior", 
++        strategy = DataManagementStrategy.None, 
++        timeLine = 0
++    };
++    DataSourceVar_6 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                defaultValue = "", 
++                name = "playerList"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "FocusFincancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++	DataSourceVar_7 = DataSource {
++        input = {
++            Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }, Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 1.0, 
++                name = "speedFactor"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "SimulatedFinancialData", 
++        description = "", 
++        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
++        storageLocation = "input/spring", 
++        strategy = DataManagementStrategy.LeastRecentlyUsed, 
++        timeLine = 1000
++    };
++    DataSourceVar_9 = DataSource {
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            StringParameter {
++                name = "snapshotQuery"
++            }, StringParameter {
++                name = "pathQuery"
++            }
++        }, 
++        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
++        aggregationFrequency = 60000, 
++        profilingSource = false, 
++        isValid = true, 
++        name = "TimeGraphQueriesSource", 
++        description = "", 
++        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
++        storageLocation = "input/query", 
++        strategy = DataManagementStrategy.None
++    };
++	freeze {
++		dataSources;
++		dataSinks;
++		persistentDataElements;
++		spring;
++		twitter;
++        randomSource;
++		priorSnk;
++        randomSink;
++		hBaseDataManagement;
++        DataSinkVar_2;
++        DataSinkVar_3;
++        DataSinkVar_5;
++        DataSinkVar_6;
++        DataSourceVar_6;
++        DataSourceVar_7;
++        DataSourceVar_9;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_1.ivml
+new file mode 100644
+index 0000000..1a600e4
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_1.ivml
+@@ -0,0 +1,336 @@
++project FamiliesCfg {
++
++	import ReconfigurableHardware;
++	import Families;
++	import AlgorithmsCfg;
++	import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family fMapper;
++    Family fHayashiYoshida;
++	families = {
++		refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(fMapper), refBy(fHayashiYoshida)
++	};
++	families.bindingTime = BindingTime.compile;
++	fPreprocessor = Family {
++		name = "fPreprocessor", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "springStream", 
++				fields = {
++					Field {
++						name = "symbolTuple", 
++						type = refBy(StringType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		members = {
++			refBy(swPreprocessor)
++		}
++	};
++	fCorrelationFinancial = Family {
++		name = "fCorrelationFinancial", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "preprocessedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}, Tuple {
++				name = "symbolList", 
++				fields = {
++					Field {
++						name = "allSymbols", 
++						type = refBy(StringListType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "pairwiseFinancial", 
++				fields = {
++					Field {
++						name = "id0", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "id1", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "date", 
++						type = refBy(StringTimeStampType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(DoubleType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "windowSize"
++			}
++		}, 
++		members = {
++			//refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++			refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++		}
++	};
++	fSentimentAnalysis = Family {
++		name = "fSentimentAnalysis", 
++		description = "", 
++		input = {
++			Tuple {
++				name = "twitterStream", 
++				fields = {
++					Field {
++						name = "status", 
++						type = refBy(FieldTypeVar_16), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		output = {
++			Tuple {
++				name = "analyzedStream", 
++				fields = {
++					Field {
++						name = "symbolId", 
++						type = refBy(StringType), 
++						keyPart = false
++					}, Field {
++						name = "timestamp", 
++						type = refBy(LongType), 
++						keyPart = false
++					}, Field {
++						name = "value", 
++						type = refBy(RealType), 
++						keyPart = false
++					}, Field {
++						name = "volume", 
++						type = refBy(IntegerType), 
++						keyPart = false
++					}
++				}
++			}
++		}, 
++		parameters = {
++			IntegerParameter {
++				name = "timeSeriesGranularity"
++			}, IntegerParameter {
++				name = "sentimentClass"
++			}, RealParameter {
++				name = "classificationThreshold"
++			}
++		}, 
++		members = {
++			refBy(topoSentiWord), refBy(topoSVM)
++		}
++	};
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++	freeze {
++		families;
++		fPreprocessor;
++		fCorrelationFinancial;
++		fSentimentAnalysis;
++        fMapper;
++        fHayashiYoshida;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_10.ivml
+new file mode 100644
+index 0000000..966d50a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_10.ivml
+@@ -0,0 +1,1038 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family FamilyVar_23;
++    Family FamilyVar_24;
++    Family FamilyVar_26;
++    Family FamilyVar_27;
++    Family FamilyVar_28;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    FamilyVar_23 = Family {
++        name = "fDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_26)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    FamilyVar_24 = Family {
++        name = "fTransferEntropy", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_33)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    FamilyVar_26 = Family {
++        name = "fTimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_34)
++        }
++    };
++    FamilyVar_27 = Family {
++        name = "fTimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_35)
++        }
++    };
++    FamilyVar_28 = Family {
++        name = "fTimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_36)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        FamilyVar_24;
++        FamilyVar_26;
++        FamilyVar_27;
++        FamilyVar_28;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_11.ivml
+new file mode 100644
+index 0000000..966d50a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_11.ivml
+@@ -0,0 +1,1038 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family FamilyVar_23;
++    Family FamilyVar_24;
++    Family FamilyVar_26;
++    Family FamilyVar_27;
++    Family FamilyVar_28;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    FamilyVar_23 = Family {
++        name = "fDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_26)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    FamilyVar_24 = Family {
++        name = "fTransferEntropy", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_33)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    FamilyVar_26 = Family {
++        name = "fTimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_34)
++        }
++    };
++    FamilyVar_27 = Family {
++        name = "fTimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_35)
++        }
++    };
++    FamilyVar_28 = Family {
++        name = "fTimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_36)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        FamilyVar_24;
++        FamilyVar_26;
++        FamilyVar_27;
++        FamilyVar_28;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_12.ivml
+new file mode 100644
+index 0000000..966d50a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_12.ivml
+@@ -0,0 +1,1038 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family FamilyVar_23;
++    Family FamilyVar_24;
++    Family FamilyVar_26;
++    Family FamilyVar_27;
++    Family FamilyVar_28;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    FamilyVar_23 = Family {
++        name = "fDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_26)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    FamilyVar_24 = Family {
++        name = "fTransferEntropy", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_33)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    FamilyVar_26 = Family {
++        name = "fTimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_34)
++        }
++    };
++    FamilyVar_27 = Family {
++        name = "fTimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_35)
++        }
++    };
++    FamilyVar_28 = Family {
++        name = "fTimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_36)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        FamilyVar_24;
++        FamilyVar_26;
++        FamilyVar_27;
++        FamilyVar_28;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_2.ivml
+new file mode 100644
+index 0000000..f6df4e3
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_2.ivml
+@@ -0,0 +1,384 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_3.ivml
+new file mode 100644
+index 0000000..b7039f9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_3.ivml
+@@ -0,0 +1,434 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_4.ivml
+new file mode 100644
+index 0000000..d3b192e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_4.ivml
+@@ -0,0 +1,731 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_5.ivml
+new file mode 100644
+index 0000000..46f1beb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_5.ivml
+@@ -0,0 +1,772 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family FamilyVar_23;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    FamilyVar_23 = Family {
++        name = "fDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_26)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_6.ivml
+new file mode 100644
+index 0000000..46f1beb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_6.ivml
+@@ -0,0 +1,772 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family FamilyVar_23;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    FamilyVar_23 = Family {
++        name = "fDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_26)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_7.ivml
+new file mode 100644
+index 0000000..3daca71
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_7.ivml
+@@ -0,0 +1,960 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family FamilyVar_23;
++    Family FamilyVar_26;
++    Family FamilyVar_27;
++    Family FamilyVar_28;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    FamilyVar_23 = Family {
++        name = "fDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_26)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    FamilyVar_26 = Family {
++        name = "fTimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_34)
++        }
++    };
++    FamilyVar_27 = Family {
++        name = "fTimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_35)
++        }
++    };
++    FamilyVar_28 = Family {
++        name = "fTimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_36)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        FamilyVar_26;
++        FamilyVar_27;
++        FamilyVar_28;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_8.ivml
+new file mode 100644
+index 0000000..966d50a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_8.ivml
+@@ -0,0 +1,1038 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family FamilyVar_23;
++    Family FamilyVar_24;
++    Family FamilyVar_26;
++    Family FamilyVar_27;
++    Family FamilyVar_28;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    FamilyVar_23 = Family {
++        name = "fDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_26)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    FamilyVar_24 = Family {
++        name = "fTransferEntropy", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_33)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    FamilyVar_26 = Family {
++        name = "fTimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_34)
++        }
++    };
++    FamilyVar_27 = Family {
++        name = "fTimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_35)
++        }
++    };
++    FamilyVar_28 = Family {
++        name = "fTimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_36)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        FamilyVar_24;
++        FamilyVar_26;
++        FamilyVar_27;
++        FamilyVar_28;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_9.ivml
+new file mode 100644
+index 0000000..966d50a
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_9.ivml
+@@ -0,0 +1,1038 @@
++project FamiliesCfg {
++
++    import ReconfigurableHardware;
++    import Families;
++    import AlgorithmsCfg;
++    import BasicsCfg;
++    Family fPreprocessor;
++    Family fCorrelationFinancial;
++    Family fSentimentAnalysis;
++    Family randomFamily;
++    Family switchFamily;
++    Family fTwitterEventDetection;
++    Family FamilyVar_14;
++    Family FamilyVar_15;
++    Family FamilyVar_17;
++    Family FamilyVar_19;
++    Family FamilyVar_21;
++    Family FamilyVar_22;
++    Family FamilyVar_23;
++    Family FamilyVar_24;
++    Family FamilyVar_26;
++    Family FamilyVar_27;
++    Family FamilyVar_28;
++    Family fMapper;
++    Family fHayashiYoshida;
++    families = {
++        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
++    };
++    families.bindingTime = BindingTime.compile;
++    fPreprocessor = Family {
++        name = "fPreprocessor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "springStream", 
++                fields = {
++                    Field {
++                        name = "symbolTuple", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(swPreprocessor)
++        }
++    };
++    fCorrelationFinancial = Family {
++        name = "fCorrelationFinancial", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
++            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
++        }
++    };
++    fSentimentAnalysis = Family {
++        name = "fSentimentAnalysis", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "analyzedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "timeSeriesGranularity"
++            }, IntegerParameter {
++                name = "sentimentClass"
++            }, RealParameter {
++                name = "classificationThreshold"
++            }
++        }, 
++        members = {
++            refBy(topoSentiWord), refBy(topoSVM)
++        }
++    };
++    randomFamily = Family {
++        name = "randomFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(randomAlg1), refBy(randomAlg2)
++        }
++    };
++    FamilyVar_14 = Family {
++        name = "fSpamDetection", 
++        description = "Detects spam in tweet stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(spamDetection)
++        }
++    };
++    FamilyVar_15 = Family {
++        name = "fSpamRemoval", 
++        description = "Removes Spam from twitter stream", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "spamPropability", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "spamThreshold"
++            }
++        }, 
++        members = {
++            refBy(spamRemoval)
++        }
++    };
++    FamilyVar_17 = Family {
++        name = "fKeywordAnalyzer", 
++        description = "deduces typical keywords for a current event", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "threshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "decay"
++            }
++        }, 
++        members = {
++            refBy(keywordAnalyzer)
++        }
++    };
++    FamilyVar_19 = Family {
++        name = "fRecommendations", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "recommendationStream", 
++                fields = {
++                    Field {
++                        name = "recommendations", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                defaultValue = 0.5, 
++                name = "impactThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "stockCooccurrenceThreshold"
++            }
++        }, 
++        members = {
++            refBy(recommendations)
++        }
++    };
++    FamilyVar_21 = Family {
++        name = "fStockParser", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_22)
++        }
++    };
++    FamilyVar_22 = Family {
++        name = "fDynamicGraphCompilation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType)
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            RealParameter {
++                name = "correlationThreshold"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_25)
++        }
++    };
++    FamilyVar_23 = Family {
++        name = "fDynamicHubComputation", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "hubStream", 
++                fields = {
++                    Field {
++                        name = "hubList", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 30, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 10, 
++                name = "hubListSize"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_26)
++        }
++    };
++    switchFamily = Family {
++        name = "switchFamily", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "randomData", 
++                fields = {
++                    Field {
++                        name = "randomInteger", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(TimeStampType)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "aggregationFactor"
++            }, IntegerParameter {
++                name = "delay"
++            }, BooleanParameter {
++                name = "flag"
++            }, IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(switchAlg1), refBy(switchAlg2)
++        }
++    };
++    fTwitterEventDetection = Family {
++        name = "fTwitterEventDetection", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16), 
++                        keyPart = false
++                    }, Field {
++                        name = "stocks", 
++                        type = refBy(StringListType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "twitterStream", 
++                fields = {
++                    Field {
++                        name = "events", 
++                        type = refBy(IFEventListType)
++                    }, Field {
++                        name = "status", 
++                        type = refBy(FieldTypeVar_16)
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 1000, 
++                name = "hardThreshold"
++            }, RealParameter {
++                defaultValue = 0.5, 
++                name = "percentageThreshold"
++            }, IntegerParameter {
++                defaultValue = 86400, 
++                name = "lengthOfTimeWindow"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "frequenceOfCheckForEvent"
++            }
++        }, 
++        members = {
++            refBy(AlgorithmVar_24)
++        }
++    };
++    FamilyVar_24 = Family {
++        name = "fTransferEntropy", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "id0", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "id1", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "date", 
++                        type = refBy(StringTimeStampType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(DoubleType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                defaultValue = 300, 
++                name = "windowSize"
++            }, IntegerParameter {
++                defaultValue = 1, 
++                name = "windowAdvance"
++            }, IntegerParameter {
++                defaultValue = 128, 
++                name = "densitySize"
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_33)
++        }
++    };
++    fMapper = Family {
++        name = "fMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "preprocessedStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }, Field {
++                        name = "volume", 
++                        type = refBy(IntegerType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "symbolList", 
++                fields = {
++                    Field {
++                        name = "allSymbols", 
++                        type = refBy(StringListType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        parameters = {
++            IntegerParameter {
++                name = "windowSize"
++            }
++        }, 
++        members = {
++            refBy(aMapper)
++        }
++    };
++    fHayashiYoshida = Family {
++        name = "fHayashiYoshida", 
++        input = {
++            Tuple {
++                name = "symbolsStream", 
++                fields = {
++                    Field {
++                        name = "symbolId", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "timestamp", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }, Field {
++                        name = "value", 
++                        type = refBy(RealType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "configurationStream", 
++                fields = {
++                    Field {
++                        name = "pairKey", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }, Field {
++                        name = "pairValue", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }, Tuple {
++                name = "resetWindowStream", 
++                fields = {
++                    Field {
++                        name = "windowStart", 
++                        type = refBy(LongType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "pairwiseFinancial", 
++                fields = {
++                    Field {
++                        name = "pairwiseCorrelationFinancial", 
++                        type = refBy(StringType), 
++                        keyPart = false
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(aHayashiYoshida)
++        }
++    };
++    FamilyVar_26 = Family {
++        name = "fTimeGraphMapper", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "edgeStream", 
++                fields = {
++                    Field {
++                        name = "edge", 
++                        type = refBy(StringType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_34)
++        }
++    };
++    FamilyVar_27 = Family {
++        name = "fTimeGraphIndexer", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "dataStream", 
++                fields = {
++                    Field {
++                        name = "update", 
++                        type = refBy(ObjectType), 
++                        keyPart = false
++                    }, Field {
++                        name = "isAddition", 
++                        type = refBy(BooleanType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "internalRequests", 
++                fields = {
++                    Field {
++                        name = "internalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_35)
++        }
++    };
++    FamilyVar_28 = Family {
++        name = "fTimeGraphQueryExecutor", 
++        description = "", 
++        input = {
++            Tuple {
++                name = "snapshotQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }
++                }
++            }, Tuple {
++                name = "pathQueryStream", 
++                fields = {
++                    Field {
++                        name = "start", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "end", 
++                        type = refBy(LongType)
++                    }, Field {
++                        name = "vertexA", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "vertexB", 
++                        type = refBy(StringType)
++                    }, Field {
++                        name = "type", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "externalResponses", 
++                fields = {
++                    Field {
++                        name = "externalResponse", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        output = {
++            Tuple {
++                name = "snapshotStream", 
++                fields = {
++                    Field {
++                        name = "snapshot", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "pathStream", 
++                fields = {
++                    Field {
++                        name = "path", 
++                        type = refBy(StringType)
++                    }
++                }
++            }, Tuple {
++                name = "unicastRequests", 
++                fields = {
++                    Field {
++                        name = "unicastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }, Tuple {
++                name = "broadcastRequests", 
++                fields = {
++                    Field {
++                        name = "broadcastExternalRequest", 
++                        type = refBy(ObjectType)
++                    }
++                }
++            }
++        }, 
++        members = {
++            refBy(SoftwareAlgorithmVar_36)
++        }
++    };
++    freeze {
++        families;
++        fPreprocessor;
++        fCorrelationFinancial;
++        fSentimentAnalysis;
++        randomFamily;
++        switchFamily;
++        fTwitterEventDetection;
++        FamilyVar_14;
++        FamilyVar_15;
++        FamilyVar_17;
++        FamilyVar_19;
++        FamilyVar_21;
++        FamilyVar_22;
++        FamilyVar_24;
++        FamilyVar_26;
++        FamilyVar_27;
++        FamilyVar_28;
++        fMapper;
++        fHayashiYoshida;
++    } but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_0.ivml
+new file mode 100644
+index 0000000..afca1b2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_0.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_1.ivml
+new file mode 100644
+index 0000000..afca1b2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_1.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_10.ivml
+new file mode 100644
+index 0000000..06f43c2
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_10.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_11.ivml
+new file mode 100644
+index 0000000..f441c97
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_11.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_12.ivml
+new file mode 100644
+index 0000000..ceed689
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_12.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17), refBy(PipelineVar_18)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_2.ivml
+new file mode 100644
+index 0000000..1217738
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_2.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_3.ivml
+new file mode 100644
+index 0000000..d5b5add
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_3.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_4.ivml
+new file mode 100644
+index 0000000..0be15c8
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_4.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_5.ivml
+new file mode 100644
+index 0000000..b3a12e5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_5.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_6.ivml
+new file mode 100644
+index 0000000..6f176d0
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_6.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_7.ivml
+new file mode 100644
+index 0000000..d9a63a9
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_7.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_8.ivml
+new file mode 100644
+index 0000000..2367481
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_8.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_9.ivml
+new file mode 100644
+index 0000000..e7c6fef
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_9.ivml
+@@ -0,0 +1,26 @@
++project InfrastructureCfg {
++
++	import Infrastructure;
++	import PipelinesCfg;
++	activePipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14)
++	};
++	// TODO constraint no sub-pipeline here
++	
++	activePipelines.bindingTime = BindingTime.compile;
++	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
++	interfaceArtifact.bindingTime = BindingTime.compile;
++	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
++	modelArtifact.bindingTime = BindingTime.compile;
++	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
++	repositoryURL.bindingTime = BindingTime.compile;
++	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
++	deploymentURL.bindingTime = BindingTime.compile;
++	freeze {
++		activePipelines;
++		interfaceArtifact;
++		modelArtifact;
++		repositoryURL;
++		deploymentURL;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_0.ivml
+new file mode 100644
+index 0000000..09c0c87
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_0.ivml
+@@ -0,0 +1,18 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++    import SubTopologyCfg;
++    import SubPipelineVar_11Cfg;
++    import SubPipelineVar_15Cfg;
++    import SubPipelineVar_19Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(SubTopology), refBy(SubPipelineVar_11), refBy(SubPipelineVar_15), refBy(SubPipelineVar_19)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_1.ivml
+new file mode 100644
+index 0000000..d77e312
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_1.ivml
+@@ -0,0 +1,15 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++    import SubTopologyCfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(SubTopology)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_10.ivml
+new file mode 100644
+index 0000000..013de85
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_10.ivml
+@@ -0,0 +1,24 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++    import SubTopologyCfg;
++    import PipelineVar_9Cfg;
++    import PipelineVar_10Cfg;
++    import PipelineVar_13Cfg;
++    import PipelineVar_14Cfg;
++    import PipelineVar_16Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_11.ivml
+new file mode 100644
+index 0000000..bba095e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_11.ivml
+@@ -0,0 +1,25 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++    import SubTopologyCfg;
++    import PipelineVar_9Cfg;
++    import PipelineVar_10Cfg;
++    import PipelineVar_13Cfg;
++    import PipelineVar_14Cfg;
++    import PipelineVar_16Cfg;
++    import PipelineVar_17Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_12.ivml
+new file mode 100644
+index 0000000..66a0a63
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_12.ivml
+@@ -0,0 +1,26 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++    import SubTopologyCfg;
++    import PipelineVar_9Cfg;
++    import PipelineVar_10Cfg;
++    import PipelineVar_13Cfg;
++    import PipelineVar_14Cfg;
++    import PipelineVar_16Cfg;
++    import PipelineVar_17Cfg;
++    import PipelineVar_18Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17), refBy(PipelineVar_18)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_2.ivml
+new file mode 100644
+index 0000000..84507d1
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_2.ivml
+@@ -0,0 +1,16 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++    import SubTopologyCfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(SubTopology)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_3.ivml
+new file mode 100644
+index 0000000..650d0de
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_3.ivml
+@@ -0,0 +1,17 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++    import SubTopologyCfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(SubTopology)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_4.ivml
+new file mode 100644
+index 0000000..f1b61c5
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_4.ivml
+@@ -0,0 +1,18 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++    import SubTopologyCfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(SubTopology)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_5.ivml
+new file mode 100644
+index 0000000..4fb7643
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_5.ivml
+@@ -0,0 +1,19 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++    import SubTopologyCfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_6.ivml
+new file mode 100644
+index 0000000..9633365
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_6.ivml
+@@ -0,0 +1,20 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++    import SubTopologyCfg;
++    import PipelineVar_9Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_7.ivml
+new file mode 100644
+index 0000000..09c6ddb
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_7.ivml
+@@ -0,0 +1,21 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++    import SubTopologyCfg;
++    import PipelineVar_9Cfg;
++    import PipelineVar_10Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_8.ivml
+new file mode 100644
+index 0000000..b94650e
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_8.ivml
+@@ -0,0 +1,22 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++    import SubTopologyCfg;
++    import PipelineVar_9Cfg;
++    import PipelineVar_10Cfg;
++    import PipelineVar_13Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_9.ivml
+new file mode 100644
+index 0000000..5c47cc6
+--- /dev/null
++++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_9.ivml
+@@ -0,0 +1,23 @@
++project PipelinesCfg {
++
++	import Basics;
++	import Pipelines;
++	import PriorityPipCfg;
++	import PipelineVar_1Cfg;
++	import PipelineVar_2Cfg;
++	import PipelineVar_7Cfg;
++	import PipelineVar_8Cfg;
++    import SubTopologyCfg;
++    import PipelineVar_9Cfg;
++    import PipelineVar_10Cfg;
++    import PipelineVar_13Cfg;
++    import PipelineVar_14Cfg;
++	pipelines = {
++		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14)
++	};
++	pipelines.userVisible = true;
++	pipelines.bindingTime = BindingTime.compile;
++	freeze {
++		pipelines;
++	} but (f|f.bindingTime >= BindingTime.runtimeMon)
++}
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/META-INF/MANIFEST.MF b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/META-INF/MANIFEST.MF
+index 8e5a388..2d26ebd 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/META-INF/MANIFEST.MF
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/META-INF/MANIFEST.MF
+@@ -20,4 +20,4 @@
+  org.junit.runners;version="4.5.0",
+  org.junit.runners.model;version="4.5.0",
+  org.hamcrest.core
+-
++Export-Package: test.de.uni_hildesheim.sse
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AbstractTest.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AbstractTest.java
+index ac593e5..6744b3d 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AbstractTest.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AbstractTest.java
+@@ -33,10 +33,34 @@
+  */
+ public abstract class AbstractTest extends net.ssehub.easy.dslCore.test.AbstractTest<Project> {
+ 
++    protected static final String TESTDATA_SYSTEM_PROPERTY = "ivml.testdata.home";
++    
+     /**
+      * The directory containing all tests.
+      */
+-    protected static final File TESTDATA_DIR = determineTestDataDir("ivml.testdata.home");
++    private static File testDataDir;
++    
++    static {
++        setTestDataDir(TESTDATA_SYSTEM_PROPERTY);
++    }
++    
++    /**
++     * Returns the test data directory.
++     * 
++     * @return the test data directory
++     */
++    protected static File getTestDataDir() {
++        return testDataDir;
++    }
++
++    /**
++     * Changes the testdata directory.
++     * 
++     * @param systemProperty the system property to determine the test data dir from
++     */
++    protected static void setTestDataDir(String systemProperty) {
++        testDataDir = determineTestDataDir(systemProperty);
++    }
+ 
+     /**
+      * Starts up the {@link VarModel} by registering {@link #TESTDATA_DIR} as
+@@ -46,7 +70,7 @@
+     public static void startUp() {
+         try {
+             resourceInitialization();
+-            VarModel.INSTANCE.locations().addLocation(TESTDATA_DIR, OBSERVER);
++            VarModel.INSTANCE.locations().addLocation(getTestDataDir(), OBSERVER);
+             VarModel.INSTANCE.loaders().registerLoader(ModelUtility.INSTANCE, OBSERVER);
+         } catch (ModelManagementException e) {
+             e.printStackTrace(System.err);
+@@ -62,7 +86,7 @@
+     @AfterClass
+     public static void shutDown() {
+         try {
+-            VarModel.INSTANCE.locations().removeLocation(TESTDATA_DIR, OBSERVER);
++            VarModel.INSTANCE.locations().removeLocation(getTestDataDir(), OBSERVER);
+         } catch (ModelManagementException e) {
+             Assert.fail();
+         }
+@@ -117,10 +141,12 @@
+      * @return the loaded projects
+      * @throws IOException
+      *             problems finding or reading the model file
++     *             
++     * @see #checkErrorCodes(TranslationResult, List, int...)
++     * @see #checkWarningCodes(TranslationResult)
+      */
+     protected List<Project> assertEqual(File file, String expectedName,
+-        String expectedVersion, int... expectedErrorCodes)
+-        throws IOException {
++        String expectedVersion, int... expectedErrorCodes) throws IOException {
+ 
+         List<Project> loaded = null;
+         if (file.exists()) {
+@@ -129,9 +155,10 @@
+             // parse the model
+             TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
+             String errorCodesMsg = checkErrorCodes(result, null, expectedErrorCodes);
++            checkWarningCodes(result);
+             Assert.assertNull(errorCodesMsg, errorCodesMsg);
+ 
+-            if (0 == result.getErrorCount()) {
++            if (0 == result.getErrorCount() && checkWriteback(file)) {
+                 // read model file into memory
+                 String fileAsString = file2String(file);
+                 Assert.assertTrue(null != fileAsString);
+@@ -153,7 +180,7 @@
+             loaded = assertProjectInfo(expectedName, expectedVersion, uri, result, expectedErrorCodes);
+         } else {
+             System.err.println("File '" + file + "' does not exist");
+-            Assert.assertTrue(false);
++            Assert.assertTrue("File '" + file + "' does not exist", false);
+         }
+ 
+         // due to the startUp the VarModel shall already know about the project!
+@@ -175,6 +202,24 @@
+     }
+     
+     /**
++     * Whether the test for a certain file shall check for output and output formatting.
++     * 
++     * @param file the file
++     * @return <code>true</code> check for output formatting, <code>false</code> for no checks
++     */
++    protected boolean checkWriteback(File file) {
++        return true;
++    }
++
++    /**
++     * Optional extension to check for warning codes.
++     * 
++     * @param result the translation result
++     */
++    protected void checkWarningCodes(TranslationResult<Project> result) {
++    }
++    
++    /**
+      * Assert that the comments in <code>commentResource</code> (seen as expected)
+      * are attached to the proper model elements.
+      * 
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdditionalTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdditionalTests.java
+index 1afb04f..ac02678 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdditionalTests.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdditionalTests.java
+@@ -13,7 +13,6 @@
+ import net.ssehub.easy.varModel.confModel.ConfigurationException;
+ import net.ssehub.easy.varModel.confModel.ConfigurationSaver;
+ import net.ssehub.easy.varModel.confModel.IDecisionVariable;
+-import net.ssehub.easy.varModel.cst.CSTSemanticException;
+ import net.ssehub.easy.varModel.model.AbstractVariable;
+ import net.ssehub.easy.varModel.model.ModelQuery;
+ import net.ssehub.easy.varModel.model.ModelQueryException;
+@@ -34,7 +33,7 @@
+     /**
+      * Represents the directory containing the tests.
+      */
+-    private static final File DIR = new File(TESTDATA_DIR, "additional");
++    private static final File DIR = new File(getTestDataDir(), "additional");
+ 
+     /**
+      * Creates a file in {@link #DIR}.
+@@ -247,7 +246,7 @@
+      */
+     @Test
+     public void testRefby() throws IOException {
+-        assertEqual(createFile("refby"), null, null, CSTSemanticException.UNKNOWN_OPERATION);
++        assertEqual(createFile("refby"), null, null);
+     }
+     
+     /**
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdvancedTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdvancedTests.java
+index 8ca1902..16aa2bb 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdvancedTests.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdvancedTests.java
+@@ -47,7 +47,6 @@
+ import net.ssehub.easy.varModel.model.Project;
+ import net.ssehub.easy.varModel.model.ProjectImport;
+ import net.ssehub.easy.varModel.model.ProjectInterface;
+-import net.ssehub.easy.varModel.model.datatypes.Compound;
+ import net.ssehub.easy.varModel.model.datatypes.CustomOperation;
+ import net.ssehub.easy.varModel.model.datatypes.DerivedDatatype;
+ import net.ssehub.easy.varModel.model.datatypes.EnumLiteral;
+@@ -68,7 +67,7 @@
+     /**
+      * Represents the directory containing the tests.
+      */
+-    private static final File DIR = new File(TESTDATA_DIR, "advanced");
++    private static final File DIR = new File(getTestDataDir(), "advanced");
+ 
+     /**
+      * Creates a model file object for {@link #DIR}.
+@@ -159,9 +158,7 @@
+      */
+     @Test
+     public void testCompoundOverlapping2() throws IOException {
+-        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
+-            assertEqual(createFile("compounds2"), "compoundOverlapping2", "0");
+-        }
++        assertEqual(createFile("compounds2"), "compoundOverlapping2", "0");
+     }
+ 
+     /**
+@@ -171,10 +168,8 @@
+      */
+     @Test
+     public void testCompoundOverlapping2Fail() throws IOException {
+-        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
+-            assertEqual(createFile("compounds2Fail"), "compoundOverlapping2Fail", "0", 
+-                ValueDoesNotMatchTypeException.TYPE_MISMATCH);
+-        }
++        assertEqual(createFile("compounds2Fail"), "compoundOverlapping2Fail", "0", 
++            ValueDoesNotMatchTypeException.TYPE_MISMATCH);
+     }
+ 
+     /**
+@@ -184,10 +179,8 @@
+      */
+     @Test
+     public void testCompoundOverlapping3Fail() throws IOException {
+-        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
+-            assertEqual(createFile("compounds3Fail"), "compoundOverlapping3Fail", "0", 
+-                ValueDoesNotMatchTypeException.TYPE_MISMATCH);
+-        }
++        assertEqual(createFile("compounds3Fail"), "compoundOverlapping3Fail", "0", 
++            ValueDoesNotMatchTypeException.TYPE_MISMATCH);
+     }
+ 
+     /**
+@@ -197,9 +190,7 @@
+      */
+     @Test
+     public void testCompoundMulti() throws IOException {
+-        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
+-            assertEqual(createFile("compoundsMulti"), "compoundsMulti", "0");
+-        }
++        assertEqual(createFile("compoundsMulti"), "compoundsMulti", "0");
+     }
+ 
+     /**
+@@ -209,10 +200,8 @@
+      */
+     @Test
+     public void testCompoundMultiFail() throws IOException {
+-        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
+-            assertEqual(createFile("compoundsMultiFail"), "compoundsMultiFail", "0", 
+-                ValueDoesNotMatchTypeException.TYPE_MISMATCH);
+-        }
++        assertEqual(createFile("compoundsMultiFail"), "compoundsMultiFail", "0", 
++            ValueDoesNotMatchTypeException.TYPE_MISMATCH);
+     }
+ 
+     /**
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/BasicTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/BasicTests.java
+index 531a7ca..39c758c 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/BasicTests.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/BasicTests.java
+@@ -40,7 +40,7 @@
+     /**
+      * Represents the directory containing the tests.
+      */
+-    private static final File DIR = new File(TESTDATA_DIR, "basic");
++    private static final File DIR = new File(getTestDataDir(), "basic");
+ 
+     /**
+      * Creates a file object relative to {@link #DIR} (not a file).
+@@ -391,6 +391,27 @@
+     }
+ 
+     /**
++     * Tests custom typedefs.
++     * 
++     * @throws IOException should not occur
++     */
++    @Test
++    public void testTypedefCompound1() throws IOException {
++        assertEqual(createFile("typedefCompound1"), "testTypedefCompound1", "0");
++    }
++
++    /**
++     * Tests custom typedefs.
++     * 
++     * @throws IOException should not occur
++     */
++    @Test
++    public void testTypedefCompound1Fail() throws IOException {
++        assertEqual(createFile("typedefCompound1Fail"), "testTypedefCompound1Fail", "0", ErrorCodes.TYPE_CONSISTENCY);
++    }
++
++    
++    /**
+      * Tests custom typedefs. (failing)
+      * 
+      * @throws IOException should not occur
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ExternalTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ExternalTests.java
+index dafd3ea..4d1cb72 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ExternalTests.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ExternalTests.java
+@@ -33,7 +33,7 @@
+     /**
+      * Represents the directory containing the tests.
+      */
+-    private static final File DIR = new File(TESTDATA_DIR, "external");
++    private static final File DIR = new File(getTestDataDir(), "external");
+ 
+     /**
+      * Creates a file in {@link #DIR}.
+@@ -240,4 +240,44 @@
+         }
+     }
+ 
++    /**
++     * Tests a signature problem with <code>isUnique</code> (by M. Keunecke).
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void testUnique() throws IOException {
++        assertEqual(createFile("isUnique"), null, null);
++    }
++
++    /**
++     * Tests a signature problem with <code>isUnique</code> (by M. Keunecke).
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void testUnique2() throws IOException {
++        assertEqual(createFile("isUnique2"), null, null);
++    }
++
++    /**
++     * Tests a signature problem with <code>isUnique</code> (by M. Keunecke).
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void testUnique3() throws IOException {
++        assertEqual(createFile("isUnique3"), null, null);
++    }
++
++    /**
++     * Tests a problem with compound initializers and references.
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void testCompoundRefAssignTest2() throws IOException {
++        assertEqual(createFile("CompoundRefAssignTest2"), null, null);
++    }
++
+ }
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/HierarchicalTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/HierarchicalTests.java
+index 88369a7..5db0f3e 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/HierarchicalTests.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/HierarchicalTests.java
+@@ -25,7 +25,7 @@
+     /**
+      * Represents the directory containing the tests.
+      */
+-    private static final File DIR = new File(TESTDATA_DIR, "hierarchical");
++    private static final File DIR = new File(getTestDataDir(), "hierarchical");
+     
+     /**
+      * Starts up the test overriding the parent method.
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ImportTest.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ImportTest.java
+index b641033..5e963e9 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ImportTest.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ImportTest.java
+@@ -50,7 +50,7 @@
+     /**
+      * Represents the directory containing the tests.
+      */
+-    private static final File DIR = new File(TESTDATA_DIR, "imports");
++    private static final File DIR = new File(getTestDataDir(), "imports");
+     
+     private static final File LOCATION_IMPORTS_WITH_2_PROJECTS = new File(DIR, "CycleTest_2Projects"); 
+     private static final File LOCATION_CYCLING_DECLARATIONS = new File(DIR, "CycleTest_CyclingDeclarations"); 
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/LanguageSpecTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/LanguageSpecTests.java
+index df32c85..425c2c5 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/LanguageSpecTests.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/LanguageSpecTests.java
+@@ -16,7 +16,7 @@
+     /**
+      * Represents the directory containing the tests.
+      */
+-    private static final File DIR = new File(TESTDATA_DIR, "languageSpec");
++    private static final File DIR = new File(getTestDataDir(), "languageSpec");
+ 
+     /**
+      * Creates a file in {@link #DIR}.
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/TestUnderFix.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/TestUnderFix.java
+index 69dfbe3..ec2bacd 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/TestUnderFix.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/TestUnderFix.java
+@@ -19,7 +19,7 @@
+      * @return the file
+      */
+     public static final File createFile(String name) {
+-        return new File(new File(TESTDATA_DIR, ""), name + ".ivml");
++        return new File(new File(getTestDataDir(), ""), name + ".ivml");
+     }
+ 
+     /**
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/cycletest/CyclingImportsTest.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/cycletest/CyclingImportsTest.java
+index ffebe69..09aa1ef 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/cycletest/CyclingImportsTest.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/cycletest/CyclingImportsTest.java
+@@ -40,7 +40,7 @@
+     /**
+      * Represents the directory containing the tests.
+      */
+-    private static final File DIR = new File(TESTDATA_DIR, "scenarios/qm_may16");
++    private static final File DIR = new File(getTestDataDir(), "scenarios/qm_may16");
+ 
+     /**
+      * Creates a model file object for {@link #DIR}.
+diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml/src/de/uni_hildesheim/sse/ModelUtility.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml/src/de/uni_hildesheim/sse/ModelUtility.java
+index 46ac992..8ac1079 100644
+--- a/Plugins/IVML/de.uni_hildesheim.sse.ivml/src/de/uni_hildesheim/sse/ModelUtility.java
++++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml/src/de/uni_hildesheim/sse/ModelUtility.java
+@@ -34,6 +34,7 @@
+ import net.ssehub.easy.basics.modelManagement.Version;
+ import net.ssehub.easy.basics.modelManagement.VersionFormatException;
+ import net.ssehub.easy.dslCore.TranslationResult;
++import net.ssehub.easy.dslCore.translation.LogMessageReceiver;
+ import net.ssehub.easy.dslCore.translation.Message;
+ import net.ssehub.easy.dslCore.translation.MessageReceiver;
+ import net.ssehub.easy.dslCore.translation.TranslatorException;
+@@ -59,11 +60,13 @@
+     implements IModelLoader<Project> {
+ 
+     public static final ModelUtility INSTANCE = new ModelUtility();
++    private final LogMessageReceiver logReceiver;
+     
+     /**
+      * Prevents external creation.
+      */
+     private ModelUtility() {
++        logReceiver = new LogMessageReceiver(getClass(), null);
+     }
+ 
+     @Override
+@@ -166,7 +169,8 @@
+      *             in case that an I/O error happens during parsing
+      */
+     public List<ModelInfo<Project>> obtainInfo(URI uri) throws IOException {
+-        VariabilityUnit root = parse(uri, true, null, VariabilityUnit.class);
++        logReceiver.setLocationHint(uri);
++        VariabilityUnit root = parse(uri, true, logReceiver, VariabilityUnit.class);
+         List<ModelInfo<Project>> result = new ArrayList<ModelInfo<Project>>();
+         if (null != root) {
+             for (de.uni_hildesheim.sse.ivml.Project project : root
+diff --git a/Plugins/Instantiation/Instantiator.AspectJ/src/net/ssehub/easy/instantiation/aspectj/Registration.java b/Plugins/Instantiation/Instantiator.AspectJ/src/net/ssehub/easy/instantiation/aspectj/Registration.java
+index ea00b45..f069693 100644
+--- a/Plugins/Instantiation/Instantiator.AspectJ/src/net/ssehub/easy/instantiation/aspectj/Registration.java
++++ b/Plugins/Instantiation/Instantiator.AspectJ/src/net/ssehub/easy/instantiation/aspectj/Registration.java
+@@ -3,6 +3,7 @@
+ import org.osgi.service.component.ComponentContext;
+ 
+ import net.ssehub.easy.instantiation.aspectj.instantiators.AspectJ;
++import net.ssehub.easy.instantiation.core.JavaUtilities;
+ import net.ssehub.easy.instantiation.core.model.vilTypes.IRegistration;
+ import net.ssehub.easy.instantiation.core.model.vilTypes.TypeRegistry;
+ 
+@@ -42,4 +43,14 @@
+         // this is not the official way of using DS but the official way is instable
+     }
+ 
++    /**
++     * Checks whether the AspectJ instantiator will work in this environment, e.g., not
++     * due to Java 9.
++     * 
++     * @return a message if the instantiator will not work, <b>null</b> else
++     */
++    public static String checkEnvironment() {
++        return JavaUtilities.isJava9() ? "AspectJ is not available for JDK 9" : null;
++        //return null; // ok, since AspectJ 1.9.1
++    }
+ }
+diff --git a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/IReasoningHook.java b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/IReasoningHook.java
+index f846fb4..89142f3 100644
+--- a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/IReasoningHook.java
++++ b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/IReasoningHook.java
+@@ -18,6 +18,7 @@
+ import net.ssehub.easy.basics.messages.Status;
+ import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.Configuration;
+ import net.ssehub.easy.reasoning.core.reasoner.Message;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
+ 
+ /**
+  * A reasoning hook allowing the system using the rt-VIL environment to influence the validity
+@@ -59,8 +60,10 @@
+      * @param concept the specific concept on which the call is being executed
+      * @param values reading access to the actual rt-VIL variable values
+      * @param config the actual configuration
++     * @param result the reasoning result
+      */
+-    public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, Configuration config);
++    public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, Configuration config, 
++        ReasoningResult result);
+     
+     /**
+      * Is called if reasoning is considered to fail, e.g., to inform the user.
+diff --git a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/ReasoningHookAdapter.java b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/ReasoningHookAdapter.java
+index 7bc040e..856e55c 100644
+--- a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/ReasoningHookAdapter.java
++++ b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/ReasoningHookAdapter.java
+@@ -18,6 +18,7 @@
+ import net.ssehub.easy.basics.messages.Status;
+ import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.Configuration;
+ import net.ssehub.easy.reasoning.core.reasoner.Message;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
+ 
+ /**
+  * Provides a neutral reasoning hook implementation, i.e., a hook that does not influencing the 
+@@ -38,7 +39,8 @@
+     }
+ 
+     @Override
+-    public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, Configuration config) {
++    public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, Configuration config, 
++        ReasoningResult result) {
+         // do nothing
+     }
+     
+diff --git a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/RtVilExecution.java b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/RtVilExecution.java
+index 7cdd61c..fafb5f3 100644
+--- a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/RtVilExecution.java
++++ b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/RtVilExecution.java
+@@ -106,9 +106,9 @@
+             if (null != cfg) {
+                 Script currentScript = evaluator.currentScript;
+                 IRtValueAccess valueAccess = evaluator.valueAccess;
+-                evaluator.reasoningHook.preReasoning(currentScript, concept, valueAccess, cfg);
+                 net.ssehub.easy.varModel.confModel.Configuration easyConfig = cfg.getConfiguration();
+                 EASyLogger logger = EASyLoggerFactory.INSTANCE.getLogger(RtVilExecution.class, Bundle.ID);
++                evaluator.reasoningHook.preReasoning(currentScript, concept, valueAccess, cfg);
+                 ReasoningResult rResult = null;
+                 try {
+                     rResult = ReasonerFrontend.getInstance().propagate(easyConfig.getProject(), 
+@@ -117,7 +117,7 @@
+                     // pretend it is ok
+                     logger.error("Reasoning exception: " + t.getMessage() + " - going on");
+                 }
+-                evaluator.reasoningHook.postReasoning(currentScript, concept, valueAccess, cfg);
++                evaluator.reasoningHook.postReasoning(currentScript, concept, valueAccess, cfg, rResult);
+                 int errorCount = 0;
+                 for (int m = 0; m < rResult.getMessageCount(); m++) {
+                     Message msg = rResult.getMessage(m);
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.easy.instantiatorCore/src/net/ssehub/easy/instantiation/core/JavaUtilities.java b/Plugins/Instantiation/de.uni_hildesheim.sse.easy.instantiatorCore/src/net/ssehub/easy/instantiation/core/JavaUtilities.java
+index d78fcd6..1e68644 100644
+--- a/Plugins/Instantiation/de.uni_hildesheim.sse.easy.instantiatorCore/src/net/ssehub/easy/instantiation/core/JavaUtilities.java
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.easy.instantiatorCore/src/net/ssehub/easy/instantiation/core/JavaUtilities.java
+@@ -193,4 +193,14 @@
+         }
+         return result;
+     }
++    
++    /**
++     * Returns whether we are running Java 9.
++     * 
++     * @return <code>true</code> for Java 9, <code>false</code> else
++     */
++    public static boolean isJava9() {
++        return System.getProperty("java.version").startsWith("9.");
++    }
++    
+ }
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang.tests/src/test/de/uni_hildesheim/sse/vil/buildlang/AbstractTest.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang.tests/src/test/de/uni_hildesheim/sse/vil/buildlang/AbstractTest.java
+index 3913cba..c4449bc 100644
+--- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang.tests/src/test/de/uni_hildesheim/sse/vil/buildlang/AbstractTest.java
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang.tests/src/test/de/uni_hildesheim/sse/vil/buildlang/AbstractTest.java
+@@ -494,7 +494,16 @@
+         try {
+             File tmp = getTempDir();
+             if (tmp.exists()) {
+-                FileUtils.cleanDirectory(tmp);
++                File[] files = tmp.listFiles();
++                for (File f : files) {
++                    if (f.isDirectory()) {
++                        FileUtils.deleteDirectory(f);
++                    } else {
++                        if (!f.getName().endsWith(".tsv")) { // avoid cleaning up files from TSVMeasurementCollector
++                            f.delete();
++                        }
++                    }
++                }
+             }
+         } catch (IOException e) {
+             // don't care
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang/xtend-gen/de/uni_hildesheim/sse/generator/.VilBuildLanguageGenerator.java._trace b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang/xtend-gen/de/uni_hildesheim/sse/generator/.VilBuildLanguageGenerator.java._trace
+index b6e8f36..52bbe01 100644
+--- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang/xtend-gen/de/uni_hildesheim/sse/generator/.VilBuildLanguageGenerator.java._trace
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang/xtend-gen/de/uni_hildesheim/sse/generator/.VilBuildLanguageGenerator.java._trace
+Binary files differ
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/META-INF/MANIFEST.MF b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/META-INF/MANIFEST.MF
+index 71ec1c0..439ff93 100644
+--- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/META-INF/MANIFEST.MF
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/META-INF/MANIFEST.MF
+@@ -25,7 +25,10 @@
+  de.uni-hildesheim.sse.easy.instantiatorCore.rt,
+  net.ssehub.easy.reasoning.core;bundle-version="0.10.3",
+  net.ssehub.easy.reasoning.sseReasoner;bundle-version="0.0.2",
+- org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional
++ org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional,
++ net.ssehub.easy.instantiation.serializer.xml;bundle-version="0.9.0",
++ net.ssehub.easy.reasoning.sseReasoner.tests,
++ net.ssehub.easy.reasoning.core.tests
+ Import-Package: org.apache.log4j,
+  org.junit;version="4.5.0",
+  org.junit.runner;version="4.5.0",
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AbstractRtTest.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AbstractRtTest.java
+index 663a684..2f60578 100644
+--- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AbstractRtTest.java
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AbstractRtTest.java
+@@ -17,6 +17,7 @@
+ 
+ import test.de.uni_hildesheim.sse.vil.buildlang.AbstractExecutionTest;
+ import test.de.uni_hildesheim.sse.vil.buildlang.ITestConfigurer;
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
+ 
+ import java.util.List;
+ 
+@@ -28,6 +29,11 @@
+ import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.IVariableFilter;
+ import net.ssehub.easy.instantiation.rt.core.model.rtVil.Script;
+ import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.GeneralMeasures;
++import net.ssehub.easy.reasoning.core.reasoner.IMeasurementKey;
++import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
++import net.ssehub.easy.reasoning.sseReasoner.Measures;
+ import net.ssehub.easy.reasoning.sseReasoner.Reasoner;
+ import net.ssehub.easy.varModel.management.VarModel;
+ import net.ssehub.easy.varModel.model.Project;
+@@ -38,6 +44,9 @@
+  * @author Holger Eichelberger
+  */
+ public abstract class AbstractRtTest extends AbstractExecutionTest<Script> {
++
++    protected static final IMeasurementKey[] MEASUREMENTS = AbstractTestDescriptor.concat(
++        Measures.values(), GeneralMeasures.values()); 
+ 
+     private static boolean reasonerRegistered = false;
+     
+@@ -52,10 +61,24 @@
+             // set the preferred reasoner, in particular for plugin-based tests as then also older reasoners
+             // may be available
+             fe.setReasonerHint(reasoner.getDescriptor());
++            // common measurements
++            AbstractTestDescriptor.registerMeasurementMappings();
++            // SSE reasoner measurements
++            TestDescriptor.registerMeasurementMappings();
++            // see also MEASUREMENTS!
+             reasonerRegistered = true;
+         }
+     }
+     
++    /**
++     * Returns a reasoner instance.
++     * 
++     * @return the instance
++     */
++    protected IReasoner createReasoner() {
++        return new Reasoner();
++    }
++    
+     @Override
+     protected ITestConfigurer<Script> createTestConfigurer() {
+         return new RtVilTestConfigurer();
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AllTests.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AllTests.java
+index f683323..bcdf9e6 100644
+--- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AllTests.java
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AllTests.java
+@@ -27,6 +27,7 @@
+  */
+ @RunWith(Suite.class)
+ @Suite.SuiteClasses({
++    RampUpTest.class, // must be first
+     BasicRtTests.class,
+     ExecutionRtTests.class,
+     AnalyzerTest.class,
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RampUpTest.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RampUpTest.java
+new file mode 100644
+index 0000000..f931955
+--- /dev/null
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RampUpTest.java
+@@ -0,0 +1,65 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package de.uni_hildesheim.sse.vil.rt.tests;
++
++import org.junit.Assert;
++import org.junit.BeforeClass;
++import org.junit.Test;
++
++import net.ssehub.easy.basics.progress.ProgressObserver;
++import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.cst.CSTSemanticException;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++
++/**
++ * An rt-VIL rampup test.
++ * 
++ * @author Holger Eichelberger
++ */
++public class RampUpTest extends AbstractRtTest {
++    
++    /**
++     * Starts up the test.
++     */
++    @BeforeClass
++    public static void startUp() {
++        registerReasoner();
++    }
++
++    /**
++     * Performs the ram-up test.
++     * 
++     * @throws ConfigurationException if setting an expression as default value fails
++     * @throws ValueDoesNotMatchTypeException if a value does not match a type
++     * @throws CSTSemanticException if a constraint is erroneously composed
++     */
++    @Test
++    public void rampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
++        CSTSemanticException {
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        Configuration cfg = net.ssehub.easy.reasoning.core.reasoner.RampUpTest.createRampUpTest();
++        IReasoner reasoner = createReasoner();
++        // NO MEASUREMENT!!!
++        ReasoningResult rResult = reasoner.propagate(cfg.getProject(), cfg, rConfig, ProgressObserver.NO_OBSERVER);
++        rResult.logInformation(cfg.getProject(), rConfig);
++        Assert.assertFalse(rResult.hasConflict());
++    }
++
++}
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RtVilTestConfigurer.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RtVilTestConfigurer.java
+index 1b4568e..d0e5be8 100644
+--- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RtVilTestConfigurer.java
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RtVilTestConfigurer.java
+@@ -37,11 +37,20 @@
+ import net.ssehub.easy.instantiation.core.model.buildlangModel.ITracer;
+ import net.ssehub.easy.instantiation.core.model.execution.TracerFactory;
+ import net.ssehub.easy.instantiation.core.model.expressions.ExpressionParserRegistry;
++import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.Configuration;
+ import net.ssehub.easy.instantiation.rt.core.model.rtVil.BuiltIn;
++import net.ssehub.easy.instantiation.rt.core.model.rtVil.IRtValueAccess;
++import net.ssehub.easy.instantiation.rt.core.model.rtVil.IRtVilConcept;
++import net.ssehub.easy.instantiation.rt.core.model.rtVil.ReasoningHookAdapter;
+ import net.ssehub.easy.instantiation.rt.core.model.rtVil.RtVilExecution;
+ import net.ssehub.easy.instantiation.rt.core.model.rtVil.RtVilModel;
+ import net.ssehub.easy.instantiation.rt.core.model.rtVil.Script;
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
+ import net.ssehub.easy.varModel.management.VarModel;
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
++import net.ssehub.easy.varModel.varModel.testSupport.TSVMeasurementCollector;
+ import test.de.uni_hildesheim.sse.vil.buildlang.ITestConfigurer;
+ import test.de.uni_hildesheim.sse.vil.buildlang.TestTracerFactory;
+ 
+@@ -110,15 +119,38 @@
+     @Override
+     public BuildlangExecution createExecutionEnvironment(ITracer tracer, File base, String startRuleName,
+         Map<String, Object> parameter) {
+-        RtVilExecution result = new RtVilExecution(tracer, base, parameter); // TODO adjust tracer
++        RtVilExecution result = new RtVilExecution(tracer, base, parameter);
+         result.setStopAfterBindValues(false); // although default, fits to initial code
+         result.setUseReasoner(true);
++        result.setReasoningHook(new ReasoningHookAdapter() {
++            private String id;
++            
++            @Override
++            public void preReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, 
++                Configuration config) {
++                File base = AbstractRtTest.determineTestDataDir(getSystemPropertyName());
++                TSVMeasurementCollector.ensureCollector(new File(base, 
++                    "temp/measurements-rtvil.tsv"));
++                id = MeasurementCollector.start(config.getConfiguration(), "RT-VIL", 1);
++            }
++            
++            @Override
++            public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, 
++                Configuration config, ReasoningResult result) {
++                MeasurementCollector.endAuto(id);
++                AbstractTest.transferReasoningMeasures(MeasurementCollector.getInstance(), id, 
++                    AbstractRtTest.MEASUREMENTS, result);
++                MeasurementCollector.end(id);
++                result.logInformation(config.getConfiguration().getProject(), 
++                    ReasonerConfiguration.ADDITIONAL_INFO_LOG_SYSOUT);
++            }
++        });
+         return result;
+     }
+ 
+     @Override
+     public TracerFactory createTestTracerFactory(Writer trace, String[] baseFolders) {
+-        return new TestTracerFactory(trace, baseFolders); // TODO adjust
++        return new TestTracerFactory(trace, baseFolders);
+     }
+ 
+ }
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/temp/measurements-rtvil.tsv b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/temp/measurements-rtvil.tsv
+new file mode 100644
+index 0000000..8945ccc
+--- /dev/null
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/temp/measurements-rtvil.tsv
+@@ -0,0 +1,17 @@
++model name	URI	tag	runCount	caller	MODEL_ANNOTATIONS	MODEL_COMPLEXITY	MODEL_CONSTRAINT_AVG_COMPLEXITY	MODEL_CONSTRAINT_COMPLEXITY	MODEL_CONSTRAINT_INSTANCES	MODEL_CONSTRAINT_VARIABLES	MODEL_CONSTRAINT_VARIABLES_NO_CONTAINER	MODEL_NORMAL_VARIABLES	MODEL_NORMAL_VARIABLES_NO_CONTAINER	MODEL_TOPLEVEL_VARIABLES	MODEL_VARIABLES	MODEL_VARIABLES_WITHOUT_CONTAINER	MODEL_VARIABLE_AVG_COMPLEXITY	MODEL_VARIABLE_COMPLEXITY	REASONER_CONSTRAINT_COUNT	REASONER_EVALUATION_TIME	REASONER_INSTANCE_CREATION_TIME	REASONER_PROBLEMS	REASONER_PROBLEM_ASSIGNMENTS	REASONER_PROBLEM_CONSTRAINTS	REASONER_REASONING_TIME	REASONER_REEVALUATION_COUNT	REASONER_TRANSLATION_TIME	REASONER_VARIABLES_IN_CONSTRAINTS	RESPONSETIME_AUTO	
++QM2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM2.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testParameter	7,00	9,50	0,25	0,50	0,00	0,00	0,00	7,00	7,00	2,00	7,00	7,00	1,29	9,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++Add	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/Add.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testAdd	4,00	5,75	0,25	0,75	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,25	5,00	0,00	0,00	0,00	0,00	0,00	0,00	16,00	0,00	0,00	0,00	16,00	
++Clear	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/Clear.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testClear	3,00	4,50	0,25	0,50	0,00	1,00	1,00	2,00	2,00	2,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++QM5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM5.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testReferences2	16,00	23,00	0,25	1,00	0,00	0,00	0,00	16,00	12,00	4,00	16,00	12,00	1,38	22,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++QM8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM8.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testReferences3	8,00	11,75	0,25	0,75	0,00	0,00	0,00	8,00	7,00	3,00	8,00	7,00	1,38	11,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++tactics2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/tactics2.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testTactics2	4,00	6,50	0,25	0,50	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++QM6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM6.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testInstances2	9,00	12,25	0,25	0,25	0,00	0,00	0,00	9,00	9,00	1,00	9,00	9,00	1,33	12,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	5,00	0,00	
++QM7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM7.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testInstances3	9,00	12,25	0,25	0,25	0,00	0,00	0,00	9,00	9,00	1,00	9,00	9,00	1,33	12,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	5,00	0,00	
++QM3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM3.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testMapping	11,00	15,50	0,50	1,50	0,00	0,00	0,00	11,00	9,00	3,00	11,00	9,00	1,27	14,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++QM4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM4.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testReferences	8,00	11,75	0,25	0,75	0,00	0,00	0,00	8,00	7,00	3,00	8,00	7,00	1,38	11,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++QM6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM6.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testInstances	9,00	12,25	0,25	0,25	0,00	0,00	0,00	9,00	9,00	1,00	9,00	9,00	1,33	12,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	5,00	0,00	
++dispatch2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/dispatch2.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testDispatch2	11,00	15,50	0,25	0,50	0,00	0,00	0,00	11,00	10,00	3,00	11,00	10,00	1,36	15,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++ALtest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/ALtest.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testALTest	41,00	56,75	0,31	2,75	0,00	0,00	0,00	41,00	33,00	9,00	41,00	33,00	1,32	54,00	0,00	0,00	0,00	0,00	0,00	0,00	16,00	0,00	0,00	0,00	16,00	
++QM1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM1.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testStartup3	29,00	43,75	0,39	2,75	0,00	1,00	0,00	28,00	23,00	7,00	29,00	23,00	1,41	41,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++QM1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM1.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testStartup4	29,00	43,75	0,39	2,75	0,00	1,00	0,00	28,00	23,00	7,00	29,00	23,00	1,41	41,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++QM1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM1.ivml	RT-VIL	1	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testStartup5	29,00	43,75	0,39	2,75	0,00	1,00	0,00	28,00	23,00	7,00	29,00	23,00	1,41	41,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
+diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt/xtend-gen/de/uni_hildesheim/sse/vil/rt/generator/.RtVilGenerator.java._trace b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt/xtend-gen/de/uni_hildesheim/sse/vil/rt/generator/.RtVilGenerator.java._trace
+index 40b0cc4..9d96755 100644
+--- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt/xtend-gen/de/uni_hildesheim/sse/vil/rt/generator/.RtVilGenerator.java._trace
++++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt/xtend-gen/de/uni_hildesheim/sse/vil/rt/generator/.RtVilGenerator.java._trace
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml.test/.gitignore b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml.test/.gitignore
+new file mode 100644
+index 0000000..92145bc
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml.test/.gitignore
+@@ -0,0 +1,2 @@
++/bin/
++/target/
+\ No newline at end of file
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/.gitignore b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/.gitignore
+deleted file mode 100644
+index d64c606..0000000
+--- a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/.gitignore
++++ /dev/null
+@@ -1 +0,0 @@
+-/net/
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Activator.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Activator.class
+new file mode 100644
+index 0000000..aa0b89c
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Activator.class
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Main.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Main.class
+new file mode 100644
+index 0000000..06c5667
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Main.class
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer$InstanceHolder.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer$InstanceHolder.class
+new file mode 100644
+index 0000000..d0d615e
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer$InstanceHolder.class
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer.class
+new file mode 100644
+index 0000000..65d2021
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer.class
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor$InstanceHolder.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor$InstanceHolder.class
+new file mode 100644
+index 0000000..f6f7624
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor$InstanceHolder.class
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor.class
+new file mode 100644
+index 0000000..502422c
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor.class
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer$InstanceHolder.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer$InstanceHolder.class
+new file mode 100644
+index 0000000..3c61583
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer$InstanceHolder.class
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer.class
+new file mode 100644
+index 0000000..f64ad94
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer.class
+Binary files differ
+diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/package-info.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/package-info.class
+new file mode 100644
+index 0000000..3764b42
+--- /dev/null
++++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/package-info.class
+Binary files differ
+diff --git a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/OperationTests.java b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/OperationTests.java
+index e8b2d1f..88c1109 100644
+--- a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/OperationTests.java
++++ b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/OperationTests.java
+@@ -1,8 +1,6 @@
+ 
+ package net.ssehub.easy.reasoning.drools;
+ 
+-import org.junit.BeforeClass;
+-
+ /**
+  * Configures the operation tests for Drools.
+  * 
+@@ -11,11 +9,10 @@
+ public class OperationTests extends net.ssehub.easy.reasoning.core.frontend.OperationTests {
+ 
+     /**
+-     * Initializes the tests (for single execution outside the suite).
++     * Creates a specific test instance.
+      */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        Utils.init();
++    public OperationTests() {
++        super(TestDescriptor.INSTANCE);
+     }
+ 
+ }
+diff --git a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/TestDescriptor.java b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/TestDescriptor.java
+new file mode 100644
+index 0000000..6980b10
+--- /dev/null
++++ b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/TestDescriptor.java
+@@ -0,0 +1,73 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.drools;
++
++import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * The test descriptor for this reasoner.
++ * 
++ * @author Holger Eichelberger
++ */
++public class TestDescriptor extends AbstractTestDescriptor {
++
++    public static final ITestDescriptor INSTANCE = new TestDescriptor();
++    private DroolsReasoner reasoner = new DroolsReasoner();
++
++    /**
++     * Creates a test descriptor.
++     */
++    private TestDescriptor() {
++        super("net.ssehub.easy.reasoning.drools.test", 
++            null, 
++            true, // CHECK
++            false);
++    }
++    
++    @Override
++    public IReasoner createReasoner() {
++        return new DroolsReasoner();
++    }
++
++    @Override
++    public void registerResoner() {
++        ReasonerFrontend.getInstance().getRegistry().register(reasoner);
++    }
++
++    @Override
++    public void unregisterReasoner() {
++        ReasonerFrontend.getInstance().getRegistry().unregister(reasoner);
++    }
++
++    @Override
++    public String getName() {
++        return DroolsReasonerDescriptor.NAME;
++    }
++
++    @Override
++    public String getVersion() {
++        return DroolsReasonerDescriptor.VERSION;
++    }
++
++    @Override
++    public String getMeasurementFileName() {
++        return "measurements-drools.tsv";
++    }
++
++}
+diff --git a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/OperationTests.java b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/OperationTests.java
+index 3234357..edfad3f 100644
+--- a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/OperationTests.java
++++ b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/OperationTests.java
+@@ -1,8 +1,6 @@
+ 
+ package net.ssehub.easy.reasoning.drools2;
+ 
+-import org.junit.BeforeClass;
+-
+ /**
+  * Configures the operation tests for Drools.
+  * 
+@@ -11,11 +9,10 @@
+ public class OperationTests extends net.ssehub.easy.reasoning.core.frontend.OperationTests {
+ 
+     /**
+-     * Initializes the tests (for single execution outside the suite).
++     * Creates a specific test instance.
+      */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        Utils.init();
++    public OperationTests() {
++        super(TestDescriptor.INSTANCE);
+     }
+ 
+ }
+diff --git a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/TestDescriptor.java b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/TestDescriptor.java
+new file mode 100644
+index 0000000..5c5fad6
+--- /dev/null
++++ b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/TestDescriptor.java
+@@ -0,0 +1,73 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.drools2;
++
++import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * The test descriptor for this reasoner.
++ * 
++ * @author Holger Eichelberger
++ */
++public class TestDescriptor extends AbstractTestDescriptor {
++
++    public static final ITestDescriptor INSTANCE = new TestDescriptor();
++    private DroolsReasoner reasoner = new DroolsReasoner();
++
++    /**
++     * Creates a test descriptor.
++     */
++    private TestDescriptor() {
++        super("net.ssehub.easy.reasoning.drools2.tests", 
++            null, 
++            true, // CHECK
++            false);
++    }
++    
++    @Override
++    public IReasoner createReasoner() {
++        return new DroolsReasoner();
++    }
++
++    @Override
++    public void registerResoner() {
++        ReasonerFrontend.getInstance().getRegistry().register(reasoner);
++    }
++
++    @Override
++    public void unregisterReasoner() {
++        ReasonerFrontend.getInstance().getRegistry().unregister(reasoner);
++    }
++
++    @Override
++    public String getName() {
++        return DroolsReasonerDescriptor.NAME;
++    }
++
++    @Override
++    public String getVersion() {
++        return DroolsReasonerDescriptor.VERSION;
++    }
++
++    @Override
++    public String getMeasurementFileName() {
++        return "measurements-drools2.tsv";
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/META-INF/MANIFEST.MF b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/META-INF/MANIFEST.MF
+index ef65a8d..b31b975 100644
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/META-INF/MANIFEST.MF
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/META-INF/MANIFEST.MF
+@@ -7,8 +7,9 @@
+ Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+ Require-Bundle: de.uni_hildesheim.sse.ivml;bundle-version="0.1.1",
+  org.junit;bundle-version="4.8.2",
+- net.ssehub.easy.reasoning.core.tests;bundle-version="0.0.1",
+  net.ssehub.easy.reasoning.core;bundle-version="0.0.8",
+  net.ssehub.easy.dslCore;bundle-version="0.0.1",
+  net.ssehub.easy.varModel.tests;bundle-version="0.0.10",
+- net.ssehub.easy.reasoning.sseReasoner;bundle-version="0.0.1"
++ net.ssehub.easy.reasoning.sseReasoner;bundle-version="0.0.1",
++ net.ssehub.easy.reasoning.core.tests;bundle-version="0.0.1"
++Export-Package: test.net.ssehub.easy.reasoning.sseReasoner
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java
+deleted file mode 100644
+index 29ba766..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java
++++ /dev/null
+@@ -1,323 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.adaptation;
+-
+-import org.junit.Assert;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.test.AbstractTest;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+-import net.ssehub.easy.reasoning.sseReasoner.Engine;
+-import net.ssehub.easy.varModel.confModel.AssignmentState;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.confModel.ConfigurationException;
+-import net.ssehub.easy.varModel.confModel.IDecisionVariable;
+-import net.ssehub.easy.varModel.cst.CSTSemanticException;
+-import net.ssehub.easy.varModel.cst.ConstantValue;
+-import net.ssehub.easy.varModel.cst.OCLFeatureCall;
+-import net.ssehub.easy.varModel.cst.Variable;
+-import net.ssehub.easy.varModel.model.Constraint;
+-import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.datatypes.Compound;
+-import net.ssehub.easy.varModel.model.datatypes.IntegerType;
+-import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
+-import net.ssehub.easy.varModel.model.values.Value;
+-import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
+-import net.ssehub.easy.varModel.model.values.ValueFactory;
+-import net.ssehub.easy.varModel.persistency.StringProvider;
+-
+-/**
+- * Configures the operation tests for Drools.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class AdaptationIntegrityTests extends AbstractTest<Project> {
+-
+-    private Configuration config;
+-    private ReasonerConfiguration rConfig;
+-    private Project project;
+-    private DecisionVariableDeclaration declA;
+-    private DecisionVariableDeclaration declB;
+-    private DecisionVariableDeclaration declC;
+-    private DecisionVariableDeclaration myParam;
+-    
+-    /**
+-     * Creates a simple test project and performs reasoning.
+-     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
+-     * {@link ValueFactory}.
+-     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
+-     */
+-    public void createSimpleProject() throws ValueDoesNotMatchTypeException, CSTSemanticException {
+-        // Create project and variables
+-        project = new Project("SimpleTestProject");
+-        declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, project);
+-        project.add(declA);
+-        declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, project);
+-        project.add(declB);
+-        declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, project);
+-        declC.setValue(33);
+-        project.add(declC);
+-        
+-        // Create assignment
+-        Value valA = ValueFactory.createValue(declA.getType(), 31);
+-        Variable varA = new Variable(declA);
+-        ConstantValue constValA = new ConstantValue(valA);
+-        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
+-        Constraint assignmentConstraint = new Constraint(project);
+-        assignmentConstraint.setConsSyntax(assignmentA);
+-        project.add(assignmentConstraint);
+-        
+-        // Create implies constraint
+-        Value valB = ValueFactory.createValue(declB.getType(), 37);
+-        ConstantValue constValB = new ConstantValue(valB);
+-        Value valC = ValueFactory.createValue(declC.getType(), 40);
+-        ConstantValue constValC = new ConstantValue(valC);
+-        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
+-        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
+-        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
+-        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
+-        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
+-        Constraint impliesConstaint = new Constraint(project);
+-        impliesConstaint.setConsSyntax(implies);
+-        project.add(impliesConstaint);
+-        Constraint impliesConstaintFail = new Constraint(project);
+-        impliesConstaintFail.setConsSyntax(impliesFail);
+-        project.add(impliesConstaintFail);
+-        
+-        // debugging
+-        System.out.println(StringProvider.toIvmlString(project));
+-        
+-        // Create Configuration (will also start AssignmentResolver)
+-        config = new Configuration(project, true);        
+-        rConfig = new ReasonerConfiguration();
+-        Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        engine.reason();       
+-
+-    } 
+-    
+-    /**
+-     * Creates a simple test project and performs reasoning.
+-     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
+-     * {@link ValueFactory}.
+-     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
+-     */
+-    public void createCompoundProject() throws ValueDoesNotMatchTypeException, CSTSemanticException {
+-        // Create project and variables
+-        project = new Project("CompoundTestProject");
+-        Compound param = new Compound("IntParameter", project);
+-        declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, param);
+-        param.add(declA);
+-        declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, param);
+-        param.add(declB);
+-        declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, param);
+-        declC.setValue(33);
+-        param.add(declC);
+-        project.add(param);
+-        
+-        myParam = new DecisionVariableDeclaration("myParam", param, project);
+-        project.add(myParam);
+-        
+-        // Create assignment
+-        Value valA = ValueFactory.createValue(declA.getType(), 31);
+-        Variable varA = new Variable(declA);
+-        ConstantValue constValA = new ConstantValue(valA);
+-        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
+-        Constraint assignmentConstraint = new Constraint(param);
+-        assignmentConstraint.setConsSyntax(assignmentA);
+-        param.addConstraint(assignmentConstraint);
+-        
+-        // Create implies constraint
+-        Value valB = ValueFactory.createValue(declB.getType(), 37);
+-        ConstantValue constValB = new ConstantValue(valB);
+-        Value valC = ValueFactory.createValue(declC.getType(), 40);
+-        ConstantValue constValC = new ConstantValue(valC);
+-        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
+-        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
+-        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
+-        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
+-        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
+-        Constraint impliesConstaint = new Constraint(param);
+-        impliesConstaint.setConsSyntax(implies);
+-        param.addConstraint(impliesConstaint);
+-        Constraint impliesConstaintFail = new Constraint(param);
+-        impliesConstaintFail.setConsSyntax(impliesFail);
+-        param.addConstraint(impliesConstaintFail);
+-        
+-        // debugging
+-        System.out.println(StringProvider.toIvmlString(project));
+-        
+-        // Create Configuration (will also start AssignmentResolver)
+-        config = new Configuration(project, true);        
+-        rConfig = new ReasonerConfiguration();
+-        Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        engine.reason();       
+-        
+-    }  
+-    
+-    /**
+-     * Tests the results of initial reasoning.
+-     */
+-    @Test
+-    public void testSimpleResultAfterReasoning() {
+-        try {
+-            createSimpleProject();
+-            IDecisionVariable iVarA = config.getDecision(declA);
+-            IDecisionVariable iVarB = config.getDecision(declB);
+-            IDecisionVariable iVarC = config.getDecision(declC);
+-            
+-            // Test correct assignments
+-            Assert.assertNotNull(iVarA);
+-            Assert.assertEquals(31, iVarA.getValue().getValue());
+-            Assert.assertSame("iVarA", AssignmentState.ASSIGNED, iVarA.getState());
+-
+-            Assert.assertNotNull(iVarB);
+-            Assert.assertEquals(37, iVarB.getValue().getValue());
+-            Assert.assertSame("iVarB", AssignmentState.ASSIGNED, iVarB.getState());
+-            
+-            Assert.assertNotNull(iVarC);
+-            Assert.assertEquals(33, iVarC.getValue().getValue());
+-            Assert.assertSame("iVarC", AssignmentState.DEFAULT, iVarC.getState());
+-
+-        } catch (ValueDoesNotMatchTypeException e) {
+-            e.printStackTrace();
+-        } catch (CSTSemanticException e) {
+-            e.printStackTrace();
+-        }
+-    }
+-    
+-    /**
+-     * Tests the results of reasoning after changing value for adaptation.
+-     */
+-//    @Ignore
+-    @Test
+-    public void testSimpleResultAfterReasoningForAdaptation() {
+-        try {
+-            createSimpleProject();
+-            
+-            Value newValA = ValueFactory.createValue(declA.getType(), 101);
+-            Value newValC = ValueFactory.createValue(declC.getType(), 33);
+-            try {
+-                config.getDecision(declA).setValue(newValA, AssignmentState.USER_ASSIGNED);
+-                config.getDecision(declC).setValue(newValC, AssignmentState.USER_ASSIGNED);
+-            } catch (ConfigurationException e) {
+-                e.printStackTrace();
+-            }
+-            Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
+-            engine.reason();
+-            
+-            IDecisionVariable iVarA = config.getDecision(declA);
+-            IDecisionVariable iVarB = config.getDecision(declB);
+-            IDecisionVariable iVarC = config.getDecision(declC);
+-            
+-            // Test correct assignments
+-            Assert.assertNotNull(iVarA);
+-            Assert.assertEquals(101, iVarA.getValue().getValue());
+-            Assert.assertSame("iVarA", AssignmentState.USER_ASSIGNED, iVarA.getState());
+-            
+-            Assert.assertNotNull(iVarB);
+-            Assert.assertEquals(37, iVarB.getValue().getValue());
+-            Assert.assertSame("iVarB", AssignmentState.ASSIGNED, iVarB.getState());
+-            
+-            Assert.assertNotNull(iVarC);
+-            Assert.assertEquals(33, iVarC.getValue().getValue());
+-            Assert.assertSame("iVarC", AssignmentState.USER_ASSIGNED, iVarC.getState());
+-            
+-        } catch (ValueDoesNotMatchTypeException e) {
+-            e.printStackTrace();
+-        } catch (CSTSemanticException e) {
+-            e.printStackTrace();
+-        }
+-    }
+-    
+-    /**
+-     * Tests the results of initial reasoning.
+-     */
+-    @Test
+-    public void testCompoundResultAfterReasoning() {
+-        try {
+-            createCompoundProject();
+-            
+-            IDecisionVariable iMyParam = config.getDecision(myParam);
+-            IDecisionVariable iVarA = iMyParam.getNestedElement(0);
+-            IDecisionVariable iVarB = iMyParam.getNestedElement(1);
+-            IDecisionVariable iVarC = iMyParam.getNestedElement(2);
+-            
+-            // Test correct assignments
+-            Assert.assertNotNull(iMyParam);
+-            Assert.assertSame("iMyParam", AssignmentState.ASSIGNED, iMyParam.getState());
+-            
+-            Assert.assertNotNull(iVarA);
+-            Assert.assertEquals(31, iVarA.getValue().getValue());
+-            Assert.assertSame("iVarA", AssignmentState.DERIVED, iVarA.getState());
+-            
+-            Assert.assertNotNull(iVarB);
+-            Assert.assertEquals(37, iVarB.getValue().getValue());
+-            Assert.assertSame("iVarB", AssignmentState.DERIVED, iVarB.getState());
+-            
+-            Assert.assertNotNull(iVarC);
+-            Assert.assertEquals(33, iVarC.getValue().getValue());
+-            Assert.assertSame("iVarC", AssignmentState.DEFAULT, iVarC.getState());
+-            
+-        } catch (ValueDoesNotMatchTypeException e) {
+-            e.printStackTrace();
+-        } catch (CSTSemanticException e) {
+-            e.printStackTrace();
+-        }
+-    }
+-    
+-    /**
+-     * Tests the results of initial reasoning.
+-     */
+-    @Test
+-    public void testCompoundResultAfterReasoningForAdaptation() {
+-        try {
+-            createCompoundProject();
+-            
+-            Value newValA = ValueFactory.createValue(declA.getType(), 101);
+-            Value newValC = ValueFactory.createValue(declC.getType(), 33);
+-            try {
+-                config.getDecision(myParam).getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
+-                config.getDecision(myParam).getNestedElement(2).setValue(newValC, AssignmentState.USER_ASSIGNED);
+-            } catch (ConfigurationException e) {
+-                e.printStackTrace();
+-            }
+-            Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
+-            engine.reason();
+-            
+-            IDecisionVariable iMyParam = config.getDecision(myParam);
+-            IDecisionVariable iVarA = iMyParam.getNestedElement(0);
+-            IDecisionVariable iVarB = iMyParam.getNestedElement(1);
+-            IDecisionVariable iVarC = iMyParam.getNestedElement(2);
+-            
+-            // Test correct assignments
+-            Assert.assertNotNull(iMyParam);
+-            Assert.assertSame("iMyParam", AssignmentState.ASSIGNED, iMyParam.getState());
+-            
+-            Assert.assertNotNull(iVarA);
+-            Assert.assertEquals(101, iVarA.getValue().getValue());
+-            Assert.assertSame("iVarA", AssignmentState.USER_ASSIGNED, iVarA.getState());
+-            
+-            Assert.assertNotNull(iVarB);
+-            Assert.assertEquals(37, iVarB.getValue().getValue());
+-            Assert.assertSame("iVarB", AssignmentState.DERIVED, iVarB.getState());
+-            
+-            Assert.assertNotNull(iVarC);
+-            Assert.assertEquals(33, iVarC.getValue().getValue());
+-            Assert.assertSame("iVarC", AssignmentState.USER_ASSIGNED, iVarC.getState());
+-            
+-        } catch (ValueDoesNotMatchTypeException e) {
+-            e.printStackTrace();
+-        } catch (CSTSemanticException e) {
+-            e.printStackTrace();
+-        }
+-    }
+-    
+-
+-    
+-    
+-    
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java
+deleted file mode 100644
+index 94f0ad2..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java
++++ /dev/null
+@@ -1,316 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.adaptation;
+-
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+-import net.ssehub.easy.reasoning.sseReasoner.Engine;
+-import net.ssehub.easy.varModel.confModel.AssignmentState;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.confModel.ConfigurationException;
+-import net.ssehub.easy.varModel.confModel.IAssignmentState;
+-import net.ssehub.easy.varModel.confModel.IDecisionVariable;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-import net.ssehub.easy.varModel.model.datatypes.IntegerType;
+-import net.ssehub.easy.varModel.model.values.Value;
+-import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
+-import net.ssehub.easy.varModel.model.values.ValueFactory;
+-
+-/**
+- * Collection constraints tests.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class AdaptationScenarioTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "adaptationScenarios");
+-    
+-    private Project project;
+-    private Configuration config;
+-    private ReasonerConfiguration rConfig;   
+-
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-
+-    
+-    /**
+-     * Helper method to prepare configuration from a project.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     */
+-    private void prepareConfiguration(String path) {
+-        project = loadProject(FOLDER, path);
+-        config = new Configuration(project, true);        
+-        rConfig = new ReasonerConfiguration();
+-    }
+-    
+-    /**
+-     * Helper method to run reasoning.
+-     */
+-    private void runReasoning() {
+-        Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        engine.reason();  
+-    }
+-
+-    /**
+-     * Asserts that a given variable has the expected value (and state).
+-     * @param variable The variable to test (maybe a nested variable, but not <tt>null</tt>).
+-     * @param expectedValue The expected value of the variable (must not be <tt>null</tt>).
+-     * @param expectedState Should be one of {@link AssignmentState#ASSIGNED} (if it was initialized by the
+-     *     configuration, {@link AssignmentState#USER_ASSIGNED} if it was manually overwritten by the user
+-     *     (inside the test case), or {@link AssignmentState#DERIVED} if the reasoner should overwrite a value during
+-     *     reasoning
+-     * @param explanation A error message if the Junit test case breaks
+-     */
+-    private void assertVariable(IDecisionVariable variable, Object expectedValue, IAssignmentState expectedState,
+-            String explanation) {
+-        
+-        Assert.assertNotNull("Tested variable was NULL, but was not expected to be.", variable);
+-        String name = variable.getDeclaration().getName();
+-        if (expectedValue != null) {
+-            Assert.assertNotNull(name + " " + explanation + " has NULL value, but was not expected.",
+-                    variable.getValue());        
+-            Assert.assertEquals(name + " " + explanation, expectedValue, variable.getValue().getValue());            
+-        } else {
+-            Assert.assertEquals(name + " " + explanation, expectedValue, variable.getValue()); 
+-        }
+-        Assert.assertSame(name + " " + explanation, expectedState, variable.getState());
+-    }
+-        
+-    /**
+-     * Initial AssignmentResolver. 1st Reasoning. Simple variable value modification by user. 2nd Reasoning.
+-     * After variable modification it should not be changed by the reasoner.
+-     * Uses VariableAccessor.
+-     */
+-    @Test
+-    public void simpleVariableTest() {        
+-        prepareConfiguration("simpleVariable.ivml");
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("a")) {
+-                assertVariable(variable, 1, AssignmentState.ASSIGNED, "a after 1 reasoning");
+-                try {
+-                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
+-                    variable.setValue(newValA, AssignmentState.USER_ASSIGNED);
+-                } catch (ValueDoesNotMatchTypeException e) {                    
+-                    e.printStackTrace();
+-                } catch (ConfigurationException e) {
+-                    e.printStackTrace();
+-                }
+-                assertVariable(variable, 10, AssignmentState.USER_ASSIGNED, "a after new value");
+-            }
+-            if (variable.getDeclaration().getName().equals("b")) {
+-                assertVariable(variable, null, AssignmentState.UNDEFINED, "b after 1 reasoning");                
+-            }
+-        }
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("a")) {
+-                assertVariable(variable, 10, AssignmentState.USER_ASSIGNED, "a after 2 reasoning");                
+-            }
+-            if (variable.getDeclaration().getName().equals("b")) {
+-                assertVariable(variable, 20, AssignmentState.DERIVED, "b after 2 reasoning");
+-            }
+-        }
+-        
+-    }
+-    
+-    /**
+-     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
+-     * After variable modification it should not be changed by the reasoner.
+-     * Uses VariableAccessor (assigns value to cmp as Variable). - FAILS!
+-     */
+-    @Test
+-    public void compoundVariableTest() {        
+-        prepareConfiguration("compoundVariable.ivml");
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("cmp")) {
+-                assertVariable(variable.getNestedElement(0), 1, AssignmentState.ASSIGNED, "cmp.a after 1 reasoning");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED, "cmp.b after 1 reasoning");
+-                try {
+-                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
+-                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
+-                } catch (ValueDoesNotMatchTypeException e) {                    
+-                    e.printStackTrace();
+-                } catch (ConfigurationException e) {
+-                    e.printStackTrace();
+-                }
+-                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
+-                        "cmp.a after new value");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED, "cmp.b after new value");
+-            }
+-
+-        }
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("cmp")) {
+-                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
+-                        "cmp.a after 2 reasoning");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.DERIVED, "cmp.b after 2 reasoning");
+-            }
+-        }
+-        
+-    }
+-    
+-    /**
+-     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
+-     * After variable modification it should not be changed by the reasoner.
+-     * Uses CompoundSlotAccessor.
+-     */
+-    @Test
+-    public void compoundConstraintsTest() {        
+-        prepareConfiguration("compoundConstraints.ivml");
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("cmp")) {
+-                assertVariable(variable.getNestedElement(0), 1, AssignmentState.DERIVED, "cmp.a after 1 reasoning");
+-                assertVariable(variable.getNestedElement(1), null, AssignmentState.UNDEFINED, 
+-                        "cmp.b after 1 reasoning");
+-                try {
+-                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
+-                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
+-                } catch (ValueDoesNotMatchTypeException e) {                    
+-                    e.printStackTrace();
+-                } catch (ConfigurationException e) {
+-                    e.printStackTrace();
+-                }
+-                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED, 
+-                        "cmp.a after new value");
+-                assertVariable(variable.getNestedElement(1), null, AssignmentState.UNDEFINED, 
+-                        "cmp.b after new value");
+-            }
+-            
+-        }
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("cmp")) {
+-                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED, 
+-                        "cmp.a after 2 reasoning");
+-                assertVariable(variable.getNestedElement(1), 20, AssignmentState.DERIVED, 
+-                        "cmp.b after 2 reasoning");
+-            }
+-        }
+-        
+-    }
+-    
+-    /**
+-     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
+-     * After variable modification it should not be changed by the reasoner.
+-     * Uses VariableAccessor.
+-     */
+-    @Test
+-    public void collectionOfSimpleVariablesTest() {        
+-        prepareConfiguration("collectionOfSimpleVariables.ivml");
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("seqA")) {
+-                assertVariable(variable.getNestedElement(0), 1, AssignmentState.ASSIGNED,
+-                    "seqA[0] after 1 reasoning");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED,
+-                     "seqA[1] after 1 reasoning");
+-                try {
+-                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
+-                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
+-                } catch (ValueDoesNotMatchTypeException e) {                    
+-                    e.printStackTrace();
+-                } catch (ConfigurationException e) {
+-                    e.printStackTrace();
+-                }
+-                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
+-                    "after user defined value for seqA[0]");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED,
+-                    "after user defined value for seqA[0]");
+-            }            
+-        }
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("seqA")) {
+-                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
+-                        "seqA[0] after 2 reasoning");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.DERIVED,
+-                         "seqA[1] after 2 reasoning");             
+-            }
+-        }        
+-    }
+-
+-    
+-    /**
+-     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
+-     * After variable modification it should not be changed by the reasoner.
+-     * Uses VariableAccessor.
+-     */
+-    @Test
+-    public void collectionOfIntegersTest() {        
+-        prepareConfiguration("collectionOfIntegers.ivml");
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("seqA")) {
+-                assertVariable(variable.getNestedElement(0), 1, AssignmentState.ASSIGNED,
+-                        "seqA[0] after 1 reasoning");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED,
+-                         "seqA[1] after 1 reasoning");   
+-                Assert.assertEquals("seqA[0] after 1 reasoning", 1, variable.getNestedElement(0).getValue().getValue());
+-                Assert.assertSame("seqA[0] after 1 reasoning", AssignmentState.ASSIGNED, variable.getState());       
+-                try {
+-                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
+-                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
+-                } catch (ValueDoesNotMatchTypeException e) {                    
+-                    e.printStackTrace();
+-                } catch (ConfigurationException e) {
+-                    e.printStackTrace();
+-                }
+-                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
+-                        "seqA[0] after new value");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED,
+-                         "seqA[1] after new value");
+-            }
+-        }
+-        runReasoning();
+-        for (IDecisionVariable variable : config) {
+-            if (variable.getDeclaration().getName().equals("seqA")) {
+-                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
+-                        "seqA[0] after 2 reasoning");
+-                assertVariable(variable.getNestedElement(1), 2, AssignmentState.DERIVED,
+-                         "seqA[1] after 2 reasoning"); 
+-            }
+-        }
+-        
+-    }
+-   
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java
+deleted file mode 100644
+index 286185b..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java
++++ /dev/null
+@@ -1,23 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.adaptation;
+-
+-import org.junit.runner.RunWith;
+-import org.junit.runners.Suite;
+-import org.junit.runners.Suite.SuiteClasses;
+-
+-/**
+- * Tests for testing the reasoning capabilities for adaptation.<br/>
+- * Usually a property is used to specify the location of test data.
+- * This is done with the property
+- * {@link net.ssehub.easy.reasoning.core.frontend.TestConfiguration#SYSTEM_PROPERTY}. For instance: <br/>
+- * <tt>-DreasonerCore.testdata.home=C:\EASyProducer-git\Plugins\Reasoner\ReasonerCore\ReasonerCore.test\testdata</tt>
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-@RunWith(Suite.class)
+-@SuiteClasses({
+-    AdaptationIntegrityTests.class,
+-    AdaptationScenarioTests.class
+-    })
+-public class AllTests {
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java
+deleted file mode 100644
+index 87efc86..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java
++++ /dev/null
+@@ -1,6 +0,0 @@
+-/**
+- * Reasoning tests for adaptation.
+- * @author sizonenko
+- *
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.adaptation;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java
+deleted file mode 100644
+index 08f7b06..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java
++++ /dev/null
+@@ -1,30 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-import org.junit.runner.RunWith;
+-import org.junit.runners.Suite;
+-import org.junit.runners.Suite.SuiteClasses;
+-
+-/**
+- * Tests for testing the reasoning capabilities.<br/>
+- * Usually a property is used to specify the location of test data.
+- * This is done with the property
+- * {@link net.ssehub.easy.reasoning.core.frontend.TestConfiguration#SYSTEM_PROPERTY}. For instance: <br/>
+- * <tt>-DreasonerCore.testdata.home=C:\EASyProducer-git\Plugins\Reasoner\ReasonerCore\ReasonerCore.test\testdata</tt>
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-@RunWith(Suite.class)
+-@SuiteClasses({    
+-    AttributeTests.class,  
+-    CollectionConstraintsTests.class,
+-    FailedDecisionsTests.class,
+-    RuntimeReasoningTests.class,
+-    OperationTests.class,
+-    CollectionOperationsTests.class,
+-    StructureTests.class,
+-    ConstraintVariableTests.class,
+-    EvalTests.class
+-    })
+-public class AllTests {
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java
+deleted file mode 100644
+index cbaba8b..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java
++++ /dev/null
+@@ -1,164 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Attribute tests.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class AttributeTests extends  net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-
+-    private static final File FOLDER = new File(TESTDATA, "attributes");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    }
+-    
+-    /**
+-     * Assign attribute with a default value to the project test.
+-     */
+-    @Test    
+-    public void defaultAssign() {
+-        reasoningTest("DefaultAssign.ivml", 0);
+-    }
+-    
+-    /**
+-     * Assign attribute with a default value to the project test.
+-     */
+-    @Test    
+-    public void blockAssign() {
+-        reasoningTest("BlockAssign.ivml", 0);
+-    }
+-    
+-    /**
+-     * Assign attribute with a default value to the project test.
+-     */
+-    @Test    
+-    public void individualAssign() {
+-        reasoningTest("IndividualAssign.ivml", 0);
+-    }
+-
+-    /**
+-     * Assign attribute with a default value to the project test.
+-     */
+-    @Test    
+-    public void blockAssignNested() {
+-        reasoningTest("BlockAssignNested.ivml", 0);
+-    }
+-    
+-    /**
+-     * Assign attribute with a default value to the project test.
+-     */
+-    @Test    
+-    public void blockAssignNestedNested() {
+-        reasoningTest("BlockAssignNestedNested.ivml", 0);
+-    }
+-    
+-    /**
+-     * Assign attribute with a default value to the project test. Test includes a 
+-     * constraint in the attribute assignment.
+-     */
+-    @Test    
+-    public void blockAssignNestedConstraint() {
+-        reasoningTest("BlockAssignNestedConstraint.ivml", 0);
+-    }
+-    
+-    /**
+-     * Assign attribute with a default value to the project test. Test includes a 
+-     * failing constraint in the attribute assignment.
+-     */
+-    @Test    
+-    public void blockAssignNestedConstraintFail() {
+-        reasoningTest("BlockAssignNestedConstraintFail.ivml", 1);
+-    }
+-    
+-    /**
+-     * Assign attribute with a default value to the project test.
+-     */
+-    @Test    
+-    public void individualAssignNested() {
+-        reasoningTest("IndividualAssignNested.ivml", 0);
+-    } 
+-    
+-    /**
+-     * Assign attribute with a default value to the project test.
+-     */
+-    @Test    
+-    public void nestedAssignBlockTree() {
+-        reasoningTest("NestedAssignBlockTree.ivml", 2);
+-    }    
+-  
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java
+deleted file mode 100644
+index e84faad..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java
++++ /dev/null
+@@ -1,145 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Collection constraints tests.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class CollectionConstraintsTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "collectionConstraints");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    } 
+-    
+-    /**
+-     * Tests constraints in set.
+-     */
+-    @Test
+-    public void constraintSetDefaultTest() {
+-        reasoningTest("constraintSetDefault.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests constraints in set.
+-     */
+-    @Test
+-    public void constraintSetAssignedTest() {
+-        reasoningTest("constraintSetAssigned.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests constraints in set.
+-     */
+-    @Test
+-    public void constraintSetDefaultInCompoundTest() {
+-        reasoningTest("constraintSetDefaultInCompound.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests constraints in set.
+-     */
+-    @Test
+-    public void constraintSetInCompoundDefaultTest() {
+-        reasoningTest("constraintSetInCompoundDefault.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests constraints in set.
+-     */
+-    @Test
+-    public void constraintSetInCompoundAssignedTest() {
+-        reasoningTest("constraintSetInCompoundAssigned.ivml", 1);
+-    }
+-  
+-    /**
+-     * Tests constraints in set.
+-     */
+-    @Test
+-    public void constraintSetInNestedCompoundDefaultTest() {
+-        reasoningTest("constraintSetInNestedCompoundDefault.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests constraints in set.
+-     */
+-    @Test
+-    public void qmTest() {
+-        reasoningTest("QM.ivml", 1);
+-    }
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java
+deleted file mode 100644
+index b7a5e1e..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java
++++ /dev/null
+@@ -1,36 +0,0 @@
+-/*
+- * Copyright 2009-2016 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-import org.junit.BeforeClass;
+-
+-import net.ssehub.easy.reasoning.sseReasoner.reasoner.Utils;
+-
+-/**
+- * Configures the {@link net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests}
+- * for the SSE-Reasoner.
+- * @author El-Sharkawy
+- */
+-public class CollectionOperationsTests extends net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests {
+-
+-    /**
+-     * Initializes the tests (for single execution outside the suite).
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        Utils.init();
+-    }
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java
+deleted file mode 100644
+index c28e53d..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java
++++ /dev/null
+@@ -1,272 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Collection constraints tests.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class ConstraintVariableTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "constraintVariables");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    } 
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void setOfConstraintsInCompoundWithDefaultValue() {
+-        reasoningTest("setOfConstraintsInCompoundWithDefaultValue.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void setOfConstraintsInCompoundWithNoDefaultValue() {
+-        reasoningTest("setOfConstraintsInCompoundWithNoDefaultValue.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void setOfConstraintsInCompoundWithEmptyDefaultValue() {
+-        reasoningTest("setOfConstraintsInCompoundWithEmptyDefaultValue.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void setOfConstraintsWithDefaultValue() {
+-        reasoningTest("setOfConstraintsWithDefaultValue.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void setOfConstraintsWithNoDefaultValue() {
+-        reasoningTest("setOfConstraintsWithNoDefaultValue.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void setOfConstraintsWithEmptyDefaultValue() {
+-        reasoningTest("setOfConstraintsWithEmptyDefaultValue.ivml", 1);
+-    }
+-    
+-    
+-    /**
+-     * Tests false constraint.
+-     */
+-//    @Ignore
+-    @Test
+-    public void constraintDefaultTest() {
+-        reasoningTest("constraintDefault.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void constraintAssignedTest() {
+-        reasoningTest("constraintAssigned.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint.
+-     */
+-    @Test
+-    public void constraintInCompoundDefaultTest() {
+-        reasoningTest("constraintInCompoundDefault.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void constraintsInCompoundWithNoDefaultValue() {
+-        reasoningTest("constraintsInCompoundWithNoDefaultValue.ivml", 1);
+-    }
+-    
+-    
+-    /**
+-     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
+-     */
+-    @Ignore
+-    @Test
+-    public void constraintInCompoundAssignedTest() {
+-        reasoningTest("constraintInCompoundAssigned.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests false constraint.
+-     */
+-//    @Ignore
+-    @Test
+-    public void falseTest() {
+-        reasoningTest("falseTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests boolean variable with value false.
+-     */
+-    @Test
+-    public void booleanAssignedFalse() {
+-        reasoningTest("booleanAssignedFalse.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests boolean variable with value false.
+-     */
+-    @Test
+-    public void booleanDefaultFalse() {
+-        reasoningTest("booleanDefaultFalse.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests boolean variable with value false.
+-     */
+-    @Test
+-    public void booleanAssignedFalseInCompound() {
+-        reasoningTest("booleanAssignedFalseInCompound.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests boolean variable with value false.
+-     */
+-    @Test
+-    public void booleanDefaultFalseInCompound() {
+-        reasoningTest("booleanDefaultFalseInCompound.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests boolean variable with value false.
+-     */
+-    @Test
+-    public void setOfBooleanInCompoundWithDefaultValue() {
+-        reasoningTest("setOfBooleanInCompoundWithDefaultValue.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests boolean variable with value false.
+-     */
+-    @Test
+-    public void setOfBooleanInCompoundWithNoDefaultValue() {
+-        reasoningTest("setOfBooleanInCompoundWithNoDefaultValue.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests boolean variable with value false.
+-     */
+-    @Test
+-    public void setOfBooleanWithDefaultValue() {
+-        reasoningTest("setOfBooleanWithDefaultValue.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests boolean variable with value false.
+-     */
+-    @Test
+-    public void setOfBooleanWithNoDefaultValue() {
+-        reasoningTest("setOfBooleanWithNoDefaultValue.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests constraint variable order influence (QM project case).
+-     */
+-    @Test
+-    public void compoundConstraintVarOrder() {
+-        reasoningTest("QM_constraintOrder.ivml", 0);
+-    }
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java
+deleted file mode 100644
+index 8e63380..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java
++++ /dev/null
+@@ -1,110 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Collection constraints tests.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class EvalTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "evals");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    } 
+-    
+-    /**
+-     * Tests simple eval.
+-     */
+-    @Test
+-    public void simpleEval() {
+-        reasoningTest("SimpleEval.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests nested eval.
+-     */
+-    @Ignore
+-    @Test
+-    public void nestedEval() {
+-        reasoningTest("NestedEval.ivml", 1);
+-    }
+-    
+-  
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java
+deleted file mode 100644
+index c11e977..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java
++++ /dev/null
+@@ -1,115 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Incremental reasoning tests.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class FailedDecisionsTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "failedDecisions");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    } 
+-
+-    
+-    /**
+-     * Tests default assignments ignore.
+-     */
+-    @Test
+-    public void basicConstraintTest() {
+-        reasoningTest("basicConstraintTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests validation constraint filter.
+-     */
+-    @Test
+-    public void basicAssignmentTest() {
+-        reasoningTest("basicAssignmentTest.ivml", 2);
+-    }
+-    
+-    /**
+-     * Tests partial freeze.
+-     */
+-    @Test
+-    public void basicCompoundConstraintTest() {
+-        reasoningTest("basicCompoundConstraintTest.ivml", 1);
+-    }
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java
+deleted file mode 100644
+index a7ffbff..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java
++++ /dev/null
+@@ -1,24 +0,0 @@
+-
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-import org.junit.BeforeClass;
+-
+-import net.ssehub.easy.reasoning.sseReasoner.reasoner.Utils;
+-
+-/**
+- * Configures the operation tests for the SSE-Reasoner.
+- * 
+- * @author Holger Eichelberger
+- * @author El-Sharkawy
+- */
+-public class OperationTests extends net.ssehub.easy.reasoning.core.frontend.OperationTests {
+-
+-    /**
+-     * Initializes the tests (for single execution outside the suite).
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        Utils.init();
+-    }
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java
+deleted file mode 100644
+index 1c527de..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java
++++ /dev/null
+@@ -1,203 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-
+-import java.io.File;
+-import java.io.IOException;
+-
+-import org.eclipse.emf.common.util.URI;
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.messages.Status;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.dslCore.TranslationResult;
+-import net.ssehub.easy.dslCore.test.AbstractTest;
+-import net.ssehub.easy.dslCore.translation.Message;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
+-import net.ssehub.easy.reasoning.sseReasoner.Engine;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Incremental reasoning tests.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class RuntimeReasoningTests extends AbstractTest<Project> {
+-   
+-    private static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
+-    private static final File FOLDER = new File(TESTDATA, "incrementalReasoningConstraints");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Method for determining folder with IVML files.
+-     * @param property property
+-     * @return folder location
+-     */
+-    private static File determineTestDataFolder(String property) {
+-        File testdataFolder = determineTestDataDir(property);
+-        String externalLocation = System.getProperty(property);
+-        
+-        // If no property was defined, use ReasonerCore.test/testdata directory
+-        if (null == externalLocation) {
+-            // Work around over the path avoids a NullPointer exception
+-            String path = testdataFolder.getAbsolutePath();
+-            testdataFolder = new File(path);
+-            testdataFolder = testdataFolder.getParentFile().getParentFile();
+-            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
+-            testdataFolder = new File(testdataFolder, "testdata");
+-        }
+-        if (!testdataFolder.exists()) {
+-            String path = testdataFolder.getAbsolutePath();
+-            testdataFolder = new File(path);
+-            testdataFolder = testdataFolder.getParentFile().getParentFile().getParentFile();
+-            testdataFolder = new File(testdataFolder, "ReasonerCore");
+-            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
+-            testdataFolder = new File(testdataFolder, "testdata");
+-        }
+-        return testdataFolder;    
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    protected Project loadProject(String path) {
+-        Project project = null;
+-        try {
+-            File projectFile = new File(FOLDER, path);
+-            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
+-            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
+-            StringBuffer errorMsg = new StringBuffer();
+-            for (int i = 0; i < result.getMessageCount(); i++) {
+-                Message msg = result.getMessage(i);
+-                if (!msg.ignore()) {
+-                    errorMsg.append(msg.getDescription());
+-                    errorMsg.append("\n");
+-                }
+-            }
+-            if (errorMsg.length() == 0) {
+-                project = result.getResult(0);
+-            } else {
+-                Assert.fail(errorMsg.toString());
+-            }
+-            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
+-            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
+-        } catch (IOException exc) {
+-            Assert.fail(exc.getLocalizedMessage());
+-        }
+-        
+-        return project;
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    } 
+-
+-    /**
+-     * Method for handling reasoning result.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fa
+-     * @param projectP1 Project to reason on.
+-     */
+-    private void resultHandler(int expectedFailedConstraints, Project projectP1) {
+-        Configuration config = new Configuration(projectP1, false);        
+-        ReasonerConfiguration rConfig = new ReasonerConfiguration();
+-        rConfig.setRuntimeMode(true);
+-        // Perform reasoning
+-        Engine engine = new Engine(projectP1, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        ReasoningResult result = engine.reason();
+-        
+-        // Test whether reasoning detected correct result  
+-        int failedConstraints = 0;
+-
+-        for (int i = 0; i < result.getMessageCount(); i++) {
+-            if (result.getMessage(i).getStatus() == Status.ERROR) {
+-                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
+-            }
+-        }
+-        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
+-
+-    }   
+-    
+-    /**
+-     * Tests default assignments ignore.
+-     */
+-    @Test
+-    public void ignoreDefaultAssignmentsTest() {
+-        reasoningTest("IgnoreDefaultAssignments.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests validation constraint filter.
+-     */
+-    @Test
+-    public void validationConstraintFilterTest() {
+-        reasoningTest("ValidationConstraintFilter.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests partial freeze.
+-     */
+-    @Test
+-    public void partialFreezeTest() {
+-        reasoningTest("PartialFreeze.ivml", 0);
+-    }
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java
+deleted file mode 100644
+index 392a0f5..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java
++++ /dev/null
+@@ -1,38 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+-
+-import org.junit.BeforeClass;
+-
+-import net.ssehub.easy.reasoning.sseReasoner.reasoner.Utils;
+-
+-/**
+- * Test of reasoner capabilities related to the structure of variability models.
+- * @author El-Sharkawy
+- *
+- */
+-public class StructureTests extends net.ssehub.easy.reasoning.core.frontend.StructureTests {
+-
+-    /**
+-     * Initializes the tests (for single execution outside the suite).
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        Utils.init();
+-    }
+-
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt
+deleted file mode 100644
+index e87e44e..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt
++++ /dev/null
+@@ -1,14 +0,0 @@
+-1) DefaultAssign
+-Assign attribute with a default value to the project.
+-
+-2) BlockAssign
+-Assign attribute to the project, use assign block for assigning attribute value.
+-
+-3) IndividualAssign
+-Assign attribute to the project, use individual attribute assignments. 
+-
+-4) BlockAssignNested
+-Assign attribute to the project, use assign block for assigning attribute value to a compound nested element.
+-
+-5) IndividualAssignNested
+-Assign attribute to the project, use individual attribute assignments to a compound nested element.
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java
+deleted file mode 100644
+index 5f4573d..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java
++++ /dev/null
+@@ -1,6 +0,0 @@
+-/**
+- * Tests attributes.
+- * @author Sizonenko
+- *
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.capabilities;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java
+deleted file mode 100644
+index c4e010c..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java
++++ /dev/null
+@@ -1,18 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.performance;
+-
+-import org.junit.runner.RunWith;
+-import org.junit.runners.Suite;
+-import org.junit.runners.Suite.SuiteClasses;
+-
+-/**
+- * Bundling all performance tests.
+- * @author Sizonenko
+- */
+-@RunWith(Suite.class)
+-@SuiteClasses({    
+-    GeneratedStats.class,
+-    HistoryStats.class
+-    })
+-public class AllTests {
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java
+deleted file mode 100644
+index 0a3cc70..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java
++++ /dev/null
+@@ -1,190 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.performance;
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.messages.Status;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
+-import net.ssehub.easy.reasoning.sseReasoner.Engine;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Configures the operation tests for Drools.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class CaseStudyStats extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "performanceModels");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method for comparing reasoning result.
+-     * @param expectedFailedConstraints Number of expected failed constraints.
+-     * @param expectedReevaluationCount Number of expected reevaluations.
+-     * @param projectP1 Project to reason on.
+-     */
+-    public static void resultComparer(int expectedFailedConstraints, int expectedReevaluationCount, Project projectP1) {
+-        Configuration config = new Configuration(projectP1, false);        
+-        ReasonerConfiguration rConfig = new ReasonerConfiguration();
+-
+-        // Perform reasoning
+-        Engine engine = new Engine(projectP1, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        ReasoningResult result = engine.reason();
+-        
+-        // Test whether reasoning detected correct result  
+-        int failedConstraints = 0;
+-        for (int i = 0; i < result.getMessageCount(); i++) {
+-            if (result.getMessage(i).getStatus() == Status.ERROR) {
+-                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
+-            }
+-        }
+-        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
+-        
+-        // Test whether reasoning is done in correct reevalustion steps  
+-        Assert.assertTrue("Reevaluation count mismatch. Result: " + engine.getReevaluationCount()
+-            + " Expected: " + expectedReevaluationCount, engine.getReevaluationCount() == expectedReevaluationCount);
+-    }  
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     * @param expectedReevaluationCount Number of expected reevaluations.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints, int expectedReevaluationCount) {
+-        Project project = loadProject(ivmlFile);
+-        resultComparer(expectedFailedConstraints, expectedReevaluationCount, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     * @param expectedReevaluationCount Number of expected reevaluations.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints, int expectedReevaluationCount) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultComparer(expectedFailedConstraints, expectedReevaluationCount, projectP1);
+-    } 
+-    
+-    /**
+-     * Simple Assignments.
+-     */
+-    @Test    
+-    public void simpleAssignments() {
+-        reasoningTest("SimpleAssignments.ivml", 1, 6);       
+-    } 
+-    
+-    /**
+-     * Simple Assignments with Constraint Variables.
+-     */
+-    @Test    
+-    public void simpleAssignmentsWithConstraintVar() {
+-        reasoningTest("SimpleAssignmentsWithConstraintVars.ivml", 1, 6);       
+-    }     
+-    
+-    /**
+-     * Simple Assignments in Compound.
+-     */
+-    @Test    
+-    public void compoundSimpleAssignments() {
+-        reasoningTest("CompoundSimpleAssignments.ivml", 1, 6);       
+-    } 
+-    
+-    /**
+-     * Simple Assignments with Constraint Variables in Compound.
+-     */
+-    @Test    
+-    public void compoundSimpleAssignmentsWithConstraintVar() {
+-        reasoningTest("CompoundSimpleAssignmentsWithConstraintVars.ivml", 1, 6);       
+-    }  
+-    
+-    /**
+-     * Compound constraints in collection.
+-     */
+-    @Test    
+-    public void compoundConstraintsInCollection() {
+-        reasoningTest("CompoundConstraintsInCollection.ivml", 1, 3);       
+-    } 
+-    
+-    /**
+-     * Compound constraints with constraint variables in collection.
+-     */
+-    @Test    
+-    public void compoundConstraintsInCollectionWithConstraintVars() {
+-        reasoningTest("CompoundConstraintsInCollectionWithConstraintVars.ivml", 1, 3);       
+-    }  
+-    
+-    /**
+-     * Collection of typedef.
+-     */
+-    @Test    
+-    public void typedefCollections() {
+-        reasoningTest("TypedefCollections.ivml", 1, 5);       
+-    } 
+-    
+-    /**
+-     * Collection of typedef in compound.
+-     */
+-    @Test    
+-    public void typedefCollectionsInCompound() {
+-        reasoningTest("TypedefCollectionsInCompound.ivml", 1, 5);       
+-    }     
+-   
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java
+deleted file mode 100644
+index ae9237f..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java
++++ /dev/null
+@@ -1,118 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.performance;
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Configures the operation tests for Drools.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class GeneratedStats extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "ssePerformance");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    } 
+-    
+-    /**
+-     * Tests Boolean 1 to 3 ration.
+-     */
+-    @Ignore
+-    @Test    
+-    public void gr11() {
+-        reasoningTest("gr1_1_v100_c300_b_l2_0.ivml", 150);
+-//        reasoningTest("gr1_1_v100_c300_b_l2_0.ivml", 150);
+-//        reasoningTest("gr1_1_v300_c900_b_l2_0.ivml", 438);
+-//        reasoningTest("gr1_1_v500_c1500_b_l2_0.ivml", 726);
+-//        reasoningTest("gr1_1_v1000_c3000_b_l2_0.ivml", 1518);
+-//        reasoningTest("gr1_1_v1500_c4500_b_l2_0.ivml", 2236);
+-    } 
+-    
+-    /**
+-     * Tests Boolean 1 to 1 ration.
+-     */
+-    @Ignore
+-    @Test    
+-    public void gr12() {
+-        reasoningTest("gr1_2_v100_c100_b_l2_0.ivml", 46);
+-//        reasoningTest("gr1_2_v100_c100_b_l2_0.ivml", 46);
+-//        reasoningTest("gr1_2_v300_c300_b_l2_0.ivml", 124);
+-//        reasoningTest("gr1_2_v500_c500_b_l2_0.ivml", 266);
+-//        reasoningTest("gr1_2_v1000_c1000_b_l2_0.ivml", 504);
+-        reasoningTest("gr1_2_v1500_c1500_b_l2_0.ivml", 739);
+-    }   
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java
+deleted file mode 100644
+index 65d6be5..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java
++++ /dev/null
+@@ -1,105 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.performance;
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Configures the operation tests for Drools.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class HistoryStats extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "historyPerformance");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    }
+-    
+-    /**
+-     * Tests history models.
+-     */
+-    @Ignore
+-    @Test    
+-    public void historyStatsTest() {
+-        reasoningTest("d2d_v10_c1_bir_l1_0.ivml", 0);    
+-//        reasoningTest("d2d_v10_c1_bir_l1_0.ivml", 0);    
+-//        reasoningTest("d2d_v100_c10_bir_l1_0.ivml", 6);    
+-//        reasoningTest("d2d_v1000_c100_bir_l1_0.ivml", 42);
+-//        reasoningTest("d2d_v10_c1_bir_l3_0.ivml", 0);    
+-//        reasoningTest("d2d_v100_c10_bir_l3_0.ivml", 6);    
+-//        reasoningTest("d2d_v1000_c100_bir_l3_0.ivml", 42);
+-    } 
+-   
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java
+deleted file mode 100644
+index 9f5a187..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java
++++ /dev/null
+@@ -1,5 +0,0 @@
+-/**
+- * Performance tests.
+- * @author Sizonenko
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.performance;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AbstractQualiMasterTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AbstractQualiMasterTest.java
+deleted file mode 100644
+index 056ebf4..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AbstractQualiMasterTest.java
++++ /dev/null
+@@ -1,270 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-import java.io.File;
+-import java.io.IOException;
+-
+-import org.eclipse.emf.common.util.URI;
+-import org.junit.After;
+-import org.junit.Assert;
+-import org.junit.Before;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.dslCore.TranslationResult;
+-import net.ssehub.easy.dslCore.translation.Message;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Parent class for tests based on the QualiMaster use cases.
+- * @author Sizonenko
+- * @author El-Sharkawy
+- *
+- */
+-public abstract class AbstractQualiMasterTest extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-      
+-    protected static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
+-
+-    private Project basic;
+-    private Project observables;
+-    private Project hardware;
+-    private Project hardwareCfg;
+-    private Project adaptivity;
+-    private Project adaptivityCfg;
+-    private Project observablesCfg;
+-    private Project dataManagement;
+-    private Project dataManagementCfg;
+-    private Project reconfigurableHardware;
+-    private Project reconfigurableHardwareCfg;
+-    private Project algorithms;
+-    private Project algorithmsCfg;
+-    private Project families;
+-    private Project familiesCfg;
+-    private Project pipelines;
+-    private Project priorityPipCfg;
+-    private Project pipelinesCfg;
+-    private Project infrastructure;
+-    private Project infrastructureCfg;
+-    private Project qm;
+-    
+-    private ProjectImport importBasic;
+-    private ProjectImport importObservables;
+-    private ProjectImport importHardware;
+-    private ProjectImport importHardwareCfg;
+-    private ProjectImport importAdaptivity;
+-    private ProjectImport importAdaptivityCfg;
+-    private ProjectImport importObservablesCfg;
+-    private ProjectImport importDataManagement;
+-    private ProjectImport importDataManagementCfg;
+-    private ProjectImport importReconfigurableHardware;
+-    private ProjectImport importReconfigurableHardwareCfg;
+-    private ProjectImport importAlgorithms;
+-    private ProjectImport importAlgorithmsCfg;
+-    private ProjectImport importFamilies;
+-    private ProjectImport importFamiliesCfg;
+-    private ProjectImport importPipelines;
+-    private ProjectImport importPriorityPipCfg;
+-    private ProjectImport importPipelinesCfg;
+-    private ProjectImport importInfrastructure;
+-    private ProjectImport importInfrastructureCfg;
+-    
+-    /**
+-     * (Static) specifcation of sub folder which shall be used for the tests.
+-     * @return The test folder of test data which shall be used inside the inherited test class.
+-     */
+-    protected abstract File getTestFolder();
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @Before
+-    public void setup() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(getTestFolder(), ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @After
+-    public void tearDown() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(getTestFolder(), ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    protected final Project loadProject(String path) {
+-        Project project = null;
+-        try {
+-            File projectFile = new File(getTestFolder(), path);
+-            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
+-            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
+-            StringBuffer errorMsg = new StringBuffer();
+-            for (int i = 0; i < result.getMessageCount(); i++) {
+-                Message msg = result.getMessage(i);
+-                if (!msg.ignore()) {
+-                    errorMsg.append(msg.getDescription());
+-                    errorMsg.append("\n");
+-                }
+-            }
+-            if (errorMsg.length() == 0) {
+-                project = result.getResult(0);
+-            } else {
+-                Assert.fail(errorMsg.toString());
+-            }
+-            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
+-            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
+-        } catch (IOException exc) {
+-            Assert.fail(exc.getLocalizedMessage());
+-        }
+-        
+-        return project;
+-    }
+-    
+-    /**
+-     * Method for loading all projects.
+-     */
+-    private void loadAllProjects() {
+-        basic = loadProject("Basics.ivml");
+-        observables = loadProject("Observables.ivml");
+-        hardware = loadProject("Hardware.ivml");
+-        hardwareCfg = loadProject("HardwareCfg.ivml");
+-        adaptivity = loadProject("Adaptivity.ivml");
+-        adaptivityCfg = loadProject("AdaptivityCfg.ivml");
+-        observablesCfg = loadProject("ObservablesCfg.ivml");
+-        dataManagement = loadProject("DataManagement.ivml");
+-        dataManagementCfg = loadProject("DataManagementCfg.ivml");
+-        reconfigurableHardware = loadProject("ReconfigurableHardware.ivml");
+-        reconfigurableHardwareCfg = loadProject("ReconfigurableHardwareCfg.ivml");
+-        algorithms = loadProject("Algorithms.ivml");
+-        algorithmsCfg = loadProject("AlgorithmsCfg.ivml");
+-        families = loadProject("Families.ivml");
+-        familiesCfg = loadProject("FamiliesCfg.ivml");
+-        pipelines = loadProject("Pipelines.ivml");
+-        priorityPipCfg = loadProject("PriorityPipCfg.ivml");
+-        pipelinesCfg = loadProject("PipelinesCfg.ivml");
+-        infrastructure = loadProject("Infrastructure.ivml");
+-        infrastructureCfg = loadProject("InfrastructureCfg.ivml");
+-        qm = loadProject("QM_0.ivml");
+-    }
+-    
+-    /**
+-     * Method for creating project imports.
+-     */
+-    private void createProjectImports() {
+-        importBasic = new ProjectImport(basic.getName(), null);
+-        importObservables = new ProjectImport(basic.getName(), null);
+-        importHardware = new ProjectImport(basic.getName(), null);
+-        importHardwareCfg = new ProjectImport(basic.getName(), null);
+-        importAdaptivity = new ProjectImport(basic.getName(), null);
+-        importAdaptivityCfg = new ProjectImport(basic.getName(), null);
+-        importObservablesCfg = new ProjectImport(basic.getName(), null);
+-        importDataManagement = new ProjectImport(basic.getName(), null);
+-        importDataManagementCfg = new ProjectImport(basic.getName(), null);
+-        importReconfigurableHardware = new ProjectImport(basic.getName(), null);
+-        importReconfigurableHardwareCfg = new ProjectImport(basic.getName(), null);
+-        importAlgorithms = new ProjectImport(basic.getName(), null);
+-        importAlgorithmsCfg = new ProjectImport(basic.getName(), null);
+-        importFamilies = new ProjectImport(basic.getName(), null);
+-        importFamiliesCfg = new ProjectImport(basic.getName(), null);
+-        importPipelines = new ProjectImport(basic.getName(), null);
+-        importPriorityPipCfg = new ProjectImport(basic.getName(), null);
+-        importPipelinesCfg = new ProjectImport(basic.getName(), null);
+-        importInfrastructure = new ProjectImport(basic.getName(), null);
+-        importInfrastructureCfg = new ProjectImport(basic.getName(), null);
+-    }
+-    
+-    /**
+-     * Method to create QM model(import projects) and validate it. 
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public final void reasoningTest(int expectedFailedConstraints) {
+-        loadAllProjects();
+-        createProjectImports();
+-        observables.addImport(importBasic);
+-        hardware.addImport(importBasic);
+-        hardware.addImport(importObservables);
+-        hardwareCfg.addImport(importHardware);
+-        adaptivity.addImport(importBasic);
+-        adaptivity.addImport(importObservables);
+-        adaptivityCfg.addImport(importAdaptivity);
+-        observablesCfg.addImport(importObservables);
+-        dataManagement.addImport(importBasic);
+-        dataManagement.addImport(importObservables);
+-        dataManagementCfg.addImport(importDataManagement);
+-        reconfigurableHardware.addImport(importBasic);
+-        reconfigurableHardware.addImport(importObservables);
+-        reconfigurableHardwareCfg.addImport(importReconfigurableHardware);
+-        algorithms.addImport(importBasic);
+-        algorithms.addImport(importObservables);
+-        algorithms.addImport(importReconfigurableHardware);
+-        algorithmsCfg.addImport(importReconfigurableHardware);
+-        algorithmsCfg.addImport(importReconfigurableHardwareCfg);
+-        algorithmsCfg.addImport(importAlgorithms);
+-        families.addImport(importBasic);
+-        families.addImport(importAlgorithms);
+-        familiesCfg.addImport(importReconfigurableHardware);
+-        familiesCfg.addImport(importFamilies);
+-        familiesCfg.addImport(importAlgorithmsCfg);
+-        pipelines.addImport(importBasic);
+-        pipelines.addImport(importFamilies);
+-        pipelines.addImport(importDataManagement);
+-        pipelines.addImport(importHardware);
+-        priorityPipCfg.addImport(importPipelines);
+-        priorityPipCfg.addImport(importFamiliesCfg);
+-        priorityPipCfg.addImport(importDataManagementCfg);
+-        pipelinesCfg.addImport(importPriorityPipCfg);
+-        infrastructure.addImport(importBasic);
+-        infrastructure.addImport(importHardware);
+-        infrastructure.addImport(importReconfigurableHardware);
+-        infrastructure.addImport(importFamilies);
+-        infrastructure.addImport(importObservables);
+-        infrastructure.addImport(importAdaptivity);
+-        infrastructure.addImport(importPipelines);
+-        infrastructureCfg.addImport(importInfrastructure);
+-        infrastructureCfg.addImport(importPipelinesCfg);
+-        qm.addImport(importHardwareCfg);
+-        qm.addImport(importReconfigurableHardwareCfg);
+-        qm.addImport(importDataManagementCfg);
+-        qm.addImport(importObservablesCfg);
+-        qm.addImport(importAdaptivityCfg);
+-        qm.addImport(importAlgorithmsCfg);
+-        qm.addImport(importFamiliesCfg);
+-        qm.addImport(importPipelinesCfg);
+-        qm.addImport(importInfrastructureCfg);
+-        
+-        net.ssehub.easy.reasoning.sseReasoner.AllTests.resultHandler(expectedFailedConstraints, qm);
+-    }    
+-    
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java
+deleted file mode 100644
+index 97af68f..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java
++++ /dev/null
+@@ -1,26 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-import org.junit.runner.RunWith;
+-import org.junit.runners.Suite;
+-import org.junit.runners.Suite.SuiteClasses;
+-
+-/**
+- * Bundling all tests.
+- * @author Sizonenko
+- */
+-@RunWith(Suite.class)
+-@SuiteClasses({    
+-    QMValidTest.class,  
+-    QMHardwareTest1.class,
+-    QMHardwareTest2.class,
+-    QMHardwareTest3.class,
+-    QMAlgorithmsTest1.class,
+-    QMFamiliesTest1.class,
+-    QMFamiliesTest2.class,
+-    QMPipelinesTest1.class,
+-    QMScenarioTests.class,
+-    QMMismatchedTest.class
+-    })
+-public class AllTests {
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java
+deleted file mode 100644
+index 2d806d1..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java
++++ /dev/null
+@@ -1,46 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.Test;
+-
+-/**
+- * Hardware constraint: algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size() test.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMAlgorithmsTest1 extends AbstractQualiMasterTest {
+- 
+-    @Override
+-    protected File getTestFolder() {
+-        return new File(TESTDATA, "qmAlgorithmsTest1");
+-    } 
+-
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void coreTest() {
+-        reasoningTest(1);
+-    }
+-
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java
+deleted file mode 100644
+index 4bc1d4d..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java
++++ /dev/null
+@@ -1,45 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.Test;
+-
+-/**
+- * Hardware constraint: inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input) test.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMFamiliesTest1 extends AbstractQualiMasterTest {
+-
+-    @Override
+-    protected File getTestFolder() {
+-        return new File(TESTDATA, "qmFamiliesTest1");
+-    } 
+-    
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void coreTest() {
+-        reasoningTest(1);
+-    } 
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java
+deleted file mode 100644
+index 62f9508..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java
++++ /dev/null
+@@ -1,45 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.Test;
+-
+-/**
+- * Hardware constraint: memberCount = members.size() > 0 test.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMFamiliesTest2 extends AbstractQualiMasterTest {
+-    
+-    @Override
+-    protected File getTestFolder() {
+-        return new File(TESTDATA, "qmFamiliesTest2");
+-    } 
+-    
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void coreTest() {
+-        reasoningTest(1);
+-    } 
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java
+deleted file mode 100644
+index 7beb038..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java
++++ /dev/null
+@@ -1,45 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.Test;
+-
+-/**
+- * Hardware constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty() test.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMHardwareTest1 extends AbstractQualiMasterTest {
+-    
+-    @Override
+-    protected File getTestFolder() {
+-        return new File(TESTDATA, "qmHardwareTest1");
+-    } 
+-    
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void coreTest() {
+-        reasoningTest(1);
+-    } 
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java
+deleted file mode 100644
+index 576a984..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java
++++ /dev/null
+@@ -1,46 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.Test;
+-
+-/**
+- * Hardware constraint: managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) test.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMHardwareTest2 extends AbstractQualiMasterTest {
+-    
+-    
+-    @Override
+-    protected File getTestFolder() {
+-        return new File(TESTDATA, "qmHardwareTest2");
+-    } 
+-    
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void coreTest() {
+-        reasoningTest(1);
+-    } 
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java
+deleted file mode 100644
+index a90b725..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java
++++ /dev/null
+@@ -1,45 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.Test;
+-
+-/**
+- * Hardware constraint: machineName = machines->collect(m|m.name).size() == machines.size() test.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMHardwareTest3 extends AbstractQualiMasterTest {
+-
+-    @Override
+-    protected File getTestFolder() {
+-        return new File(TESTDATA, "qmHardwareTest3");
+-    } 
+-    
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void coreTest() {
+-        reasoningTest(1);
+-    } 
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java
+deleted file mode 100644
+index c129d39..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java
++++ /dev/null
+@@ -1,44 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.BeforeClass;
+-import org.junit.Test;
+-
+-import net.ssehub.easy.reasoning.core.frontend.MismatchedTest;
+-import net.ssehub.easy.reasoning.sseReasoner.reasoner.Utils;
+-
+-/**
+- * Qualimaster model test.
+- * Model is valid.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMMismatchedTest extends MismatchedTest {
+-    
+-    /**
+-     * Initializes the tests (for single execution outside the suite).
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        Utils.init();
+-    }
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java
+deleted file mode 100644
+index ae54dca..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java
++++ /dev/null
+@@ -1,46 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.Test;
+-
+-/**
+- * Hardware constraint: flow error from the presentation test.
+- * typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMPipelinesTest1 extends AbstractQualiMasterTest {
+-    
+-    @Override
+-    protected File getTestFolder() {
+-        return new File(TESTDATA, "qmPipelinesTest1");
+-    } 
+-    
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void coreTest() {
+-        reasoningTest(1);
+-    } 
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java
+deleted file mode 100644
+index 0ad7ed8..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java
++++ /dev/null
+@@ -1,216 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-import java.io.IOException;
+-
+-import org.eclipse.emf.common.util.URI;
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.dslCore.TranslationResult;
+-import net.ssehub.easy.dslCore.test.AbstractTest;
+-import net.ssehub.easy.dslCore.translation.Message;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Configures the operation tests for SSE reasoner.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMScenarioTests extends AbstractTest<Project> {
+-
+-    
+-    private static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
+-    private static final File FOLDER = new File(TESTDATA, "qmTemplates");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Method for determining folder with IVML files.
+-     * @param property property
+-     * @return folder location
+-     */
+-    private static File determineTestDataFolder(String property) {
+-        File testdataFolder = determineTestDataDir(property);
+-        String externalLocation = System.getProperty(property);
+-        
+-        // If no property was defined, use ReasonerCore.test/testdata directory
+-        if (null == externalLocation) {
+-            // Work around over the path avoids a NullPointer exception
+-            String path = testdataFolder.getAbsolutePath();
+-            testdataFolder = new File(path);
+-            testdataFolder = testdataFolder.getParentFile().getParentFile();
+-            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
+-            testdataFolder = new File(testdataFolder, "testdata");
+-        }
+-        if (!testdataFolder.exists()) {
+-            String path = testdataFolder.getAbsolutePath();
+-            testdataFolder = new File(path);
+-            testdataFolder = testdataFolder.getParentFile().getParentFile().getParentFile();
+-            testdataFolder = new File(testdataFolder, "ReasonerCore");
+-            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
+-            testdataFolder = new File(testdataFolder, "testdata");
+-            System.out.println(testdataFolder);
+-        }
+-        return testdataFolder;    
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    protected Project loadProject(String path) {
+-        Project project = null;
+-        try {
+-            File projectFile = new File(FOLDER, path);
+-            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
+-            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
+-            StringBuffer errorMsg = new StringBuffer();
+-            for (int i = 0; i < result.getMessageCount(); i++) {
+-                Message msg = result.getMessage(i);
+-                if (!msg.ignore()) {
+-                    errorMsg.append(msg.getDescription());
+-                    errorMsg.append("\n");
+-                }
+-            }
+-            if (errorMsg.length() == 0) {
+-                project = result.getResult(0);
+-            } else {
+-                Assert.fail(errorMsg.toString());
+-            }
+-            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
+-            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
+-        } catch (IOException exc) {
+-            Assert.fail(exc.getLocalizedMessage());
+-        }
+-        
+-        return project;
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        net.ssehub.easy.reasoning.sseReasoner.AllTests.resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        net.ssehub.easy.reasoning.sseReasoner.AllTests.resultHandler(expectedFailedConstraints, projectP1);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param p2 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, String p2, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        Project projectP2 = loadProject(p2);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
+-        projectP2.addImport(importP1);
+-        net.ssehub.easy.reasoning.sseReasoner.AllTests.resultHandler(expectedFailedConstraints, projectP2);
+-    }
+-
+-    
+-    
+-    /**
+-     * Tests QM Hardware collections.
+-     */
+-    @Test    
+-    public void qmHardwareTest() {
+-        reasoningTest("QMHardwareTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests collections.
+-     */
+-    @Test    
+-    public void nestedHardwareTest() {
+-        reasoningTest("nestedHardwareTest.ivml", 1);
+-    } 
+-    
+-    /**
+-     * Tests QM Family Algorithms fields test.
+-     */
+-    @Ignore
+-    @Test    
+-    public void qmFamilyAlgorithmsFieldsTest() {
+-        reasoningTest("QMFamilyAlgorithmsFieldsTest.ivml", 0);
+-    } 
+-    
+-   
+-    
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java
+deleted file mode 100644
+index 0378005..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java
++++ /dev/null
+@@ -1,47 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+-
+-
+-import java.io.File;
+-
+-import org.junit.Test;
+-
+-/**
+- * Qualimaster model test.
+- * Model is valid.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class QMValidTest extends AbstractQualiMasterTest {
+-    
+-    @Override
+-    protected File getTestFolder() {
+-        return new File(TESTDATA, "qmModelTest");
+-    } 
+-        
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void coreTest() {
+-        reasoningTest(0);
+-        reasoningTest(0);
+-    } 
+-    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt
+deleted file mode 100644
+index 14ab256..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt
++++ /dev/null
+@@ -1,28 +0,0 @@
+-QMValidTest
+-Model does not fail
+-
+-Hardware
+-QMHardwareTest1
+-constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty()
+-QMHardwareTest2
+-managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) (same test for Workers)
+-QMHardwareTest3
+-machineName = machines->collect(m|m.name).size() == machines.size()
+-QMHardwareTest4
+-
+-Infrastructure
+-workerportCheck = activePipelinesNumWorkers() <= workerMachinesPortsCount() - needs change
+-
+-Algorithms
+-QMAlgorithmsTest1
+-algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size()
+-
+-Families
+-QMFamiliesTest1
+-inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input)
+-QMFamiliesTest2
+-memberCount = members.size() > 0
+-
+-Pipelines
+-QMPipelinesTest1
+-typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java
+deleted file mode 100644
+index 1c7e361..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java
++++ /dev/null
+@@ -1,6 +0,0 @@
+-/**
+- * Test the Qualimaster model.
+- * @author Sizonenko
+- *
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.qm;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java
+deleted file mode 100644
+index 34f8be6..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java
++++ /dev/null
+@@ -1,23 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+-
+-import org.junit.runner.RunWith;
+-import org.junit.runners.Suite;
+-import org.junit.runners.Suite.SuiteClasses;
+-
+-/**
+- * Bundling all tests.
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-@RunWith(Suite.class)
+-@SuiteClasses({
+-    EvaluationIntegrityTest.class,
+-    IntegrityTests.class,  
+-    ReasoningScenarioTests.class,
+-    StressTest.class,
+-    CodedTests.class,
+-    BooleanProblemTests.class
+-    })
+-public class AllTests {
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanProblemTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanProblemTests.java
+deleted file mode 100644
+index 24aed76..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanProblemTests.java
++++ /dev/null
+@@ -1,165 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+-
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Configures the operation tests for SSE reasoner.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class BooleanProblemTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File FOLDER = new File(TESTDATA, "booleanProblem");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    private Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param p2 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, String p2, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        Project projectP2 = loadProject(p2);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
+-        projectP2.addImport(importP1);
+-        resultHandler(expectedFailedConstraints, projectP2);
+-    }
+-
+-    /**
+-     * Car example.
+-     */
+-    @Test
+-    public void carExampleTest() {
+-        reasoningTest("CarExample.ivml", 1);
+-    }
+-    
+-    /**
+-     * Boolean defaults test.
+-     */
+-    @Test
+-    public void booleanDefaultsTest() {
+-        reasoningTest("BooleanDefaultsTest.ivml", 2);
+-    } 
+-    
+-    /**
+-     * Boolean assign test.
+-     */
+-    @Test
+-    public void booleanAssignTest() {
+-        reasoningTest("BooleanAssignTest.ivml", 2);
+-    } 
+-    
+-    /**
+-     * Boolean in compound defaults test.
+-     */
+-    @Test
+-    public void booleanInCompoundDefaultsTest() {
+-        reasoningTest("BooleanInCompoundDefaultsTest.ivml", 2);
+-    } 
+-    
+-    /**
+-     * Boolean in compound assign test.
+-     */
+-    @Test
+-    public void booleanInCompoundAssignTest() {
+-        reasoningTest("BooleanInCompoundAssignTest.ivml", 2);
+-    } 
+-    
+-    /**
+-     * Boolean implies test.
+-     */
+-    @Test
+-    public void booleanImpliesTest() {
+-        reasoningTest("BooleanImpliesTest.ivml", 1);
+-    } 
+-    
+-    /**
+-     * Boolean in compound implies test.
+-     */
+-    @Test
+-    public void booleanInCompoundImpliesTest() {
+-        reasoningTest("BooleanInCompoundImpliesTest.ivml", 1);
+-    }  
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java
+deleted file mode 100644
+index f4d918f..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java
++++ /dev/null
+@@ -1,228 +0,0 @@
+-/*
+- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+-
+-import org.junit.Assert;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+-import net.ssehub.easy.reasoning.sseReasoner.Engine;
+-import net.ssehub.easy.reasoning.sseReasoner.Reasoner;
+-import net.ssehub.easy.varModel.confModel.AssignmentState;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.confModel.ConfigurationException;
+-import net.ssehub.easy.varModel.confModel.IDecisionVariable;
+-import net.ssehub.easy.varModel.cst.AttributeVariable;
+-import net.ssehub.easy.varModel.cst.CSTSemanticException;
+-import net.ssehub.easy.varModel.cst.ConstantValue;
+-import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
+-import net.ssehub.easy.varModel.cst.OCLFeatureCall;
+-import net.ssehub.easy.varModel.cst.Variable;
+-import net.ssehub.easy.varModel.model.Attribute;
+-import net.ssehub.easy.varModel.model.AttributeAssignment;
+-import net.ssehub.easy.varModel.model.Constraint;
+-import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
+-import net.ssehub.easy.varModel.model.FreezeBlock;
+-import net.ssehub.easy.varModel.model.IFreezable;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.AttributeAssignment.Assignment;
+-import net.ssehub.easy.varModel.model.datatypes.BooleanType;
+-import net.ssehub.easy.varModel.model.datatypes.Compound;
+-import net.ssehub.easy.varModel.model.datatypes.Enum;
+-import net.ssehub.easy.varModel.model.datatypes.EnumLiteral;
+-import net.ssehub.easy.varModel.model.datatypes.FreezeVariableType;
+-import net.ssehub.easy.varModel.model.datatypes.IntegerType;
+-import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
+-import net.ssehub.easy.varModel.model.datatypes.OrderedEnum;
+-import net.ssehub.easy.varModel.model.values.BooleanValue;
+-import net.ssehub.easy.varModel.model.values.Value;
+-import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
+-import net.ssehub.easy.varModel.model.values.ValueFactory;
+-import net.ssehub.easy.varModel.persistency.StringProvider;
+-import net.ssehub.easy.varModel.varModel.testSupport.ProjectTestUtilities;
+-
+-/**
+- * Tests reasoner capabilities via coded tests, without interactions from the parser.
+- * @author El-Sharkawy
+- *
+- */
+-public class CodedTests {
+-
+-    /**
+-     * Simulates value propagation based on a Boolean variable with user input via the UI.
+-     * @throws ValueDoesNotMatchTypeException Must not occur, otherwise ValueFactory is broken.
+-     * @throws CSTSemanticException Must not occur, otherwise constraint.setConsSyntax is broken
+-     * @throws ConfigurationException Must not occur, otherwise {@link IDecisionVariable}s are broken.
+-     */
+-    @Ignore
+-    @Test
+-    public void testBooleanIplication() throws ValueDoesNotMatchTypeException, CSTSemanticException,
+-        ConfigurationException {
+-        
+-        // Define test model
+-        Project project = new Project("BooleanIplicationTest");
+-        Enum enumType = new Enum("Color", project, "RED", "BLUE", "GREEN");
+-        project.add(enumType);
+-        DecisionVariableDeclaration rgbVar = new DecisionVariableDeclaration("rgb", enumType, project);
+-        project.add(rgbVar);
+-        DecisionVariableDeclaration hasColorVar
+-            = new DecisionVariableDeclaration("hasColor", BooleanType.TYPE, project);
+-        project.add(hasColorVar);
+-        
+-        // Create Constraint
+-        Constraint constraint = new Constraint(project);
+-        Value redValue = ValueFactory.createValue(enumType, enumType.getLiteral(0));
+-        ConstantValue redConst = new ConstantValue(redValue);
+-        ConstantValue trueConst = new ConstantValue(BooleanValue.TRUE);
+-        OCLFeatureCall booleanEquals = new OCLFeatureCall(new Variable(hasColorVar), OclKeyWords.EQUALS, trueConst);
+-        OCLFeatureCall enumEquals = new OCLFeatureCall(new Variable(rgbVar), OclKeyWords.EQUALS, redConst);
+-        OCLFeatureCall implies = new OCLFeatureCall(booleanEquals, OclKeyWords.IMPLIES, enumEquals);
+-        constraint.setConsSyntax(implies);
+-        project.add(constraint);
+-        
+-        // Create Configuration out of valid project
+-        ProjectTestUtilities.validateProject(project, true);
+-        Configuration config = new Configuration(project);
+-        
+-        // Simulate user input
+-        IDecisionVariable enumVar = config.getDecision(rgbVar);
+-        enumVar.setValue(null, AssignmentState.UNDEFINED);
+-        IDecisionVariable boolVar = config.getDecision(hasColorVar);
+-        boolVar.setValue(BooleanValue.TRUE, AssignmentState.ASSIGNED);
+-        
+-        // Test precondition
+-        Assert.assertFalse(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue(), 
+-            config.getDecision(rgbVar).hasValue());
+-        Assert.assertEquals(boolVar.getDeclaration().getName() + " has wrong value: " + boolVar.getValue().getValue(), 
+-            BooleanValue.TRUE, config.getDecision(hasColorVar).getValue());
+-        
+-        // Test: Perform reasoning (and propagation)
+-        Reasoner sseReasoner = new Reasoner();
+-        ReasonerConfiguration rConfig = new ReasonerConfiguration();
+-        sseReasoner.propagate(project, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        
+-        // Test precondition
+-        Assert.assertTrue(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue(), 
+-            config.getDecision(rgbVar).hasValue());
+-        Assert.assertEquals(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue().getValue(), 
+-            redValue, config.getDecision(rgbVar).getValue());
+-        Assert.assertEquals(boolVar.getDeclaration().getName() + " has wrong value: " + boolVar.getValue().getValue(), 
+-            BooleanValue.TRUE, config.getDecision(hasColorVar).getValue());
+-        
+-        // Output of the configuration
+-        ProjectTestUtilities.validateProject(config.toProject(true, false), true);
+-    }
+-
+-    /**
+-     * Tests freezing.
+-     * 
+-     * @throws ValueDoesNotMatchTypeException shall not occur
+-     * @throws CSTSemanticException shall not occur
+-     */
+-    @Test
+-    public void freezeCompoundTest() throws ValueDoesNotMatchTypeException, CSTSemanticException {
+-        //testFreezing(false); // TODO ENABLE, currently fails without runtime mode
+-        testFreezing(true);
+-    }
+-
+-    /**
+-     * Creates a project for freezing and checks the frozen states.
+-     * 
+-     * @param runtimeMode whether the test shall happen in runtime reasoning mode
+-     * @throws ValueDoesNotMatchTypeException shall not occur
+-     * @throws CSTSemanticException shall not occur
+-     */
+-    private void testFreezing(boolean runtimeMode) throws ValueDoesNotMatchTypeException, CSTSemanticException {
+-        Project prj = new Project("test");
+-
+-        Enum bindingTime = new OrderedEnum("BindingTime", prj);
+-        bindingTime.add(new EnumLiteral("compile", 1, bindingTime));
+-        bindingTime.add(new EnumLiteral("monitor", 2, bindingTime));
+-        bindingTime.add(new EnumLiteral("enact", 3, bindingTime));
+-        prj.add(bindingTime);
+-        
+-        Attribute attr = new Attribute("binding", bindingTime, prj, prj);
+-        attr.setValue(ValueFactory.createValue(bindingTime, "compile"));
+-        prj.attribute(attr);
+-        prj.add(attr);
+-        
+-        Compound param = new Compound("IntParameter", prj);
+-        param.add(new DecisionVariableDeclaration("defaultValue", IntegerType.TYPE, param));
+-        AttributeAssignment assng = new AttributeAssignment(param);
+-        assng.add(new Assignment("binding", "=", new ConstantValue(ValueFactory.createValue(bindingTime, "enact"))));
+-        assng.add(new DecisionVariableDeclaration("value", IntegerType.TYPE, param));
+-        param.add(assng);
+-        prj.add(param);
+-        
+-        DecisionVariableDeclaration myParam = new DecisionVariableDeclaration("myParam", param, prj);
+-        prj.add(myParam);
+-        
+-        IFreezable[] freezables = new IFreezable[1];
+-        freezables[0] = myParam;
+-        FreezeVariableType iterType = new FreezeVariableType(freezables, prj);
+-        DecisionVariableDeclaration freezeIter = new DecisionVariableDeclaration("b", iterType, prj);
+-        Variable iterEx = new AttributeVariable(new Variable(freezeIter), iterType.getAttribute("binding"));
+-        ConstraintSyntaxTree selector = new OCLFeatureCall(iterEx, ">=", 
+-            new ConstantValue(ValueFactory.createValue(bindingTime, "monitor")));
+-        selector.inferDatatype();
+-        FreezeBlock freeze = new FreezeBlock(freezables, freezeIter, selector, prj);
+-        prj.add(freeze);
+-        
+-        // debugging
+-        System.out.println(StringProvider.toIvmlString(prj));
+-        
+-        Configuration cfg = new Configuration(prj);
+-        IDecisionVariable myParamVar = cfg.getDecision(myParam);
+-        Assert.assertNotNull(myParamVar);
+-        IDecisionVariable myParamVarDeflt = findNested(myParamVar, "defaultValue");
+-        Assert.assertNotNull(myParamVarDeflt);
+-        Assert.assertEquals(1, myParamVarDeflt.getAttributesCount());
+-        IDecisionVariable myParamVarValue = findNested(myParamVar, "value");
+-        Assert.assertNotNull(myParamVarValue);
+-        Assert.assertEquals(1, myParamVarValue.getAttributesCount());
+-
+-        ReasonerConfiguration rConfig = new ReasonerConfiguration();
+-        rConfig.setRuntimeMode(runtimeMode);
+-        // Perform reasoning
+-        Engine engine = new Engine(prj, cfg, rConfig, ProgressObserver.NO_OBSERVER);
+-        engine.reason();
+-        
+-        Assert.assertEquals(AssignmentState.FROZEN, myParamVarDeflt.getState());
+-        Assert.assertNotEquals(AssignmentState.FROZEN, myParamVarValue.getState());
+-        //Assert.assertNotEquals(AssignmentState.FROZEN, myParamVar.getState());
+-    }
+-    
+-    /**
+-     * Finds a nested variable.
+-     * 
+-     * @param var the parent variable
+-     * @param name the name of the variable
+-     * @return the nested variable (may be <b>null</b>)
+-     */
+-    private IDecisionVariable findNested(IDecisionVariable var, String name) {
+-        IDecisionVariable result = null;
+-        for (int n = 0; null == result && n < var.getNestedElementsCount(); n++) {
+-            IDecisionVariable decVar = var.getNestedElement(n);
+-            if (decVar.getDeclaration().getName().equals(name)) {
+-                result = decVar;
+-            }
+-        }
+-        return result;
+-    }
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java
+deleted file mode 100644
+index acc7e17..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java
++++ /dev/null
+@@ -1,266 +0,0 @@
+-/*
+- * Copyright 2009-2014 University of Hildesheim, Software Systems Engineering
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *   http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+-
+-import org.junit.Assert;
+-import org.junit.Test;
+-
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+-import net.ssehub.easy.reasoning.sseReasoner.Engine;
+-import net.ssehub.easy.reasoning.sseReasoner.Resolver;
+-import net.ssehub.easy.varModel.confModel.AssignmentState;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.confModel.IAssignmentState;
+-import net.ssehub.easy.varModel.confModel.IDecisionVariable;
+-import net.ssehub.easy.varModel.cst.CSTSemanticException;
+-import net.ssehub.easy.varModel.cst.ConstantValue;
+-import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
+-import net.ssehub.easy.varModel.cst.OCLFeatureCall;
+-import net.ssehub.easy.varModel.cst.Variable;
+-import net.ssehub.easy.varModel.model.Constraint;
+-import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-import net.ssehub.easy.varModel.model.datatypes.IntegerType;
+-import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
+-import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
+-import net.ssehub.easy.varModel.model.values.ValueFactory;
+-import net.ssehub.easy.varModel.varModel.testSupport.ProjectTestUtilities;
+-
+-/**
+- * Tests for {@link Resolver}.
+- * @author El-Sharkawy
+- * @author Sizonenko
+- *
+- */
+-public class EvaluationIntegrityTest {
+-    
+-    // Test: testResolveOfIntegers()
+-    private Project projectP0;
+-    private Project projectP1;
+-    private Project projectP2;    
+-    
+-    private DecisionVariableDeclaration declA;
+-    private DecisionVariableDeclaration declB;
+-    private DecisionVariableDeclaration declC;
+-    private DecisionVariableDeclaration declD;
+-    
+-    
+-    /**
+-     * Tests whether integer variables are resolved correctly.
+-     * This tests includes:
+-     * <ul>
+-     * <li>Imports</li>
+-     * <li>Assignments</li>
+-     * <li>Defaults</li>
+-     * <li>Re-Assignments</li>
+-     * </ul>
+-     */
+-    @Test
+-    public void testResolveOfIntegers() {
+-        createProjectP0();
+-        createProjectP1();    
+-        createProjectP2();        
+-        
+-        Configuration config = new Configuration(projectP2, false);
+-        ReasonerConfiguration rConfig = new ReasonerConfiguration();
+-     
+-        Engine engine = new Engine(projectP2, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        engine.reason();
+-        
+-        assertVariable(config, declA, 2, AssignmentState.DERIVED);
+-        assertVariable(config, declB, 2, AssignmentState.DERIVED);
+-        assertVariable(config, declC, 3, AssignmentState.DERIVED);
+-        assertVariable(config, declD, 5, AssignmentState.DERIVED);
+-    }
+-    
+-    /**
+-     * Tests whether assignments were correctly applied.
+-     * @param config The configuration containing resolved variables.
+-     * @param decl The declaration to test.
+-     * @param expectedValue The expected resolved value
+-     * @param expectedState The expected resolved assignment state
+-     */
+-    private void assertVariable(Configuration config, DecisionVariableDeclaration decl, Object expectedValue,
+-        IAssignmentState expectedState) {
+-        
+-        IDecisionVariable variable = config.getDecision(decl);
+-        Assert.assertNotNull(variable);
+-        Assert.assertNotNull(variable.getValue());
+-        Assert.assertEquals(expectedValue, variable.getValue().getValue());
+-        Assert.assertEquals(expectedState, variable.getState());
+-    }
+-
+-    /**
+-     * Creates imported project P0.
+-     * <pre><code>
+-     * project ProjectP0 {
+-     *
+-     *    Integer intA;
+-     *    Integer intB;
+-     *    intA = 1;
+-     *    intB = intA;
+-     *}
+-     *</code></pre>
+-     */
+-    private void createProjectP0() {
+-        projectP0 = new Project("ProjectP0");
+-        declA = createVar("intA", projectP0);
+-        declB = createVar("intB", projectP0);
+-        Constraint constraintA = new Constraint(projectP0);
+-        Constraint constraintB = new Constraint(projectP0);
+-        try {
+-            constraintA.setConsSyntax(createAssignment(declA, createConstValue(declA, 1)));
+-            projectP0.add(constraintA);
+-            constraintB.setConsSyntax(createAssignment(declB, new Variable(declA)));
+-            projectP0.add(constraintB);
+-        } catch (CSTSemanticException e) {
+-            Assert.fail(e.getMessage());
+-        }
+-        
+-        ProjectTestUtilities.validateProject(projectP0);
+-    }
+-    
+-    /**
+-     * Creates imported project P1.
+-     * <pre><code>
+-     * project ProjectP1 {
+-     *    import ProjectP0;
+-     *
+-     *    intA = 2;
+-     *}
+-     *</code></pre>
+-     */
+-    private void createProjectP1() {
+-        projectP1 = new Project("ProjectP1");
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);       
+-        try {
+-            importP0.setResolved(projectP0);            
+-        } catch (ModelManagementException e) {
+-            Assert.fail(e.getMessage());
+-        }
+-        
+-        Constraint constraint = new Constraint(projectP1);
+-        try {
+-            constraint.setConsSyntax(createAssignment(declA, createConstValue(declA, 2)));
+-            projectP1.add(constraint);
+-        } catch (CSTSemanticException e) {
+-            Assert.fail(e.getMessage());
+-        }
+-        
+-        ProjectTestUtilities.validateProject(projectP1);
+-    }  
+-    
+-    /**
+-     * Creates top imported project.
+-     * <pre><code>
+-     * project ProjectP2 {
+-     *
+-     *    import ProjectP1;
+-     *    
+-     *    Integer intC;
+-     *    intC = 1;
+-     *    intC == 1 implies intA == 3;;
+-     *}
+-     *</code></pre>
+-     */
+-    private void createProjectP2() {
+-        projectP2 = new Project("ProjectP2");
+-        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
+-        projectP2.addImport(importP1);       
+-        try {
+-            importP1.setResolved(projectP1);            
+-        } catch (ModelManagementException e) {
+-            Assert.fail(e.getMessage());
+-        }
+-        
+-        declC = createVar("intC", projectP2);
+-        Constraint constraintC = new Constraint(projectP2);
+-        try {
+-            constraintC.setConsSyntax(createAssignment(declC, createConstValue(declC, 3)));
+-            projectP2.add(constraintC);
+-        } catch (CSTSemanticException e) {
+-            Assert.fail(e.getMessage());
+-        }
+-        
+-        declD = createVar("intD", projectP2);
+-        Constraint constraintD = new Constraint(projectP2);
+-        OCLFeatureCall plus = new OCLFeatureCall(new Variable(declC), OclKeyWords.PLUS, new Variable(declA));
+-        try {
+-            constraintD.setConsSyntax(createAssignment(declD, plus));
+-            projectP2.add(constraintD);
+-        } catch (CSTSemanticException e) {
+-            Assert.fail(e.getMessage());
+-        }
+-        
+-        Constraint constraintImplies = new Constraint(projectP2);
+-        OCLFeatureCall left = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, createConstValue(declC, 1));
+-        OCLFeatureCall right 
+-            = new OCLFeatureCall(new Variable(declA), OclKeyWords.EQUALS, createConstValue(declA, 3));        
+-        OCLFeatureCall implies = new OCLFeatureCall(left, OclKeyWords.IMPLIES, right);
+-        try {
+-            constraintImplies.setConsSyntax(implies); 
+-            projectP2.add(constraintImplies);
+-        } catch (CSTSemanticException e) {
+-            Assert.fail(e.getMessage());
+-        }
+-        
+-        ProjectTestUtilities.validateProject(projectP2);
+-    }  
+-
+-    /**
+-     * Creates a new integer {@link DecisionVariableDeclaration} in the given {@link Project}.
+-     * @param varName The name of the {@link DecisionVariableDeclaration}.
+-     * @param project The project where to add the {@link DecisionVariableDeclaration}.
+-     * @return The created {@link DecisionVariableDeclaration}.
+-     */
+-    private DecisionVariableDeclaration createVar(String varName, Project project) {
+-        DecisionVariableDeclaration decl = new DecisionVariableDeclaration(varName, IntegerType.TYPE, project);
+-        project.add(decl);
+-        return decl;
+-    }
+-
+-    /**
+-     * Creates a {@link ConstantValue} for a given {@link DecisionVariableDeclaration}.
+-     * @param decl The {@link DecisionVariableDeclaration} for which the {@link ConstantValue} shall be created.
+-     * @param value The value to create.
+-     * @return The created {@link ConstraintSyntaxTree}.
+-     */
+-    private ConstraintSyntaxTree createConstValue(DecisionVariableDeclaration decl, Object... value) {
+-        ConstantValue constValue = null;
+-        try {
+-            constValue = new ConstantValue(ValueFactory.createValue(decl.getType(), value));
+-        } catch (ValueDoesNotMatchTypeException e) {
+-            Assert.fail(e.getMessage());
+-        }
+-        
+-        return constValue;
+-    }
+-    
+-    /**
+-     * Creates an assignment {@link ConstraintSyntaxTree}.
+-     * @param decl The {@link DecisionVariableDeclaration} for which an assignment shall be created for.
+-     * @param value The value of the assignment constraint.
+-     * @return The created assignment {@link ConstraintSyntaxTree}.
+-     */
+-    private ConstraintSyntaxTree createAssignment(DecisionVariableDeclaration decl, ConstraintSyntaxTree value) {
+-        return new OCLFeatureCall(new Variable(decl), OclKeyWords.ASSIGNMENT, value);
+-    }    
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java
+deleted file mode 100644
+index 28f8668..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java
++++ /dev/null
+@@ -1,98 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+-
+-import org.junit.Assert;
+-import org.junit.Test;
+-
+-import net.ssehub.easy.dslCore.test.AbstractTest;
+-import net.ssehub.easy.varModel.confModel.AssignmentState;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.confModel.IDecisionVariable;
+-import net.ssehub.easy.varModel.cst.CSTSemanticException;
+-import net.ssehub.easy.varModel.cst.ConstantValue;
+-import net.ssehub.easy.varModel.cst.OCLFeatureCall;
+-import net.ssehub.easy.varModel.cst.Variable;
+-import net.ssehub.easy.varModel.model.Constraint;
+-import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.datatypes.IntegerType;
+-import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
+-import net.ssehub.easy.varModel.model.values.Value;
+-import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
+-import net.ssehub.easy.varModel.model.values.ValueFactory;
+-
+-/**
+- * Configures the operation tests for Drools.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class IntegrityTests extends AbstractTest<Project> {
+-    
+-    /**
+-     * Tests whether implies constraints will be handled correctly by the
+-     * {@link net.ssehub.easy.varModel.confModel.AssignmentResolver}.
+-     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
+-     * {@link ValueFactory}.
+-     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
+-     */
+-    @Test
+-    public void testImplies() throws ValueDoesNotMatchTypeException, CSTSemanticException {
+-        // Create project and variables
+-        Project project = new Project("assignmentTestProject");
+-        DecisionVariableDeclaration declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, project);
+-        project.add(declA);
+-        DecisionVariableDeclaration declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, project);
+-        project.add(declB);
+-        DecisionVariableDeclaration declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, project);
+-        declC.setValue(33);
+-        project.add(declC);
+-        
+-        // Create assignment
+-        Value valA = ValueFactory.createValue(declA.getType(), 31);
+-        Variable varA = new Variable(declA);
+-        ConstantValue constValA = new ConstantValue(valA);
+-        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
+-        Constraint assignmentConstraint = new Constraint(project);
+-        assignmentConstraint.setConsSyntax(assignmentA);
+-        project.add(assignmentConstraint);       
+-   
+-        
+-        // Create implies constraint
+-        Value valB = ValueFactory.createValue(declB.getType(), 37);
+-        ConstantValue constValB = new ConstantValue(valB);
+-        Value valC = ValueFactory.createValue(declC.getType(), 40);
+-        ConstantValue constValC = new ConstantValue(valC);
+-        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
+-        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
+-        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
+-        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
+-        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
+-        Constraint impliesConstaint = new Constraint(project);
+-        impliesConstaint.setConsSyntax(implies);
+-        project.add(impliesConstaint);
+-        Constraint impliesConstaintFail = new Constraint(project);
+-        impliesConstaintFail.setConsSyntax(impliesFail);
+-        project.add(impliesConstaintFail);
+-        
+-        
+-        // Create Configuration (will also start AssignmentResolver)
+-        Configuration config = new Configuration(project, true);
+-        IDecisionVariable iVarA = config.getDecision(declA);
+-        IDecisionVariable iVarB = config.getDecision(declB);
+-        IDecisionVariable iVarC = config.getDecision(declC);
+-        
+-        // Test correct assignments
+-        Assert.assertNotNull(iVarA);
+-        Assert.assertEquals(31, iVarA.getValue().getValue());
+-        Assert.assertSame(config.getResolutionState(), iVarA.getState());
+-
+-        Assert.assertNotNull(iVarB);
+-        Assert.assertEquals(37, iVarB.getValue().getValue());
+-        Assert.assertSame(config.getResolutionState(), iVarB.getState());
+-        
+-        Assert.assertNotNull(iVarC);
+-        Assert.assertEquals(33, iVarC.getValue().getValue());
+-        Assert.assertSame(AssignmentState.DEFAULT, iVarC.getState());
+-    }    
+-    
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java
+deleted file mode 100644
+index 74cbc93..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java
++++ /dev/null
+@@ -1,373 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+-
+-
+-import java.io.File;
+-
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-import net.ssehub.easy.varModel.model.ProjectImport;
+-
+-/**
+- * Configures the operation tests for SSE reasoner.
+- * 
+- * @author Sizonenko
+- * @author El-Sharkawy
+- */
+-public class ReasoningScenarioTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
+-    
+-    private static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
+-    private static final File FOLDER = new File(TESTDATA, "operationsTemplates");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    protected Project loadProject(String path) {
+-        return loadProject(FOLDER, path);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }   
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        resultHandler(expectedFailedConstraints, projectP1);
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param p0 IVML file to translate and reason on.
+-     * @param p1 IVML file to translate and reason on.
+-     * @param p2 IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String p0, String p1, String p2, int expectedFailedConstraints) {
+-        Project projectP0 = loadProject(p0);
+-        Project projectP1 = loadProject(p1);
+-        Project projectP2 = loadProject(p2);
+-        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
+-        projectP1.addImport(importP0);
+-        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
+-        projectP2.addImport(importP1);
+-        resultHandler(expectedFailedConstraints, projectP2);
+-    }
+-    
+-    /**
+-     * Basic test.
+-     */
+-    @Test    
+-    public void initialTest() {
+-        reasoningTest("InitialTest.ivml", 2);
+-    } 
+-    
+-    /**
+-     * Tests collections.
+-     */
+-    @Test    
+-    public void preCollectionTest() {
+-        reasoningTest("PreCollectionTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests duplicates.
+-     */
+-    @Ignore
+-    @Test    
+-    public void hasDuplicatesTestTest() {
+-        reasoningTest("HasDuplicatesTest.ivml", 0);
+-    }      
+-    
+-    /**
+-     * Tests freeze.
+-     */
+-    @Test    
+-    public void freezeTest() {
+-        reasoningTest("FreezeTest.ivml", 0);
+-    } 
+-    
+-    /**
+-     * Tests import freeze.
+-     */
+-    @Test    
+-    public void freezeImportTest() {
+-        reasoningTest("FreezeTest.ivml", "FreezeImportTest.ivml", 1);
+-    } 
+-    
+-    /**
+-     * Tests import freeze.
+-     */
+-    @Test 
+-    @Ignore
+-    public void nullTest() {
+-        reasoningTest("NullTest.ivml", 3);
+-    } 
+-    
+-    /**
+-     * Tests null import.
+-     */
+-    @Test  
+-    @Ignore
+-    public void nullImportTest() {
+-        reasoningTest("NullTest.ivml", "NullImportTest.ivml", 4);
+-    } 
+-    
+-    /**
+-     * Tests import child (1 failed constraint).
+-     */
+-    @Test    
+-    public void importChildTest() {
+-        reasoningTest("ImportChild.ivml", 1);
+-    } 
+-    
+-    /**
+-     * Tests import core (variable is reassigned and 0 constraints fail).
+-     */
+-    @Test    
+-    public void importCoreTest() {
+-        reasoningTest("ImportChild.ivml", "ImportCore.ivml", 0);
+-    } 
+-    
+-    /**
+-     * Tests internal constraints.
+-     */ 
+-    @Test
+-    @Ignore
+-    public void internalConstraintTest() {
+-        reasoningTest("InternalConstraintTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests constraint variables. 
+-     */ 
+-    @Test    
+-    public void constraintVariablesTest() {
+-        reasoningTest("ConstraintVariableTest.ivml", 2);
+-    }
+-    
+-    /**
+-     * Tests failed variables assignments.
+-     */ 
+-    @Test    
+-    public void variableAssignmentFailTest() {
+-        reasoningTest("VariableAssignmentFailTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests constraint variables.
+-     */ 
+-    @Test    
+-    public void compoundEqualityTest() {
+-        reasoningTest("CompoundEqualityTest.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests compound internal constraints.
+-     */
+-    @Test    
+-    public void constrainedCompoundTest() {
+-        reasoningTest("ConstrainedCompoundTest.ivml", 3);
+-    }
+-    
+-    /**
+-     * Tests annotation assignment.
+-     */
+-    @Test    
+-    public void annotationInitialTest() {
+-        reasoningTest("AnnotationInitialTest.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests annotations in compound.
+-     */
+-    @Test    
+-    public void annotationAssignedToDifferentCompoundSlotsValid() {
+-        reasoningTest("AnnotationAssignedToDifferentCompoundSlotsValid.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests compound nested constraints.
+-     */
+-    @Test    
+-    @Ignore
+-    public void refinedCompoundTest() {
+-        reasoningTest("RefinedCompoundTest.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests trace in failed elements.
+-     */
+-    @Test
+-    public void traceTest() {
+-        reasoningTest("TraceTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests trace in failed elements.
+-     */
+-    @Test
+-    public void nestedVariableReplaceTest() {
+-        reasoningTest("nestedVariableReplaceTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * String patern test with internal constraint.
+-     */
+-    @Test
+-    public void internalConstraintStringPaternTest() {
+-        reasoningTest("internalConstraintStringPaternTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Inherited internal constraint test.
+-     */
+-    @Test
+-    public void internalConstraintInheritedTest() {
+-        reasoningTest("internalConstraintInheritedTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Inherited internal constraint in compound test.
+-     */
+-    @Test
+-    public void internalConstraintInheritedInCompoundTest() {
+-        reasoningTest("internalConstraintInheritedInCompoundTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * Collection internal constraint test.
+-     */
+-    @Test
+-    public void internalConstraintCollectionTest() {
+-        reasoningTest("internalConstraintCollectionTest.ivml", 2);
+-    }
+-    
+-    /**
+-     * Collection internal constraint in compound test.
+-     */
+-    @Test
+-    public void internalConstraintCollectionInCompoundTest() {
+-        reasoningTest("internalConstraintCollectionInCompoundTest.ivml", 2);
+-    }
+-    
+-    /**
+-     * String pattern test with internal constraint.
+-     */
+-    @Test
+-    public void refToCompoundInSequenceTest() {
+-        reasoningTest("RefToCompoundInSequenceTest.ivml", 0);
+-    }
+-    
+-    /**
+-     * Default constraint reevaluation.
+-     */
+-    @Test
+-    public void defaultConstraintReevaluationTest() {
+-        reasoningTest("DefaultConstraintReevaluationTest.ivml", 1);
+-    }
+-    
+-    /**
+-     * isDefined test.
+-     */
+-    @Test
+-    public void isDefinedTest() {
+-        reasoningTest("IsDefinedTest.ivml", 10);
+-    }  
+-    
+-    /**
+-     * isDefined Compound test.
+-     */
+-    @Test
+-    public void isDefinedCompoundTest() {
+-        reasoningTest("IsDefinedCompoundTest.ivml", 1);
+-    }  
+-    
+-    /**
+-     * Test for collections of compounds equality operation.
+-     */
+-    @Test
+-    public void compoundCollectionEqualityTest() {
+-        reasoningTest("compoundCollectionEqualityTest.ivml", 1);
+-    }  
+-    
+-    /**
+-     * Test for collections of refTo(compounds) equality operation.
+-     */
+-    @Test
+-    public void refByCompoundCollectionEqualityTest() {
+-        reasoningTest("refByCompoundCollectionEqualityTest.ivml", 1);
+-    }  
+-    
+-    /**
+-     * Test for collections of string equality operation.
+-     */
+-    @Test
+-    public void stringCollectionEqualityTest() {
+-        reasoningTest("stringCollectionEqualityTest.ivml", 2);
+-    }
+-    
+-    /**
+-     * Test for incremental reasoning and clering derived values in configuration..
+-     */
+-    @Test
+-    public void clearConfigTest() {
+-        reasoningTest("ClearConfigBase.ivml", "ClearConfigCore.ivml", 0);
+-    }   
+-    
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java
+deleted file mode 100644
+index 8c659d8..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java
++++ /dev/null
+@@ -1,311 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+-
+-import java.io.File;
+-import java.io.IOException;
+-
+-import org.eclipse.emf.common.util.URI;
+-import org.junit.AfterClass;
+-import org.junit.Assert;
+-import org.junit.BeforeClass;
+-import org.junit.Ignore;
+-import org.junit.Test;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.messages.Status;
+-import net.ssehub.easy.basics.modelManagement.ModelManagementException;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.StandaloneInitializer;
+-import net.ssehub.easy.dslCore.TranslationResult;
+-import net.ssehub.easy.dslCore.test.AbstractTest;
+-import net.ssehub.easy.dslCore.translation.Message;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
+-import net.ssehub.easy.reasoning.sseReasoner.Engine;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+-
+-/**
+- * Stresstests.
+- * 
+- * @author krafczyk
+- */
+-public class StressTest extends AbstractTest<Project> {
+-    
+-    private static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
+-    private static final File FOLDER = new File(TESTDATA, "stresstest");
+-    
+-    /**
+-     * Initializes this Test class.
+-     */
+-    @BeforeClass
+-    public static void setUpBeforeClass() {
+-        ModelUtility.setResourceInitializer(new StandaloneInitializer());
+-        try {
+-            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not add location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Frees the memory after testing.
+-     */
+-    @AfterClass
+-    public static void tearDownAfterClass() {
+-        try {
+-            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
+-        } catch (ModelManagementException e) {
+-            Assert.fail("Could not remove location of test files.");
+-        }
+-    }
+-    
+-    /**
+-     * Method for determining folder with IVML files.
+-     * @param property property
+-     * @return folder location
+-     */
+-    private static File determineTestDataFolder(String property) {
+-        File testdataFolder = determineTestDataDir(property);
+-        String externalLocation = System.getProperty(property);
+-        
+-        // If no property was defined, use ReasonerCore.test/testdata directory
+-        if (null == externalLocation) {
+-            // Work around over the path avoids a NullPointer exception
+-            String path = testdataFolder.getAbsolutePath();
+-            testdataFolder = new File(path);
+-            testdataFolder = testdataFolder.getParentFile().getParentFile();
+-            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
+-            testdataFolder = new File(testdataFolder, "testdata");
+-        }
+-        if (!testdataFolder.exists()) {
+-            String path = testdataFolder.getAbsolutePath();
+-            testdataFolder = new File(path);
+-            testdataFolder = testdataFolder.getParentFile().getParentFile().getParentFile();
+-            testdataFolder = new File(testdataFolder, "ReasonerCore");
+-            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
+-            testdataFolder = new File(testdataFolder, "testdata");
+-            System.out.println(testdataFolder);
+-        }            
+-        return testdataFolder;    
+-    }
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    protected static Project loadProject(String path) {
+-        Project project = null;
+-        try {
+-            File projectFile = new File(FOLDER, path);
+-            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
+-            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
+-            StringBuffer errorMsg = new StringBuffer();
+-            for (int i = 0; i < result.getMessageCount(); i++) {
+-                Message msg = result.getMessage(i);
+-                if (!msg.ignore()) {
+-                    errorMsg.append(msg.getDescription());
+-                    errorMsg.append("\n");
+-                }
+-            }
+-            if (errorMsg.length() == 0) {
+-                project = result.getResult(0);
+-            } else {
+-                Assert.fail(errorMsg.toString());
+-            }
+-            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
+-            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
+-        } catch (IOException exc) {
+-            Assert.fail(exc.getLocalizedMessage());
+-        }
+-        
+-        return project;
+-    }
+-    
+-    /**
+-     * Method to test whether different types of variables and constraints could be translated correctly
+-     * into rules and reasoned on without any errors. 
+-     * @param ivmlFile IVML file to translate and reason on.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fail.
+-     */        
+-    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
+-        Project project = loadProject(ivmlFile);
+-        resultHandler(expectedFailedConstraints, project);
+-    }
+-    
+-    /**
+-     * Runs the reasoner for the specified project.
+-     * @param projectP1 Project to reason on.
+-     * @return number of failed constraints.
+-     */
+-    private int runReasoner(Project projectP1) {
+-        Configuration config = new Configuration(projectP1, false);        
+-        ReasonerConfiguration rConfig = new ReasonerConfiguration();
+-        
+-        // Perform reasoning
+-        Engine engine = new Engine(projectP1, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        ReasoningResult result = engine.reason();
+-        
+-        // Test whether reasoning detected correct result  
+-        int failedConstraints = 0;
+-        for (int i = 0; i < result.getMessageCount(); i++) {
+-            if (result.getMessage(i).getStatus() == Status.ERROR) {
+-                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
+-            }
+-        }
+-        
+-        return failedConstraints;
+-    }
+-    
+-    /**
+-     * Method for handling reasoning result.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fa
+-     * @param projectP1 Project to reason on.
+-     */
+-    private void resultHandler(int expectedFailedConstraints, Project projectP1) {
+-        int failedConstraints = runReasoner(projectP1);
+-        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
+-    }   
+-    
+-    
+-    /**
+-     * Tests whether boolean deafult values are handled correctly.
+-     */
+-    @Test
+-    @Ignore
+-    public void testBooleanDefault() {
+-        // Test whether default values for booleans are not treated as project constraints
+-        reasoningTest("BooleanDefault.1.ivml", 0);
+-        // Test whether default values for booleans are applied to them
+-        reasoningTest("BooleanDefault.2.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests whether boolean implies values are handled correctly.
+-     */
+-    @Test
+-    @Ignore
+-    public void testBooleanImplies() {
+-        reasoningTest("BooleanImplies.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests whether constraint variables are evaluated correctly.
+-     */
+-    @Test
+-    @Ignore
+-    public void testConstraintEvaluation() {
+-        reasoningTest("ConstraintEval.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests whether overridden default values for constraint variables are evaluated correctly.
+-     */
+-    @Test
+-    @Ignore
+-    public void testConstraintDefaults() {
+-        reasoningTest("ConstraintDefault.1.ivml", 0);
+-        reasoningTest("ConstraintDefault.2.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests whether automatic assignment of undefined variables in constraints
+-     * via == does not result in failing constraints.
+-     */
+-    @Test
+-    @Ignore
+-    public void testUndefinedVariables() {
+-        reasoningTest("UndefinedVariables.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests whether typedefs work correctly with compounds.
+-     */
+-    @Test
+-    @Ignore
+-    public void testCompoundTypedef() {
+-        // Tests whether simple typedefs ("aliases") work
+-//        reasoningTest("CompoundTypedef.1.ivml", 0);
+-        // Tests whether typedefs with "with" work
+-        reasoningTest("CompoundTypedef.2.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests whether typedefs work correctly with sequences and sets.
+-     */
+-    @Test
+-    public void testSetAndSequenceTypedef() {
+-        // Tests whether simple typedefs ("aliases") work with sets and sequences
+-        reasoningTest("SetAndSequenceTypedef.ivml", 2);
+-        // Tests whether typedefs of typedefs and "with" works for sequences
+-        reasoningTest("SequenceTypedefWith.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests whether constraints in refined compounds produce the right number of error messages.
+-     */
+-    @Test
+-    public void testCompoundRefineConstraints() {
+-        reasoningTest("CompoundRefineConstraints.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests whether typedef constraints are correctly evaluated in sequences / sets.
+-     */
+-    @Test
+-    @Ignore
+-    public void testTypedefConstraintsInSequences() {
+-        reasoningTest("TypedefConstraintSequence.ivml", 1);
+-    }
+-    
+-    /**
+-     * Tests whether out-of-bounds accesses to sequences are handled correctly.
+-     */
+-    @Test
+-    public void testOutOfBoundsIndex() {
+-        runReasoner(loadProject("OutOfBoundsIndex.ivml"));
+-    }
+-    
+-    /**
+-     * Tests whether size() works for null sets and sequences.
+-     */
+-    @Test
+-    public void testNullSize() {
+-        runReasoner(loadProject("NullSize.ivml"));
+-    }
+-    
+-    /**
+-     * Tests whether == in implies LHS is treated correctly.
+-     */
+-    @Test
+-    public void testPropagationSyntax() {
+-        reasoningTest("PropagationSyntax1.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests whether undefined values in if are handled correctly.
+-     */
+-    @Test
+-    public void testIfWithUndefinedValues() {
+-        reasoningTest("UndefinedIf.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests whether constraints with undefined variables are ignored.
+-     */
+-    @Test
+-    public void testUndefinedVariableConstraints() {
+-        reasoningTest("UndefinedVariableConstraints.ivml", 0);
+-    }
+-    
+-    /**
+-     * Tests whether constants passed to custom operations don't cause exceptions.
+-     */
+-    @Test
+-    public void testConstantInCustomOperation() {
+-        reasoningTest("ConstantInCustomOperation.ivml", 0);
+-    }
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/Utils.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/Utils.java
+deleted file mode 100644
+index b6d8329..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/Utils.java
++++ /dev/null
+@@ -1,32 +0,0 @@
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+-
+-import net.ssehub.easy.reasoning.core.frontend.AbstractReasonerFrontendTest;
+-import net.ssehub.easy.reasoning.core.frontend.TestConfiguration;
+-import net.ssehub.easy.reasoning.sseReasoner.ReasonerInitializer;
+-
+-/**
+- * Test utilities.
+- * 
+- * @author Holger Eichelberger
+- */
+-public class Utils {
+-
+-    /**
+-     * Prevents creation from outside.
+-     */
+-    private Utils() {
+-    }
+-    
+-    /**
+-     * Initializes the tests (reusable method).
+-     */
+-    public static final void init() {
+-        AbstractReasonerFrontendTest.setupTests(new TestConfiguration(
+-            "net.ssehub.easy.reasoning.sseReasoner.tests", 
+-            null, 
+-            true, // CHECK
+-            false), // CONSISTENT
+-            ReasonerInitializer.INSTANCE);
+-    }
+-
+-}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java
+deleted file mode 100644
+index 48e8286..0000000
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java
++++ /dev/null
+@@ -1,5 +0,0 @@
+-/**
+- * Test classes for the <tt>de.uni_hildesheim.sse.reasoning.drools2</tt> package, as well as the functionality
+- * of the complete Drools2 reasoner (integration test).
+- */
+-package net.ssehub.easy.reasoning.sseReasoner.reasoner;
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/AllTests.java
+index aa39e21..3e3c734 100644
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/AllTests.java
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/AllTests.java
+@@ -1,24 +1,8 @@
+-package net.ssehub.easy.reasoning.sseReasoner;
++package test.net.ssehub.easy.reasoning.sseReasoner;
+ 
+-import java.io.File;
+-import java.io.IOException;
+-
+-import org.eclipse.emf.common.util.URI;
+-import org.junit.Assert;
+ import org.junit.runner.RunWith;
+ import org.junit.runners.Suite;
+ import org.junit.runners.Suite.SuiteClasses;
+-
+-import de.uni_hildesheim.sse.ModelUtility;
+-import net.ssehub.easy.basics.messages.Status;
+-import net.ssehub.easy.basics.progress.ProgressObserver;
+-import net.ssehub.easy.dslCore.TranslationResult;
+-import net.ssehub.easy.dslCore.translation.Message;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+-import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
+-import net.ssehub.easy.varModel.confModel.Configuration;
+-import net.ssehub.easy.varModel.management.VarModel;
+-import net.ssehub.easy.varModel.model.Project;
+ 
+ /**
+  * Test suite for automated test execution on build server.
+@@ -33,70 +17,12 @@
+  */
+ @RunWith(Suite.class)
+ @SuiteClasses({
+-    net.ssehub.easy.reasoning.sseReasoner.adaptation.AllTests.class,
+-    net.ssehub.easy.reasoning.sseReasoner.capabilities.AllTests.class,
+-    // Skip: performance in automatic testing 
+-    net.ssehub.easy.reasoning.sseReasoner.qm.AllTests.class,
+-    net.ssehub.easy.reasoning.sseReasoner.reasoner.AllTests.class
+-    })
++    test.net.ssehub.easy.reasoning.sseReasoner.reasoner.RampUpTest.class, // must be first
++    test.net.ssehub.easy.reasoning.sseReasoner.adaptation.AllTests.class,
++    test.net.ssehub.easy.reasoning.sseReasoner.capabilities.AllTests.class,
++    test.net.ssehub.easy.reasoning.sseReasoner.qm.AllTests.class,
++    test.net.ssehub.easy.reasoning.sseReasoner.reasoner.AllTests.class,
++    test.net.ssehub.easy.reasoning.sseReasoner.performance.AllTests.class, })
+ public class AllTests {
+     
+-    /**
+-     * Method for handling reasoning result.
+-     * @param expectedFailedConstraints Number of constraints that are expected to fa
+-     * @param projectP1 Project to reason on.
+-     */
+-    public static void resultHandler(int expectedFailedConstraints, Project projectP1) {
+-        Configuration config = new Configuration(projectP1, false);        
+-        ReasonerConfiguration rConfig = new ReasonerConfiguration();
+-
+-        // Perform reasoning
+-        Engine engine = new Engine(projectP1, config, rConfig, ProgressObserver.NO_OBSERVER);
+-        ReasoningResult result = engine.reason();
+-        
+-        // Test whether reasoning detected correct result  
+-        int failedConstraints = 0;
+-        for (int i = 0; i < result.getMessageCount(); i++) {
+-            if (result.getMessage(i).getStatus() == Status.ERROR) {
+-                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
+-            }
+-        }
+-        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
+-    }  
+-
+-    
+-    /**
+-     * Helper method for load an IVML file.
+-     * @param testFolder The (sub-) folder where to load the specified IVML test files.
+-     * @param path The name of the ivml file to load (including the file extension) inside of the
+-     *     <tt>reasonerModel</tt> folder.
+-     * @return The loaded {@link Project} representing the read IVML file.
+-     */
+-    public static final Project loadProject(File testFolder, String path) {
+-        Project project = null;
+-        try {
+-            File projectFile = new File(testFolder, path);
+-            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
+-            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
+-            StringBuffer errorMsg = new StringBuffer();
+-            for (int i = 0; i < result.getMessageCount(); i++) {
+-                Message msg = result.getMessage(i);
+-                if (!msg.ignore()) {
+-                    errorMsg.append(msg.getDescription());
+-                    errorMsg.append("\n");
+-                }
+-            }
+-            if (errorMsg.length() == 0) {
+-                project = result.getResult(0);
+-            } else {
+-                Assert.fail(errorMsg.toString());
+-            }
+-            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
+-            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
+-        } catch (IOException exc) {
+-            Assert.fail(exc.getLocalizedMessage());
+-        }
+-        
+-        return project;
+-    }
+ }
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/TestDescriptor.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/TestDescriptor.java
+new file mode 100644
+index 0000000..d28bdbb
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/TestDescriptor.java
+@@ -0,0 +1,134 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner;
++
++import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.GeneralMeasures;
++import net.ssehub.easy.reasoning.core.reasoner.IMeasurementKey;
++import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.reasoning.sseReasoner.Descriptor;
++import net.ssehub.easy.reasoning.sseReasoner.Measures;
++import net.ssehub.easy.reasoning.sseReasoner.Reasoner;
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector.IMeasurementIdentifier;
++
++/**
++ * The test descriptor for the SSE reasoner.
++ * 
++ * @author Holger Eichelberger
++ */
++public class TestDescriptor extends AbstractTestDescriptor {
++
++    public static final ITestDescriptor INSTANCE = new TestDescriptor();
++    private static final IMeasurementKey[] MEASUREMENTS = concat(Measures.values(), GeneralMeasures.values());
++    private Reasoner reasoner = new Reasoner();
++
++    /**
++     * The specific measurement identifiers for the SSE reasoner.
++     * 
++     * @author Holger Eichelberger
++     */
++    public enum MeasurementIdentifier implements IMeasurementIdentifier {
++
++        /**
++         * Number of variables in constraints.
++         */
++        REASONER_VARIABLES_IN_CONSTRAINTS,
++
++        /**
++         * Number of constraints with evaluation problems.
++         */
++        REASONER_PROBLEM_CONSTRAINTS,
++
++        /**
++         * Number of constraints with assignment problems.
++         */
++        REASONER_PROBLEM_ASSIGNMENTS;
++
++        @Override
++        public boolean isAutomatic() {
++            return false;
++        }
++
++    }
++    
++    /**
++     * Creates a test descriptor.
++     */
++    private TestDescriptor() {
++        super("net.ssehub.easy.reasoning.sseReasoner.tests", 
++            null, 
++            true, // CHECK
++            false);
++    }
++    
++    @Override
++    public IReasoner createReasoner() {
++        return new Reasoner();
++    }
++
++    @Override
++    public void registerResoner() {
++        ReasonerFrontend.getInstance().getRegistry().register(reasoner);
++    }
++
++    @Override
++    public void unregisterReasoner() {
++        ReasonerFrontend.getInstance().getRegistry().unregister(reasoner);
++    }
++
++    @Override
++    public String getName() {
++        return Descriptor.NAME;
++    }
++
++    @Override
++    public String getVersion() {
++        return Descriptor.VERSION;
++    }
++
++    /**
++     * Registers the measurement mappings for the SSE reasoner.
++     */
++    public static void registerMeasurementMappings() {
++        MeasurementCollector.registerMapping(Measures.VARIABLES_IN_CONSTRAINTS, 
++            MeasurementIdentifier.REASONER_VARIABLES_IN_CONSTRAINTS);
++        MeasurementCollector.registerMapping(Measures.PROBLEM_CONSTRAINTS, 
++            MeasurementIdentifier.REASONER_PROBLEM_CONSTRAINTS);
++        MeasurementCollector.registerMapping(Measures.PROBLEM_ASSIGNMENTS, 
++            MeasurementIdentifier.REASONER_PROBLEM_ASSIGNMENTS);
++    }
++    
++    /**
++     * Automatically registers the measurement mappings.
++     */
++    static {
++        registerMeasurementMappings();
++    }
++
++    @Override
++    public IMeasurementKey[] measurements() {
++        return MEASUREMENTS;    
++    }
++
++    @Override
++    public String getMeasurementFileName() {
++        return "measurements-sse.tsv";
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java
+new file mode 100644
+index 0000000..3142623
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.adaptation;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class AdaptationIntegrityTests extends net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public AdaptationIntegrityTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java
+new file mode 100644
+index 0000000..01dfe9b
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.adaptation;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Collection constraints tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class AdaptationScenarioTests extends net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public AdaptationScenarioTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java
+new file mode 100644
+index 0000000..d9524c1
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java
+@@ -0,0 +1,23 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.adaptation;
++
++import org.junit.runner.RunWith;
++import org.junit.runners.Suite;
++import org.junit.runners.Suite.SuiteClasses;
++
++/**
++ * Tests for testing the reasoning capabilities for adaptation.<br/>
++ * Usually a property is used to specify the location of test data.
++ * This is done with the property
++ * {@link net.ssehub.easy.reasoning.core.frontend.TestConfiguration#SYSTEM_PROPERTY}. For instance: <br/>
++ * <tt>-DreasonerCore.testdata.home=C:\EASyProducer-git\Plugins\Reasoner\ReasonerCore\ReasonerCore.test\testdata</tt>
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++@RunWith(Suite.class)
++@SuiteClasses({
++    AdaptationIntegrityTests.class,
++    AdaptationScenarioTests.class
++    })
++public class AllTests {
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java
+new file mode 100644
+index 0000000..1bc5737
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java
+@@ -0,0 +1,6 @@
++/**
++ * Reasoning tests for adaptation.
++ * @author sizonenko
++ *
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.adaptation;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java
+new file mode 100644
+index 0000000..d8f0e8e
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java
+@@ -0,0 +1,30 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import org.junit.runner.RunWith;
++import org.junit.runners.Suite;
++import org.junit.runners.Suite.SuiteClasses;
++
++/**
++ * Tests for testing the reasoning capabilities.<br/>
++ * Usually a property is used to specify the location of test data.
++ * This is done with the property
++ * {@link net.ssehub.easy.reasoning.core.frontend.TestConfiguration#SYSTEM_PROPERTY}. For instance: <br/>
++ * <tt>-DreasonerCore.testdata.home=C:\EASyProducer-git\Plugins\Reasoner\ReasonerCore\ReasonerCore.test\testdata</tt>
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++@RunWith(Suite.class)
++@SuiteClasses({    
++    AttributeTests.class,  
++    CollectionConstraintsTests.class,
++    FailedDecisionsTests.class,
++    RuntimeReasoningTests.class,
++    OperationTests.class,
++    CollectionOperationsTests.class,
++    StructureTests.class,
++    ConstraintVariableTests.class,
++    EvalTests.class
++    })
++public class AllTests {
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java
+new file mode 100644
+index 0000000..366fdce
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java
+@@ -0,0 +1,21 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Attribute tests. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class AttributeTests extends net.ssehub.easy.reasoning.core.capabilities.AttributeTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public AttributeTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java
+new file mode 100644
+index 0000000..85d8132
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Collection constraints tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class CollectionConstraintsTests extends net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public CollectionConstraintsTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java
+new file mode 100644
+index 0000000..517224e
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java
+@@ -0,0 +1,34 @@
++/*
++ * Copyright 2009-2016 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the {@link net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests}
++ * for the SSE-Reasoner.
++ * @author El-Sharkawy
++ */
++public class CollectionOperationsTests extends net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public CollectionOperationsTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java
+new file mode 100644
+index 0000000..d961085
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Collection constraints tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class ConstraintVariableTests extends net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public ConstraintVariableTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java
+new file mode 100644
+index 0000000..06e46a4
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Collection constraints tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class EvalTests extends net.ssehub.easy.reasoning.core.reasoner.EvalTests {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public EvalTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java
+new file mode 100644
+index 0000000..81ae5ab
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Incremental reasoning tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class FailedDecisionsTests extends net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public FailedDecisionsTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java
+new file mode 100644
+index 0000000..ed47ca8
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java
+@@ -0,0 +1,21 @@
++
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the operation tests for the SSE-Reasoner.
++ * 
++ * @author Holger Eichelberger
++ * @author El-Sharkawy
++ */
++public class OperationTests extends net.ssehub.easy.reasoning.core.frontend.OperationTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public OperationTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java
+new file mode 100644
+index 0000000..1a0e70b
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Incremental reasoning tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class RuntimeReasoningTests extends net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public RuntimeReasoningTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java
+new file mode 100644
+index 0000000..6c237a2
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java
+@@ -0,0 +1,34 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Test of reasoner capabilities related to the structure of variability models.
++ * @author El-Sharkawy
++ *
++ */
++public class StructureTests extends net.ssehub.easy.reasoning.core.frontend.StructureTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public StructureTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt
+new file mode 100644
+index 0000000..e87e44e
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt
+@@ -0,0 +1,14 @@
++1) DefaultAssign
++Assign attribute with a default value to the project.
++
++2) BlockAssign
++Assign attribute to the project, use assign block for assigning attribute value.
++
++3) IndividualAssign
++Assign attribute to the project, use individual attribute assignments. 
++
++4) BlockAssignNested
++Assign attribute to the project, use assign block for assigning attribute value to a compound nested element.
++
++5) IndividualAssignNested
++Assign attribute to the project, use individual attribute assignments to a compound nested element.
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java
+new file mode 100644
+index 0000000..ae380c5
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java
+@@ -0,0 +1,6 @@
++/**
++ * Tests attributes.
++ * @author Sizonenko
++ *
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/package-info.java
+index 8125011..9d98d7a 100644
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/package-info.java
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/package-info.java
+@@ -3,4 +3,4 @@
+  * @author Sizonenko
+  *
+  */
+-package net.ssehub.easy.reasoning.sseReasoner;
+\ No newline at end of file
++package test.net.ssehub.easy.reasoning.sseReasoner;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java
+new file mode 100644
+index 0000000..d87de3b
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java
+@@ -0,0 +1,19 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.performance;
++
++import org.junit.runner.RunWith;
++import org.junit.runners.Suite;
++import org.junit.runners.Suite.SuiteClasses;
++
++/**
++ * Bundling all performance tests.
++ * @author Sizonenko
++ */
++@RunWith(Suite.class)
++@SuiteClasses({
++    CaseStudyStats.class,
++    GeneratedStats.class,
++    HistoryStats.class
++    })
++public class AllTests {
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java
+new file mode 100644
+index 0000000..a209d09
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.performance;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class CaseStudyStats extends net.ssehub.easy.reasoning.core.performance.CaseStudyStats {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public CaseStudyStats() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java
+new file mode 100644
+index 0000000..ea9fe48
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java
+@@ -0,0 +1,38 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.performance;
++
++import org.junit.Test;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class GeneratedStats extends net.ssehub.easy.reasoning.core.performance.GeneratedStats {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public GeneratedStats() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++    /**
++     * Tests Boolean 1 to 3 ration.
++     */
++    @Test    
++    public void gr11() {
++        super.gr11();
++    } 
++    
++    /**
++     * Tests Boolean 1 to 1 ration.
++     */
++    @Test    
++    public void gr12() {
++        super.gr12();
++    }   
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java
+new file mode 100644
+index 0000000..b2f9132
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java
+@@ -0,0 +1,30 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.performance;
++
++import org.junit.Test;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class HistoryStats extends net.ssehub.easy.reasoning.core.performance.HistoryStats {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public HistoryStats() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++    /**
++     * Tests history models.
++     */
++    @Test    
++    public void historyStatsTest() {
++        super.historyStatsTest();
++    } 
++   
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java
+new file mode 100644
+index 0000000..2b10023
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java
+@@ -0,0 +1,5 @@
++/**
++ * Performance tests.
++ * @author Sizonenko
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.performance;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java
+new file mode 100644
+index 0000000..76f3a9b
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java
+@@ -0,0 +1,27 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import org.junit.runner.RunWith;
++import org.junit.runners.Suite;
++import org.junit.runners.Suite.SuiteClasses;
++
++/**
++ * Bundling all tests.
++ * @author Sizonenko
++ */
++@RunWith(Suite.class)
++@SuiteClasses({    
++    QMValidTest.class,  
++    QMHardwareTest1.class,
++    QMHardwareTest2.class,
++    QMHardwareTest3.class,
++    QMAlgorithmsTest1.class,
++    QMFamiliesTest1.class,
++    QMFamiliesTest2.class,
++    QMPipelinesTest1.class,
++    QMScenarioTests.class,
++    QMMismatchedTest.class,
++    QMMonTest.class
++    })
++public class AllTests {
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java
+new file mode 100644
+index 0000000..0567f23
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Hardware constraint: algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size() test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMAlgorithmsTest1 extends net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1 {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public QMAlgorithmsTest1() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java
+new file mode 100644
+index 0000000..2eabad5
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Hardware constraint: inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input) test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMFamiliesTest1 extends net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1 {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public QMFamiliesTest1() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java
+new file mode 100644
+index 0000000..e7aa18b
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Hardware constraint: memberCount = members.size() > 0 test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMFamiliesTest2 extends net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2 {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public QMFamiliesTest2() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java
+new file mode 100644
+index 0000000..272c5ca
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Hardware constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty() test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMHardwareTest1 extends net.ssehub.easy.reasoning.core.qm.QMHardwareTest1 {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public QMHardwareTest1() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java
+new file mode 100644
+index 0000000..f220008
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Hardware constraint: managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMHardwareTest2 extends net.ssehub.easy.reasoning.core.qm.QMHardwareTest2 {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public QMHardwareTest2() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java
+new file mode 100644
+index 0000000..f6aca78
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Hardware constraint: machineName = machines->collect(m|m.name).size() == machines.size() test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMHardwareTest3 extends net.ssehub.easy.reasoning.core.qm.QMHardwareTest3 {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public QMHardwareTest3() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java
+new file mode 100644
+index 0000000..e0fc1c9
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java
+@@ -0,0 +1,37 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import net.ssehub.easy.reasoning.core.frontend.MismatchedTest;
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Qualimaster model test.
++ * Model is valid.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMMismatchedTest extends MismatchedTest {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public QMMismatchedTest() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMonTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMonTest.java
+new file mode 100644
+index 0000000..bd185a5
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMonTest.java
+@@ -0,0 +1,36 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Qualimaster monitoring test.
++ * Model is valid.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMMonTest extends net.ssehub.easy.reasoning.core.qm.QMMonTest {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public QMMonTest() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java
+new file mode 100644
+index 0000000..954cf5f
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java
+@@ -0,0 +1,36 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Hardware constraint: flow error from the presentation test.
++ * typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMPipelinesTest1 extends net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1 {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public QMPipelinesTest1() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java
+new file mode 100644
+index 0000000..410ab13
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the operation tests for SSE reasoner.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMScenarioTests extends net.ssehub.easy.reasoning.core.qm.QMScenarioTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public QMScenarioTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java
+new file mode 100644
+index 0000000..1caf9f6
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java
+@@ -0,0 +1,36 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Qualimaster model test.
++ * Model is valid.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMValidTest extends net.ssehub.easy.reasoning.core.qm.QMValidTest {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public QMValidTest() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt
+new file mode 100644
+index 0000000..14ab256
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt
+@@ -0,0 +1,28 @@
++QMValidTest
++Model does not fail
++
++Hardware
++QMHardwareTest1
++constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty()
++QMHardwareTest2
++managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) (same test for Workers)
++QMHardwareTest3
++machineName = machines->collect(m|m.name).size() == machines.size()
++QMHardwareTest4
++
++Infrastructure
++workerportCheck = activePipelinesNumWorkers() <= workerMachinesPortsCount() - needs change
++
++Algorithms
++QMAlgorithmsTest1
++algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size()
++
++Families
++QMFamiliesTest1
++inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input)
++QMFamiliesTest2
++memberCount = members.size() > 0
++
++Pipelines
++QMPipelinesTest1
++typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java
+new file mode 100644
+index 0000000..f1c4553
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java
+@@ -0,0 +1,6 @@
++/**
++ * Test the Qualimaster model.
++ * @author Sizonenko
++ *
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.qm;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java
+new file mode 100644
+index 0000000..f6e68a7
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java
+@@ -0,0 +1,32 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import org.junit.runner.RunWith;
++import org.junit.runners.Suite;
++import org.junit.runners.Suite.SuiteClasses;
++
++/**
++ * Bundling all tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ * @author Eichelberger
++ */
++@RunWith(Suite.class)
++@SuiteClasses({
++    EvaluationIntegrityTest.class,
++    IntegrityTests.class,  
++    ReasoningScenarioTests.class,
++    StressTest.class,
++    CodedTests.class,
++    BooleanTests.class,
++    RealTests.class, 
++    StringTests.class, 
++    IntegerTests.class,
++    EnumTests.class, 
++    CompoundTests.class,
++    InterfaceTests.class,
++    ApplicationsTests.class,
++    })
++public class AllTests {
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ApplicationsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ApplicationsTests.java
+new file mode 100644
+index 0000000..9d16f3f
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ApplicationsTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the application tests for SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Eichelberger
++ */
++public class ApplicationsTests extends net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public ApplicationsTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanTests.java
+new file mode 100644
+index 0000000..22fb30e
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanTests.java
+@@ -0,0 +1,22 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the boolean tests for SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ * @author Eichelberger
++ */
++public class BooleanTests extends net.ssehub.easy.reasoning.core.reasoner.BooleanTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public BooleanTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java
+new file mode 100644
+index 0000000..f7bd17c
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java
+@@ -0,0 +1,35 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Tests reasoner capabilities via coded tests, without interactions from the parser. Inheritance is used here to 
++ * be able to override and disable some tests, e.g., during development.
++ * 
++ * @author El-Sharkawy
++ */
++public class CodedTests extends net.ssehub.easy.reasoning.core.reasoner.CodedTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public CodedTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CompoundTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CompoundTests.java
+new file mode 100644
+index 0000000..635cc46
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CompoundTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the compound tests for SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Eichelberger
++ */
++public class CompoundTests extends net.ssehub.easy.reasoning.core.reasoner.CompoundTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public CompoundTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EnumTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EnumTests.java
+new file mode 100644
+index 0000000..2d9e50d
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EnumTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the enum tests for SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Eichelberger
++ */
++public class EnumTests extends net.ssehub.easy.reasoning.core.reasoner.EnumTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public EnumTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java
+new file mode 100644
+index 0000000..b0f4482
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java
+@@ -0,0 +1,36 @@
++/*
++ * Copyright 2009-2014 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Tests for {@link Resolver}. Inheritance is used here to 
++ * be able to override and disable some tests, e.g., during development.
++ * 
++ * @author El-Sharkawy
++ * @author Sizonenko
++ */
++public class EvaluationIntegrityTest extends net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public EvaluationIntegrityTest() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegerTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegerTests.java
+new file mode 100644
+index 0000000..a50578a
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegerTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the integer tests for SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Eichelberger
++ */
++public class IntegerTests extends net.ssehub.easy.reasoning.core.reasoner.IntegerTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public IntegerTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java
+new file mode 100644
+index 0000000..eedc205
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java
+@@ -0,0 +1,21 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the integrity tests for the SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class IntegrityTests extends net.ssehub.easy.reasoning.core.reasoner.IntegrityTests {
++    
++    /**
++     * Creates a specific test instance.
++     */
++    public IntegrityTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/InterfaceTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/InterfaceTests.java
+new file mode 100644
+index 0000000..ddb7b51
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/InterfaceTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the interface tests for SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Eichelberger
++ */
++public class InterfaceTests extends net.ssehub.easy.reasoning.core.reasoner.InterfaceTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public InterfaceTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RampUpTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RampUpTest.java
+new file mode 100644
+index 0000000..bb59c52
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RampUpTest.java
+@@ -0,0 +1,34 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * A ramp-up test for the SSE reasoner.
++ * 
++ * @author Holger Eichelberger
++ */
++public class RampUpTest extends net.ssehub.easy.reasoning.core.reasoner.RampUpTest {
++
++    /**
++     * Creates the test.
++     */
++    public RampUpTest() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RealTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RealTests.java
+new file mode 100644
+index 0000000..a18eb9c
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RealTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the real tests for SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Eichelberger
++ */
++public class RealTests extends net.ssehub.easy.reasoning.core.reasoner.RealTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public RealTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java
+new file mode 100644
+index 0000000..9942c1e
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the operation tests for SSE reasoner.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class ReasoningScenarioTests extends net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public ReasoningScenarioTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java
+new file mode 100644
+index 0000000..84fcf3f
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java
+@@ -0,0 +1,19 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Stresstests.
++ * 
++ * @author krafczyk
++ */
++public class StressTest extends net.ssehub.easy.reasoning.core.reasoner.StressTest {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public StressTest() {
++        super(TestDescriptor.INSTANCE);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StringTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StringTests.java
+new file mode 100644
+index 0000000..77b6e28
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StringTests.java
+@@ -0,0 +1,20 @@
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
++
++import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
++
++/**
++ * Configures the string tests for SSE reasoner. Inheritance is used here to be able
++ * to override and disable some tests, e.g., during development.
++ * 
++ * @author Eichelberger
++ */
++public class StringTests extends net.ssehub.easy.reasoning.core.reasoner.StringTests {
++
++    /**
++     * Creates a specific test instance.
++     */
++    public StringTests() {
++        super(TestDescriptor.INSTANCE);
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java
+new file mode 100644
+index 0000000..c5bada7
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java
+@@ -0,0 +1,5 @@
++/**
++ * Test classes for the <tt>de.uni_hildesheim.sse.reasoning.drools2</tt> package, as well as the functionality
++ * of the complete Drools2 reasoner (integration test).
++ */
++package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Descriptor.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Descriptor.java
+index 32eb62e..c31a4c7 100644
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Descriptor.java
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Descriptor.java
+@@ -22,9 +22,9 @@
+ 
+     public static final boolean LOGGING = false; 
+     
+-    static final String NAME = "EASy-Producer IVML Reasoner";
++    public static final String NAME = "EASy-Producer IVML Reasoner";
+ 
+-    static final String VERSION = "1.0";
++    public static final String VERSION = "1.0";
+     
+     
+     private static final String LICENSE = "Apache License" 
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Engine.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Engine.java
+index 36f5122..b306ce0 100644
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Engine.java
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Engine.java
+@@ -11,6 +11,7 @@
+ import net.ssehub.easy.basics.logger.EASyLoggerFactory.EASyLogger;
+ import net.ssehub.easy.basics.messages.Status;
+ import net.ssehub.easy.basics.progress.ProgressObserver;
++import net.ssehub.easy.reasoning.core.reasoner.GeneralMeasures;
+ import net.ssehub.easy.reasoning.core.reasoner.Message;
+ import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
+ import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration.IAdditionalInformationLogger;
+@@ -119,11 +120,20 @@
+         infoLogger.info("Model: " + project.getName());
+ //        infoLogger.info("Number of variables: " + resolver.variableCount());
+         infoLogger.info("Number of variables involved in constraints: " + resolver.variableInConstraintCount());
++        result.setMeasure(Measures.VARIABLES_IN_CONSTRAINTS, resolver.variableInConstraintCount());
+         infoLogger.info("Number of constraints: " + resolver.constraintCount());
++        result.setMeasure(GeneralMeasures.CONSTRAINT_COUNT, resolver.constraintCount());
+         infoLogger.info("Number of reevaluations: " + reevaluationCount);
++        result.setMeasure(GeneralMeasures.REEVALUATION_COUNT, reevaluationCount);
+         infoLogger.info("Number of problem constraints: " + failedConstraints);
++        result.setMeasure(Measures.PROBLEM_CONSTRAINTS, failedConstraints);
+         infoLogger.info("Number of problem assignments: " + failedAssignments);
++        result.setMeasure(Measures.PROBLEM_ASSIGNMENTS, failedAssignments);
++        result.setMeasure(GeneralMeasures.PROBLEMS, failedConstraints + failedAssignments);
+         infoLogger.info("Evaluation time: " + evaluationTime);
++        result.setMeasure(GeneralMeasures.REASONING_TIME, evaluationTime);
++        result.setMeasure(GeneralMeasures.TRANSLATION_TIME, resolver.getTranslationTime());
++        result.setMeasure(GeneralMeasures.EVALUATION_TIME, resolver.getEvaluationTime());
+         return result;        
+     } 
+     
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Measures.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Measures.java
+new file mode 100644
+index 0000000..89f77bb
+--- /dev/null
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Measures.java
+@@ -0,0 +1,63 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.sseReasoner;
++
++import net.ssehub.easy.reasoning.core.reasoner.IMeasurementKey;
++
++/**
++ * The measures provided/supported by the SSE reasoner.
++ * 
++ * @author Holger Eichelberger
++ */
++public enum Measures implements IMeasurementKey {
++    
++    /**
++     * Number of variables in constraints.
++     */
++    VARIABLES_IN_CONSTRAINTS("Number of variables involved in constraints"),
++
++    /**
++     * Number of constraints with evaluation problems.
++     */
++    PROBLEM_CONSTRAINTS("Number of problem constraints"),
++
++    /**
++     * Number of constraints with assignment problems.
++     */
++    PROBLEM_ASSIGNMENTS("Number of problem assignments");
++    
++    private String explanation;
++    
++    /**
++     * Creates a measures constant.
++     * 
++     * @param explanation the headline/explanation
++     */
++    private Measures(String explanation) {
++        this.explanation = explanation;
++    }
++
++    @Override
++    public String getExplanation() {
++        return explanation;
++    }
++
++    @Override
++    public int outputPos() {
++        return 100 + ordinal();
++    }
++
++}
+diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Resolver.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Resolver.java
+index 908dfc3..c3f6d97 100644
+--- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Resolver.java
++++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Resolver.java
+@@ -119,6 +119,8 @@
+     private int variablesInConstraintsCounter = 0;    
+     private int reevaluationCounter = 0;
+     private int variablesCounter = 0;
++    private long translationTime = 0;
++    private long evaluationTime = 0;
+     
+     private boolean incremental;
+     
+@@ -1016,6 +1018,7 @@
+      * @param dispatchScope the scope for dynamic dispatches
+      */
+     private void processConstraints(Project dispatchScope) { 
++        long start = System.currentTimeMillis();
+         List<Constraint> scopeConstraints = new ArrayList<Constraint>();
+         if (!incremental) {
+             if (defaultConstraints.size() > 0) {
+@@ -1077,6 +1080,7 @@
+         constraintBaseSize = constraintBase.size();
+         constraintCounter = constraintCounter + constraintBaseSize;
+         clearConstraintLists();
++        translationTime += System.currentTimeMillis() - start;
+         resolveConstraints(constraintBase, dispatchScope);
+         constraintBase.clear(); 
+     }
+@@ -1182,6 +1186,7 @@
+      * @param dispatchScope the scope for dynamic dispatches
+      */
+     private void resolveConstraints(List<Constraint> constraints, Project dispatchScope) {
++        long start = System.currentTimeMillis();
+         if (Descriptor.LOGGING) {
+             printConstraints(constraintBase);            
+         }
+@@ -1202,7 +1207,6 @@
+                     LOGGER.debug("Resolving: " + reevaluationCounter + ": " + StringProvider.toIvmlString(cst) 
+                         + " : " + constraint.getTopLevelParent());                    
+                 }
+-                // TODO check whether these four statements can be moved up / clearResult is sufficient instead of clear
+                 evaluator.init(config, state, false, listener); 
+                 evaluator.setResolutionListener(resolutionListener);
+                 evaluator.setScopeAssignmnets(scopeAssignments);
+@@ -1245,11 +1249,11 @@
+                 }
+                 if (Descriptor.LOGGING) {
+                     LOGGER.debug("Result: " + evaluator.getResult());
+-                    LOGGER.debug("------");                     
+                 }
+                 evaluator.clear();
+             }
+         }
++        evaluationTime += System.currentTimeMillis() - start;
+     }
+     
+     
+@@ -1570,4 +1574,21 @@
+         return failedElements;
+     }  
+ 
++    /**
++     * Returns the time used for evaluation.
++     * 
++     * @return the time in ms
++     */
++    long getEvaluationTime() {
++        return evaluationTime;
++    }
++    
++    /**
++     * Returns the time used for translation.
++     * 
++     * @return the time in ms
++     */
++    long getTranslationTime() {
++        return translationTime;
++    }
+ }
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/META-INF/MANIFEST.MF b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/META-INF/MANIFEST.MF
+index ae722b6..4b5d9de 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/META-INF/MANIFEST.MF
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/META-INF/MANIFEST.MF
+@@ -6,10 +6,16 @@
+ Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+ Require-Bundle: org.junit,
+  de.uni_hildesheim.sse.ivml;bundle-version="0.1.1",
++ net.ssehub.easy.varModel.tests;bundle-version="0.0.10";visibility:=reexport,
+  net.ssehub.easy.reasoning.core;bundle-version="0.0.3";visibility:=reexport,
+  org.eclipse.core.runtime;bundle-version="3.7.0",
+  net.ssehub.easy.dslCore;bundle-version="0.0.1"
+-Export-Package: net.ssehub.easy.reasoning.core.frontend
++Export-Package: net.ssehub.easy.reasoning.core.adaptation,
++ net.ssehub.easy.reasoning.core.capabilities,
++ net.ssehub.easy.reasoning.core.frontend,
++ net.ssehub.easy.reasoning.core.performance,
++ net.ssehub.easy.reasoning.core.qm,
++ net.ssehub.easy.reasoning.core.reasoner
+ Bundle-ClassPath: testdata/,
+  .
+ Bundle-ActivationPolicy: lazy
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationIntegrityTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationIntegrityTests.java
+new file mode 100644
+index 0000000..b95eb77
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationIntegrityTests.java
+@@ -0,0 +1,316 @@
++package net.ssehub.easy.reasoning.core.adaptation;
++
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.cst.CSTSemanticException;
++import net.ssehub.easy.varModel.cst.ConstantValue;
++import net.ssehub.easy.varModel.cst.OCLFeatureCall;
++import net.ssehub.easy.varModel.cst.Variable;
++import net.ssehub.easy.varModel.model.Constraint;
++import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.datatypes.Compound;
++import net.ssehub.easy.varModel.model.datatypes.IntegerType;
++import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
++import net.ssehub.easy.varModel.model.values.Value;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++import net.ssehub.easy.varModel.persistency.StringProvider;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class AdaptationIntegrityTests extends AbstractTest {
++
++    private Configuration config;
++    private ReasonerConfiguration rConfig;
++    private Project project;
++    private DecisionVariableDeclaration declA;
++    private DecisionVariableDeclaration declB;
++    private DecisionVariableDeclaration declC;
++    private DecisionVariableDeclaration myParam;
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected AdaptationIntegrityTests(ITestDescriptor descriptor) {
++        super(descriptor, null);
++    }
++
++    /**
++     * Creates a simple test project and performs reasoning.
++     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
++     * {@link ValueFactory}.
++     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
++     */
++    public void createSimpleProject() throws ValueDoesNotMatchTypeException, CSTSemanticException {
++        // Create project and variables
++        project = new Project("SimpleTestProject");
++        declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, project);
++        project.add(declA);
++        declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, project);
++        project.add(declB);
++        declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, project);
++        declC.setValue(33);
++        project.add(declC);
++        
++        // Create assignment
++        Value valA = ValueFactory.createValue(declA.getType(), 31);
++        Variable varA = new Variable(declA);
++        ConstantValue constValA = new ConstantValue(valA);
++        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
++        Constraint assignmentConstraint = new Constraint(project);
++        assignmentConstraint.setConsSyntax(assignmentA);
++        project.add(assignmentConstraint);
++        
++        // Create implies constraint
++        Value valB = ValueFactory.createValue(declB.getType(), 37);
++        ConstantValue constValB = new ConstantValue(valB);
++        Value valC = ValueFactory.createValue(declC.getType(), 40);
++        ConstantValue constValC = new ConstantValue(valC);
++        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
++        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
++        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
++        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
++        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
++        Constraint impliesConstaint = new Constraint(project);
++        impliesConstaint.setConsSyntax(implies);
++        project.add(impliesConstaint);
++        Constraint impliesConstaintFail = new Constraint(project);
++        impliesConstaintFail.setConsSyntax(impliesFail);
++        project.add(impliesConstaintFail);
++        
++        // debugging
++        System.out.println(StringProvider.toIvmlString(project));
++        
++        // Create Configuration (will also start AssignmentResolver)
++        config = new Configuration(project, true);        
++        rConfig = new ReasonerConfiguration();
++        performReasoning(project, config, rConfig);
++    } 
++    
++    /**
++     * Creates a simple test project and performs reasoning.
++     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
++     * {@link ValueFactory}.
++     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
++     */
++    public void createCompoundProject() throws ValueDoesNotMatchTypeException, CSTSemanticException {
++        // Create project and variables
++        project = new Project("CompoundTestProject");
++        Compound param = new Compound("IntParameter", project);
++        declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, param);
++        param.add(declA);
++        declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, param);
++        param.add(declB);
++        declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, param);
++        declC.setValue(33);
++        param.add(declC);
++        project.add(param);
++        
++        myParam = new DecisionVariableDeclaration("myParam", param, project);
++        project.add(myParam);
++        
++        // Create assignment
++        Value valA = ValueFactory.createValue(declA.getType(), 31);
++        Variable varA = new Variable(declA);
++        ConstantValue constValA = new ConstantValue(valA);
++        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
++        Constraint assignmentConstraint = new Constraint(param);
++        assignmentConstraint.setConsSyntax(assignmentA);
++        param.addConstraint(assignmentConstraint);
++        
++        // Create implies constraint
++        Value valB = ValueFactory.createValue(declB.getType(), 37);
++        ConstantValue constValB = new ConstantValue(valB);
++        Value valC = ValueFactory.createValue(declC.getType(), 40);
++        ConstantValue constValC = new ConstantValue(valC);
++        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
++        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
++        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
++        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
++        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
++        Constraint impliesConstaint = new Constraint(param);
++        impliesConstaint.setConsSyntax(implies);
++        param.addConstraint(impliesConstaint);
++        Constraint impliesConstaintFail = new Constraint(param);
++        impliesConstaintFail.setConsSyntax(impliesFail);
++        param.addConstraint(impliesConstaintFail);
++        
++        // debugging
++        System.out.println(StringProvider.toIvmlString(project));
++        
++        // Create Configuration (will also start AssignmentResolver)
++        config = new Configuration(project, true);        
++        rConfig = new ReasonerConfiguration();
++        performReasoning(project, config, rConfig, "CompoundInit");
++    }  
++    
++    /**
++     * Tests the results of initial reasoning.
++     */
++    @Test
++    public void testSimpleResultAfterReasoning() {
++        try {
++            createSimpleProject();
++            IDecisionVariable iVarA = config.getDecision(declA);
++            IDecisionVariable iVarB = config.getDecision(declB);
++            IDecisionVariable iVarC = config.getDecision(declC);
++            
++            // Test correct assignments
++            Assert.assertNotNull(iVarA);
++            Assert.assertEquals(31, iVarA.getValue().getValue());
++            assertContained("iVarA", iVarA.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++
++            Assert.assertNotNull(iVarB);
++            Assert.assertEquals(37, iVarB.getValue().getValue());
++            assertContained("iVarB", iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++            
++            Assert.assertNotNull(iVarC);
++            Assert.assertEquals(33, iVarC.getValue().getValue());
++            Assert.assertSame("iVarC", AssignmentState.DEFAULT, iVarC.getState());
++
++        } catch (ValueDoesNotMatchTypeException e) {
++            e.printStackTrace();
++        } catch (CSTSemanticException e) {
++            e.printStackTrace();
++        }
++    }
++    
++    /**
++     * Tests the results of reasoning after changing value for adaptation.
++     */
++    @Test
++    public void testSimpleResultAfterReasoningForAdaptation() {
++        try {
++            createSimpleProject();
++            
++            Value newValA = ValueFactory.createValue(declA.getType(), 101);
++            Value newValC = ValueFactory.createValue(declC.getType(), 33);
++            try {
++                config.getDecision(declA).setValue(newValA, AssignmentState.USER_ASSIGNED);
++                config.getDecision(declC).setValue(newValC, AssignmentState.USER_ASSIGNED);
++            } catch (ConfigurationException e) {
++                e.printStackTrace();
++            }
++            performReasoning(project, config, rConfig);
++
++            IDecisionVariable iVarA = config.getDecision(declA);
++            IDecisionVariable iVarB = config.getDecision(declB);
++            IDecisionVariable iVarC = config.getDecision(declC);
++            
++            // Test correct assignments
++            Assert.assertNotNull(iVarA);
++            Assert.assertEquals(101, iVarA.getValue().getValue());
++            Assert.assertSame("iVarA", AssignmentState.USER_ASSIGNED, iVarA.getState());
++            
++            Assert.assertNotNull(iVarB);
++            Assert.assertEquals(37, iVarB.getValue().getValue());
++            assertContained("iVarB", iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++            
++            Assert.assertNotNull(iVarC);
++            Assert.assertEquals(33, iVarC.getValue().getValue());
++            Assert.assertSame("iVarC", AssignmentState.USER_ASSIGNED, iVarC.getState());
++            
++        } catch (ValueDoesNotMatchTypeException e) {
++            e.printStackTrace();
++        } catch (CSTSemanticException e) {
++            e.printStackTrace();
++        }
++    }
++    
++    /**
++     * Tests the results of initial reasoning.
++     */
++    @Test
++    public void testCompoundResultAfterReasoning() {
++        try {
++            createCompoundProject();
++            
++            IDecisionVariable iMyParam = config.getDecision(myParam);
++            IDecisionVariable iVarA = iMyParam.getNestedElement(0);
++            IDecisionVariable iVarB = iMyParam.getNestedElement(1);
++            IDecisionVariable iVarC = iMyParam.getNestedElement(2);
++            
++            // Test correct assignments
++            Assert.assertNotNull(iMyParam);
++            Assert.assertSame("iMyParam", AssignmentState.ASSIGNED, iMyParam.getState());
++            
++            Assert.assertNotNull(iVarA);
++            //Assert.assertEquals(31, iVarA.getValue().getValue());
++            //assertContained(iVarA.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++            
++            Assert.assertNotNull(iVarB);
++            //Assert.assertEquals(37, iVarB.getValue().getValue());
++            //assertContained(iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++            
++            Assert.assertNotNull(iVarC);
++            //Assert.assertEquals(33, iVarC.getValue().getValue());
++            //Assert.assertSame("iVarC", AssignmentState.DEFAULT, iVarC.getState());
++            
++        } catch (ValueDoesNotMatchTypeException e) {
++            e.printStackTrace();
++        } catch (CSTSemanticException e) {
++            e.printStackTrace();
++        }
++    }
++    
++    /**
++     * Tests the results of initial reasoning.
++     */
++    @Test
++    public void testCompoundResultAfterReasoningForAdaptation() {
++        try {
++            createCompoundProject();
++            Value newValA = ValueFactory.createValue(declA.getType(), 101);
++            Value newValC = ValueFactory.createValue(declC.getType(), 33);
++            try {
++                config.getDecision(myParam).getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
++                config.getDecision(myParam).getNestedElement(2).setValue(newValC, AssignmentState.USER_ASSIGNED);
++            } catch (ConfigurationException e) {
++                e.printStackTrace();
++            }
++            performReasoning(project, config, rConfig);
++            
++            IDecisionVariable iMyParam = config.getDecision(myParam);
++            IDecisionVariable iVarA = iMyParam.getNestedElement(0);
++            IDecisionVariable iVarB = iMyParam.getNestedElement(1);
++            IDecisionVariable iVarC = iMyParam.getNestedElement(2);
++            
++            // Test correct assignments
++            Assert.assertNotNull(iMyParam);
++            Assert.assertSame("iMyParam", AssignmentState.ASSIGNED, iMyParam.getState());
++            
++            Assert.assertNotNull(iVarA);
++            Assert.assertEquals(101, iVarA.getValue().getValue());
++            Assert.assertSame("iVarA", AssignmentState.USER_ASSIGNED, iVarA.getState());
++            
++            Assert.assertNotNull(iVarB);
++            //Assert.assertEquals(37, iVarB.getValue().getValue());
++            //assertContained(iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++            
++            Assert.assertNotNull(iVarC);
++            Assert.assertEquals(33, iVarC.getValue().getValue());
++            Assert.assertSame("iVarC", AssignmentState.USER_ASSIGNED, iVarC.getState());
++            
++        } catch (ValueDoesNotMatchTypeException e) {
++            e.printStackTrace();
++        } catch (CSTSemanticException e) {
++            e.printStackTrace();
++        }
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationScenarioTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationScenarioTests.java
+new file mode 100644
+index 0000000..795b538
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationScenarioTests.java
+@@ -0,0 +1,325 @@
++package net.ssehub.easy.reasoning.core.adaptation;
++
++import org.eclipse.xtext.util.Arrays;
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.confModel.IAssignmentState;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.model.ModelQueryException;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.datatypes.IntegerType;
++import net.ssehub.easy.varModel.model.values.Value;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++
++/**
++ * Collection constraints tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class AdaptationScenarioTests extends AbstractTest {
++    
++    private Project project;
++    private Configuration config;
++    private ReasonerConfiguration rConfig;   
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected AdaptationScenarioTests(ITestDescriptor descriptor) {
++        super(descriptor, "adaptationScenarios");
++    }
++    
++    /**
++     * Helper method to prepare configuration from a project.
++     * @param path The name of the ivml file to load (including the file extension) inside of the
++     *     <tt>reasonerModel</tt> folder.
++     */
++    private void prepareConfiguration(String path) {
++        project = loadProject(path);
++        config = new Configuration(project, true);        
++        rConfig = new ReasonerConfiguration();
++    }
++
++    /**
++     * Helper method to run reasoning.
++     * 
++     * @return the reasoning result
++     */
++    private ReasoningResult runReasoning() {
++        return performReasoning(project, config, rConfig);
++    }
++
++    /**
++     * Asserts that a given variable has the expected value (and state).
++     * @param variable The variable to test (maybe a nested variable, but not <tt>null</tt>).
++     * @param expectedValue The expected value of the variable (must not be <tt>null</tt>).
++     * @param explanation A error message if the Junit test case breaks
++     * @param expectedStates Should be one of {@link AssignmentState#ASSIGNED} (if it was initialized by the
++     *     configuration, {@link AssignmentState#USER_ASSIGNED} if it was manually overwritten by the user
++     *     (inside the test case), or {@link AssignmentState#DERIVED} if the reasoner should overwrite a value during
++     *     reasoning
++     */
++    private void assertVariable(IDecisionVariable variable, Object expectedValue, String explanation, 
++         IAssignmentState... expectedStates) {
++        
++        Assert.assertNotNull("Tested variable was NULL, but was not expected to be.", variable);
++        String name = variable.getDeclaration().getName();
++        if (expectedValue != null) {
++            Assert.assertNotNull(name + " " + explanation + " has NULL value, but was not expected.",
++                    variable.getValue());        
++            Assert.assertEquals(name + " " + explanation, expectedValue, variable.getValue().getValue());            
++        } else {
++            Assert.assertEquals(name + " " + explanation, expectedValue, variable.getValue()); 
++        }
++        Assert.assertTrue(name + " " + explanation, Arrays.contains(expectedStates, variable.getState()));
++    }
++        
++    /**
++     * Initial AssignmentResolver. 1st Reasoning. Simple variable value modification by user. 2nd Reasoning.
++     * After variable modification it should not be changed by the reasoner.
++     * Uses VariableAccessor.
++     */
++    @Test
++    public void simpleVariableTest() {        
++        prepareConfiguration("simpleVariable.ivml");
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("a")) {
++                assertVariable(variable, 1, "a after 1 reasoning", AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++                try {
++                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
++                    variable.setValue(newValA, AssignmentState.USER_ASSIGNED);
++                } catch (ValueDoesNotMatchTypeException e) {                    
++                    e.printStackTrace();
++                } catch (ConfigurationException e) {
++                    e.printStackTrace();
++                }
++                assertVariable(variable, 10, "a after new value", AssignmentState.USER_ASSIGNED);
++            }
++            if (variable.getDeclaration().getName().equals("b")) {
++                assertVariable(variable, null, "b after 1 reasoning", AssignmentState.UNDEFINED);
++            }
++        }
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("a")) {
++                assertVariable(variable, 10, "a after 2 reasoning", AssignmentState.USER_ASSIGNED);
++            }
++            //if (variable.getDeclaration().getName().equals("b")) {
++                //assertVariable(variable, 20, "b after 2 reasoning", AssignmentState.DERIVED);
++            //}
++        }
++        
++    }
++    
++    /**
++     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
++     * After variable modification it should not be changed by the reasoner.
++     * Uses VariableAccessor (assigns value to cmp as Variable). - FAILS!
++     */
++    @Test
++    public void compoundVariableTest() {        
++        prepareConfiguration("compoundVariable.ivml");
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("cmp")) {
++                assertVariable(variable.getNestedElement(0), 1, "cmp.a after 1 reasoning", 
++                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++                assertVariable(variable.getNestedElement(1), 2, "cmp.b after 1 reasoning", 
++                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++                try {
++                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
++                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
++                } catch (ValueDoesNotMatchTypeException e) {                    
++                    e.printStackTrace();
++                } catch (ConfigurationException e) {
++                    e.printStackTrace();
++                }
++                assertVariable(variable.getNestedElement(0), 10, "cmp.a after new value", 
++                    AssignmentState.USER_ASSIGNED);
++                assertVariable(variable.getNestedElement(1), 2, "cmp.b after new value", 
++                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++            }
++
++        }
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("cmp")) {
++                assertVariable(variable.getNestedElement(0), 10, "cmp.a after 2 reasoning", 
++                    AssignmentState.USER_ASSIGNED);
++                //assertVariable(variable.getNestedElement(1), 2, "cmp.b after 2 reasoning", AssignmentState.DERIVED);
++            }
++        }
++        
++    }
++    
++    /**
++     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
++     * After variable modification it should not be changed by the reasoner.
++     * Uses CompoundSlotAccessor.
++     */
++    @Test
++    public void compoundConstraintsTest() {        
++        prepareConfiguration("compoundConstraints.ivml");
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("cmp")) {
++                //assertVariable(variable.getNestedElement(0), 1, "cmp.a after 1 reasoning", 
++                //    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++                assertVariable(variable.getNestedElement(1), null, "cmp.b after 1 reasoning", 
++                    AssignmentState.UNDEFINED);
++                try {
++                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
++                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
++                } catch (ValueDoesNotMatchTypeException e) {                    
++                    e.printStackTrace();
++                } catch (ConfigurationException e) {
++                    e.printStackTrace();
++                }
++                assertVariable(variable.getNestedElement(0), 10, "cmp.a after new value", 
++                    AssignmentState.USER_ASSIGNED);
++                assertVariable(variable.getNestedElement(1), null, "cmp.b after new value", 
++                    AssignmentState.UNDEFINED);
++            }
++            
++        }
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("cmp")) {
++                assertVariable(variable.getNestedElement(0), 10, "cmp.a after 2 reasoning", 
++                         AssignmentState.USER_ASSIGNED);
++                //assertVariable(variable.getNestedElement(1), 20, "cmp.b after 2 reasoning", 
++                //         AssignmentState.DERIVED);
++            }
++        }
++        
++    }
++    
++    /**
++     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
++     * After variable modification it should not be changed by the reasoner.
++     * Uses VariableAccessor.
++     */
++    @Test
++    public void collectionOfSimpleVariablesTest() {        
++        prepareConfiguration("collectionOfSimpleVariables.ivml");
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("seqA")) {
++                assertVariable(variable.getNestedElement(0), 1, "seqA[0] after 1 reasoning", 
++                     AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++                assertVariable(variable.getNestedElement(1), 2, "seqA[1] after 1 reasoning", 
++                     AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++                try {
++                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
++                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
++                } catch (ValueDoesNotMatchTypeException e) {                    
++                    e.printStackTrace();
++                } catch (ConfigurationException e) {
++                    e.printStackTrace();
++                }
++                assertVariable(variable.getNestedElement(0), 10, "after user defined value for seqA[0]", 
++                    AssignmentState.USER_ASSIGNED);
++                assertVariable(variable.getNestedElement(1), 2, "after user defined value for seqA[0]", 
++                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++            }            
++        }
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("seqA")) {
++                assertVariable(variable.getNestedElement(0), 10, "seqA[0] after 2 reasoning", 
++                    AssignmentState.USER_ASSIGNED);
++                //assertVariable(variable.getNestedElement(1), 2, "seqA[1] after 2 reasoning", 
++                //    AssignmentState.DERIVED);             
++            }
++        }        
++    }
++
++    
++    /**
++     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
++     * After variable modification it should not be changed by the reasoner.
++     * Uses VariableAccessor.
++     */
++    @Test
++    public void collectionOfIntegersTest() {        
++        prepareConfiguration("collectionOfIntegers.ivml");
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("seqA")) {
++                assertVariable(variable.getNestedElement(0), 1, "seqA[0] after 1 reasoning", 
++                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++                assertVariable(variable.getNestedElement(1), 2, "seqA[1] after 1 reasoning", 
++                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);   
++                Assert.assertEquals("seqA[0] after 1 reasoning", 1, variable.getNestedElement(0).getValue().getValue());
++                assertContained("seqA[0] after 1 reasoning", variable.getState(), 
++                     AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++                try {
++                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
++                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
++                } catch (ValueDoesNotMatchTypeException e) {                    
++                    e.printStackTrace();
++                } catch (ConfigurationException e) {
++                    e.printStackTrace();
++                }
++                assertVariable(variable.getNestedElement(0), 10, "seqA[0] after new value", 
++                    AssignmentState.USER_ASSIGNED);
++                assertVariable(variable.getNestedElement(1), 2, "seqA[1] after new value", 
++                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++            }
++        }
++        runReasoning();
++        for (IDecisionVariable variable : config) {
++            if (variable.getDeclaration().getName().equals("seqA")) {
++                assertVariable(variable.getNestedElement(0), 10, "seqA[0] after 2 reasoning", 
++                    AssignmentState.USER_ASSIGNED);
++                //assertVariable(variable.getNestedElement(1), 2, "seqA[1] after 2 reasoning", 
++                //    AssignmentState.DERIVED); 
++            }
++        }
++    }
++
++    /**
++     * Performs a simple test in runtime reasoning mode.
++     * 
++     * @throws ModelQueryException shall not occur
++     * @throws ValueDoesNotMatchTypeException shall not occur
++     * @throws ConfigurationException shall not occur
++     */
++    @Test
++    public void runtimeReasoningTest() throws ModelQueryException, ValueDoesNotMatchTypeException, 
++        ConfigurationException {
++        prepareConfiguration("runtimeReasoning.ivml");
++        runReasoning();
++        
++        rConfig.setRuntimeMode(true);
++        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_SYSOUT);
++    }
++
++    /**
++     * Performs a simple test in runtime reasoning mode.
++     * 
++     * @throws ModelQueryException shall not occur
++     * @throws ValueDoesNotMatchTypeException shall not occur
++     * @throws ConfigurationException shall not occur
++     */
++    @Test
++    public void runtimeReasoningConstraintSetTest() throws ModelQueryException, ValueDoesNotMatchTypeException, 
++        ConfigurationException {
++        prepareConfiguration("runtimeReasoningConstraintSet.ivml");
++        runReasoning();
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/package-info.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/package-info.java
+new file mode 100644
+index 0000000..949da54
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/package-info.java
+@@ -0,0 +1,6 @@
++/**
++ * Reasoning tests for adaptation.
++ * @author sizonenko
++ *
++ */
++package net.ssehub.easy.reasoning.core.adaptation;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/AttributeTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/AttributeTests.java
+new file mode 100644
+index 0000000..b8a755f
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/AttributeTests.java
+@@ -0,0 +1,118 @@
++package net.ssehub.easy.reasoning.core.capabilities;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Attribute tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class AttributeTests extends AbstractTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected AttributeTests(ITestDescriptor descriptor) {
++        super(descriptor, "attributes");
++    }
++    
++    /**
++     * Assign attribute with a default value to the project test.
++     */
++    @Test    
++    public void defaultAssign() {
++        reasoningTest("DefaultAssign.ivml", 0);
++    }
++    
++    /**
++     * Assign attribute with a default value to the project test.
++     */
++    @Test    
++    public void blockAssign() {
++        reasoningTest("BlockAssign.ivml", 0);
++    }
++    
++    /**
++     * Assign attribute with a default value to the project test.
++     */
++    @Test    
++    public void individualAssign() {
++        reasoningTest("IndividualAssign.ivml", 0);
++    }
++
++    /**
++     * Assign attribute with a default value to the project test.
++     */
++    @Test    
++    public void blockAssignNested() {
++        reasoningTest("BlockAssignNested.ivml", 0);
++    }
++    
++    /**
++     * Assign attribute with a default value to the project test.
++     */
++    @Test    
++    public void blockAssignNestedNested() {
++        reasoningTest("BlockAssignNestedNested.ivml", 0);
++    }
++    
++    /**
++     * Assign attribute with a default value to the project test. Test includes a 
++     * constraint in the attribute assignment.
++     */
++    @Test    
++    public void blockAssignNestedConstraint() {
++        reasoningTest("BlockAssignNestedConstraint.ivml", 0);
++    }
++
++    /**
++     * Assign attribute with cross-references and self within a compound. Test includes a 
++     * constraint in the attribute assignment.
++     */
++    @Test    
++    public void compoundIndividualAssign() {
++        reasoningTest("CompoundIndividualAssign.ivml", 0);
++    }
++
++    /**
++     * Assign attribute with a default value to the project test. Test includes a 
++     * failing constraint in the attribute assignment.
++     */
++    @Test    
++    public void blockAssignNestedConstraintFail() {
++        reasoningTest("BlockAssignNestedConstraintFail.ivml", 1);
++    }
++    
++    /**
++     * Assign attribute with a default value to the project test.
++     */
++    @Test    
++    public void individualAssignNested() {
++        reasoningTest("IndividualAssignNested.ivml", 0);
++    } 
++    
++    /**
++     * Assign attribute with a default value to the project test.
++     */
++    @Test    
++    public void nestedAssignBlockTree() {
++        // initial: just the triple nested shall be a reassignment
++        // recognize potential multiple assignments and ignore them
++        reasoningTest("NestedAssignBlockTree.ivml", 2); 
++    }    
++
++    /**
++     * Constraint annotations.
++     */
++    @Test    
++    public void constraintAnnotationTest() {
++        reasoningTest("ConstraintAnnotationTest.ivml", 8);
++    }    
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/CollectionConstraintsTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/CollectionConstraintsTests.java
+new file mode 100644
+index 0000000..9150960
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/CollectionConstraintsTests.java
+@@ -0,0 +1,203 @@
++package net.ssehub.easy.reasoning.core.capabilities;
++
++import org.junit.Test;
++
++import org.junit.Assert;
++import org.junit.Ignore;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.model.AbstractVariable;
++import net.ssehub.easy.varModel.model.ModelQuery;
++import net.ssehub.easy.varModel.model.ModelQueryException;
++import net.ssehub.easy.varModel.model.values.ContainerValue;
++import net.ssehub.easy.varModel.model.values.Value;
++
++/**
++ * Collection constraints tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class CollectionConstraintsTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected CollectionConstraintsTests(ITestDescriptor descriptor) {
++        super(descriptor, "collectionConstraints");
++    }
++
++    /**
++     * Tests constraints in set.
++     */
++    @Test
++    public void constraintSetDefaultTest() {
++        reasoningTest("constraintSetDefault.ivml", 1);
++    }
++
++    /**
++     * Tests constraints in set of set.
++     */
++    @Test
++    public void constraintSetSetDefaultTest() {
++        reasoningTest("constraintSetSetDefault.ivml", 0);
++    }
++
++    /**
++     * Tests containers with derived types on compounds and constraints.
++     */
++    @Test
++    public void constraintSetDerivedCompoundTest() {
++        reasoningTest("constraintSetDerivedCompound.ivml", 0);
++    }
++
++    /**
++     * Tests containers of containers with derived types on compounds and constraints.
++     */
++    @Ignore("IVML")
++    @Test
++    public void constraintSetSetDerivedCompoundTest() {
++        reasoningTest("constraintSetSetDerivedCompound.ivml", 2);
++    }
++    
++    /**
++     * Tests constraints in set.
++     */
++    @Test
++    public void constraintSetAssignedTest() {
++        reasoningTest("constraintSetAssigned.ivml", 1);
++    }
++    
++    /**
++     * Tests constraints in set.
++     */
++    @Test
++    public void constraintSetDefaultInCompoundTest() {
++        reasoningTest("constraintSetDefaultInCompound.ivml", 1);
++    }
++    
++    /**
++     * Tests constraints in set.
++     */
++    @Test
++    public void constraintSetInCompoundDefaultTest() {
++        reasoningTest("constraintSetInCompoundDefault.ivml", 1);
++    }
++    
++    /**
++     * Tests constraints in set.
++     */
++    @Test
++    public void constraintSetInCompoundAssignedTest() {
++        reasoningTest("constraintSetInCompoundAssigned.ivml", 1);
++    }
++  
++    /**
++     * Tests constraints in set.
++     */
++    @Test
++    public void constraintSetInNestedCompoundDefaultTest() {
++        reasoningTest("constraintSetInNestedCompoundDefault.ivml", 1);
++    }
++    
++    /**
++     * Tests constraints in set.
++     */
++    @Test
++    public void qmTest() {
++        reasoningTest("QM.ivml", 1);
++    }
++
++    /**
++     * Tests constraints in set.
++     */
++    @Test
++    public void setDerivedSetTest() {
++        reasoningTest("setDerivedSet.ivml", 1);
++    }
++
++    /**
++     * Collection annotation test.
++     */
++    @Ignore("IVML")
++    @Test
++    public void containerAnnotationTest() {
++        reasoningTest("ContainerAnnotationTest.ivml", 10);
++    } 
++
++    /**
++     * Tests for derived and referenced collections.
++     */
++    @Ignore("IVML")
++    @Test
++    public void referenceDerivedCollectionTest() {
++        reasoningTest("ReferenceDerivedCollectionTest.ivml", 5);
++    }
++    
++    /**
++     * String collections test (#72).
++     */
++    @Ignore("IVML")
++    @Test
++    public void stringCollection1Test() {
++        reasoningTest("StringTest1.ivml", 1);
++    }
++
++    /**
++     * String collections test (#72).
++     */
++    @Ignore("IVML")
++    @Test
++    public void stringCollection2Test() {
++        reasoningTest("StringTest2.ivml", 0);
++    }
++
++    /**
++     * String collections test (#72).
++     * 
++     * @throws ModelQueryException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void stringCollection3Test() throws ModelQueryException {
++        Configuration cfg = reasoningTest("StringTest3.ivml", 0);
++
++        AbstractVariable orgVarsDecl = ModelQuery.findVariable(cfg.getProject(), "orgVars", null);
++        Assert.assertNotNull(orgVarsDecl);
++        IDecisionVariable orgVars = cfg.getDecision(orgVarsDecl);
++        Assert.assertNotNull(orgVars);
++        assertContained(orgVars.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++        Value val = orgVars.getValue();
++        Assert.assertTrue(val instanceof ContainerValue);
++        ContainerValue cVal = (ContainerValue) val;
++        Assert.assertTrue(cVal.getElementSize() > 0);
++    }
++
++    /**
++     * String collections test (#74).
++     * 
++     * @throws ModelQueryException shall not occur
++     */
++    @Ignore("IVML")
++    @Test
++    public void stringCollection4Test() throws ModelQueryException {
++        Configuration cfg = reasoningTest("StringTest4.ivml", 0);
++
++        AbstractVariable orgVarsDecl = ModelQuery.findVariable(cfg.getProject(), "set2", null);
++        Assert.assertNotNull(orgVarsDecl);
++        IDecisionVariable orgVars = cfg.getDecision(orgVarsDecl);
++        Assert.assertNotNull(orgVars);
++        assertContained(orgVars.getState(), AssignmentState.DEFAULT);
++        Value val = orgVars.getValue();
++        Assert.assertTrue(val instanceof ContainerValue);
++        ContainerValue cVal = (ContainerValue) val;
++        Assert.assertTrue(cVal.getElementSize() > 0);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/ConstraintVariableTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/ConstraintVariableTests.java
+new file mode 100644
+index 0000000..e180669
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/ConstraintVariableTests.java
+@@ -0,0 +1,232 @@
++package net.ssehub.easy.reasoning.core.capabilities;
++
++import java.io.IOException;
++
++import org.junit.Ignore;
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.varModel.model.Project;
++
++/**
++ * Collection constraints tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class ConstraintVariableTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected ConstraintVariableTests(ITestDescriptor descriptor) {
++        super(descriptor, "constraintVariables");
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void setOfConstraintsInCompoundWithDefaultValue() {
++        reasoningTest("setOfConstraintsInCompoundWithDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void setOfConstraintsInCompoundWithNoDefaultValue() {
++        reasoningTest("setOfConstraintsInCompoundWithNoDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void setOfConstraintsInCompoundWithEmptyDefaultValue() {
++        reasoningTest("setOfConstraintsInCompoundWithEmptyDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void setOfConstraintsWithDefaultValue() {
++        reasoningTest("setOfConstraintsWithDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void setOfConstraintsWithNoDefaultValue() {
++        reasoningTest("setOfConstraintsWithNoDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void setOfConstraintsWithEmptyDefaultValue() {
++        reasoningTest("setOfConstraintsWithEmptyDefaultValue.ivml", 0);
++    }
++    
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void constraintDefaultTest() {
++        reasoningTest("constraintDefault.ivml", 1);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void constraintAssignedTest() {
++        reasoningTest("constraintAssigned.ivml", 0);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void constraintInCompoundDefaultTest() {
++        reasoningTest("constraintInCompoundDefault.ivml", 1);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void constraintsInCompoundWithNoDefaultValue() {
++        reasoningTest("constraintsInCompoundWithNoDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void constraintInCompoundAssignedTest() {
++        reasoningTest("constraintInCompoundAssigned.ivml", 0);
++    }
++    
++    /**
++     * Tests false constraint.
++     */
++    @Test
++    public void falseTest() {
++        reasoningTest("falseTest.ivml", 1);
++    }
++    
++    /**
++     * Tests boolean variable with value false.
++     */
++    @Test
++    public void booleanAssignedFalse() {
++        reasoningTest("booleanAssignedFalse.ivml", 0);
++    }
++    
++    /**
++     * Tests boolean variable with value false.
++     */
++    @Test
++    public void booleanDefaultFalse() {
++        reasoningTest("booleanDefaultFalse.ivml", 0);
++    }
++    
++    /**
++     * Tests boolean variable with value false.
++     */
++    @Test
++    public void booleanAssignedFalseInCompound() {
++        reasoningTest("booleanAssignedFalseInCompound.ivml", 0);
++    }
++    
++    /**
++     * Tests boolean variable with value false.
++     */
++    @Test
++    public void booleanDefaultFalseInCompound() {
++        reasoningTest("booleanDefaultFalseInCompound.ivml", 0);
++    }
++    
++    /**
++     * Tests boolean variable with value false.
++     */
++    @Test
++    public void setOfBooleanInCompoundWithDefaultValue() {
++        reasoningTest("setOfBooleanInCompoundWithDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests boolean variable with value false.
++     */
++    @Test
++    public void setOfBooleanInCompoundWithNoDefaultValue() {
++        reasoningTest("setOfBooleanInCompoundWithNoDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests boolean variable with value false.
++     */
++    @Test
++    public void setOfBooleanWithDefaultValue() {
++        reasoningTest("setOfBooleanWithDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests boolean variable with value false.
++     */
++    @Test
++    public void setOfBooleanWithNoDefaultValue() {
++        reasoningTest("setOfBooleanWithNoDefaultValue.ivml", 0);
++    }
++    
++    /**
++     * Tests constraint variable order influence (QM project case).
++     */
++    @Test
++    public void compoundConstraintVarOrder() {
++        reasoningTest("QM_constraintOrder.ivml", 0);
++    }
++    
++    /**
++     * Tests derived constraint variables.
++     */
++    @Test
++    public void constraintsDerivedTest() {
++        reasoningTest("constraintsDerived.ivml", 2);
++    }
++
++    /**
++     * Tests changing constraint variables.
++     * 
++     * @throws IOException shall not occur
++     */
++    @Ignore("not implemented")
++    @Test
++    public void changingConstraintsTest() throws IOException {
++        // basis shall be failing with four tests
++        reasoningTest("changingConstraints/changingConstraintsBase.ivml", 8);
++        // importing model changes constraints, shall not fail then 
++        Project prj = loadCompleteProject("changingConstraints", "changingConstraints");
++        resultHandler(0, 0, prj);
++    }
++    
++    /**
++     * Test for refined constraint variable slots (#68).
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void refinedConstraintsTest() throws IOException {
++        Project prj = loadCompleteProject("refinedConstraints", "refinedConstraints");
++        resultHandler(1, 0, prj);
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/FailedDecisionsTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/FailedDecisionsTests.java
+new file mode 100644
+index 0000000..9a2b113
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/FailedDecisionsTests.java
+@@ -0,0 +1,49 @@
++package net.ssehub.easy.reasoning.core.capabilities;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Incremental reasoning tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class FailedDecisionsTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected FailedDecisionsTests(ITestDescriptor descriptor) {
++        super(descriptor, "failedDecisions");
++    }
++    
++    /**
++     * Tests default assignments ignore.
++     */
++    @Test
++    public void basicConstraintTest() {
++        reasoningTest("basicConstraintTest.ivml", 1);
++    }
++    
++    /**
++     * Tests validation constraint filter.
++     */
++    @Test
++    public void basicAssignmentTest() {
++        reasoningTest("basicAssignmentTest.ivml", 2);
++    }
++    
++    /**
++     * Tests partial freeze.
++     */
++    @Test
++    public void basicCompoundConstraintTest() {
++        reasoningTest("basicCompoundConstraintTest.ivml", 1);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/RuntimeReasoningTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/RuntimeReasoningTests.java
+new file mode 100644
+index 0000000..1435d93
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/RuntimeReasoningTests.java
+@@ -0,0 +1,55 @@
++package net.ssehub.easy.reasoning.core.capabilities;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++
++/**
++ * Incremental reasoning tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class RuntimeReasoningTests extends AbstractTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected RuntimeReasoningTests(ITestDescriptor descriptor) {
++        super(descriptor, "incrementalReasoningConstraints");
++    }
++
++    @Override
++    protected void configureReasoner(ReasonerConfiguration rConfig) {
++        rConfig.setRuntimeMode(true);
++    }
++    
++    /**
++     * Tests default assignments ignore.
++     */
++    @Test
++    public void ignoreDefaultAssignmentsTest() {
++        reasoningTest("IgnoreDefaultAssignments.ivml", 0);
++    }
++    
++    /**
++     * Tests validation constraint filter.
++     */
++    @Test
++    public void validationConstraintFilterTest() {
++        reasoningTest("ValidationConstraintFilter.ivml", 0);
++    }
++    
++    /**
++     * Tests partial freeze.
++     */
++    @Test
++    public void partialFreezeTest() {
++        reasoningTest("PartialFreeze.ivml", 0);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/package-info.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/package-info.java
+new file mode 100644
+index 0000000..a82f77d
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/package-info.java
+@@ -0,0 +1,6 @@
++/**
++ * Tests attributes.
++ * @author Sizonenko
++ *
++ */
++package net.ssehub.easy.reasoning.core.capabilities;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/CollectionOperationsTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/CollectionOperationsTests.java
+index d47f298..8f453a4 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/CollectionOperationsTests.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/CollectionOperationsTests.java
+@@ -17,8 +17,10 @@
+ 
+ import java.io.IOException;
+ 
+-import org.junit.Ignore;
+ import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
+ 
+ /**
+  * Tests collection operations like <tt>collect</tt> or <tt>forall</tt>.
+@@ -26,21 +28,16 @@
+  * 
+  * @author El-Sharkawy
+  */
+-public abstract class CollectionOperationsTests extends AbstractReasonerFrontendTest {
++public class CollectionOperationsTests extends AbstractTest {
+ 
+     /**
+-     * Performs a test directly located in the operations test directory [convenience].
++     * Creating a test instance.
+      * 
+-     * @param localFile the name of the file directly located in the test directory
+-     * @param isValid whether the model shall be valid (or not) to pass
+-     * 
+-     * @throws IOException in case of problems reading a model
++     * @param descriptor the test descriptor
+      */
+-    private void performOpCheck(String localFile, boolean isValid) throws IOException {
+-        performCheck("collectionOperations/" + localFile, isValid);
++    protected CollectionOperationsTests(ITestDescriptor descriptor) {
++        super(descriptor, "collectionOperations");
+     }
+-    
+-    // collect
+     
+     /**
+      * Tests whether the reasoner is able to handle fulfilled
+@@ -51,7 +48,7 @@
+      */
+     @Test
+     public void testCompoundCollectionConstraintValid() throws IOException {
+-        performOpCheck("CompoundCollectionConstraintTest_Valid.ivml", true);
++        reasoningTest("CompoundCollectionConstraintTest_Valid.ivml", 0);
+     }
+     
+     /**
+@@ -63,6 +60,7 @@
+      */
+     @Test
+     public void testCompoundCollectionConstraintInvalid() throws IOException {
+-        performOpCheck("CompoundCollectionConstraintTest_Invalid.ivml", false);
++        reasoningTest("CompoundCollectionConstraintTest_Invalid.ivml", 1);
+     }
++
+ }
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/MismatchedTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/MismatchedTest.java
+index b261d98..4d7122b 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/MismatchedTest.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/MismatchedTest.java
+@@ -19,23 +19,23 @@
+ 
+ import org.junit.Test;
+ 
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
+ /**
+  * Test of reasoner capabilities related to the structure of variability models.
++ * 
+  * @author El-Sharkawy
+- *
+  */
+-public abstract class MismatchedTest extends AbstractReasonerFrontendTest {
++public class MismatchedTest extends AbstractTest {
+     
+     /**
+-     * Performs a test directly located in the structure test directory [convenience].
++     * Creating a test instance.
+      * 
+-     * @param projectName the name of the file directly located in the test directory
+-     * @param isValid whether the model shall be valid (or not) to pass
+-     * 
+-     * @throws IOException in case of problems reading a model
++     * @param descriptor the test descriptor
+      */
+-    private void performStructureCheck(String projectName, boolean isValid) throws IOException {
+-        performCheck("mismatchExample/", projectName, isValid);
++    protected MismatchedTest(ITestDescriptor descriptor) {
++        super(descriptor, "mismatchExample");
+     }
+     
+     /**
+@@ -44,8 +44,7 @@
+      */
+     @Test
+     public void testMismatchTestFail() throws IOException {
+-        performStructureCheck("MismatchTest", false);
++        resultHandler(2, 0, loadCompleteProject("MismatchTest"));
+     }
+-    
+ 
+ }
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OldTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OldTests.java
+index 6629fa0..9ec318e 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OldTests.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OldTests.java
+@@ -4,6 +4,8 @@
+ 
+ import org.junit.Test;
+ 
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
+ import net.ssehub.easy.varModel.confModel.Configuration;
+ import net.ssehub.easy.varModel.confModel.ConfigurationException;
+ import net.ssehub.easy.varModel.model.IvmlException;
+@@ -15,7 +17,16 @@
+  * 
+  * @author Phani
+  */
+-public abstract class OldTests extends AbstractReasonerFrontendTest {
++public abstract class OldTests extends AbstractTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected OldTests(ITestDescriptor descriptor) {
++        super(descriptor, ".");
++    }
+ 
+     /**
+      * Unknown.
+@@ -31,12 +42,12 @@
+ 
+         Project p = loadProject("testBasisDatatype.ivml");
+         Configuration config = new Configuration(p);
+-        configureValue(p, config, 0, "1");
+-        configureValue(p, config, 1, "2.0");
+-        configureValue(p, config, 2, "true");
+-        configureValue(p, config, 3, "A string");
++        configureValue(config, "intA", "1");
++        configureValue(config, "realA", "2.0");
++        configureValue(config, "boolA", "true");
++        configureValue(config, "stringA", "A string");
+ 
+-        performCheck(p, config, true);
++        assertPropagation(0, 0, config);
+     }
+ 
+     /**
+@@ -53,12 +64,12 @@
+ 
+         Project p = loadProject("testBasisDatatype.ivml");
+         Configuration config = new Configuration(p);
+-        configureValue(p, config, 0, "1");
+-        configureValue(p, config, 1, "2.0");
+-        configureValue(p, config, 2, "false");
+-        configureValue(p, config, 3, "A string");
++        configureValue(config, "intA", "1");
++        configureValue(config, "realA", "2.0");
++        configureValue(config, "boolA", "false");
++        configureValue(config, "stringA", "A string");
+ 
+-        performCheck(p, config, false);
++        assertPropagation(1, 0, config); // count may be wrong
+     }
+ 
+     /**
+@@ -75,19 +86,13 @@
+ 
+         Project p = loadProject("testComplexDatatype.ivml");
+ 
+-        // Position of needed variables in ivml file
+-        int posA1 = 2;
+-        int posA2 = posA1 + 1;
+-        int posB1 = posA2 + 1;
+-        int posB2 = posB1 + 1;
+-
+         Configuration config = new Configuration(p);
+-        configureValue(p, config, posA1, "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringA1");
+-        configureValue(p, config, posA2, "intA", "2", "realA", "2.0", "boolA", "false", "stringA", "aStringA2");
+-        configureValue(p, config, posB1, "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringB1");
+-        configureValue(p, config, posB2, "intA", "2", "realA", "2.8", "boolA", "false", "stringA", "aStringB2");
++        configureValue(config, "a1", "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringA1");
++        configureValue(config, "a2", "intA", "2", "realA", "2.0", "boolA", "false", "stringA", "aStringA2");
++        configureValue(config, "b1", "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringB1");
++        configureValue(config, "b2", "intA", "2", "realA", "2.8", "boolA", "false", "stringA", "aStringB2");
+ 
+-        performCheck(p, config, true);
++        assertPropagation(0, 0, config);
+     }
+ 
+     /**
+@@ -104,12 +109,12 @@
+ 
+         Project p = loadProject("testComplexDatatype.ivml");
+         Configuration config = new Configuration(p);
+-        configureValue(p, config, 2, "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringA1");
+-        configureValue(p, config, 3, "intA", "2", "realA", "2.0", "boolA", "true", "stringA", "aStringA2");
+-        configureValue(p, config, 4, "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringB1");
+-        configureValue(p, config, 5, "intA", "2", "realA", "2.0", "boolA", "true", "stringA", "aStringB2");
++        configureValue(config, "a1", "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringA1");
++        configureValue(config, "a2", "intA", "2", "realA", "2.0", "boolA", "true", "stringA", "aStringA2");
++        configureValue(config, "b1", "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringB1");
++        configureValue(config, "b2", "intA", "2", "realA", "2.0", "boolA", "true", "stringA", "aStringB2");
+ 
+-        performCheck(p, config, false);
++        assertPropagation(1, 0, config); // count may be wrong
+     }
+ 
+     /**
+@@ -127,7 +132,7 @@
+         Project p = loadProject("testEnum.ivml");
+         Configuration config = new Configuration(p);
+ 
+-        performCheck(p, config, true);
++        assertPropagation(0, 0, config);
+     }
+ 
+     /**
+@@ -145,7 +150,7 @@
+         Project p = loadProject("testGeneral.ivml");
+         Configuration config = new Configuration(p);
+ 
+-        performCheck(p, config, true);
++        assertPropagation(0, 0, config);
+     }
+ 
+     /**
+@@ -163,7 +168,7 @@
+         Project p = loadProject("testInfrastructure.ivml");
+         Configuration config = new Configuration(p);
+ 
+-        performCheck(p, config, true);
++        assertPropagation(0, 0, config);
+     }
+ 
+     /**
+@@ -181,7 +186,7 @@
+         Project p = loadProject("testInfra.ivml");
+         Configuration config = new Configuration(p);
+ 
+-        performCheck(p, config, true);
++        assertPropagation(0, 0, config);
+     }
+ 
+ }
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OperationTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OperationTests.java
+index 80a6d5c..12d7f6d 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OperationTests.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OperationTests.java
+@@ -4,26 +4,27 @@
+ 
+ import org.junit.Test;
+ 
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
+ /**
+  * Tests individual operations.
+  * 
+  * @author Holger Eichelberger
+  */
+-public abstract class OperationTests extends AbstractReasonerFrontendTest {
++public abstract class OperationTests extends AbstractTest {
+ 
+     /**
+-     * Performs a test directly located in the operations test directory [convenience].
++     * Creating a test instance.
+      * 
+-     * @param localFile the name of the file directly located in the test directory
+-     * @param isValid whether the model shall be valid (or not) to pass
+-     * 
+-     * @throws IOException in case of problems reading a model
++     * @param descriptor the test descriptor
+      */
+-    private void performOpCheck(String localFile, boolean isValid) throws IOException {
+-        performCheck("operations/" + localFile, isValid);
++    protected OperationTests(ITestDescriptor descriptor) {
++        super(descriptor, "operations");
+     }
+     
+- // ---------------------------------- Integer constants ----------------------------------
++    // ---------------------------------- Integer constants ----------------------------------
++    
+     /**
+      * Tests integer equality and unequality operations on constants.
+      * 
+@@ -31,7 +32,7 @@
+      */
+     @Test
+     public void testIntegerConstants() throws IOException {
+-        performOpCheck("integerEqConstants.ivml", true);
++        reasoningTest("integerEqConstants", 0);
+     }
+     
+     /**
+@@ -41,7 +42,7 @@
+      */    
+     @Test
+     public void testIntegerAddConstants() throws IOException {
+-        performOpCheck("integerAddConstants.ivml", true);
++        reasoningTest("integerAddConstants", 0);
+     }
+ 
+     /**
+@@ -51,7 +52,7 @@
+      */    
+     @Test
+     public void testIntegerSubConstants() throws IOException {
+-        performOpCheck("integerSubConstants.ivml", true);
++        reasoningTest("integerSubConstants", 0);
+     }
+ 
+     /**
+@@ -61,7 +62,7 @@
+      */   
+     @Test
+     public void testIntegerMulConstants() throws IOException {
+-        performOpCheck("integerMulConstants.ivml", true);
++        reasoningTest("integerMulConstants", 0);
+     }
+     
+     /**
+@@ -71,7 +72,7 @@
+      */
+     @Test
+     public void testIntegerMulConstantsFail() throws IOException {
+-        performOpCheck("integerMulConstantsFail.ivml", false);
++        reasoningTest("integerMulConstantsFail", 3);
+     }
+     
+     /**
+@@ -81,7 +82,7 @@
+      */
+     @Test    
+     public void testIntegerDivConstants() throws IOException {
+-        performOpCheck("integerDivConstants.ivml", true);
++        reasoningTest("integerDivConstants", 0);
+     }
+     
+     /**
+@@ -91,7 +92,7 @@
+      */  
+     @Test // Must fail div by 0
+     public void testIntegerDivConstantsFail() throws IOException {
+-        performOpCheck("integerDivConstantsFail.ivml", true); // -> undefined
++        reasoningTest("integerDivConstantsFail", 0); // -> undefined
+     }
+     
+     /**
+@@ -101,7 +102,7 @@
+      */    
+     @Test
+     public void testIntegerABSConstants() throws IOException {
+-        performOpCheck("integerABSConstants.ivml", true);
++        reasoningTest("integerABSConstants", 0);
+     }
+     
+     /**
+@@ -111,7 +112,7 @@
+      */
+     @Test 
+     public void testIntegerDIVopConstants() throws IOException {
+-        performOpCheck("integerDIVopConstants.ivml", true);
++        reasoningTest("integerDIVopConstants", 0);
+     }
+     
+     /**
+@@ -121,7 +122,7 @@
+      */
+     @Test 
+     public void testIntegerMODopConstants() throws IOException {
+-        performOpCheck("integerMODopConstants.ivml", true);
++        reasoningTest("integerMODopConstants", 0);
+     }
+     
+     /**
+@@ -131,7 +132,7 @@
+      */
+     @Test 
+     public void testIntegerMAXConstants() throws IOException {
+-        performOpCheck("integerMAXConstants.ivml", true);
++        reasoningTest("integerMAXConstants", 0);
+     }
+     
+     /**
+@@ -141,7 +142,7 @@
+      */
+     @Test
+     public void testIntegerMINConstants() throws IOException {
+-        performOpCheck("integerMINConstants.ivml", true);
++        reasoningTest("integerMINConstants", 0);
+     }
+     
+     /**
+@@ -151,7 +152,7 @@
+      */
+     @Test
+     public void testIntegerGreaterThanConstants() throws IOException {
+-        performOpCheck("integerGreaterThanConstants.ivml", true);
++        reasoningTest("integerGreaterThanConstants", 0);
+     }
+     
+     /**
+@@ -161,7 +162,7 @@
+      */
+     @Test
+     public void testIntegerLessThanConstants() throws IOException {
+-        performOpCheck("integerLessThanConstants.ivml", true);
++        reasoningTest("integerLessThanConstants", 0);
+     }
+     
+     /**
+@@ -171,7 +172,7 @@
+      */
+     @Test
+     public void testIntegerLessThanOrEqualsConstants() throws IOException {
+-        performOpCheck("integerLessThanOrEqualsConstants.ivml", true);
++        reasoningTest("integerLessThanOrEqualsConstants", 0);
+     }
+     
+     /**
+@@ -181,7 +182,7 @@
+      */
+     @Test
+     public void testIntegerGreaterThanOrEqualsConstants() throws IOException {
+-        performOpCheck("integerGreaterThanOrEqualsConstants.ivml", true);
++        reasoningTest("integerGreaterThanOrEqualsConstants", 0);
+     }
+ 
+     // ---------------------------------- Integer variables ----------------------------------
+@@ -193,7 +194,7 @@
+      */
+     @Test
+     public void testIntegerEqVariables() throws IOException {
+-        performOpCheck("integerEqVariables.ivml", true);
++        reasoningTest("integerEqVariables", 0);
+     }
+ 
+     /**
+@@ -203,7 +204,7 @@
+      */
+     @Test 
+     public void testIntegerEqVariablesFail() throws IOException {
+-        performOpCheck("integerEqVariablesFail.ivml", false);
++        reasoningTest("integerEqVariablesFail", 9);
+     }
+ 
+     /**
+@@ -213,7 +214,7 @@
+      */
+     @Test
+     public void testIntegerAddVariables() throws IOException {
+-        performOpCheck("integerAddVariables.ivml", true);
++        reasoningTest("integerAddVariables", 0);
+     }
+ 
+     /**
+@@ -223,7 +224,7 @@
+      */
+     @Test 
+     public void testIntegerSubVariables() throws IOException {
+-        performOpCheck("integerSubVariables.ivml", true);
++        reasoningTest("integerSubVariables", 0);
+     }
+ 
+     /**
+@@ -233,7 +234,7 @@
+      */
+     @Test
+     public void testIntegerMulVariables() throws IOException {
+-        performOpCheck("integerMulVariables.ivml", true);
++        reasoningTest("integerMulVariables", 0);
+     }
+ 
+     /**
+@@ -243,7 +244,7 @@
+      */
+     @Test
+     public void testIntegerDivVariables() throws IOException {
+-        performOpCheck("integerDivVariables.ivml", true);
++        reasoningTest("integerDivVariables", 0);
+     }
+     
+     /**
+@@ -253,7 +254,7 @@
+      */
+     @Test
+     public void testIntegerDivVariablesFails() throws IOException {
+-        performOpCheck("integerDivVariablesFail.ivml", true); // -> undefined
++        reasoningTest("integerDivVariablesFail", 0); // -> undefined
+     }
+     
+     /**
+@@ -263,7 +264,7 @@
+      */
+     @Test
+     public void testIntegerABSVariables() throws IOException {
+-        performOpCheck("integerABSVariables.ivml", true);
++        reasoningTest("integerABSVariables", 0);
+     }
+     
+     /**
+@@ -273,7 +274,7 @@
+      */
+     @Test 
+     public void testIntegerDIVopVariables() throws IOException {
+-        performOpCheck("integerDIVopVariables.ivml", true);
++        reasoningTest("integerDIVopVariables", 0);
+     }
+     
+     /**
+@@ -283,7 +284,7 @@
+      */
+     @Test 
+     public void testIntegerMODopVariables() throws IOException {
+-        performOpCheck("integerMODopVariables.ivml", true);
++        reasoningTest("integerMODopVariables", 0);
+     }
+     
+     /**
+@@ -293,7 +294,7 @@
+      */
+     @Test 
+     public void testIntegerMAXVariables() throws IOException {
+-        performOpCheck("integerMAXVariables.ivml", true);
++        reasoningTest("integerMAXVariables", 0);
+     }
+     
+     /**
+@@ -303,7 +304,7 @@
+      */
+     @Test 
+     public void testIntegerMINVariables() throws IOException {
+-        performOpCheck("integerMINVariables.ivml", true);
++        reasoningTest("integerMINVariables", 0);
+     }
+ 
+     /**
+@@ -313,7 +314,7 @@
+      */    
+     @Test 
+     public void testIntegerGreaterThanVariables() throws IOException {
+-        performOpCheck("integerGreaterThanVariables.ivml", true);
++        reasoningTest("integerGreaterThanVariables", 0);
+     }
+     
+     /**
+@@ -323,7 +324,7 @@
+      */    
+     @Test 
+     public void testIntegerLessThanVariables() throws IOException {
+-        performOpCheck("integerLessThanVariables.ivml", true);
++        reasoningTest("integerLessThanVariables", 0);
+     }
+     
+     /**
+@@ -333,7 +334,7 @@
+      */    
+     @Test 
+     public void testIntegerLessThanOrEqualsVariables() throws IOException {
+-        performOpCheck("integerLessThanOrEqualsVariables.ivml", true);
++        reasoningTest("integerLessThanOrEqualsVariables", 0);
+     }
+     
+     /**
+@@ -343,7 +344,7 @@
+      */    
+     @Test 
+     public void testIntegerGreaterThanOrEqualsVariables() throws IOException {
+-        performOpCheck("integerGreaterThanOrEqualsVariables.ivml", true);
++        reasoningTest("integerGreaterThanOrEqualsVariables", 0);
+     }
+     
+     // ---------------------------------- Real constants ----------------------------------
+@@ -354,7 +355,7 @@
+      */
+     @Test
+     public void testRealAddConstants() throws IOException {
+-        performOpCheck("realAddConstants.ivml", true);
++        reasoningTest("realAddConstants", 0);
+     }
+     
+     /**
+@@ -364,7 +365,7 @@
+      */
+     @Test
+     public void testRealDivConstants() throws IOException {
+-        performOpCheck("realDivConstants.ivml", true);
++        reasoningTest("realDivConstants", 0);
+     }
+     
+     /**
+@@ -374,7 +375,7 @@
+      */
+     @Test
+     public void testRealMulConstants() throws IOException {
+-        performOpCheck("realMulConstants.ivml", true);
++        reasoningTest("realMulConstants", 0);
+     }
+     
+     /**
+@@ -384,7 +385,7 @@
+      */
+     @Test
+     public void testRealSubConstants() throws IOException {
+-        performOpCheck("realSubConstants.ivml", true);
++        reasoningTest("realSubConstants", 0);
+     }
+     
+     /**
+@@ -394,7 +395,7 @@
+      */
+     @Test
+     public void testRealABSConstants() throws IOException {
+-        performOpCheck("realABSConstants.ivml", true);
++        reasoningTest("realABSConstants", 0);
+     }
+     
+     /**
+@@ -404,7 +405,7 @@
+      */
+     @Test
+     public void testRealFLOORConstants() throws IOException {
+-        performOpCheck("realFLOORConstants.ivml", true);
++        reasoningTest("realFLOORConstants", 0);
+     }
+     
+     /**
+@@ -414,7 +415,7 @@
+      */
+     @Test
+     public void testRealROUNDConstants() throws IOException {
+-        performOpCheck("realROUNDConstants.ivml", true);
++        reasoningTest("realROUNDConstants", 0);
+     }
+     
+     /**
+@@ -424,7 +425,7 @@
+      */    
+     @Test
+     public void testRealMAXConstants() throws IOException {
+-        performOpCheck("realMAXConstants.ivml", true);
++        reasoningTest("realMAXConstants", 0);
+     }
+     
+     /**
+@@ -434,7 +435,7 @@
+      */
+     @Test
+     public void testRealMINConstants() throws IOException {
+-        performOpCheck("realMINConstants.ivml", true);
++        reasoningTest("realMINConstants", 0);
+     }
+     
+     /**
+@@ -444,7 +445,7 @@
+      */
+     @Test
+     public void testRealEqConstants() throws IOException {
+-        performOpCheck("realEqConstants.ivml", true);
++        reasoningTest("realEqConstants", 0);
+     }
+     
+     /**
+@@ -454,7 +455,7 @@
+      */
+     @Test
+     public void testRealGreaterThanConstants() throws IOException {
+-        performOpCheck("realGreaterThanConstants.ivml", true);
++        reasoningTest("realGreaterThanConstants", 0);
+     }    
+     
+     /**
+@@ -464,7 +465,7 @@
+      */
+     @Test
+     public void testRealGreaterThanOrEqualsConstants() throws IOException {
+-        performOpCheck("realGreaterThanOrEqualsConstants.ivml", true);
++        reasoningTest("realGreaterThanOrEqualsConstants", 0);
+     } 
+     
+     /**
+@@ -474,7 +475,7 @@
+      */
+     @Test
+     public void testRealLessThanConstants() throws IOException {
+-        performOpCheck("realLessThanConstants.ivml", true);
++        reasoningTest("realLessThanConstants", 0);
+     } 
+     
+     /**
+@@ -484,10 +485,11 @@
+      */
+     @Test
+     public void testRealLessThanOrEqualsConstants() throws IOException {
+-        performOpCheck("realLessThanOrEqualsConstants.ivml", true);
++        reasoningTest("realLessThanOrEqualsConstants", 0);
+     } 
+    
+- // ---------------------------------- Real variables ----------------------------------
++    // ---------------------------------- Real variables ----------------------------------
++    
+     /**
+      * Tests real + operand on simple variables.
+      * 
+@@ -495,7 +497,7 @@
+      */
+     @Test
+     public void testRealAddVariables() throws IOException {
+-        performOpCheck("realAddVariables.ivml", true);
++        reasoningTest("realAddVariables", 0);
+     }
+     
+     /**
+@@ -505,7 +507,7 @@
+      */
+     @Test
+     public void testRealDivVariables() throws IOException {
+-        performOpCheck("realDivVariables.ivml", true);
++        reasoningTest("realDivVariables", 0);
+     }
+     
+     /**
+@@ -515,7 +517,7 @@
+      */
+     @Test
+     public void testRealMulVariables() throws IOException {
+-        performOpCheck("realMulVariables.ivml", true);
++        reasoningTest("realMulVariables", 0);
+     }
+     
+     /**
+@@ -525,7 +527,7 @@
+      */
+     @Test
+     public void testRealSubVariables() throws IOException {
+-        performOpCheck("realSubVariables.ivml", true);
++        reasoningTest("realSubVariables", 0);
+     }
+     
+     /**
+@@ -535,7 +537,7 @@
+      */
+     @Test
+     public void testRealABSVariables() throws IOException {
+-        performOpCheck("realABSVariables.ivml", true);
++        reasoningTest("realABSVariables", 0);
+     }
+     
+     /**
+@@ -545,7 +547,7 @@
+      */
+     @Test
+     public void testRealFLOORVariables() throws IOException {
+-        performOpCheck("realFLOORVariables.ivml", true);
++        reasoningTest("realFLOORVariables", 0);
+     }
+     
+     /**
+@@ -555,7 +557,7 @@
+      */
+     @Test
+     public void testRealROUNDVariables() throws IOException {
+-        performOpCheck("realROUNDVariables.ivml", true);
++        reasoningTest("realROUNDVariables", 0);
+     }
+     
+     /**
+@@ -565,7 +567,7 @@
+      */
+     @Test
+     public void testRealMAXVariables() throws IOException {
+-        performOpCheck("realMAXVariables.ivml", true);
++        reasoningTest("realMAXVariables", 0);
+     }
+     
+     /**
+@@ -575,7 +577,7 @@
+      */
+     @Test
+     public void testRealMINVariables() throws IOException {
+-        performOpCheck("realMINVariables.ivml", true);
++        reasoningTest("realMINVariables", 0);
+     }
+     
+     /**
+@@ -585,7 +587,7 @@
+      */
+     @Test
+     public void testRealEqVariables() throws IOException {
+-        performOpCheck("realEqVariables.ivml", true);
++        reasoningTest("realEqVariables", 0);
+     }
+     
+     /**
+@@ -595,7 +597,7 @@
+      */
+     @Test
+     public void testRealGreaterThanVariables() throws IOException {
+-        performOpCheck("realGreaterThanVariables.ivml", true);
++        reasoningTest("realGreaterThanVariables", 0);
+     }
+     
+     /**
+@@ -605,7 +607,7 @@
+      */
+     @Test
+     public void testRealGreaterThanOrEqualsVariables() throws IOException {
+-        performOpCheck("realGreaterThanOrEqualsVariables.ivml", true);
++        reasoningTest("realGreaterThanOrEqualsVariables", 0);
+     }
+     
+     /**
+@@ -615,7 +617,7 @@
+      */
+     @Test
+     public void testRealLessThenVariables() throws IOException {
+-        performOpCheck("realLessThanVariables.ivml", true);
++        reasoningTest("realLessThanVariables", 0);
+     }
+     
+     /**
+@@ -625,10 +627,11 @@
+      */
+     @Test
+     public void testRealLessThenOrEqualsVariables() throws IOException {
+-        performOpCheck("realLessThanOrEqualsVariables.ivml", true);
++        reasoningTest("realLessThanOrEqualsVariables", 0);
+     }
+     
+- // ---------------------------------- Mix constants ----------------------------------
++    // ---------------------------------- Mix constants ----------------------------------
++    
+     /**
+      * Tests mix MAX operand on simple variables.
+      * 
+@@ -636,7 +639,7 @@
+      */
+     @Test
+     public void testMixMAXVariables() throws IOException {
+-        performOpCheck("mixMAXVariables.ivml", true);
++        reasoningTest("mixMAXVariables", 0);
+     }
+     
+     /**
+@@ -646,10 +649,11 @@
+      */
+     @Test
+     public void testMixMINVariables() throws IOException {
+-        performOpCheck("mixMINVariables.ivml", true);
++        reasoningTest("mixMINVariables", 0);
+     }
+     
+- // ---------------------------------- Boolean constants ----------------------------------
++    // ---------------------------------- Boolean constants ----------------------------------
++    
+     /**
+      * Tests boolean OR operand on constants.
+      * 
+@@ -657,7 +661,7 @@
+      */    
+     @Test
+     public void testBooleanORConstants() throws IOException {
+-        performOpCheck("booleanORConstants.ivml", true);
++        reasoningTest("booleanORConstants", 0);
+     }
+     
+     /**
+@@ -667,7 +671,7 @@
+      */
+     @Test
+     public void testBooleanANDConstants() throws IOException {
+-        performOpCheck("booleanANDConstants.ivml", true);
++        reasoningTest("booleanANDConstants", 0);
+     }
+     
+     /**
+@@ -677,7 +681,7 @@
+      */    
+     @Test
+     public void testBooleanXORConstants() throws IOException {
+-        performOpCheck("booleanXORConstants.ivml", true);
++        reasoningTest("booleanXORConstants", 0);
+     }
+     
+     /**
+@@ -687,10 +691,11 @@
+      */    
+     @Test
+     public void testBooleanNOTConstants() throws IOException {
+-        performOpCheck("booleanNOTConstants.ivml", true);
++        reasoningTest("booleanNOTConstants", 0);
+     } 
+     
+- // ---------------------------------- Boolean variables ----------------------------------
++    // ---------------------------------- Boolean variables ----------------------------------
++    
+     /**
+      * Tests boolean OR operand on simple variables.
+      * 
+@@ -698,7 +703,7 @@
+      */
+     @Test
+     public void testBooleanORVariables() throws IOException {
+-        performOpCheck("booleanORVariables.ivml", true);
++        reasoningTest("booleanORVariables", 0);
+     }
+     
+     /**
+@@ -708,7 +713,7 @@
+      */
+     @Test
+     public void testBooleanANDVariables() throws IOException {
+-        performOpCheck("booleanANDVariables.ivml", true);
++        reasoningTest("booleanANDVariables", 0);
+     }
+     
+     /**
+@@ -718,7 +723,7 @@
+      */
+     @Test
+     public void testBooleanXORVariables() throws IOException {
+-        performOpCheck("booleanXORVariables.ivml", true);
++        reasoningTest("booleanXORVariables", 0);
+     }
+     
+     /**
+@@ -728,7 +733,7 @@
+      */
+     @Test
+     public void testBooleanNOTVariables() throws IOException {
+-        performOpCheck("booleanNOTVariables.ivml", true);
++        reasoningTest("booleanNOTVariables", 0);
+     }
+     
+     /**
+@@ -738,7 +743,7 @@
+      */
+     @Test
+     public void testBooleanImpliesVariables() throws IOException {
+-        performOpCheck("booleanImpliesVariables.ivml", true);
++        reasoningTest("booleanImpliesVariables", 0);
+     }
+     
+     /**
+@@ -748,7 +753,7 @@
+      */
+     @Test
+     public void testBooleanIFFVariables() throws IOException {
+-        performOpCheck("booleanIFFVariables.ivml", true);
++        reasoningTest("booleanIFFVariables", 0);
+     }
+     
+     /**
+@@ -758,8 +763,9 @@
+      */
+     @Test
+     public void testBooleanEvaluateValueAssignVariables() throws IOException {
+-        performOpCheck("booleanEvaluateValueAssignVariables.ivml", true);
++        reasoningTest("booleanEvaluateValueAssignVariables", 0);
+     }
++    
+     // ----------------------------------- String -----------------------
+     
+     /**
+@@ -769,7 +775,7 @@
+      */
+     @Test
+     public void testStringOperationsIsValid() throws IOException {
+-        performOpCheck("string.ivml", true);
++        reasoningTest("string", 0);
+     }
+     
+ // ----------------------------------- Complicated Types -----------------------
+@@ -781,10 +787,10 @@
+      */
+     @Test
+     public void testSequenceOperationsIsValid() throws IOException {
+-        performOpCheck("sequence.ivml", true);
++        reasoningTest("sequence", 0);
+     }
+ 
+- // ----------------------------------- Typedefs -----------------------
++    // ----------------------------------- Typedefs -----------------------
+     
+     /**
+      * Tests simple typedef operations (valid).
+@@ -793,7 +799,7 @@
+      */
+     @Test
+     public void testTypedefValid() throws IOException {
+-        performOpCheck("typedef.ivml", true);
++        reasoningTest("typedef", 0);
+     }
+     
+     /**
+@@ -803,7 +809,7 @@
+      */
+     @Test
+     public void testTypedefOfTypedefValid() throws IOException {
+-        performOpCheck("typedefOfTypedefValid.ivml", true);
++        reasoningTest("typedefOfTypedefValid", 0);
+     }
+     
+     /**
+@@ -813,7 +819,7 @@
+      */
+     @Test
+     public void testTypedefOfTypedefInvalid() throws IOException {
+-        performOpCheck("typedefOfTypedefInvalid.ivml", false);
++        reasoningTest("typedefOfTypedefInvalid", 1);
+     }
+     
+     /**
+@@ -823,7 +829,7 @@
+      */
+     @Test
+     public void testTypedefNestedInCompoundValid() throws IOException {
+-        performOpCheck("typedefNestedInCompoundValid.ivml", true);
++        reasoningTest("typedefNestedInCompoundValid", 0);
+     }
+     
+     /**
+@@ -833,9 +839,49 @@
+      */
+     @Test
+     public void testTypedefNestedInCompoundInvalid() throws IOException {
+-        performOpCheck("typedefNestedInCompoundInvalid.ivml", false);
++        reasoningTest("typedefNestedInCompoundInvalid", 1);
++    }
++
++    /**
++     * Tests typedef of compound nested/applied inside a sequence (valid).
++     * 
++     * @throws IOException in case of problems reading a model
++     */
++    @Test
++    public void testTypedefCompoundNestedInSequenceValid1() throws IOException {
++        reasoningTest("typedefCompoundNestedInSequenceValid1", 0);
+     }
+     
++    /**
++     * Tests typedef of compound nested/applied inside a compound (invalid).
++     * 
++     * @throws IOException in case of problems reading a model
++     */
++    @Test
++    public void testTypedefCompoundNestedInSequenceInvalid1() throws IOException {
++        reasoningTest("typedefCompoundNestedInSequenceInvalid1", 1);
++    }
++    
++    /**
++     * Tests typedef of compound nested/applied inside a sequence (valid).
++     * 
++     * @throws IOException in case of problems reading a model
++     */
++    @Test
++    public void testTypedefCompoundNestedInSequenceValid2() throws IOException {
++        reasoningTest("typedefCompoundNestedInSequenceValid2", 0);
++    }
++    
++    /**
++     * Tests typedef of compound nested/applied inside a compound (invalid).
++     * 
++     * @throws IOException in case of problems reading a model
++     */
++    @Test
++    public void testTypedefCompoundNestedInSequenceInvalid2() throws IOException {
++        reasoningTest("typedefCompoundNestedInSequenceInvalid2", 0);
++    }
++
+     /**
+      * Tests typedef nested inside a set (valid).
+      * 
+@@ -843,7 +889,7 @@
+      */
+     @Test
+     public void testTypedefNestedInSetValid() throws IOException {
+-        performOpCheck("typedefNestedInSetValid.ivml", true);
++        reasoningTest("typedefNestedInSetValid", 0);
+     }
+     
+     /**
+@@ -853,7 +899,7 @@
+      */
+     @Test
+     public void testTypedefNestedInSetInvalid() throws IOException {
+-        performOpCheck("typedefNestedInSetInvalid.ivml", false);
++        reasoningTest("typedefNestedInSetInvalid", 1);
+     }
+     
+     /**
+@@ -863,7 +909,7 @@
+      */
+     @Test
+     public void testTypedefNestedInSequenceValid() throws IOException {
+-        performOpCheck("typedefNestedInSequenceValid.ivml", true);
++        reasoningTest("typedefNestedInSequenceValid", 0);
+     }
+     
+     /**
+@@ -873,7 +919,7 @@
+      */
+     @Test
+     public void testTypedefNestedInSequenceInvalid() throws IOException {
+-        performOpCheck("typedefNestedInSequenceInvalid.ivml", false);
++        reasoningTest("typedefNestedInSequenceInvalid", 1);
+     }
+     
+     /**
+@@ -883,10 +929,10 @@
+      */
+     @Test
+     public void testAliasesInContainerValid() throws IOException {
+-        performOpCheck("AliasUsedInSet.ivml", true);
++        reasoningTest("AliasUsedInSet", 0);
+     }
+     
+-// ----------------------------------- Value validation -----------------------
++    // ----------------------------------- Value validation -----------------------
+     
+     /**
+      * Tests value validation.
+@@ -898,7 +944,7 @@
+      */
+     @Test
+     public void testValueValidation1IsValid() throws IOException {
+-        performOpCheck("valueValidation1.ivml", true);
++        reasoningTest("valueValidation1", 0);
+     }
+     
+     /**
+@@ -911,7 +957,7 @@
+      */
+     @Test
+     public void testValueValidation2IsValid() throws IOException {
+-        performOpCheck("valueValidation2.ivml", true);
++        reasoningTest("valueValidation2", 0);
+     }
+     
+     /**
+@@ -924,7 +970,7 @@
+      */
+     @Test
+     public void testValueValidation3IsValid() throws IOException {
+-        performOpCheck("valueValidation3.ivml", true);
++        reasoningTest("valueValidation3", 0);
+     }
+     
+     /**
+@@ -937,7 +983,7 @@
+      */
+     @Test
+     public void testValueValidation4IsValid() throws IOException {
+-        performOpCheck("valueValidation4.ivml", true);
++        reasoningTest("valueValidation4", 0);
+     }
+     
+     /**
+@@ -950,7 +996,7 @@
+      */
+     @Test
+     public void testValueValidation5IsValid() throws IOException {
+-        performOpCheck("valueValidation5.ivml", true);
++        reasoningTest("valueValidation5", 0);
+     }
+     
+     /**
+@@ -963,7 +1009,7 @@
+      */
+     @Test
+     public void testValueValidation6IsValid() throws IOException {
+-        performOpCheck("valueValidation6.ivml", true);
++        reasoningTest("valueValidation6", 0);
+     }
+     
+     /**
+@@ -976,7 +1022,7 @@
+      */ 
+     @Test
+     public void testValueValidation7IsValid() throws IOException {
+-        performOpCheck("valueValidation7.ivml", true);
++        reasoningTest("valueValidation7", 0);
+     }
+     
+     /**
+@@ -989,7 +1035,7 @@
+      */ 
+     @Test
+     public void testValueValidation8IsValid() throws IOException {
+-        performOpCheck("valueValidation8.ivml", true);
++        reasoningTest("valueValidation8", 0);
+     }
+     
+     /**
+@@ -1001,7 +1047,7 @@
+      */ 
+     @Test
+     public void testValueValidation9IsValid() throws IOException {
+-        performOpCheck("valueValidation9.ivml", true);
++        reasoningTest("valueValidation9", 0);
+     }
+     
+     /**
+@@ -1014,7 +1060,7 @@
+      */ 
+     @Test
+     public void testValueValidation10IsValid() throws IOException {
+-        performOpCheck("valueValidation10.ivml", true);
++        reasoningTest("valueValidation10", 0);
+     }
+     
+     /**
+@@ -1026,7 +1072,7 @@
+      */
+     @Test
+     public void testValueValidation11IsValid() throws IOException {
+-        performOpCheck("valueValidation11.ivml", true);
++        reasoningTest("valueValidation11", 0);
+     }
+     
+     /**
+@@ -1038,7 +1084,7 @@
+      */ 
+     @Test
+     public void testValueValidation12IsValid() throws IOException {
+-        performOpCheck("valueValidation12.ivml", true);
++        reasoningTest("valueValidation12", 0);
+     }
+     
+     /**
+@@ -1050,7 +1096,7 @@
+      */
+     @Test
+     public void testValueValidation13IsValid() throws IOException {
+-        performOpCheck("valueValidation13.ivml", true);
++        reasoningTest("valueValidation13", 0);
+     }
+     
+     /**
+@@ -1062,7 +1108,7 @@
+      */  
+     @Test
+     public void testValueValidation14IsValid() throws IOException {
+-        performOpCheck("valueValidation14.ivml", true);
++        reasoningTest("valueValidation14", 0);
+     }
+     
+     /**
+@@ -1074,7 +1120,7 @@
+      */     
+     @Test
+     public void testValueValidation15IsValid() throws IOException {
+-        performOpCheck("valueValidation15.ivml", true);
++        reasoningTest("valueValidation15", 0);
+     }
+     
+     /**
+@@ -1086,7 +1132,7 @@
+      */     
+     @Test
+     public void testValueValidation16IsValid() throws IOException {
+-        performOpCheck("valueValidation16.ivml", true);
++        reasoningTest("valueValidation16", 0);
+     }
+     
+     /**
+@@ -1098,7 +1144,7 @@
+      */     
+     @Test
+     public void testValueValidation17IsValid() throws IOException {
+-        performOpCheck("valueValidation17.ivml", true);
++        reasoningTest("valueValidation17", 0);
+     }
+     
+     /**
+@@ -1110,7 +1156,7 @@
+      */     
+     @Test
+     public void testValueValidation18IsValid() throws IOException {
+-        performOpCheck("valueValidation18.ivml", true);
++        reasoningTest("valueValidation18", 0);
+     }
+     
+     /**
+@@ -1122,7 +1168,7 @@
+      */     
+     @Test
+     public void testValueValidation19IsValid() throws IOException {
+-        performOpCheck("valueValidation19.ivml", true);
++        reasoningTest("valueValidation19", 0);
+     }
+     
+     /**
+@@ -1134,7 +1180,7 @@
+      */     
+     @Test
+     public void testValueValidation20IsValid() throws IOException {
+-        performOpCheck("valueValidation20.ivml", true);
++        reasoningTest("valueValidation20", 0);
+     }
+     
+     /**
+@@ -1146,7 +1192,7 @@
+      */     
+     @Test
+     public void testValueValidation21IsValid() throws IOException {
+-        performOpCheck("valueValidation21.ivml", true);
++        reasoningTest("valueValidation21", 0);
+     }
+     
+     /**
+@@ -1158,10 +1204,10 @@
+      */     
+     @Test
+     public void testValueValidation22IsValid() throws IOException {
+-        performOpCheck("valueValidation22.ivml", true);
++        reasoningTest("valueValidation22", 0);
+     }
+     
+-// ----------------------------------- Annotations -----------------------
++    // ----------------------------------- Annotations -----------------------
+     
+     /**
+      * Tests whether different slots of a compound can be assigned to different annotations.
+@@ -1169,10 +1215,11 @@
+      */
+     @Test
+     public void testAnnotationsToDifferenCompoundSlotsValid() throws IOException {
+-        performOpCheck("annotationAssignedToDifferentCompoundSlotsValid.ivml", true);
++        reasoningTest("annotationAssignedToDifferentCompoundSlotsValid", 0);
+     }
+ 
+     // --------------------------User defined operations -----------------------
++
+     /**
+      * Tests whether operations can be selected through dynamic dispatch in a complex refinement hierarchy.
+      * Reasoner should detect an error.
+@@ -1180,7 +1227,7 @@
+      */
+     @Test
+     public void testDynamicDispatchIsInvalid() throws IOException {
+-        performOpCheck("DynamicDispatchIsInvalid.ivml", false);
++        reasoningTest("DynamicDispatchIsInvalid", 1);
+     }
+     
+     /**
+@@ -1190,7 +1237,7 @@
+      */
+     @Test
+     public void testDynamicDispatchIsValid() throws IOException {
+-        performOpCheck("DynamicDispatchIsValid.ivml", true);
++        reasoningTest("DynamicDispatchIsValid", 0);
+     }
+     
+ }
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/StructureTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/StructureTests.java
+index 410c5f0..2930fdf 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/StructureTests.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/StructureTests.java
+@@ -19,24 +19,24 @@
+ 
+ import org.junit.Test;
+ 
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.varModel.model.Project;
++
+ /**
+  * Test of reasoner capabilities related to the structure of variability models.
+  * @author El-Sharkawy
+  *
+  */
+-public abstract class StructureTests extends AbstractReasonerFrontendTest {
++public class StructureTests extends AbstractTest {
+     
+     /**
+-     * Performs a test directly located in the structure test directory [convenience].
++     * Creating a test instance.
+      * 
+-     * @param subFolder The subfolder inside structure, which contain all related projects of the same test.
+-     * @param projectName the name of the file directly located in the test directory
+-     * @param isValid whether the model shall be valid (or not) to pass
+-     * 
+-     * @throws IOException in case of problems reading a model
++     * @param descriptor the test descriptor
+      */
+-    private void performStructureCheck(String subFolder, String projectName, boolean isValid) throws IOException {
+-        performCheck("structure/" + subFolder, projectName, isValid);
++    protected StructureTests(ITestDescriptor descriptor) {
++        super(descriptor, null);
+     }
+     
+     /**
+@@ -62,9 +62,11 @@
+      * For this reason, I specified a short timeout. Timeout may be shorter.
+      * @throws IOException in case of problems reading a mode
+      */
+-    @Test(timeout = 1000)
++    @Test(timeout = 4000)
+     public void testCyclingDeclarations() throws IOException {
+-        performStructureCheck("CycleTest_CyclingDeclarations", "ImportCycleTest_CyclingDeclarations_A", true);
++        Project prj = loadCompleteProject("structure/CycleTest_CyclingDeclarations", 
++            "ImportCycleTest_CyclingDeclarations_A");
++        resultHandler(0, 0, prj);
+     }
+     
+     /**
+@@ -74,9 +76,10 @@
+      * For this reason, I specified a short timeout. Timeout may be shorter.
+      * @throws IOException in case of problems reading a mode
+      */
+-    @Test(timeout = 1000)
++    @Test(timeout = 4000)
+     public void testNestedCycle() throws IOException {
+-        performStructureCheck("CycleTest_NestedCycle", "NestedCycleTest_MainProject", true);
++        Project prj = loadCompleteProject("structure/CycleTest_NestedCycle", "NestedCycleTest_MainProject");
++        resultHandler(0, 0, prj);
+     }
+ 
+ }
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/CaseStudyStats.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/CaseStudyStats.java
+new file mode 100644
+index 0000000..0dce0eb
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/CaseStudyStats.java
+@@ -0,0 +1,89 @@
++package net.ssehub.easy.reasoning.core.performance;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class CaseStudyStats extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected CaseStudyStats(ITestDescriptor descriptor) {
++        super(descriptor, "performanceModels");
++    }
++    
++    /**
++     * Simple Assignments.
++     */
++    @Test    
++    public void simpleAssignments() {
++        reasoningTest("SimpleAssignments.ivml", 1, 6);       
++    } 
++    
++    /**
++     * Simple Assignments with Constraint Variables.
++     */
++    @Test    
++    public void simpleAssignmentsWithConstraintVar() {
++        reasoningTest("SimpleAssignmentsWithConstraintVars.ivml", 1, 6);       
++    }     
++    
++    /**
++     * Simple Assignments in Compound.
++     */
++    @Test    
++    public void compoundSimpleAssignments() {
++        reasoningTest("CompoundSimpleAssignments.ivml", 1, 6);       
++    } 
++    
++    /**
++     * Simple Assignments with Constraint Variables in Compound.
++     */
++    @Test    
++    public void compoundSimpleAssignmentsWithConstraintVar() {
++        reasoningTest("CompoundSimpleAssignmentsWithConstraintVars.ivml", 1, 6);       
++    }  
++    
++    /**
++     * Compound constraints in collection.
++     */
++    @Test    
++    public void compoundConstraintsInCollection() {
++        reasoningTest("CompoundConstraintsInCollection.ivml", 1, 3);       
++    } 
++    
++    /**
++     * Compound constraints with constraint variables in collection.
++     */
++    @Test    
++    public void compoundConstraintsInCollectionWithConstraintVars() {
++        reasoningTest("CompoundConstraintsInCollectionWithConstraintVars.ivml", 1, 3);       
++    }  
++    
++    /**
++     * Collection of typedef.
++     */
++    @Test    
++    public void typedefCollections() {
++        reasoningTest("TypedefCollections.ivml", 1, 5);       
++    } 
++    
++    /**
++     * Collection of typedef in compound.
++     */
++    @Test    
++    public void typedefCollectionsInCompound() {
++        reasoningTest("TypedefCollectionsInCompound.ivml", 1, 3);       
++    }     
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/GeneratedStats.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/GeneratedStats.java
+new file mode 100644
+index 0000000..f0ace97
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/GeneratedStats.java
+@@ -0,0 +1,51 @@
++package net.ssehub.easy.reasoning.core.performance;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class GeneratedStats extends AbstractTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected GeneratedStats(ITestDescriptor descriptor) {
++        super(descriptor, "ssePerformance");
++    }
++    
++    /**
++     * Tests Boolean 1 to 3 ratio.
++     */
++    @Test    
++    public void gr11() {
++        reasoningTest("gr1_1_v100_c300_b_l2_0.ivml", 150);
++        reasoningTest("gr1_1_v100_c300_b_l2_0.ivml", 150);
++        reasoningTest("gr1_1_v300_c900_b_l2_0.ivml", 438);
++        reasoningTest("gr1_1_v500_c1500_b_l2_0.ivml", 726);
++        reasoningTest("gr1_1_v1000_c3000_b_l2_0.ivml", 1518);
++        reasoningTest("gr1_1_v1500_c4500_b_l2_0.ivml", 2236);
++    } 
++    
++    /**
++     * Tests Boolean 1 to 1 ratio.
++     */
++    @Test    
++    public void gr12() {
++        reasoningTest("gr1_2_v100_c100_b_l2_0.ivml", 46);
++        reasoningTest("gr1_2_v100_c100_b_l2_0.ivml", 46);
++        reasoningTest("gr1_2_v300_c300_b_l2_0.ivml", 124);
++        reasoningTest("gr1_2_v500_c500_b_l2_0.ivml", 266);
++        reasoningTest("gr1_2_v1000_c1000_b_l2_0.ivml", 504);
++        reasoningTest("gr1_2_v1500_c1500_b_l2_0.ivml", 739);
++    }   
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/HistoryStats.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/HistoryStats.java
+new file mode 100644
+index 0000000..bd2fd04
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/HistoryStats.java
+@@ -0,0 +1,39 @@
++package net.ssehub.easy.reasoning.core.performance;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class HistoryStats extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected HistoryStats(ITestDescriptor descriptor) {
++        super(descriptor, "historyPerformance");
++    }
++    
++    /**
++     * Tests history models.
++     */
++    @Test    
++    public void historyStatsTest() {
++        reasoningTest("d2d_v10_c1_bir_l1_0.ivml", 0);    
++//        reasoningTest("d2d_v10_c1_bir_l1_0.ivml", 0);    
++//        reasoningTest("d2d_v100_c10_bir_l1_0.ivml", 6);    
++//        reasoningTest("d2d_v1000_c100_bir_l1_0.ivml", 42);
++//        reasoningTest("d2d_v10_c1_bir_l3_0.ivml", 0);    
++//        reasoningTest("d2d_v100_c10_bir_l3_0.ivml", 6);    
++//        reasoningTest("d2d_v1000_c100_bir_l3_0.ivml", 42);
++    } 
++   
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/package-info.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/package-info.java
+new file mode 100644
+index 0000000..9185bdc
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/package-info.java
+@@ -0,0 +1,5 @@
++/**
++ * Performance tests.
++ * @author Sizonenko
++ */
++package net.ssehub.easy.reasoning.core.performance;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/AbstractQualiMasterTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/AbstractQualiMasterTest.java
+new file mode 100644
+index 0000000..bd92e09
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/AbstractQualiMasterTest.java
+@@ -0,0 +1,204 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import java.io.File;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.ProjectImport;
++
++/**
++ * Parent class for tests based on the QualiMaster use cases.
++ * @author Sizonenko
++ * @author El-Sharkawy
++ *
++ */
++public abstract class AbstractQualiMasterTest extends AbstractTest {
++      
++    protected static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
++
++    private Project basic;
++    private Project observables;
++    private Project hardware;
++    private Project hardwareCfg;
++    private Project adaptivity;
++    private Project adaptivityCfg;
++    private Project observablesCfg;
++    private Project dataManagement;
++    private Project dataManagementCfg;
++    private Project reconfigurableHardware;
++    private Project reconfigurableHardwareCfg;
++    private Project algorithms;
++    private Project algorithmsCfg;
++    private Project families;
++    private Project familiesCfg;
++    private Project pipelines;
++    private Project priorityPipCfg;
++    private Project pipelinesCfg;
++    private Project infrastructure;
++    private Project infrastructureCfg;
++    private Project qm;
++    
++    private ProjectImport importBasic;
++    private ProjectImport importObservables;
++    private ProjectImport importHardware;
++    private ProjectImport importHardwareCfg;
++    private ProjectImport importAdaptivity;
++    private ProjectImport importAdaptivityCfg;
++    private ProjectImport importObservablesCfg;
++    private ProjectImport importDataManagement;
++    private ProjectImport importDataManagementCfg;
++    private ProjectImport importReconfigurableHardware;
++    private ProjectImport importReconfigurableHardwareCfg;
++    private ProjectImport importAlgorithms;
++    private ProjectImport importAlgorithmsCfg;
++    private ProjectImport importFamilies;
++    private ProjectImport importFamiliesCfg;
++    private ProjectImport importPipelines;
++    private ProjectImport importPriorityPipCfg;
++    private ProjectImport importPipelinesCfg;
++    private ProjectImport importInfrastructure;
++    private ProjectImport importInfrastructureCfg;
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     * @param testPath the test path (empty or null means do not try to load models)
++     */
++    protected AbstractQualiMasterTest(ITestDescriptor descriptor, String testPath) {
++        super(descriptor, testPath);
++    }
++    
++    /**
++     * Method for loading all projects.
++     */
++    private void loadAllProjects() {
++        basic = loadProject("Basics.ivml");
++        observables = loadProject("Observables.ivml");
++        hardware = loadProject("Hardware.ivml");
++        hardwareCfg = loadProject("HardwareCfg.ivml");
++        adaptivity = loadProject("Adaptivity.ivml");
++        adaptivityCfg = loadProject("AdaptivityCfg.ivml");
++        observablesCfg = loadProject("ObservablesCfg.ivml");
++        dataManagement = loadProject("DataManagement.ivml");
++        dataManagementCfg = loadProject("DataManagementCfg.ivml");
++        reconfigurableHardware = loadProject("ReconfigurableHardware.ivml");
++        reconfigurableHardwareCfg = loadProject("ReconfigurableHardwareCfg.ivml");
++        algorithms = loadProject("Algorithms.ivml");
++        algorithmsCfg = loadProject("AlgorithmsCfg.ivml");
++        families = loadProject("Families.ivml");
++        familiesCfg = loadProject("FamiliesCfg.ivml");
++        pipelines = loadProject("Pipelines.ivml");
++        priorityPipCfg = loadProject("PriorityPipCfg.ivml");
++        pipelinesCfg = loadProject("PipelinesCfg.ivml");
++        infrastructure = loadProject("Infrastructure.ivml");
++        infrastructureCfg = loadProject("InfrastructureCfg.ivml");
++        qm = loadProject("QM_0.ivml");
++    }
++    
++    /**
++     * Method for creating project imports.
++     */
++    private void createProjectImports() {
++        importBasic = new ProjectImport(basic.getName(), null);
++        importObservables = new ProjectImport(basic.getName(), null);
++        importHardware = new ProjectImport(basic.getName(), null);
++        importHardwareCfg = new ProjectImport(basic.getName(), null);
++        importAdaptivity = new ProjectImport(basic.getName(), null);
++        importAdaptivityCfg = new ProjectImport(basic.getName(), null);
++        importObservablesCfg = new ProjectImport(basic.getName(), null);
++        importDataManagement = new ProjectImport(basic.getName(), null);
++        importDataManagementCfg = new ProjectImport(basic.getName(), null);
++        importReconfigurableHardware = new ProjectImport(basic.getName(), null);
++        importReconfigurableHardwareCfg = new ProjectImport(basic.getName(), null);
++        importAlgorithms = new ProjectImport(basic.getName(), null);
++        importAlgorithmsCfg = new ProjectImport(basic.getName(), null);
++        importFamilies = new ProjectImport(basic.getName(), null);
++        importFamiliesCfg = new ProjectImport(basic.getName(), null);
++        importPipelines = new ProjectImport(basic.getName(), null);
++        importPriorityPipCfg = new ProjectImport(basic.getName(), null);
++        importPipelinesCfg = new ProjectImport(basic.getName(), null);
++        importInfrastructure = new ProjectImport(basic.getName(), null);
++        importInfrastructureCfg = new ProjectImport(basic.getName(), null);
++    }
++    
++    /**
++     * Method to create QM model(import projects) and validate it. 
++     * @param expectedFailedConstraints Number of constraints that are expected to fail.
++     */        
++    public final void reasoningTest(int expectedFailedConstraints) {
++        loadAllProjects();
++        createProjectImports();
++        observables.addImport(importBasic);
++        hardware.addImport(importBasic);
++        hardware.addImport(importObservables);
++        hardwareCfg.addImport(importHardware);
++        adaptivity.addImport(importBasic);
++        adaptivity.addImport(importObservables);
++        adaptivityCfg.addImport(importAdaptivity);
++        observablesCfg.addImport(importObservables);
++        dataManagement.addImport(importBasic);
++        dataManagement.addImport(importObservables);
++        dataManagementCfg.addImport(importDataManagement);
++        reconfigurableHardware.addImport(importBasic);
++        reconfigurableHardware.addImport(importObservables);
++        reconfigurableHardwareCfg.addImport(importReconfigurableHardware);
++        algorithms.addImport(importBasic);
++        algorithms.addImport(importObservables);
++        algorithms.addImport(importReconfigurableHardware);
++        algorithmsCfg.addImport(importReconfigurableHardware);
++        algorithmsCfg.addImport(importReconfigurableHardwareCfg);
++        algorithmsCfg.addImport(importAlgorithms);
++        families.addImport(importBasic);
++        families.addImport(importAlgorithms);
++        familiesCfg.addImport(importReconfigurableHardware);
++        familiesCfg.addImport(importFamilies);
++        familiesCfg.addImport(importAlgorithmsCfg);
++        pipelines.addImport(importBasic);
++        pipelines.addImport(importFamilies);
++        pipelines.addImport(importDataManagement);
++        pipelines.addImport(importHardware);
++        priorityPipCfg.addImport(importPipelines);
++        priorityPipCfg.addImport(importFamiliesCfg);
++        priorityPipCfg.addImport(importDataManagementCfg);
++        pipelinesCfg.addImport(importPriorityPipCfg);
++        infrastructure.addImport(importBasic);
++        infrastructure.addImport(importHardware);
++        infrastructure.addImport(importReconfigurableHardware);
++        infrastructure.addImport(importFamilies);
++        infrastructure.addImport(importObservables);
++        infrastructure.addImport(importAdaptivity);
++        infrastructure.addImport(importPipelines);
++        infrastructureCfg.addImport(importInfrastructure);
++        infrastructureCfg.addImport(importPipelinesCfg);
++        qm.addImport(importHardwareCfg);
++        qm.addImport(importReconfigurableHardwareCfg);
++        qm.addImport(importDataManagementCfg);
++        qm.addImport(importObservablesCfg);
++        qm.addImport(importAdaptivityCfg);
++        qm.addImport(importAlgorithmsCfg);
++        qm.addImport(importFamiliesCfg);
++        qm.addImport(importPipelinesCfg);
++        qm.addImport(importInfrastructureCfg);
++        
++        resultHandler(expectedFailedConstraints, -1, qm);
++    }    
++    
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMAlgorithmsTest1.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMAlgorithmsTest1.java
+new file mode 100644
+index 0000000..d53329f
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMAlgorithmsTest1.java
+@@ -0,0 +1,47 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Hardware constraint: algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size() test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMAlgorithmsTest1 extends AbstractQualiMasterTest {
++ 
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMAlgorithmsTest1(ITestDescriptor descriptor) {
++        super(descriptor, "qmAlgorithmsTest1");
++    }
++
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void coreTest() {
++        reasoningTest(1);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest1.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest1.java
+new file mode 100644
+index 0000000..44fa690
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest1.java
+@@ -0,0 +1,47 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Hardware constraint: inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input) test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMFamiliesTest1 extends AbstractQualiMasterTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMFamiliesTest1(ITestDescriptor descriptor) {
++        super(descriptor, "qmFamiliesTest1");
++    }
++    
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void coreTest() {
++        reasoningTest(1);
++    } 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest2.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest2.java
+new file mode 100644
+index 0000000..6699976
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest2.java
+@@ -0,0 +1,47 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Hardware constraint: memberCount = members.size() > 0 test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMFamiliesTest2 extends AbstractQualiMasterTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMFamiliesTest2(ITestDescriptor descriptor) {
++        super(descriptor, "qmFamiliesTest2");
++    }
++    
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void coreTest() {
++        reasoningTest(1);
++    } 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest1.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest1.java
+new file mode 100644
+index 0000000..de08494
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest1.java
+@@ -0,0 +1,47 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Hardware constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty() test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMHardwareTest1 extends AbstractQualiMasterTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMHardwareTest1(ITestDescriptor descriptor) {
++        super(descriptor, "qmHardwareTest1");
++    }
++    
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void coreTest() {
++        reasoningTest(1);
++    } 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest2.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest2.java
+new file mode 100644
+index 0000000..3e92b0f
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest2.java
+@@ -0,0 +1,47 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Hardware constraint: managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMHardwareTest2 extends AbstractQualiMasterTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMHardwareTest2(ITestDescriptor descriptor) {
++        super(descriptor, "qmHardwareTest2");
++    }    
++    
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void coreTest() {
++        reasoningTest(1);
++    } 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest3.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest3.java
+new file mode 100644
+index 0000000..bbd2dd6
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest3.java
+@@ -0,0 +1,47 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Hardware constraint: machineName = machines->collect(m|m.name).size() == machines.size() test.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMHardwareTest3 extends AbstractQualiMasterTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMHardwareTest3(ITestDescriptor descriptor) {
++        super(descriptor, "qmHardwareTest3");
++    }
++    
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void coreTest() {
++        reasoningTest(1);
++    } 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMMonTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMMonTest.java
+new file mode 100644
+index 0000000..56a8357
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMMonTest.java
+@@ -0,0 +1,86 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
++import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.model.AbstractVariable;
++import net.ssehub.easy.varModel.model.ModelQuery;
++import net.ssehub.easy.varModel.model.ModelQueryException;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.datatypes.IntegerType;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++
++/**
++ * Qualimaster monitoring test.
++ * Model is valid.
++ * 
++ * @author Holger Eichelberger
++ */
++public class QMMonTest extends AbstractTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMMonTest(ITestDescriptor descriptor) {
++        super(descriptor, "qmMonTest");
++    }
++
++    /**
++     * Basic test.
++     * 
++     * @throws ModelQueryException shall not occur
++     * @throws ConfigurationException shall not occur
++     * @throws ValueDoesNotMatchTypeException shall not occur
++     */
++    @Test    
++    public void monTest() throws ModelQueryException, ConfigurationException, ValueDoesNotMatchTypeException {
++        Project prj = loadProject("QM");
++        Configuration config = new Configuration(prj, true);
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setRuntimeMode(true);
++        IReasoner reasoner = createReasoner();
++        ReasoningResult rResult = performReasoning(reasoner, prj, config, rConfig, DEFAULT_TAG + " 1");
++        Assert.assertFalse(rResult.hasConflict());
++
++        AbstractVariable alg1Decl = ModelQuery.findVariable(prj, "alg1", null);
++        AbstractVariable alg2Decl = ModelQuery.findVariable(prj, "alg2", null);
++        IDecisionVariable alg1 = config.getDecision(alg1Decl);
++        IDecisionVariable alg2 = config.getDecision(alg2Decl);
++        
++        alg1.getNestedElement("throughputItem").setValue(
++            ValueFactory.createValue(IntegerType.TYPE, 22), AssignmentState.ASSIGNED);
++        alg2.getNestedElement("throughputItem").setValue(
++            ValueFactory.createValue(IntegerType.TYPE, 22), AssignmentState.ASSIGNED);
++
++        rResult = performReasoning(reasoner, prj, config, rConfig, DEFAULT_TAG + " 2");
++        Assert.assertTrue(rResult.hasConflict());
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMPipelinesTest1.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMPipelinesTest1.java
+new file mode 100644
+index 0000000..56e0bb2
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMPipelinesTest1.java
+@@ -0,0 +1,48 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Hardware constraint: flow error from the presentation test.
++ * typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMPipelinesTest1 extends AbstractQualiMasterTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMPipelinesTest1(ITestDescriptor descriptor) {
++        super(descriptor, "qmPipelinesTest1");
++    }
++    
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void coreTest() {
++        reasoningTest(1);
++    } 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMScenarioTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMScenarioTests.java
+new file mode 100644
+index 0000000..493ef47
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMScenarioTests.java
+@@ -0,0 +1,64 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Configures the operation tests for SSE reasoner.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMScenarioTests extends AbstractTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMScenarioTests(ITestDescriptor descriptor) {
++        super(descriptor, "qmTemplates");
++    }
++    
++    /**
++     * Tests QM Hardware collections.
++     */
++    @Test    
++    public void qmHardwareTest() {
++        reasoningTest("QMHardwareTest.ivml", 1);
++    }
++    
++    /**
++     * Tests collections.
++     */
++    @Test    
++    public void nestedHardwareTest() {
++        reasoningTest("nestedHardwareTest.ivml", 1);
++    } 
++    
++    /**
++     * Tests QM Family Algorithms fields test.
++     */
++    @Test    
++    public void qmFamilyAlgorithmsFieldsTest() {
++        reasoningTest("QMFamilyAlgorithmsFieldsTest.ivml", 1); // fail as stated in model
++    } 
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMValidTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMValidTest.java
+new file mode 100644
+index 0000000..549097a
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMValidTest.java
+@@ -0,0 +1,49 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.qm;
++
++import org.junit.Test;
++
++import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
++
++/**
++ * Qualimaster model test.
++ * Model is valid.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class QMValidTest extends AbstractQualiMasterTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected QMValidTest(ITestDescriptor descriptor) {
++        super(descriptor, "qmModelTest");
++    }
++
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void coreTest() {
++        reasoningTest(0);
++        reasoningTest(0);
++    } 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/package-info.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/package-info.java
+new file mode 100644
+index 0000000..5144c78
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/package-info.java
+@@ -0,0 +1,6 @@
++/**
++ * Test the Qualimaster model.
++ * @author Sizonenko
++ *
++ */
++package net.ssehub.easy.reasoning.core.qm;
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTest.java
+new file mode 100644
+index 0000000..a79b3f8
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTest.java
+@@ -0,0 +1,699 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import java.io.File;
++import java.io.IOException;
++import java.util.List;
++
++import org.eclipse.emf.common.util.URI;
++import org.eclipse.xtext.util.Arrays;
++import org.junit.After;
++import org.junit.Assert;
++import org.junit.Before;
++
++import de.uni_hildesheim.sse.ModelUtility;
++import net.ssehub.easy.basics.messages.Status;
++import net.ssehub.easy.basics.modelManagement.ModelInfo;
++import net.ssehub.easy.basics.modelManagement.ModelManagementException;
++import net.ssehub.easy.basics.modelManagement.Version;
++import net.ssehub.easy.basics.progress.ProgressObserver;
++import net.ssehub.easy.dslCore.StandaloneInitializer;
++import net.ssehub.easy.dslCore.TranslationResult;
++import net.ssehub.easy.dslCore.translation.Message;
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.management.VarModel;
++import net.ssehub.easy.varModel.model.AbstractVariable;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.ProjectImport;
++import net.ssehub.easy.varModel.model.filter.DeclarationFinder;
++import net.ssehub.easy.varModel.model.filter.FilterType;
++import net.ssehub.easy.varModel.model.filter.DeclarationFinder.VisibilityType;
++import net.ssehub.easy.varModel.model.values.Value;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
++import net.ssehub.easy.varModel.varModel.testSupport.TSVMeasurementCollector;
++
++/**
++ * General abstract test class for reusable reasoning tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ * @author Eichelberger
++ */
++public abstract class AbstractTest extends net.ssehub.easy.dslCore.test.AbstractTest<Project> {
++
++    public static final String DEFAULT_TAG = "REASONING";
++    
++    /**
++     * The system property key for the number number of full reasoning executions {@value}}.
++     */
++    public static final String KEY_NUM_RUNS_REASONING_FULL = "easy.test.runs.reasoning.full";
++    
++    /**
++     * The system property key for the number number of incremental reasoning executions {@value}}.
++     */
++    public static final String KEY_NUM_RUNS_REASONING_INCREMENTAL = "easy.test.runs.reasoning.incremental";
++    
++    /**
++     * The system property key for the number number of full instance executions {@value}}.
++     */
++    public static final String KEY_NUM_RUNS_REASONING_INSTANCE = "easy.test.runs.reasoning.instance";
++    
++    /**
++     * The number of full reasoning executions based on {@link #KEY_NUM_RUNS_REASONING_FULL}. At least 1.
++     * @see #performReasoning(IReasoner, Project, Configuration, ReasonerConfiguration)
++     */
++    public static final int NUM_FULL_REASONING 
++        = MeasurementCollector.getIntProperty(KEY_NUM_RUNS_REASONING_FULL, 1, 1);
++    
++    /**
++     * The number of incremental reasoning executions based on {@link #KEY_NUM_RUNS_REASONING_INCREMENTAL}. At least 0, 
++     * i.e., can be switched off.
++     */
++    public static final int NUM_INCREMENTAL_REASONING 
++        = MeasurementCollector.getIntProperty(KEY_NUM_RUNS_REASONING_INCREMENTAL, 1, 0);
++
++    /**
++     * The number of instance reasoning executions based on {@link #KEY_NUM_RUNS_REASONING_INSTANCE}. At least 0, 
++     * i.e., can be switched off.
++    */
++    public static final int NUM_INSTANCE_REASONING 
++        = MeasurementCollector.getIntProperty(KEY_NUM_RUNS_REASONING_INSTANCE, 2, 0);
++    
++    private ITestDescriptor descriptor;
++    private String testPath;
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     * @param testPath the test path (empty or <b>null</b> means do not try to load models)
++     */
++    protected AbstractTest(ITestDescriptor descriptor, String testPath) {
++        this.descriptor = descriptor;
++        this.testPath = testPath;
++    }
++    
++    /**
++     * Returns the testdata folder.
++     * 
++     * @return the testdata folder
++     */
++    public File getTestdataBase() {
++        return determineTestDataFolder(descriptor.getSystemProperty());
++    }
++    
++    /**
++     * Creates a reasoner instance through {@link #descriptor}.
++     * 
++     * @return the reasoner instance
++     */
++    protected IReasoner createReasoner() {
++        return descriptor.createReasoner();
++    }
++    
++    /**
++     * Returns the path after testdata folder where the test files are located.
++     * 
++     * @return the path
++     */
++    protected String getTestPath() {
++        return testPath;
++    }
++    
++    /**
++     * Changes the test path.
++     * 
++     * @param testPath the new test path
++     */
++    protected void setTestPath(String testPath) {
++        removeLocation();
++        this.testPath = testPath;
++        addLocation();
++    }
++
++    /**
++     * Returns the complete testdata folder.
++     * 
++     * @return the path
++     */
++    protected File getTestdata() {
++        return new File(getTestdataBase(), getTestPath());
++    }
++
++    /**
++     * Method for handling reasoning result, actually performing a propagation by default (due to legacy reasons).
++     * 
++     * @param expectedFailedConstraints Number of constraints that are expected to fail
++     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
++     * @param projectP1 Project to reason on.
++     * @return configuration (for further specific tests)
++     */
++    protected final Configuration resultHandler(int expectedFailedConstraints, int expectedReevaluationCount, 
++        Project projectP1) {
++        return assertPropagation(expectedFailedConstraints, expectedReevaluationCount, projectP1); // legacy
++    }
++
++    /**
++     * Method for asserting a propagation.
++     * 
++     * @param expectedFailedConstraints Number of constraints that are expected to fail
++     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
++     * @param projectP1 Project to reason on.
++     * @return configuration (for further specific tests)
++     * 
++     * @see #debugConfigBeforeResultHandler(Configuration)
++     */
++    protected final Configuration assertPropagation(int expectedFailedConstraints, int expectedReevaluationCount, 
++        Project projectP1) {
++        Configuration config = new Configuration(projectP1, false);
++        return assertPropagation(expectedFailedConstraints, expectedReevaluationCount, config);
++    }
++
++    /**
++     * Method for asserting a propagation.
++     * 
++     * @param expectedFailedConstraints Number of constraints that are expected to fail
++     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
++     * @param config the configuration to reason on.
++     * @return <code>config</code> (for further specific tests)
++     * 
++     * @see #debugConfigBeforeResultHandler(Configuration)
++     */
++    protected final Configuration assertPropagation(int expectedFailedConstraints, int expectedReevaluationCount, 
++        Configuration config) {
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        configureReasoner(rConfig);
++        // Perform reasoning
++        IReasoner reasoner = createReasoner();
++        ReasoningResult rResult = performReasoning(reasoner, config.getProject(), config, rConfig);
++        debugConfigBeforeResultHandler(config);
++        resultHandler(expectedFailedConstraints, expectedReevaluationCount, rResult);
++        return config;
++    }
++
++    /**
++     * Performs reasoning using {@link ITestDescriptor#createReasoner() the reasoner provided by 
++     * the test descriptor} and collects the result in {@link MeasurementCollector}.
++     * 
++     * @param project the project
++     * @param config the configuration
++     * @param rConfig the reasoner configuration
++     * @return the reasoning result
++     */
++    protected ReasoningResult performReasoning(Project project, Configuration config, 
++        ReasonerConfiguration rConfig) {
++        return performReasoning(descriptor.createReasoner(), project, config, rConfig);
++    }
++
++    /**
++     * Performs reasoning using {@link ITestDescriptor#createReasoner() the reasoner provided by 
++     * the test descriptor} and collects the result in {@link MeasurementCollector}.
++     * 
++     * @param project the project
++     * @param config the configuration
++     * @param rConfig the reasoner configuration
++     * @param tag explicit tag for measurement recording (may be <b>null</b>)
++     * @return the reasoning result
++     */
++    protected ReasoningResult performReasoning(Project project, Configuration config, 
++        ReasonerConfiguration rConfig, String tag) {
++        return performReasoning(descriptor.createReasoner(), project, config, rConfig, tag);
++    }
++
++    /**
++     * Performs reasoning and collects the result in {@link MeasurementCollector} using {@link #DEFAULT_TAG}.
++     * 
++     * @param reasoner the reasoner to use
++     * @param project the project
++     * @param config the configuration
++     * @param rConfig the reasoner configuration
++     * @return the reasoning result
++     */
++    protected ReasoningResult performReasoning(IReasoner reasoner, Project project, Configuration config, 
++        ReasonerConfiguration rConfig) {
++        return performReasoning(reasoner, project, config, rConfig, DEFAULT_TAG);
++    }
++
++    /**
++     * Performs reasoning and collects the result in {@link MeasurementCollector}.
++     * Repeats the reasoning {@link #NUM_FULL_REASONING} times.
++     * 
++     * @param reasoner the reasoner to use
++     * @param project the project
++     * @param config the configuration
++     * @param rConfig the reasoner configuration
++     * @param tag explicit tag for measurement recording (may be <b>null</b>)
++     * @return the (first) reasoning result
++     */
++    protected ReasoningResult performReasoning(IReasoner reasoner, Project project, Configuration config, 
++        ReasonerConfiguration rConfig, String tag) {
++        ensureCollector();
++        ReasoningResult result = null;
++        for (int r = 1, n = NUM_FULL_REASONING; r <= n; r++) {
++            String id = MeasurementCollector.start(config, tag, r);
++            ReasoningResult res =  reasoner.propagate(project, config, rConfig, ProgressObserver.NO_OBSERVER);
++            MeasurementCollector.endAuto(id);
++            transferReasoningMeasures(id, res);
++            MeasurementCollector.end(id);
++            res.logInformation(project, rConfig);
++            if (n > 1) {
++                // we want to cause multiple reasoner calls, not re-reasoning on the same configuration here
++                config = new Configuration(project, false); 
++            }
++            result = null == result ? res : result;
++        }
++        return result;
++    }
++
++    /**
++     * Ensures the measurement collector.
++     */
++    protected void ensureCollector() {
++        TSVMeasurementCollector.ensureCollector(new File(getTestdataBase(), 
++            "temp/" + descriptor.getMeasurementFileName()));
++    }
++
++    /**
++     * Transfers the reasoning measures from the given reasoning <code>result</code> to the collector <code>coll</code>.
++     * 
++     * @param id the measurement identifier
++     * @param result the reasoning result to take the values from
++     */
++    protected void transferReasoningMeasures(String id, ReasoningResult result) {
++        transferReasoningMeasures(MeasurementCollector.getInstance(), id, result);
++    }
++
++    /**
++     * Transfers the reasoning measures from the given reasoning <code>result</code> to the collector <code>coll</code>.
++     * 
++     * @param coll the collector to receive the measurements
++     * @param id the measurement identifier
++     * @param result the reasoning result to take the values from
++     */
++    protected void transferReasoningMeasures(MeasurementCollector coll, String id, ReasoningResult result) {
++        transferReasoningMeasures(coll, id, descriptor.measurements(), result);
++    }
++    
++    /**
++     * Transfers the reasoning measures from the given reasoning <code>result</code> to the collector <code>coll</code>.
++     * 
++     * @param coll the collector to receive the measurements
++     * @param id the measurement identifier
++     * @param keys the measurement keys to collect
++     * @param result the reasoning result to take the values from
++     */
++    public static void transferReasoningMeasures(MeasurementCollector coll, String id, IMeasurementKey[] keys, 
++        ReasoningResult result) {
++        for (int k = 0; k < keys.length; k++) {
++            Number measure = result.getMeasure(keys[k]);
++            if (null != measure) {
++                coll.setMeasurement(id, keys[k], measure.doubleValue());
++            }
++        }
++        // auto columns in TSV
++        MeasurementCollector.set(id, AbstractTestDescriptor.MeasurementIdentifier.REASONER_INSTANCE_CREATION_TIME, 0);
++    }
++    
++    /**
++     * Allows to configure the reasoner configuration.
++     * 
++     * @param rConfig the configuration to change if needed
++     */
++    protected void configureReasoner(ReasonerConfiguration rConfig) {
++    }
++    
++    /**
++     * Called to enable debugging the configuration after reasoning but before asserting.
++     * 
++     * @param cfg the configuration to debug
++     */
++    protected void debugConfigBeforeResultHandler(Configuration cfg) {
++    }
++    
++    /**
++     * Method for handling a reasoning result.
++     * @param expectedFailedConstraints Number of constraints that are expected to fail
++     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
++     * @param result the reasoning result
++     */
++    protected static final void resultHandler(int expectedFailedConstraints, int expectedReevaluationCount, 
++        ReasoningResult result) {
++        // Test whether reasoning detected correct result  
++        int failedConstraints = 0;
++        for (int i = 0; i < result.getMessageCount(); i++) {
++            if (result.getMessage(i).getStatus() == Status.ERROR) {
++                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
++            }
++        }
++        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
++
++        if (expectedReevaluationCount > 0) {
++            Number measure = result.getMeasure(GeneralMeasures.REEVALUATION_COUNT);
++            if (null == measure) {
++                Assert.fail("Reasoner does not provide measure " + GeneralMeasures.REEVALUATION_COUNT);
++            } else {
++                // Test whether reasoning is done in correct reevalustion steps  
++                Assert.assertTrue("Reevaluation count mismatch. Result: " + measure.intValue()
++                    + " Expected: " + expectedReevaluationCount, measure.intValue() == expectedReevaluationCount);
++            }
++        }
++    }
++    
++    /**
++     * Helper method for load an IVML file.
++     * @param testFolder The (sub-) folder where to load the specified IVML test files.
++     * @param path The name of the IVML file to load (optional including the file extension) inside of the
++     *     <tt>reasonerModel</tt> folder.
++     * @return The loaded {@link Project} representing the read IVML file.
++     */
++    protected final Project loadProject(File testFolder, String path) {
++        Project project = null;
++        try {
++            File projectFile = new File(testFolder, path.endsWith(".ivml") ? path : path + ".ivml");
++            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
++            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
++            StringBuffer errorMsg = new StringBuffer();
++            for (int i = 0; i < result.getMessageCount(); i++) {
++                Message msg = result.getMessage(i);
++                if (!msg.ignore() && Status.ERROR == msg.getStatus()) {
++                    errorMsg.append(msg.getDescription());
++                    errorMsg.append("\n");
++                }
++            }
++            if (errorMsg.length() == 0) {
++                project = result.getResult(0);
++            } else {
++                Assert.fail(errorMsg.toString());
++            }
++            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
++            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
++        } catch (IOException exc) {
++            Assert.fail(exc.getLocalizedMessage());
++        }
++        return project;
++    }
++
++    /**
++     * Load an IVML File as project with dependencies assuming version "0".
++     * 
++     * @param projectName The name of the project to load.
++     * @return the specified and parsed project 
++     * @throws IOException
++     *     if an error occurred while reading the IVML file
++     */
++    protected final Project loadCompleteProject(String projectName) throws IOException {
++        return loadCompleteProject("", projectName);
++    }
++    
++    /**
++     * Load an IVML File as project with dependencies assuming version "0". Call 
++     * {@link #resultHandler(int, int, Project)} afterwards.
++     * 
++     * @param folderName The folder the test project(s) relative to {@link #getTestdataBase()}
++     * @param projectName The name of the project to load.
++     * @return the specified and parsed project 
++     * @throws IOException
++     *     if an error occurred while reading the IVML file
++     */
++    protected final Project loadCompleteProject(String folderName, String projectName) throws IOException {
++        // Register folder for parsing files
++        File folder = getTestdataBase();
++        if (null != getTestPath()) {
++            folder = getTestdata();
++        }
++        folder = new File(folder, folderName);
++        try {
++            VarModel.INSTANCE.locations().addLocation(folder, ProgressObserver.NO_OBSERVER);
++            VarModel.INSTANCE.loaders().registerLoader(ModelUtility.INSTANCE, ProgressObserver.NO_OBSERVER);
++        } catch (ModelManagementException e) {
++            System.out.println(e.getMessage());
++        }
++        
++        List<ModelInfo<Project>> infos = VarModel.INSTANCE.availableModels().getModelInfo(projectName, new Version(0));
++        Assert.assertNotNull("No models found at \"" + folder.getAbsolutePath() + "\"", infos);
++        Assert.assertEquals(infos.size() + " models found at \"" + folder.getAbsolutePath() + "\" but should be 1.",
++            1, infos.size());
++        
++        // Parse IVML File
++        Project project = null;
++        try {
++            project = VarModel.INSTANCE.load(infos.get(0));
++        } catch (ModelManagementException e) {
++            e.printStackTrace();
++            Assert.fail("Could not load model \"" + projectName + "\", reason: " + e.getMessage());
++        }
++        
++        Assert.assertNotNull("Loaded project is null, probably due parsing errors: \"" + projectName + "\"", project);
++
++        try {
++            VarModel.INSTANCE.locations().removeLocation(folder, ProgressObserver.NO_OBSERVER);
++            VarModel.INSTANCE.loaders().unregisterLoader(ModelUtility.INSTANCE, ProgressObserver.NO_OBSERVER);
++        } catch (ModelManagementException e) {
++            System.out.println(e.getMessage());
++        }
++
++        return project;
++    }
++    
++    /**
++     * Helper method for load an IVML file.
++     * @param path The name of the IVML file to load (optional including the file extension) inside of the
++     *     <tt>reasonerModel</tt> folder.
++     * @return The loaded {@link Project} representing the read IVML file.
++     */
++    protected Project loadProject(String path) {
++        return loadProject(getTestdata(), path);
++    }
++    
++    /**
++     * Initializes this Test class.
++     */
++    @Before
++    public void setUpBeforeClass() {
++        startup();
++    }
++    
++    /**
++     * Frees the memory after testing.
++     */
++    @After
++    public void tearDownAfterClass() {
++        shutdown();
++    }
++    
++    /**
++     * Initializes this Test class.
++     */
++    public void startup() {
++        descriptor.registerResoner();
++        ModelUtility.setResourceInitializer(new StandaloneInitializer());
++        addLocation();
++    }
++    
++    /**
++     * Frees the memory after testing.
++     */
++    protected void shutdown() {
++        descriptor.unregisterReasoner();
++        removeLocation();
++    }
++
++    /**
++     * Adds {@link #testPath} as IVML location.
++     */
++    private void addLocation() {
++        if (null != testPath && testPath.length() > 0) {
++            try {
++                VarModel.INSTANCE.locations().addLocation(getTestdata(), ProgressObserver.NO_OBSERVER);
++            } catch (ModelManagementException e) {
++                Assert.fail("Could not add location of test files.");
++            }
++        }
++        
++    }
++
++    /**
++     * Removes {@link #testPath} as IVML location.
++     */
++    private void removeLocation() {
++        if (null != testPath && testPath.length() > 0) {
++            try {
++                VarModel.INSTANCE.locations().removeLocation(getTestdata(), ProgressObserver.NO_OBSERVER);
++            } catch (ModelManagementException e) {
++                Assert.fail("Could not remove location of test files.");
++            }
++        }
++    }
++    
++    /**
++     * Method to test whether different types of variables and constraints could be translated correctly
++     * into rules and reasoned on without any errors. 
++     * @param ivmlFile IVML file to translate and reason on.
++     * @param expectedFailedConstraints Number of constraints that are expected to fail.
++     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
++     * @return configuration (for further specific tests)
++     */        
++    public Configuration reasoningTest(String ivmlFile, int expectedFailedConstraints, int expectedReevaluationCount) {
++        Project project = loadProject(ivmlFile);
++        return resultHandler(expectedFailedConstraints, expectedReevaluationCount, project);
++    }   
++    
++    /**
++     * Method to test whether different types of variables and constraints could be translated correctly
++     * into rules and reasoned on without any errors. 
++     * @param ivmlFile IVML file to translate and reason on.
++     * @param expectedFailedConstraints Number of constraints that are expected to fail.
++     * @return configuration (for further specific tests)
++     */        
++    public Configuration reasoningTest(String ivmlFile, int expectedFailedConstraints) {
++        return reasoningTest(ivmlFile, expectedFailedConstraints, -1);
++    }
++
++    /**
++     * Method to test whether different types of variables and constraints could be translated correctly
++     * into rules and reasoned on without any errors. 
++     * @param p0 IVML file to translate and reason on.
++     * @param p1 IVML file to translate and reason on.
++     * @param expectedFailedConstraints Number of constraints that are expected to fail.
++     * @return configuration (for further specific tests)
++     */        
++    protected Configuration reasoningTest(String p0, String p1, int expectedFailedConstraints) {
++        Project projectP0 = loadProject(p0);
++        Project projectP1 = loadProject(p1);
++        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
++        projectP1.addImport(importP0);
++        return resultHandler(expectedFailedConstraints, -1, projectP1);
++    }
++    
++    /**
++     * Method to test whether different types of variables and constraints could be translated correctly
++     * into rules and reasoned on without any errors. 
++     * @param p0 IVML file to translate and reason on.
++     * @param p1 IVML file to translate and reason on.
++     * @param p2 IVML file to translate and reason on.
++     * @param expectedFailedConstraints Number of constraints that are expected to fail.
++     * @return configuration (for further specific tests)
++     */        
++    protected Configuration reasoningTest(String p0, String p1, String p2, int expectedFailedConstraints) {
++        Project projectP0 = loadProject(p0);
++        Project projectP1 = loadProject(p1);
++        Project projectP2 = loadProject(p2);
++        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
++        projectP1.addImport(importP0);
++        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
++        projectP2.addImport(importP1);
++        return resultHandler(expectedFailedConstraints, -1, projectP2);
++    }
++    
++    /**
++     * Method for determining folder with IVML files.
++     * @param property property
++     * @return folder location
++     */
++    public static File determineTestDataFolder(String property) {
++        File testdataFolder = determineTestDataDir(property);
++        String externalLocation = System.getProperty(property);
++        // If no property was defined, use ReasonerCore.test/testdata directory
++        if (null == externalLocation) {
++            // Work around over the path avoids a NullPointer exception
++            String path = testdataFolder.getAbsolutePath();
++            testdataFolder = new File(path);
++            testdataFolder = testdataFolder.getParentFile().getParentFile();
++            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
++            testdataFolder = new File(testdataFolder, "testdata");
++        }
++        if (!testdataFolder.exists()) {
++            String path = testdataFolder.getAbsolutePath();
++            testdataFolder = new File(path);
++            testdataFolder = testdataFolder.getParentFile().getParentFile().getParentFile();
++            testdataFolder = new File(testdataFolder, "ReasonerCore");
++            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
++            testdataFolder = new File(testdataFolder, "testdata");
++        }
++        return testdataFolder;    
++    }
++    
++    /**
++     * Created a value and configures a variable inside the configuration with
++     * the created value.
++     * 
++     * @param config
++     *            The configuration containing the variable to be configured
++     *            (Must not be <tt>null</tt>).
++     * @param declName
++     *            The name of the variable to be configured (Must not be
++     *            <tt>null</tt>).
++     * @param namespace
++     *            The namespace of the variable. Can be used if more than one
++     *            variable with the same name exist. If <tt>null</tt> the first
++     *            variable with the specified name will be configured.
++     * @param value
++     *            The new value to be set.
++     * @throws ConfigurationException
++     *             Must not occur, otherwise there is an error inside the
++     *             Configuration
++     * @throws ValueDoesNotMatchTypeException
++     *             Occurs if the value does not match to the datatype of the
++     *             configured variable
++     */
++    protected void configureValue(Configuration config, String declName, String namespace, String... value)
++        throws ConfigurationException, ValueDoesNotMatchTypeException {
++
++        Project project = config.getProject();
++        DeclarationFinder finder = new DeclarationFinder(project, FilterType.ALL, null);
++        List<AbstractVariable> declarations = finder.getVariableDeclarations(VisibilityType.ALL);
++        AbstractVariable decl = null;
++        for (int i = 0; null == decl && i < declarations.size(); i++) {
++            AbstractVariable tmp = declarations.get(i);
++            if (tmp.getName().equals(declName)) {
++                if (null == namespace ^ namespace.equals(tmp.getNameSpace())) {
++                    decl = tmp;
++                }
++            }
++        }
++        if (null != decl) {
++            Value val = ValueFactory.createValue(decl.getType(), (Object[]) value);
++            config.getDecision(decl).setValue(val, AssignmentState.ASSIGNED);
++        }
++    }
++
++    /**
++     * Asserts that <code>actual</code> is in <code>expected</code>.
++     * 
++     * @param actual the actual value
++     * @param expected the expected/allowed values
++     */
++    protected void assertContained(Object actual, Object... expected) {
++        Assert.assertTrue(null, Arrays.contains(expected, actual));
++    }
++
++    /**
++     * Asserts that <code>actual</code> is in <code>expected</code>.
++     * 
++     * @param message emitted in case of failing
++     * @param actual the actual value
++     * @param expected the expected/allowed values
++     */
++    protected void assertContained(String message, Object actual, Object... expected) {
++        Assert.assertTrue(message, Arrays.contains(expected, actual));
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTestDescriptor.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTestDescriptor.java
+new file mode 100644
+index 0000000..199223a
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTestDescriptor.java
+@@ -0,0 +1,209 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector.IMeasurementIdentifier;
++
++/**
++ * A test descriptor pre-configured for the reasoner core test cases.
++ * 
++ * @author Holger Eichelberger
++ */
++public abstract class AbstractTestDescriptor implements ITestDescriptor {
++    
++    public static final String PLUGIN_ID = "net.ssehub.easy.reasoning.core.tests";
++    public static final String SYSTEM_PROPERTY = "reasonerCore.testdata.home";
++    protected static final IMeasurementKey[] MEASUREMENTS = GeneralMeasures.values();
++    static final String PROJECT_NAME = "../ReasonerCore.test/";
++    
++    private String pluginId;
++    private String systemProperty;
++    private boolean[] capabilities;
++
++    /**
++     * The abstract measurement identifiers for mapping {@link net.ssehub.easy.reasoning.sseReasoner.Measures}.
++     * 
++     * @author Holger Eichelberger
++     */
++    public enum MeasurementIdentifier implements IMeasurementIdentifier {
++
++        /**
++         * Time taken for creating a re-usable reasoner instance (in ms).
++         */
++        REASONER_INSTANCE_CREATION_TIME,
++        
++        /**
++         * Total number of re-evaluations.
++         */
++        REASONER_REEVALUATION_COUNT,
++        
++        /**
++         * Total number of constraints.
++         */
++        REASONER_CONSTRAINT_COUNT,
++        
++        /**
++         * Total number of evaluation problems.
++         */
++        REASONER_PROBLEMS,
++        
++        /**
++         * Total time (in ms) spent for reasoning.
++         */
++        REASONER_REASONING_TIME,
++
++        /**
++         * Time (in ms) spent for translating the model - collected only if the approach performs translation.
++         */
++        REASONER_TRANSLATION_TIME,
++
++        /**
++         * Time (in ms) spent for constraint translation.
++         */
++        REASONER_EVALUATION_TIME;
++
++        @Override
++        public boolean isAutomatic() {
++            return false;
++        }
++
++    }
++
++    
++    /**
++     * Creates a new default instance.
++     */
++    protected AbstractTestDescriptor() {
++        this(PLUGIN_ID, SYSTEM_PROPERTY, null);
++    }
++    
++    /**
++     * Creates a new instance.
++     * 
++     * @param pluginId the pluginId (in case that tests are started from within an OSGi environment, may be <b>null</b> 
++     *   then the default is used)
++     * @param systemProperty the property defining the location of the test files in a continuous 
++     *   integration environment - this supersedes all other path specifications, may be <b>null</b> then the default 
++     *   is used
++     * @param capabilities the capabilities, may be <b>null</b> then all explicit capabilities are 
++     *   unsupported, shall support all {@link Capabilities} in length (unspecified are considered as 
++     *   unsupported)
++     */
++    protected AbstractTestDescriptor(String pluginId, String systemProperty, boolean... capabilities) {
++        assert null == capabilities || capabilities.length == Capabilities.values().length;
++        if (null == pluginId || 0 == pluginId.length()) {
++            this.pluginId = PLUGIN_ID;
++        } else {
++            this.pluginId = pluginId;
++        }
++        if (null == systemProperty || 0 == systemProperty.length()) {
++            this.systemProperty = SYSTEM_PROPERTY;
++        } else {
++            this.systemProperty = systemProperty;
++        }
++        this.capabilities = capabilities;
++    }
++    
++    @Override
++    public String getPluginId() {
++        return pluginId;
++    }
++
++    @Override
++    public String getSystemProperty() {
++        return systemProperty;
++    }
++
++    @Override
++    public boolean isSupported(Capabilities capability) {
++        boolean result = false;
++        if (null != capabilities) {
++            if (capabilities.length > capability.ordinal()) {
++                result = capabilities[capability.ordinal()];
++            }
++        }
++        return result;
++    }
++    
++    /**
++     * Registers the measurement mappings for the SSE reasoner.
++     */
++    public static void registerMeasurementMappings() {
++        MeasurementCollector.registerMapping(GeneralMeasures.REEVALUATION_COUNT, 
++            MeasurementIdentifier.REASONER_REEVALUATION_COUNT);
++        MeasurementCollector.registerMapping(GeneralMeasures.CONSTRAINT_COUNT, 
++            MeasurementIdentifier.REASONER_CONSTRAINT_COUNT);
++        MeasurementCollector.registerMapping(GeneralMeasures.PROBLEMS, 
++            MeasurementIdentifier.REASONER_PROBLEMS);
++        MeasurementCollector.registerMapping(GeneralMeasures.REASONING_TIME, 
++            MeasurementIdentifier.REASONER_REASONING_TIME);
++        MeasurementCollector.registerMapping(GeneralMeasures.TRANSLATION_TIME, 
++            MeasurementIdentifier.REASONER_TRANSLATION_TIME);
++        MeasurementCollector.registerMapping(GeneralMeasures.EVALUATION_TIME, 
++            MeasurementIdentifier.REASONER_EVALUATION_TIME);
++    }
++    
++    /**
++     * Automatically registers the measurement mappings.
++     */
++    static {
++        registerMeasurementMappings();
++    }
++
++    @Override
++    public IMeasurementKey[] measurements() {
++        return MEASUREMENTS;
++    }
++
++    /**
++     * Concatenates two arrays of measurement keys.
++     * 
++     * @param a1 the first array
++     * @param a2 the second array
++     * @return the concatenated array
++     */
++    public static IMeasurementKey[] concat(IMeasurementKey[] a1, IMeasurementKey[] a2) {
++        return concat(new IMeasurementKey[a1.length + a2.length], a1, a2);
++    }
++
++    /**
++     * Concatenates two arrays of objects.
++     * 
++     * @param a1 the first array
++     * @param a2 the second array
++     * @return the concatenated array
++     */
++    public static Object[] concat(Object[] a1, Object[] a2) {
++        return concat(new Object[a1.length + a2.length], a1, a2);
++    }
++
++    /**
++     * Concatenates two arrays of objects.
++     * 
++     * @param <T> the array type
++     * @param target the target array of size of (at last) the sum of the size of <code>a1</code> and <code>a2</code>
++     * @param a1 the first array
++     * @param a2 the second array
++     * @return <code>target</code>
++     */
++    private static <T> T[] concat(T[] target, T[] a1, T[] a2) {
++        System.arraycopy(a1, 0, target, 0, a1.length);
++        System.arraycopy(a2, 0, target, a1.length, a2.length);
++        return target;
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ApplicationsTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ApplicationsTests.java
+new file mode 100644
+index 0000000..7968a12
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ApplicationsTests.java
+@@ -0,0 +1,44 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import java.io.IOException;
++
++import org.junit.Test;
++
++import net.ssehub.easy.varModel.model.Project;
++
++/**
++ * Defines application tests.
++ * 
++ * @author Eichelberger
++ */
++public class ApplicationsTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected ApplicationsTests(ITestDescriptor descriptor) {
++        super(descriptor, "applications");
++    }
++
++    /**
++     * Failing SimElevator.
++     */
++    @Test
++    public void plSimElevatorTestFail() {
++        reasoningTest("PL_SimElevator_frozen_orig", 0); // reassignment
++    }
++    
++    /**
++     * Working SimElevator.
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void plSimElevatorTest() throws IOException {
++        Project p = loadCompleteProject("applications", "PL_SimElevator_frozen");
++        resultHandler(0, 0, p);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AttributeValuesTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AttributeValuesTest.java
+index e7924e7..0436f4c 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AttributeValuesTest.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AttributeValuesTest.java
+@@ -16,8 +16,6 @@
+ import net.ssehub.easy.dslCore.StandaloneInitializer;
+ import net.ssehub.easy.dslCore.TranslationResult;
+ import net.ssehub.easy.dslCore.test.AbstractTest;
+-import net.ssehub.easy.reasoning.core.reasoner.AttributeException;
+-import net.ssehub.easy.reasoning.core.reasoner.AttributeValues;
+ import net.ssehub.easy.varModel.confModel.Configuration;
+ import net.ssehub.easy.varModel.confModel.IDecisionVariable;
+ import net.ssehub.easy.varModel.management.VarModel;
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/BooleanTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/BooleanTests.java
+new file mode 100644
+index 0000000..8c64aab
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/BooleanTests.java
+@@ -0,0 +1,118 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Test;
++
++/**
++ * Defines the boolean tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ * @author Eichelberger
++ */
++public class BooleanTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected BooleanTests(ITestDescriptor descriptor) {
++        super(descriptor, "boolean");
++    }
++
++    /**
++     * Car example.
++     */
++    @Test
++    public void carExampleTest() {
++        reasoningTest("CarExample.ivml", 1);
++    }
++    
++    /**
++     * Boolean defaults test.
++     */
++    @Test
++    public void booleanDefaultsTest() {
++        reasoningTest("BooleanDefaultsTest.ivml", 2);
++    } 
++    
++    /**
++     * Boolean assign test.
++     */
++    @Test
++    public void booleanAssignTest() {
++        reasoningTest("BooleanAssignTest.ivml", 2);
++    } 
++    
++    /**
++     * Boolean in compound defaults test.
++     */
++    @Test
++    public void booleanInCompoundDefaultsTest() {
++        reasoningTest("BooleanInCompoundDefaultsTest.ivml", 2);
++    } 
++    
++    /**
++     * Boolean in compound assign test.
++     */
++    @Test
++    public void booleanInCompoundAssignTest() {
++        reasoningTest("BooleanInCompoundAssignTest.ivml", 2);
++    } 
++    
++    /**
++     * Boolean implies test.
++     */
++    @Test
++    public void booleanImpliesTest() {
++        reasoningTest("BooleanImpliesTest.ivml", 1);
++    } 
++    
++    /**
++     * Boolean in compound implies test.
++     */
++    @Test
++    public void booleanInCompoundImpliesTest() {
++        reasoningTest("BooleanInCompoundImpliesTest.ivml", 1);
++    }
++
++    /**
++     * Boolean in collection defaults test.
++     */
++    @Test
++    public void booleanInCollectionDefaultsTest() {
++        reasoningTest("BooleanInCollectionDefaultsTest.ivml", 2);
++    } 
++    
++    /**
++     * Boolean in collection assign test.
++     */
++    @Test
++    public void booleanInCollectionAssignTest() {
++        reasoningTest("BooleanInCollectionAssignTest.ivml", 2);
++    } 
++
++    /**
++     * Boolean reference assign test.
++     */
++    @Test
++    public void booleanReferenceAssignTest() {
++        reasoningTest("BooleanRefAssignTest.ivml", 0);
++    } 
++
++    /**
++     * Boolean annotation test.
++     */
++    @Test
++    public void booleanAnnotationTest() {
++        reasoningTest("BooleanAnnotationTest.ivml", 9);
++    } 
++    
++    /**
++     * Combined reference-typedef on Boolean.
++     */
++    public void referenceDerivedBooleanTest() {
++        reasoningTest("ReferenceDerivedBooleanTest.ivml", 4);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CodedTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CodedTests.java
+new file mode 100644
+index 0000000..36be3e4
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CodedTests.java
+@@ -0,0 +1,230 @@
++/*
++ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.cst.AttributeVariable;
++import net.ssehub.easy.varModel.cst.CSTSemanticException;
++import net.ssehub.easy.varModel.cst.ConstantValue;
++import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
++import net.ssehub.easy.varModel.cst.OCLFeatureCall;
++import net.ssehub.easy.varModel.cst.Variable;
++import net.ssehub.easy.varModel.model.Attribute;
++import net.ssehub.easy.varModel.model.AttributeAssignment;
++import net.ssehub.easy.varModel.model.Constraint;
++import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
++import net.ssehub.easy.varModel.model.FreezeBlock;
++import net.ssehub.easy.varModel.model.IFreezable;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.AttributeAssignment.Assignment;
++import net.ssehub.easy.varModel.model.datatypes.BooleanType;
++import net.ssehub.easy.varModel.model.datatypes.Compound;
++import net.ssehub.easy.varModel.model.datatypes.Enum;
++import net.ssehub.easy.varModel.model.datatypes.EnumLiteral;
++import net.ssehub.easy.varModel.model.datatypes.FreezeVariableType;
++import net.ssehub.easy.varModel.model.datatypes.IntegerType;
++import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
++import net.ssehub.easy.varModel.model.datatypes.OrderedEnum;
++import net.ssehub.easy.varModel.model.values.BooleanValue;
++import net.ssehub.easy.varModel.model.values.Value;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++import net.ssehub.easy.varModel.varModel.testSupport.ProjectTestUtilities;
++
++/**
++ * Tests reasoner capabilities via coded tests, without interactions from the parser.
++ * 
++ * @author El-Sharkawy
++ */
++public class CodedTests extends AbstractTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected CodedTests(ITestDescriptor descriptor) {
++        super(descriptor, null);
++    }
++
++    /**
++     * Simulates value propagation based on a Boolean variable with user input via the UI.
++     * @throws ValueDoesNotMatchTypeException Must not occur, otherwise ValueFactory is broken.
++     * @throws CSTSemanticException Must not occur, otherwise constraint.setConsSyntax is broken
++     * @throws ConfigurationException Must not occur, otherwise {@link IDecisionVariable}s are broken.
++     */
++    @Test
++    public void testBooleanIplication() throws ValueDoesNotMatchTypeException, CSTSemanticException,
++        ConfigurationException {
++        
++        // Define test model
++        Project project = new Project("BooleanIplicationTest");
++        Enum enumType = new Enum("Color", project, "RED", "BLUE", "GREEN");
++        project.add(enumType);
++        DecisionVariableDeclaration rgbVar = new DecisionVariableDeclaration("rgb", enumType, project);
++        project.add(rgbVar);
++        DecisionVariableDeclaration hasColorVar
++            = new DecisionVariableDeclaration("hasColor", BooleanType.TYPE, project);
++        project.add(hasColorVar);
++        
++        // Create Constraint
++        Constraint constraint = new Constraint(project);
++        Value redValue = ValueFactory.createValue(enumType, enumType.getLiteral(0));
++        ConstantValue redConst = new ConstantValue(redValue);
++        ConstantValue trueConst = new ConstantValue(BooleanValue.TRUE);
++        OCLFeatureCall booleanEquals = new OCLFeatureCall(new Variable(hasColorVar), OclKeyWords.EQUALS, trueConst);
++        OCLFeatureCall enumEquals = new OCLFeatureCall(new Variable(rgbVar), OclKeyWords.EQUALS, redConst);
++        OCLFeatureCall implies = new OCLFeatureCall(booleanEquals, OclKeyWords.IMPLIES, enumEquals);
++        constraint.setConsSyntax(implies);
++        project.add(constraint);
++        
++        // Create Configuration out of valid project
++        ProjectTestUtilities.validateProject(project, true);
++        Configuration config = new Configuration(project);
++        
++        // Simulate user input
++        IDecisionVariable enumVar = config.getDecision(rgbVar);
++        enumVar.setValue(null, AssignmentState.UNDEFINED);
++        IDecisionVariable boolVar = config.getDecision(hasColorVar);
++        boolVar.setValue(BooleanValue.TRUE, AssignmentState.ASSIGNED);
++        
++        // Test precondition
++        Assert.assertFalse(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue(), 
++            config.getDecision(rgbVar).hasValue());
++        Assert.assertEquals(boolVar.getDeclaration().getName() + " has wrong value: " + boolVar.getValue().getValue(), 
++            BooleanValue.TRUE, config.getDecision(hasColorVar).getValue());
++        
++        // Test: Perform reasoning (and propagation)
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        performReasoning(project, config, rConfig);
++        
++        // Test precondition
++        /*Assert.assertTrue(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue(), 
++            config.getDecision(rgbVar).hasValue());
++        Assert.assertEquals(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue().getValue(), 
++            redValue, config.getDecision(rgbVar).getValue());
++        Assert.assertEquals(boolVar.getDeclaration().getName() + " has wrong value: " + boolVar.getValue().getValue(), 
++            BooleanValue.TRUE, config.getDecision(hasColorVar).getValue());*/
++        
++        // Output of the configuration
++        ProjectTestUtilities.validateProject(config.toProject(true, false), true);
++    }
++
++    /**
++     * Tests freezing.
++     * 
++     * @throws ValueDoesNotMatchTypeException shall not occur
++     * @throws CSTSemanticException shall not occur
++     */
++    @Test
++    public void freezeCompoundTest() throws ValueDoesNotMatchTypeException, CSTSemanticException {
++        testFreezing(false); 
++        testFreezing(true);
++    }
++
++    /**
++     * Creates a project for freezing and checks the frozen states.
++     * 
++     * @param runtimeMode whether the test shall happen in runtime reasoning mode
++     * @throws ValueDoesNotMatchTypeException shall not occur
++     * @throws CSTSemanticException shall not occur
++     */
++    private void testFreezing(boolean runtimeMode) throws ValueDoesNotMatchTypeException, CSTSemanticException {
++        Project prj = new Project("test");
++
++        Enum bindingTime = new OrderedEnum("BindingTime", prj);
++        bindingTime.add(new EnumLiteral("compile", 1, bindingTime));
++        bindingTime.add(new EnumLiteral("monitor", 2, bindingTime));
++        bindingTime.add(new EnumLiteral("enact", 3, bindingTime));
++        prj.add(bindingTime);
++        
++        Attribute attr = new Attribute("binding", bindingTime, prj, prj);
++        attr.setValue(ValueFactory.createValue(bindingTime, "compile"));
++        prj.attribute(attr);
++        prj.add(attr);
++        
++        Compound param = new Compound("IntParameter", prj);
++        param.add(new DecisionVariableDeclaration("defaultValue", IntegerType.TYPE, param));
++        AttributeAssignment assng = new AttributeAssignment(param);
++        assng.add(new Assignment("binding", "=", new ConstantValue(ValueFactory.createValue(bindingTime, "enact"))));
++        assng.add(new DecisionVariableDeclaration("value", IntegerType.TYPE, param));
++        param.add(assng);
++        prj.add(param);
++        
++        DecisionVariableDeclaration myParam = new DecisionVariableDeclaration("myParam", param, prj);
++        prj.add(myParam);
++        
++        IFreezable[] freezables = new IFreezable[1];
++        freezables[0] = myParam;
++        FreezeVariableType iterType = new FreezeVariableType(freezables, prj);
++        DecisionVariableDeclaration freezeIter = new DecisionVariableDeclaration("b", iterType, prj);
++        Variable iterEx = new AttributeVariable(new Variable(freezeIter), iterType.getAttribute("binding"));
++        ConstraintSyntaxTree selector = new OCLFeatureCall(iterEx, ">=", 
++            new ConstantValue(ValueFactory.createValue(bindingTime, "monitor")));
++        selector.inferDatatype();
++        FreezeBlock freeze = new FreezeBlock(freezables, freezeIter, selector, prj);
++        prj.add(freeze);
++        
++        // debugging
++        //System.out.println(StringProvider.toIvmlString(prj));
++        
++        Configuration cfg = new Configuration(prj);
++        IDecisionVariable myParamVar = cfg.getDecision(myParam);
++        Assert.assertNotNull(myParamVar);
++        IDecisionVariable myParamVarDeflt = findNested(myParamVar, "defaultValue");
++        Assert.assertNotNull(myParamVarDeflt);
++        Assert.assertEquals(1, myParamVarDeflt.getAttributesCount());
++        IDecisionVariable myParamVarValue = findNested(myParamVar, "value");
++        Assert.assertNotNull(myParamVarValue);
++        Assert.assertEquals(1, myParamVarValue.getAttributesCount());
++
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        rConfig.setRuntimeMode(runtimeMode);
++        // Perform reasoning
++        performReasoning(prj, cfg, rConfig);
++        
++        Assert.assertEquals(myParamVarDeflt.getQualifiedName() + " " + myParamVarDeflt.getState(), 
++            AssignmentState.FROZEN, myParamVarDeflt.getState());
++        Assert.assertNotEquals(myParamVarValue.getQualifiedName() + " " + myParamVarValue.getState(), 
++            AssignmentState.FROZEN, myParamVarValue.getState());
++        //Assert.assertNotEquals(AssignmentState.FROZEN, myParamVar.getState());
++    }
++    
++    /**
++     * Finds a nested variable.
++     * 
++     * @param var the parent variable
++     * @param name the name of the variable
++     * @return the nested variable (may be <b>null</b>)
++     */
++    private IDecisionVariable findNested(IDecisionVariable var, String name) {
++        IDecisionVariable result = null;
++        for (int n = 0; null == result && n < var.getNestedElementsCount(); n++) {
++            IDecisionVariable decVar = var.getNestedElement(n);
++            if (decVar.getDeclaration().getName().equals(name)) {
++                result = decVar;
++            }
++        }
++        return result;
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CompoundTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CompoundTests.java
+new file mode 100644
+index 0000000..ed45db4
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CompoundTests.java
+@@ -0,0 +1,157 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import java.io.IOException;
++
++import org.junit.Ignore;
++import org.junit.Test;
++
++import net.ssehub.easy.varModel.model.Project;
++
++/**
++ * Configures the compound tests for reasoners.
++ * 
++ * @author Eichelberger
++ */
++public class CompoundTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected CompoundTests(ITestDescriptor descriptor) {
++        super(descriptor, "compounds");
++    }
++    
++    /**
++     * Compound reference assign test for a basic type.
++     */
++    @Test
++    public void compoundReferenceAssignTest1() {
++        reasoningTest("CompoundRefAssignTest1.ivml", 0);
++    } 
++
++    /**
++     * Compound reference assign test for a compound type.
++     */
++    @Test
++    public void compoundReferenceAssignTest2Fail() {
++        reasoningTest("CompoundRefAssignTest2.ivml", 0); // re-assign
++    } 
++
++    /**
++     * Compound reference assign test for a compound type.
++     */
++    @Test
++    public void compoundReferenceAssignTest3() {
++        reasoningTest("CompoundRefAssignTest3.ivml", 0);
++    } 
++
++    /**
++     * Compound constraint test for a compound type/instances.
++     */
++    @Test
++    public void compoundConstraintTest() {
++        reasoningTest("CompoundConstraintTest.ivml", 2);
++    } 
++
++    /**
++     * Compound constraint test for nested compound type/instances.
++     */
++    @Test
++    public void compoundCompoundTest1() {
++        reasoningTest("CompoundCompoundTest1.ivml", 2);
++    } 
++
++    /**
++     * Compound constraint test for nested recursive compound type/instances.
++     */
++    @Ignore
++    @Test
++    public void compoundCompoundTest2() {
++        reasoningTest("CompoundCompoundTest2.ivml", 2);
++    } 
++
++    /**
++     * Compound constraint test for nested containers.
++     */
++    @Test
++    public void compoundContainerTest1() {
++        reasoningTest("CompoundContainerTest1.ivml", 2);
++    } 
++
++    /**
++     * Compound constraint test for recursive nested containers.
++     */
++    @Test
++    public void compoundContainerTest2() {
++        reasoningTest("CompoundContainerTest2.ivml", 4);
++    } 
++
++    /**
++     * Compound annotation test.
++     */
++    @Test
++    public void compoundAnnotationTest() {
++        reasoningTest("CompoundAnnotationTest.ivml", 0);
++    } 
++
++    /**
++     * Derived compound annotation test.
++     */
++    @Test
++    public void derivedCompoundAnnotationTest() {
++        reasoningTest("DerivedCompoundAnnotationTest.ivml", 0);
++    } 
++
++    /**
++     * Referenced compound annotation test.
++     */
++    @Test
++    public void referenceCompoundAnnotationTest() {
++        reasoningTest("ReferenceCompoundAnnotationTest.ivml", 9);
++    }
++    
++    /**
++     * Tests referenced-derived compounds (testing chains of types).
++     */
++    @Ignore
++    @Test
++    public void referenceDerivedCompoundTest() {
++        reasoningTest("ReferenceDerivedCompoundTest.ivml", 5);
++    }
++
++    /**
++     * Tests changing constraint variables.
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void changingValuesTest() throws IOException {
++        // basis shall be failing with four tests
++        reasoningTest("changingValues/changingValuesBase.ivml", 0);
++        // importing model changes constraints, shall not fail then 
++        Project prj = loadCompleteProject("changingValues", "changingValues");
++        resultHandler(0, 0, prj);
++    }
++
++    /**
++     * Additional compound annotation test on combining nested compounds with an assignment block (QM).
++     */
++    @Test
++    public void compoundAnnotationTest2() {
++        reasoningTest("CompoundAnnotationTest2.ivml", 0);
++    } 
++
++    /**
++     * Tests a slot reassignment.
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void slotReassignmentTest() throws IOException {
++        Project prj = loadCompleteProject("slotReassignment", "Cfg");
++        resultHandler(0, 0, prj);
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EnumTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EnumTests.java
+new file mode 100644
+index 0000000..23bc4e5
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EnumTests.java
+@@ -0,0 +1,161 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Ignore;
++import org.junit.Test;
++
++/**
++ * Configures the enum tests for SSE reasoner.
++ * 
++ * @author Eichelberger
++ */
++public class EnumTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected EnumTests(ITestDescriptor descriptor) {
++        super(descriptor, "enums");
++    }
++    
++    /**
++     * Enum defaults test.
++     */
++    @Test
++    public void enumDefaultsTest() {
++        reasoningTest("EnumDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * Enum assign test.
++     */
++    @Test
++    public void enumAssignTest() {
++        reasoningTest("EnumAssignTest.ivml", 0);
++    } 
++    
++    /**
++     * Enum in compound defaults test.
++     */
++    @Test
++    public void enumInCompoundDefaultsTest() {
++        reasoningTest("EnumInCompoundDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * Enum in compound assign test.
++     */
++    @Test
++    public void enumInCompoundAssignTest() {
++        reasoningTest("EnumInCompoundAssignTest.ivml", 0);
++    } 
++
++    
++    
++    /**
++     * OrderedEnum defaults test.
++     */
++    @Test
++    public void orderedEnumDefaultsTest() {
++        reasoningTest("OrderedEnumDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * OrderedEnum assign test.
++     */
++    @Test
++    public void orderedEnumAssignTest() {
++        reasoningTest("OrderedEnumAssignTest.ivml", 0);
++    } 
++    
++    /**
++     * OrderedEnum in compound defaults test.
++     */
++    @Test
++    public void orderedEnumInCompoundDefaultsTest() {
++        reasoningTest("OrderedEnumInCompoundDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * OrderedEnum in compound assign test.
++     */
++    @Test
++    public void orderedEnumInCompoundAssignTest() {
++        reasoningTest("OrderedEnumInCompoundAssignTest.ivml", 0);
++    } 
++
++    /**
++     * Enum in collection defaults test.
++     */
++    @Test
++    public void enumInCollectionDefaultsTest() {
++        reasoningTest("EnumInCollectionDefaultsTest.ivml", 2);
++    } 
++    
++    /**
++     * Enum in collection assign test.
++     */
++    @Test
++    public void enumInCollectionAssignTest() {
++        reasoningTest("EnumInCollectionAssignTest.ivml", 2);
++    } 
++
++    /**
++     * Ordered enum in collection defaults test.
++     */
++    @Test
++    public void orderedEnumInCollectionDefaultsTest() {
++        reasoningTest("OrderedEnumInCollectionDefaultsTest.ivml", 2);
++    } 
++    
++    /**
++     * Ordered enum in collection assign test.
++     */
++    @Test
++    public void orderedEnumInCollectionAssignTest() {
++        reasoningTest("OrderedEnumInCollectionAssignTest.ivml", 2);
++    } 
++
++    /**
++     * Enum reference assign test.
++     */
++    @Test
++    public void enumReferenceAssignTest() {
++        reasoningTest("EnumRefAssignTest.ivml", 0);
++    } 
++
++    /**
++     * Ordered enum reference assign test.
++     */
++    @Test
++    public void orderedEnumReferenceAssignTest() {
++        reasoningTest("OrderedEnumRefAssignTest.ivml", 0);
++    } 
++
++    /**
++     * Enum annotation test.
++     */
++    @Test
++    public void enumAnnotationTest() {
++        reasoningTest("EnumAnnotationTest.ivml", 9);
++    } 
++
++    /**
++     * Ordered enum annotation test.
++     */
++    @Test
++    public void orderdEnumAnnotationTest() {
++        reasoningTest("OrderedEnumAnnotationTest.ivml", 9);
++    } 
++
++    /**
++     * Combination of references and typedefs on enums.
++     */
++    @Ignore("IVML")
++    @Test
++    public void referenceDerivedEnumTest() {
++        reasoningTest("ReferenceDerivedEnumTest.ivml", 3);
++    } 
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvalTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvalTests.java
+new file mode 100644
+index 0000000..94c6149
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvalTests.java
+@@ -0,0 +1,49 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Ignore;
++import org.junit.Test;
++
++/**
++ * Collection constraints tests.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ * @author Eichelberger
++ */
++public class EvalTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected EvalTests(ITestDescriptor descriptor) {
++        super(descriptor, "evals");
++    }
++    
++    /**
++     * Tests simple eval (priority).
++     */
++    @Test
++    public void simpleEval() {
++        reasoningTest("SimpleEval.ivml", 1);
++    }
++    
++    /**
++     * Tests nested eval.
++     */
++    @Ignore("IVML")
++    @Test
++    public void nestedEval() {
++        reasoningTest("NestedEval.ivml", 1);
++    }
++    
++    /**
++     * Tests compound eval (priority).
++     */
++    @Test
++    public void compoundEval() {
++        reasoningTest("CompoundEval.ivml", 0);
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvaluationIntegrityTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvaluationIntegrityTest.java
+new file mode 100644
+index 0000000..0f1076d
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvaluationIntegrityTest.java
+@@ -0,0 +1,268 @@
++/*
++ * Copyright 2009-2014 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.basics.modelManagement.ModelManagementException;
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.IAssignmentState;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.cst.CSTSemanticException;
++import net.ssehub.easy.varModel.cst.ConstantValue;
++import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
++import net.ssehub.easy.varModel.cst.OCLFeatureCall;
++import net.ssehub.easy.varModel.cst.Variable;
++import net.ssehub.easy.varModel.model.Constraint;
++import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.ProjectImport;
++import net.ssehub.easy.varModel.model.datatypes.IntegerType;
++import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++import net.ssehub.easy.varModel.varModel.testSupport.ProjectTestUtilities;
++
++/**
++ * Tests for {@link Resolver}.
++ * @author El-Sharkawy
++ * @author Sizonenko
++ *
++ */
++public class EvaluationIntegrityTest extends AbstractTest {
++    
++    // Test: testResolveOfIntegers()
++    private Project projectP0;
++    private Project projectP1;
++    private Project projectP2;    
++    
++    private DecisionVariableDeclaration declA;
++    private DecisionVariableDeclaration declB;
++    private DecisionVariableDeclaration declC;
++    private DecisionVariableDeclaration declD;
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected EvaluationIntegrityTest(ITestDescriptor descriptor) {
++        super(descriptor, null);
++    }
++    
++    /**
++     * Tests whether integer variables are resolved correctly.
++     * This tests includes:
++     * <ul>
++     * <li>Imports</li>
++     * <li>Assignments</li>
++     * <li>Defaults</li>
++     * <li>Re-Assignments</li>
++     * </ul>
++     */
++    @Test
++    public void testResolveOfIntegers() {
++        createProjectP0();
++        createProjectP1();    
++        createProjectP2();        
++        
++        Configuration config = new Configuration(projectP2, false);
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        performReasoning(projectP2, config, rConfig);
++        
++        //assertVariable(config, declA, 2, AssignmentState.DERIVED);
++        //assertVariable(config, declB, 2, AssignmentState.DERIVED);
++        //assertVariable(config, declC, 3, AssignmentState.DERIVED);
++        //assertVariable(config, declD, 5, AssignmentState.DERIVED);
++    }
++    
++    /**
++     * Tests whether assignments were correctly applied.
++     * @param config The configuration containing resolved variables.
++     * @param decl The declaration to test.
++     * @param expectedValue The expected resolved value
++     * @param expectedState The expected resolved assignment state
++     */
++    private void assertVariable(Configuration config, DecisionVariableDeclaration decl, Object expectedValue,
++        IAssignmentState expectedState) {
++        
++        IDecisionVariable variable = config.getDecision(decl);
++        Assert.assertNotNull(variable);
++        Assert.assertNotNull(variable.getValue());
++        Assert.assertEquals(expectedValue, variable.getValue().getValue());
++        Assert.assertEquals(expectedState, variable.getState());
++    }
++
++    /**
++     * Creates imported project P0.
++     * <pre><code>
++     * project ProjectP0 {
++     *
++     *    Integer intA;
++     *    Integer intB;
++     *    intA = 1;
++     *    intB = intA;
++     *}
++     *</code></pre>
++     */
++    private void createProjectP0() {
++        projectP0 = new Project("ProjectP0");
++        declA = createVar("intA", projectP0);
++        declB = createVar("intB", projectP0);
++        Constraint constraintA = new Constraint(projectP0);
++        Constraint constraintB = new Constraint(projectP0);
++        try {
++            constraintA.setConsSyntax(createAssignment(declA, createConstValue(declA, 1)));
++            projectP0.add(constraintA);
++            constraintB.setConsSyntax(createAssignment(declB, new Variable(declA)));
++            projectP0.add(constraintB);
++        } catch (CSTSemanticException e) {
++            Assert.fail(e.getMessage());
++        }
++        
++        ProjectTestUtilities.validateProject(projectP0);
++    }
++    
++    /**
++     * Creates imported project P1.
++     * <pre><code>
++     * project ProjectP1 {
++     *    import ProjectP0;
++     *
++     *    intA = 2;
++     *}
++     *</code></pre>
++     */
++    private void createProjectP1() {
++        projectP1 = new Project("ProjectP1");
++        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
++        projectP1.addImport(importP0);       
++        try {
++            importP0.setResolved(projectP0);            
++        } catch (ModelManagementException e) {
++            Assert.fail(e.getMessage());
++        }
++        
++        Constraint constraint = new Constraint(projectP1);
++        try {
++            constraint.setConsSyntax(createAssignment(declA, createConstValue(declA, 2)));
++            projectP1.add(constraint);
++        } catch (CSTSemanticException e) {
++            Assert.fail(e.getMessage());
++        }
++        
++        ProjectTestUtilities.validateProject(projectP1);
++    }  
++    
++    /**
++     * Creates top imported project.
++     * <pre><code>
++     * project ProjectP2 {
++     *
++     *    import ProjectP1;
++     *    
++     *    Integer intC;
++     *    intC = 1;
++     *    intC == 1 implies intA == 3;;
++     *}
++     *</code></pre>
++     */
++    private void createProjectP2() {
++        projectP2 = new Project("ProjectP2");
++        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
++        projectP2.addImport(importP1);       
++        try {
++            importP1.setResolved(projectP1);            
++        } catch (ModelManagementException e) {
++            Assert.fail(e.getMessage());
++        }
++        
++        declC = createVar("intC", projectP2);
++        Constraint constraintC = new Constraint(projectP2);
++        try {
++            constraintC.setConsSyntax(createAssignment(declC, createConstValue(declC, 3)));
++            projectP2.add(constraintC);
++        } catch (CSTSemanticException e) {
++            Assert.fail(e.getMessage());
++        }
++        
++        declD = createVar("intD", projectP2);
++        Constraint constraintD = new Constraint(projectP2);
++        OCLFeatureCall plus = new OCLFeatureCall(new Variable(declC), OclKeyWords.PLUS, new Variable(declA));
++        try {
++            constraintD.setConsSyntax(createAssignment(declD, plus));
++            projectP2.add(constraintD);
++        } catch (CSTSemanticException e) {
++            Assert.fail(e.getMessage());
++        }
++        
++        Constraint constraintImplies = new Constraint(projectP2);
++        OCLFeatureCall left = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, createConstValue(declC, 1));
++        OCLFeatureCall right 
++            = new OCLFeatureCall(new Variable(declA), OclKeyWords.EQUALS, createConstValue(declA, 3));        
++        OCLFeatureCall implies = new OCLFeatureCall(left, OclKeyWords.IMPLIES, right);
++        try {
++            constraintImplies.setConsSyntax(implies); 
++            projectP2.add(constraintImplies);
++        } catch (CSTSemanticException e) {
++            Assert.fail(e.getMessage());
++        }
++        
++        ProjectTestUtilities.validateProject(projectP2);
++    }  
++
++    /**
++     * Creates a new integer {@link DecisionVariableDeclaration} in the given {@link Project}.
++     * @param varName The name of the {@link DecisionVariableDeclaration}.
++     * @param project The project where to add the {@link DecisionVariableDeclaration}.
++     * @return The created {@link DecisionVariableDeclaration}.
++     */
++    private DecisionVariableDeclaration createVar(String varName, Project project) {
++        DecisionVariableDeclaration decl = new DecisionVariableDeclaration(varName, IntegerType.TYPE, project);
++        project.add(decl);
++        return decl;
++    }
++
++    /**
++     * Creates a {@link ConstantValue} for a given {@link DecisionVariableDeclaration}.
++     * @param decl The {@link DecisionVariableDeclaration} for which the {@link ConstantValue} shall be created.
++     * @param value The value to create.
++     * @return The created {@link ConstraintSyntaxTree}.
++     */
++    private ConstraintSyntaxTree createConstValue(DecisionVariableDeclaration decl, Object... value) {
++        ConstantValue constValue = null;
++        try {
++            constValue = new ConstantValue(ValueFactory.createValue(decl.getType(), value));
++        } catch (ValueDoesNotMatchTypeException e) {
++            Assert.fail(e.getMessage());
++        }
++        
++        return constValue;
++    }
++    
++    /**
++     * Creates an assignment {@link ConstraintSyntaxTree}.
++     * @param decl The {@link DecisionVariableDeclaration} for which an assignment shall be created for.
++     * @param value The value of the assignment constraint.
++     * @return The created assignment {@link ConstraintSyntaxTree}.
++     */
++    private ConstraintSyntaxTree createAssignment(DecisionVariableDeclaration decl, ConstraintSyntaxTree value) {
++        return new OCLFeatureCall(new Variable(decl), OclKeyWords.ASSIGNMENT, value);
++    }    
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ITestDescriptor.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ITestDescriptor.java
+new file mode 100644
+index 0000000..1eaefd5
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ITestDescriptor.java
+@@ -0,0 +1,102 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.reasoner;
++
++/**
++ * Contains common code to perform direct reasoner testing.
++ * 
++ * @author Holger Eichelberger
++ */
++public interface ITestDescriptor {
++
++    /**
++     * Defines reasoner capabilities which may not be supported and, thus, shall not be tested.
++     * 
++     * @author Eichelberger
++     */
++    public enum Capabilities {
++        CHECK,
++        CONSISTENT
++    }
++
++    /**
++     * Creates a reasoner instance to test against.
++     * 
++     * @return the reasoner instance
++     */
++    public IReasoner createReasoner();
++
++    /**
++     * Returns the system property.
++     * 
++     * @return the system property
++     */
++    public String getSystemProperty();
++    
++    /**
++     * Returns the plugin id of the containing test.
++     * 
++     * @return the plugin id
++     */
++    public String getPluginId();
++    
++    /**
++     * Supposed to register the reasoner with the ReasonerFrontend.
++     */
++    public void registerResoner();
++
++    /**
++     * Supposed to unregister the reasoner from the ReasonerFrontend.
++     */
++    public void unregisterReasoner();
++
++    /**
++     * Returns whether <code>capability</code> is supported.
++     * 
++     * @param capability the capability to check for
++     * @return <code>true</code> if <code>capability</code> is supported, <code>false</code> else
++     */
++    public boolean isSupported(Capabilities capability);
++      
++    /**
++     * Returns the name of the reasoner.
++     * 
++     * @return the name of the reasoner
++     */
++    public String getName();
++    
++    /**
++     * Returns the version of the reasoner.
++     * 
++     * @return the version of the reasoner
++     */
++    public String getVersion();
++    
++    /**
++     * Returns the measurements relevant for the tests denoted by this descriptor.
++     * 
++     * @return the measurements
++     */
++    public IMeasurementKey[] measurements();
++    
++    /**
++     * Returns the name of the measurement file.
++     * 
++     * @return the name of the measurement file
++     */
++    public String getMeasurementFileName();
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegerTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegerTests.java
+new file mode 100644
+index 0000000..5b23966
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegerTests.java
+@@ -0,0 +1,103 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Ignore;
++import org.junit.Test;
++
++/**
++ * Configures the integer tests for SSE reasoner.
++ * 
++ * @author Eichelberger
++ */
++public class IntegerTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected IntegerTests(ITestDescriptor descriptor) {
++        super(descriptor, "integer");
++    }
++    
++    /**
++     * Integer defaults test.
++     */
++    @Test
++    public void integerDefaultsTest() {
++        reasoningTest("IntegerDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * Integer assign test.
++     */
++    @Test
++    public void integerAssignTest() {
++        reasoningTest("IntegerAssignTest.ivml", 0);
++    } 
++    
++    /**
++     * Integer in compound defaults test.
++     */
++    @Test
++    public void integerInCompoundDefaultsTest() {
++        reasoningTest("IntegerInCompoundDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * Integer in compound assign test.
++     */
++    @Test
++    public void integerInCompoundAssignTest() {
++        reasoningTest("IntegerInCompoundAssignTest.ivml", 0);
++    } 
++
++    /**
++     * Integer in collection defaults test.
++     */
++    @Test
++    public void integerInCollectionDefaultsTest() {
++        reasoningTest("IntegerInCollectionDefaultsTest.ivml", 2);
++    } 
++    
++    /**
++     * Integer in collection assign test.
++     */
++    @Test
++    public void integerInCollectionAssignTest() {
++        reasoningTest("IntegerInCollectionAssignTest.ivml", 2);
++    }
++
++    /**
++     * Integer reference assign test.
++     */
++    @Test
++    public void integerReferenceAssignTest() {
++        reasoningTest("IntegerRefAssignTest.ivml", 0);
++    }
++
++    /**
++     * Integer annotation test.
++     */
++    @Test
++    public void integerAnnotationTest() {
++        reasoningTest("IntegerAnnotationTest.ivml", 9);
++    }
++
++    /**
++     * Combined reference-typedef on Integer.
++     */
++    @Ignore("IVML")
++    @Test
++    public void referenceDerivedIntegerTest() {
++        reasoningTest("ReferenceDerivedIntegerTest.ivml", 4);
++    }
++
++    /**
++     * Reassignment failure (#46).
++     */
++    @Test
++    public void variableFailTest() {
++        reasoningTest("VariableFailTest.ivml", 0);
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegrityTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegrityTests.java
+new file mode 100644
+index 0000000..74e13d6
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegrityTests.java
+@@ -0,0 +1,105 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.cst.CSTSemanticException;
++import net.ssehub.easy.varModel.cst.ConstantValue;
++import net.ssehub.easy.varModel.cst.OCLFeatureCall;
++import net.ssehub.easy.varModel.cst.Variable;
++import net.ssehub.easy.varModel.model.Constraint;
++import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.datatypes.IntegerType;
++import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
++import net.ssehub.easy.varModel.model.values.Value;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++
++/**
++ * Configures the operation tests for Drools.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class IntegrityTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected IntegrityTests(ITestDescriptor descriptor) {
++        super(descriptor, null); // no test path, in memory tests only
++    }
++
++    /**
++     * Tests whether implies constraints will be handled correctly by the
++     * {@link net.ssehub.easy.varModel.confModel.AssignmentResolver}.
++     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
++     * {@link ValueFactory}.
++     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
++     */
++    @Test
++    public void testImplies() throws ValueDoesNotMatchTypeException, CSTSemanticException {
++        // Create project and variables
++        Project project = new Project("assignmentTestProject");
++        DecisionVariableDeclaration declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, project);
++        project.add(declA);
++        DecisionVariableDeclaration declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, project);
++        project.add(declB);
++        DecisionVariableDeclaration declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, project);
++        declC.setValue(33);
++        project.add(declC);
++        
++        // Create assignment
++        Value valA = ValueFactory.createValue(declA.getType(), 31);
++        Variable varA = new Variable(declA);
++        ConstantValue constValA = new ConstantValue(valA);
++        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
++        Constraint assignmentConstraint = new Constraint(project);
++        assignmentConstraint.setConsSyntax(assignmentA);
++        project.add(assignmentConstraint);       
++   
++        
++        // Create implies constraint
++        Value valB = ValueFactory.createValue(declB.getType(), 37);
++        ConstantValue constValB = new ConstantValue(valB);
++        Value valC = ValueFactory.createValue(declC.getType(), 40);
++        ConstantValue constValC = new ConstantValue(valC);
++        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
++        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
++        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
++        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
++        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
++        Constraint impliesConstaint = new Constraint(project);
++        impliesConstaint.setConsSyntax(implies);
++        project.add(impliesConstaint);
++        Constraint impliesConstaintFail = new Constraint(project);
++        impliesConstaintFail.setConsSyntax(impliesFail);
++        project.add(impliesConstaintFail);
++        
++        // Create Configuration (will also start AssignmentResolver)
++        Configuration config = new Configuration(project, true);
++        IDecisionVariable iVarA = config.getDecision(declA);
++        IDecisionVariable iVarB = config.getDecision(declB);
++        IDecisionVariable iVarC = config.getDecision(declC);
++
++        // Test correct assignments
++        Assert.assertNotNull(iVarA);
++        Assert.assertEquals(31, iVarA.getValue().getValue());
++        assertContained(iVarA.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++
++        Assert.assertNotNull(iVarB);
++        Assert.assertEquals(37, iVarB.getValue().getValue());
++        assertContained(iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
++        
++        Assert.assertNotNull(iVarC);
++        Assert.assertEquals(33, iVarC.getValue().getValue());
++        Assert.assertSame(AssignmentState.DEFAULT, iVarC.getState());
++    }    
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/InterfaceTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/InterfaceTests.java
+new file mode 100644
+index 0000000..aa7deef
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/InterfaceTests.java
+@@ -0,0 +1,94 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import java.io.IOException;
++import java.util.Iterator;
++
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.varModel.confModel.AssignmentState;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.IAssignmentState;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.model.AbstractVariable;
++import net.ssehub.easy.varModel.model.ModelQuery;
++import net.ssehub.easy.varModel.model.ModelQueryException;
++import net.ssehub.easy.varModel.model.Project;
++
++/**
++ * Configures the interface tests for reasoners.
++ * 
++ * @author Eichelberger
++ */
++public class InterfaceTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected InterfaceTests(ITestDescriptor descriptor) {
++        super(descriptor, "interfaces");
++    }
++
++    /**
++     * Tests changing constraint variables.
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     */
++    @Test
++    public void unfrozenTest() throws IOException, ModelQueryException {
++        reasoningTest("Basis", 0);
++        Configuration cfg = reasoningTest("Unfrozen", 1);
++        //assertState(cfg, "iVal", AssignmentState.DERIVED, AssignmentState.ASSIGNED);
++        //assertState(cfg, "sVal", AssignmentState.DERIVED, AssignmentState.ASSIGNED);
++        //assertState(cfg, "myVal", AssignmentState.DERIVED, AssignmentState.ASSIGNED);
++    }
++
++    /**
++     * Tests changing constraint variables.
++     * 
++     * @throws IOException shall not occur
++     * @throws ModelQueryException shall not occur
++     */
++    @Test
++    public void frozenTest() throws IOException, ModelQueryException {
++        reasoningTest("Basis", 0);
++        Configuration cfg = reasoningTest("Frozen", 1);
++        //assertState(cfg, "iVal", AssignmentState.FROZEN);
++        //assertState(cfg, "sVal", AssignmentState.FROZEN);
++        //assertState(cfg, "myVal", AssignmentState.FROZEN);
++    }
++
++    /**
++     * Asserts the state of a given variable, also as fallback by iterating through the configuration
++     * in case of variables under IVML interface access restrictions.
++     * 
++     * @param cfg the configuration
++     * @param varName the variable name
++     * @param states the states to be asserted (at least one)
++     * @throws ModelQueryException in case that accessing the underlying variable fails
++     */
++    private void assertState(Configuration cfg, String varName, IAssignmentState... states) throws ModelQueryException {
++        Project prj = cfg.getProject();
++        AbstractVariable decl = ModelQuery.findVariable(prj, varName, null);
++        IDecisionVariable var = null;
++        if (null == decl) {
++            // fallback to bypass interface access restriction
++            Iterator<IDecisionVariable> iter = cfg.iterator();
++            while (null == var && iter.hasNext()) {
++                IDecisionVariable tmp = iter.next();
++                if (varName.equals(tmp.getDeclaration().getName())) {
++                    var = tmp;
++                }
++            }
++        } else {
++            var = cfg.getDecision(decl);
++        }
++        Assert.assertNotNull(var);
++        assertContained(var.getState(), (Object[]) states);
++    }
++    
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RampUpTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RampUpTest.java
+new file mode 100644
+index 0000000..c7a0677
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RampUpTest.java
+@@ -0,0 +1,110 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Assert;
++import org.junit.Test;
++
++import net.ssehub.easy.basics.progress.ProgressObserver;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.confModel.ConfigurationException;
++import net.ssehub.easy.varModel.cst.CSTSemanticException;
++import net.ssehub.easy.varModel.cst.CompoundAccess;
++import net.ssehub.easy.varModel.cst.ConstantValue;
++import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
++import net.ssehub.easy.varModel.cst.ContainerOperationCall;
++import net.ssehub.easy.varModel.cst.OCLFeatureCall;
++import net.ssehub.easy.varModel.cst.Variable;
++import net.ssehub.easy.varModel.model.Constraint;
++import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
++import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.datatypes.Compound;
++import net.ssehub.easy.varModel.model.datatypes.IntegerType;
++import net.ssehub.easy.varModel.model.datatypes.Set;
++import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
++import net.ssehub.easy.varModel.model.values.ValueFactory;
++
++/**
++ * Not a real test, just to ramp up the reasoner so that for subsequent tests most classloading issues are already done.
++ * 
++ * @author Holger Eichelberger
++ */
++public class RampUpTest extends AbstractTest {
++
++    /**
++     * Creates the ramp-up test.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected RampUpTest(ITestDescriptor descriptor) {
++        super(descriptor, null);
++    }
++
++    /**
++     * Performs the ram-up test.
++     * 
++     * @throws ConfigurationException if setting an expression as default value fails
++     * @throws ValueDoesNotMatchTypeException if a value does not match a type
++     * @throws CSTSemanticException if a constraint is erroneously composed
++     */
++    @Test
++    public void rampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
++        CSTSemanticException {
++        ReasonerConfiguration rConfig = new ReasonerConfiguration();
++        Configuration cfg = createRampUpTest();
++        IReasoner reasoner = createReasoner();
++        // NO MEASUREMENT!!!
++        ReasoningResult rResult = reasoner.propagate(cfg.getProject(), cfg, rConfig, ProgressObserver.NO_OBSERVER);
++        rResult.logInformation(cfg.getProject(), rConfig);
++        Assert.assertFalse(rResult.hasConflict());
++    }
++    
++    /**
++     * Creates the configuration for a ram-up test, just a configuration to reason on.
++     * 
++     * @return the configuration
++     * @throws ConfigurationException if setting an expression as default value fails
++     * @throws ValueDoesNotMatchTypeException if a value does not match a type
++     * @throws CSTSemanticException if a constraint is erroneously composed
++     */
++    public static Configuration createRampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
++        CSTSemanticException {
++        Project prj = new Project("Test");
++        Compound cmp = new Compound("Cmp", prj);
++        prj.add(cmp);
++        DecisionVariableDeclaration cmpV1 = new DecisionVariableDeclaration("v1", IntegerType.TYPE, prj);
++        cmpV1.setValue(new OCLFeatureCall(
++            new ConstantValue(ValueFactory.createValue(IntegerType.TYPE, 1)), 
++            IntegerType.PLUS_INTEGER_INTEGER.getName(), 
++            new ConstantValue(ValueFactory.createValue(IntegerType.TYPE, 5))));
++        cmp.add(cmpV1);
++        Set cmpSet = new Set("", cmp, prj);
++        DecisionVariableDeclaration set = new DecisionVariableDeclaration("s", cmpSet, prj);
++        DecisionVariableDeclaration iter = new DecisionVariableDeclaration("i", cmp, prj);
++        ConstraintSyntaxTree iterEx = new OCLFeatureCall(
++            new CompoundAccess(new Variable(iter), "v1"), 
++            IntegerType.GREATER_INTEGER_INTEGER.getName(), 
++            new ConstantValue(ValueFactory.createValue(IntegerType.TYPE, 2)));
++        iterEx.inferDatatype();
++        ConstraintSyntaxTree op = new ContainerOperationCall(new Variable(set), Set.FORALL.getName(), iterEx, iter);
++        op.inferDatatype();
++        Constraint constraint = new Constraint(op, prj);
++        prj.add(constraint);
++        
++        return new Configuration(prj);
++    }
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RealTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RealTests.java
+new file mode 100644
+index 0000000..832f56e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RealTests.java
+@@ -0,0 +1,110 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import java.io.IOException;
++
++import org.junit.Ignore;
++import org.junit.Test;
++
++import net.ssehub.easy.varModel.model.Project;
++
++/**
++ * Configures the real tests for SSE reasoner.
++ * 
++ * @author Eichelberger
++ */
++public class RealTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected RealTests(ITestDescriptor descriptor) {
++        super(descriptor, "real");
++    }
++    
++    /**
++     * Real defaults test.
++     */
++    @Test
++    public void realDefaultsTest() {
++        reasoningTest("RealDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * Real assign test.
++     */
++    @Test
++    public void realAssignTest() {
++        reasoningTest("RealAssignTest.ivml", 0);
++    } 
++    
++    /**
++     * Real in compound defaults test.
++     */
++    @Test
++    public void realInCompoundDefaultsTest() {
++        reasoningTest("RealInCompoundDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * Real in compound assign test.
++     */
++    @Test
++    public void realInCompoundAssignTest() {
++        reasoningTest("RealInCompoundAssignTest.ivml", 0);
++    } 
++
++    /**
++     * Real in collection defaults test.
++     */
++    @Test
++    public void realInCollectionDefaultsTest() {
++        reasoningTest("RealInCollectionDefaultsTest.ivml", 2);
++    } 
++    
++    /**
++     * Real in collection assign test.
++     */
++    @Test
++    public void realInCollectionAssignTest() {
++        reasoningTest("RealInCollectionAssignTest.ivml", 2);
++    } 
++
++    /**
++     * Real reference assign test.
++     */
++    @Test
++    public void realReferenceAssignTest() {
++        reasoningTest("RealRefAssignTestFail.ivml", 0); // re-assinment
++    } 
++    
++    /**
++     * Tests whether overridden default values for constraint variables are evaluated correctly.
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void testConstraintDefaults() throws IOException {
++        Project p = loadCompleteProject("realRefAssign", "RealRefAssignTest");
++        resultHandler(0, 0, p);
++    }
++
++    /**
++     * Real annotation test.
++     */
++    @Test
++    public void realAnnotationTest() {
++        reasoningTest("RealAnnotationTest.ivml", 9);
++    } 
++
++    /**
++     * Combined reference-typedef on Real.
++     */
++    @Ignore("IVML")
++    @Test
++    public void referenceDerivedRealTest() {
++        reasoningTest("ReferenceDerivedRealTest.ivml", 4);
++    }    
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningScenarioTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningScenarioTests.java
+new file mode 100644
+index 0000000..2862a9e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningScenarioTests.java
+@@ -0,0 +1,278 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Test;
++
++/**
++ * Configures the operation tests for SSE reasoner.
++ * 
++ * @author Sizonenko
++ * @author El-Sharkawy
++ */
++public class ReasoningScenarioTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected ReasoningScenarioTests(ITestDescriptor descriptor) {
++        super(descriptor, "operationsTemplates");
++    }
++    
++    /**
++     * Basic test.
++     */
++    @Test    
++    public void initialTest() {
++        reasoningTest("InitialTest.ivml", 2);
++    } 
++    
++    /**
++     * Tests collections.
++     */
++    @Test    
++    public void preCollectionTest() {
++        reasoningTest("PreCollectionTest.ivml", 1);
++    }
++    
++    /**
++     * Tests duplicates.
++     */
++    @Test    
++    public void hasDuplicatesTestTest() {
++        reasoningTest("HasDuplicatesTest.ivml", 1);
++    }      
++    
++    /**
++     * Tests freeze.
++     */
++    @Test    
++    public void freezeTest() {
++        reasoningTest("FreezeTest.ivml", 0);
++    } 
++    
++    /**
++     * Tests import freeze.
++     */
++    @Test    
++    public void freezeImportTest() {
++        reasoningTest("FreezeTest.ivml", "FreezeImportTest.ivml", 1);
++    } 
++    
++    /**
++     * Tests import freeze.
++     */
++    @Test 
++    public void nullTest() {
++        reasoningTest("NullTest.ivml", 3);
++    } 
++    
++    /**
++     * Tests null import.
++     */
++    @Test  
++    public void nullImportTest() {
++        reasoningTest("NullTest.ivml", "NullImportTest.ivml", 4);
++    } 
++    
++    /**
++     * Tests import child (1 failed constraint).
++     */
++    @Test    
++    public void importChildTest() {
++        reasoningTest("ImportChild.ivml", 1);
++    } 
++    
++    /**
++     * Tests import core (variable is reassigned and 0 constraints fail).
++     */
++    @Test    
++    public void importCoreTest() {
++        reasoningTest("ImportChild.ivml", "ImportCore.ivml", 0);
++    } 
++    
++    /**
++     * Tests internal constraints.
++     */ 
++    @Test
++    public void internalConstraintTest() {
++        reasoningTest("InternalConstraintTest.ivml", 1);
++    }
++    
++    /**
++     * Tests constraint variables. 
++     */ 
++    @Test    
++    public void constraintVariablesTest() {
++        reasoningTest("ConstraintVariableTest.ivml", 2);
++    }
++    
++    /**
++     * Tests failed variables assignments.
++     */ 
++    @Test    
++    public void variableAssignmentFailTest() {
++        reasoningTest("VariableAssignmentFailTest.ivml", 1);
++    }
++    
++    /**
++     * Tests constraint variables.
++     */ 
++    @Test    
++    public void compoundEqualityTest() {
++        reasoningTest("CompoundEqualityTest.ivml", 0);
++    }
++    
++    /**
++     * Tests compound internal constraints.
++     */
++    @Test    
++    public void constrainedCompoundTest() {
++        reasoningTest("ConstrainedCompoundTest.ivml", 3);
++    }
++    
++    /**
++     * Tests annotation assignment.
++     */
++    @Test    
++    public void annotationInitialTest() {
++        reasoningTest("AnnotationInitialTest.ivml", 0);
++    }
++    
++    /**
++     * Tests annotations in compound.
++     */
++    @Test    
++    public void annotationAssignedToDifferentCompoundSlotsValid() {
++        reasoningTest("AnnotationAssignedToDifferentCompoundSlotsValid.ivml", 0);
++    }
++    
++    /**
++     * Tests compound nested constraints.
++     */
++    @Test    
++    public void refinedCompoundTest() {
++        reasoningTest("RefinedCompoundTest.ivml", 1); // test purpose unclear, src will always fail
++    }
++    
++    /**
++     * Tests trace in failed elements.
++     */
++    @Test
++    public void traceTest() {
++        reasoningTest("TraceTest.ivml", 1);
++    }
++    
++    /**
++     * Tests trace in failed elements.
++     */
++    @Test
++    public void nestedVariableReplaceTest() {
++        reasoningTest("nestedVariableReplaceTest.ivml", 1);
++    }
++    
++    /**
++     * String patern test with internal constraint.
++     */
++    @Test
++    public void internalConstraintStringPaternTest() {
++        reasoningTest("internalConstraintStringPaternTest.ivml", 1);
++    }
++    
++    /**
++     * Inherited internal constraint test.
++     */
++    @Test
++    public void internalConstraintInheritedTest() {
++        reasoningTest("internalConstraintInheritedTest.ivml", 1);
++    }
++    
++    /**
++     * Inherited internal constraint in compound test.
++     */
++    @Test
++    public void internalConstraintInheritedInCompoundTest() {
++        reasoningTest("internalConstraintInheritedInCompoundTest.ivml", 1);
++    }
++    
++    /**
++     * Collection internal constraint test.
++     */
++    @Test
++    public void internalConstraintCollectionTest() {
++        reasoningTest("internalConstraintCollectionTest.ivml", 2);
++    }
++    
++    /**
++     * Collection internal constraint in compound test.
++     */
++    @Test
++    public void internalConstraintCollectionInCompoundTest() {
++        reasoningTest("internalConstraintCollectionInCompoundTest.ivml", 2);
++    }
++    
++    /**
++     * String pattern test with internal constraint.
++     */
++    @Test
++    public void refToCompoundInSequenceTest() {
++        reasoningTest("RefToCompoundInSequenceTest.ivml", 0);
++    }
++    
++    /**
++     * Default constraint reevaluation.
++     */
++    @Test
++    public void defaultConstraintReevaluationTest() {
++        reasoningTest("DefaultConstraintReevaluationTest.ivml", 1);
++    }
++    
++    /**
++     * isDefined test.
++     */
++    @Test
++    public void isDefinedTest() {
++        reasoningTest("IsDefinedTest.ivml", 10);
++    }  
++    
++    /**
++     * isDefined Compound test.
++     */
++    @Test
++    public void isDefinedCompoundTest() {
++        reasoningTest("IsDefinedCompoundTest.ivml", 1);
++    }  
++    
++    /**
++     * Test for collections of compounds equality operation.
++     */
++    @Test
++    public void compoundCollectionEqualityTest() {
++        reasoningTest("compoundCollectionEqualityTest.ivml", 1);
++    }  
++    
++    /**
++     * Test for collections of refTo(compounds) equality operation.
++     */
++    @Test
++    public void refByCompoundCollectionEqualityTest() {
++        reasoningTest("refByCompoundCollectionEqualityTest.ivml", 1);
++    }  
++    
++    /**
++     * Test for collections of string equality operation.
++     */
++    @Test
++    public void stringCollectionEqualityTest() {
++        reasoningTest("stringCollectionEqualityTest.ivml", 2);
++    }
++    
++    /**
++     * Test for incremental reasoning and clering derived values in configuration..
++     */
++    @Test
++    public void clearConfigTest() {
++        reasoningTest("ClearConfigBase.ivml", "ClearConfigCore.ivml", 0);
++    }   
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StressTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StressTest.java
+new file mode 100644
+index 0000000..d8615f8
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StressTest.java
+@@ -0,0 +1,169 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import java.io.IOException;
++
++import org.junit.Test;
++
++import net.ssehub.easy.varModel.model.Project;
++
++/**
++ * Stresstests.
++ * 
++ * @author krafczyk
++ */
++public class StressTest extends AbstractTest {
++
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected StressTest(ITestDescriptor descriptor) {
++        super(descriptor, "stresstest");
++    }
++
++    /**
++     * Tests whether boolean default values are handled correctly.
++     */
++    @Test
++    public void testBooleanDefault() {
++        // Test whether default values for booleans are not treated as project constraints
++        reasoningTest("BooleanDefault.1.ivml", 0);
++        // Test whether default values for booleans are applied to them
++        reasoningTest("BooleanDefault.2.ivml", 1);
++    }
++    
++    /**
++     * Tests whether boolean implies values are handled correctly.
++     */
++    @Test
++    public void testBooleanImplies() {
++        reasoningTest("BooleanImplies.ivml", 1);
++    }
++    
++    /**
++     * Tests whether constraint variables are evaluated correctly.
++     */
++    @Test
++    public void testConstraintEvaluation() {
++        reasoningTest("ConstraintEval.ivml", 0);
++    }
++    
++    /**
++     * Tests whether overridden default values for constraint variables are evaluated correctly.
++     */
++    @Test
++    public void testConstraintDefaultsFail() {
++        reasoningTest("ConstraintDefault.1-fail.ivml", 1); // false constraint and re-assign
++        reasoningTest("ConstraintDefault.2-fail.ivml", 0);
++    }
++
++    /**
++     * Tests whether overridden default values for constraint variables are evaluated correctly.
++     * 
++     * @throws IOException shall not occur
++     */
++    @Test
++    public void testConstraintDefaults() throws IOException {
++        Project p = loadCompleteProject("constraintDefault", "ConstraintDefault1");
++        resultHandler(1, 0, p);
++        p = loadCompleteProject("constraintDefault", "ConstraintDefault2");
++        resultHandler(0, 0, p); // false constraint
++    }
++
++    /**
++     * Tests whether automatic assignment of undefined variables in constraints
++     * via == results in failing constraints.
++     */
++    @Test
++    public void testUndefinedVariables() {
++        reasoningTest("UndefinedVariables.ivml", 1);
++    }
++    
++    /**
++     * Tests whether typedefs work correctly with compounds.
++     */
++    @Test
++    public void testCompoundTypedef() {
++        // Tests whether simple typedefs ("aliases") work
++        reasoningTest("CompoundTypedef.1.ivml", 0);
++        // Tests whether typedefs with "with" work
++        reasoningTest("CompoundTypedef.2.ivml", 1);
++    }
++    
++    /**
++     * Tests whether typedefs work correctly with sequences and sets.
++     */
++    @Test
++    public void testSetAndSequenceTypedef() {
++        // Tests whether simple typedefs ("aliases") work with sets and sequences
++        reasoningTest("SetAndSequenceTypedef.ivml", 2);
++        // Tests whether typedefs of typedefs and "with" works for sequences
++        reasoningTest("SequenceTypedefWith.ivml", 1);
++    }
++    
++    /**
++     * Tests whether constraints in refined compounds produce the right number of error messages.
++     */
++    @Test
++    public void testCompoundRefineConstraints() {
++        reasoningTest("CompoundRefineConstraints.ivml", 1);
++    }
++    
++    /**
++     * Tests whether typedef constraints are correctly evaluated in sequences / sets.
++     */
++    @Test
++    public void testTypedefConstraintsInSequences() {
++        reasoningTest("TypedefConstraintSequence.ivml", 1);
++    }
++    
++    /**
++     * Tests whether out-of-bounds accesses to sequences are handled correctly.
++     */
++    @Test
++    public void testOutOfBoundsIndex() {
++        reasoningTest("OutOfBoundsIndex.ivml", 0);
++    }
++    
++    /**
++     * Tests whether size() works for null sets and sequences.
++     */
++    @Test
++    public void testNullSize() {
++        reasoningTest("NullSize.ivml", 0);
++    }
++    
++    /**
++     * Tests whether == in implies LHS is treated correctly.
++     */
++    @Test
++    public void testPropagationSyntax() {
++        reasoningTest("PropagationSyntax1.ivml", 0);
++    }
++    
++    /**
++     * Tests whether undefined values in if are handled correctly.
++     */
++    @Test
++    public void testIfWithUndefinedValues() {
++        reasoningTest("UndefinedIf.ivml", 0);
++    }
++    
++    /**
++     * Tests whether constraints with undefined variables are ignored.
++     */
++    @Test
++    public void testUndefinedVariableConstraints() {
++        reasoningTest("UndefinedVariableConstraints.ivml", 0);
++    }
++    
++    /**
++     * Tests whether constants passed to custom operations don't cause exceptions.
++     */
++    @Test
++    public void testConstantInCustomOperation() {
++        reasoningTest("ConstantInCustomOperation.ivml", 0);
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StringTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StringTests.java
+new file mode 100644
+index 0000000..6bb405b
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StringTests.java
+@@ -0,0 +1,96 @@
++package net.ssehub.easy.reasoning.core.reasoner;
++
++import org.junit.Ignore;
++import org.junit.Test;
++
++/**
++ * Configures the String tests for SSE reasoner.
++ * 
++ * @author Eichelberger
++ */
++public class StringTests extends AbstractTest {
++    
++    /**
++     * Creating a test instance.
++     * 
++     * @param descriptor the test descriptor
++     */
++    protected StringTests(ITestDescriptor descriptor) {
++        super(descriptor, "string");
++    }
++    
++    /**
++     * String defaults test.
++     */
++    @Test
++    public void stringDefaultsTest() {
++        reasoningTest("StringDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * String assign test.
++     */
++    @Test
++    public void stringAssignTest() {
++        reasoningTest("StringAssignTest.ivml", 0);
++    } 
++    
++    /**
++     * String in compound defaults test.
++     */
++    @Test
++    public void stringInCompoundDefaultsTest() {
++        reasoningTest("StringInCompoundDefaultsTest.ivml", 0);
++    } 
++    
++    /**
++     * String in compound assign test.
++     */
++    @Test
++    public void stringInCompoundAssignTest() {
++        reasoningTest("StringInCompoundAssignTest.ivml", 0);
++    } 
++
++    /**
++     * String in collection defaults test.
++     */
++    @Test
++    public void stringInCollectionDefaultsTest() {
++        reasoningTest("StringInCollectionDefaultsTest.ivml", 2);
++    } 
++    
++    /**
++     * String in collection assign test.
++     */
++    @Test
++    public void stringInCollectionAssignTest() {
++        reasoningTest("StringInCollectionAssignTest.ivml", 2);
++    } 
++
++    /**
++     * String reference assign test.
++     */
++    @Test
++    public void stringReferenceAssignTest() {
++        reasoningTest("StringRefAssignTest.ivml", 0);
++    } 
++
++    /**
++     * String annotation test.
++     */
++    @Ignore("IVML")
++    @Test
++    public void stringAnnotationTest() {
++        reasoningTest("StringAnnotationTest.ivml", 9);
++    } 
++    
++    /**
++     * Combined reference-typedef on String.
++     */
++    @Ignore("IVML")
++    @Test
++    public void referenceDerivedStringTest() {
++        reasoningTest("ReferenceDerivedStringTest.ivml", 4);
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml
+new file mode 100644
+index 0000000..c544a59
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml
+@@ -0,0 +1,14 @@
++project runtimeReasoning {
++
++    enum BindingTime {compile=0, runtime=1};
++    annotate BindingTime binding = BindingTime::compile to runtimeReasoning;
++    Integer a = 5;
++    assign (binding = BindingTime::runtime) to {
++        Integer b;
++        b > 10;
++    }
++    a >= 5;
++    freeze {
++        runtimeReasoning;
++    } but (f|f.binding >= BindingTime.runtime);
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml
+new file mode 100644
+index 0000000..fa91671
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml
+@@ -0,0 +1,14 @@
++project runtimeReasoningConstraintSet {
++
++    enum BindingTime {compile=0, runtime=1};
++    annotate BindingTime binding = BindingTime::compile to runtimeReasoningConstraintSet;
++    Integer a = 5;
++    assign (binding = BindingTime::runtime) to {
++        Integer b;
++    }
++    setOf(Constraint) user = {b > 10}; 
++    a >= 5;
++    freeze {
++        runtimeReasoningConstraintSet;
++    } but (f|f.binding >= BindingTime.runtime);
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_base.ivml
+new file mode 100644
+index 0000000..8ac4770
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_base.ivml
+@@ -0,0 +1,27 @@
++project PL_SimElevator_base {
++
++    version v0;
++    enum ControllerType {DefaultEController, DistanceEController};
++    enum ButtonType {DefaultButton, ArrowButton};
++    Integer elevators = 2;
++    Integer floors;
++    ControllerType controlling_controllertype = ControllerType.DefaultEController;
++    Boolean controlling_synchronized = true;
++    Boolean controlling_accelerated = true;
++    ButtonType outerview_buttontype = ButtonType.DefaultButton;
++    Boolean outerview_emergencybuttons = true;
++    Boolean outerview_cancellation = true;
++    Boolean innerview_emergencybutton = true;
++    Boolean innerview_authorization = true;
++    Boolean innerview_doorbutton = true;
++    Boolean display_direction = true;
++    Boolean display_currfloor_number = true;
++    Boolean display_currfloor_chain = true;
++    Boolean display_target = true;
++    Boolean display_openingside = true;
++    Boolean outerview_autoscroll = true;
++    controlling_synchronized == true implies elevators >= 2;
++    elevators > 0;
++    floors >= 1;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml
+new file mode 100644
+index 0000000..da23450
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml
+@@ -0,0 +1,42 @@
++project PL_SimElevator_frozen {
++
++    version v0;
++    import PL_SimElevator_base;
++    
++    elevators = 4;
++    floors = 10;
++    controlling_controllertype = ControllerType.DefaultEController;
++    controlling_synchronized = true;
++    controlling_accelerated = true;
++    outerview_buttontype = ButtonType.DefaultButton;
++    outerview_emergencybuttons = true;
++    outerview_cancellation = true;
++    innerview_emergencybutton = true;
++    innerview_authorization = true;
++    innerview_doorbutton = true;
++    display_direction = true;
++    display_currfloor_number = true;
++    display_currfloor_chain = true;
++    display_target = true;
++    display_openingside = true;
++    outerview_autoscroll = true;
++    freeze {
++        elevators;
++        floors;
++        controlling_controllertype;
++        controlling_synchronized;
++        controlling_accelerated;
++        outerview_buttontype;
++        outerview_emergencybuttons;
++        outerview_cancellation;
++        innerview_emergencybutton;
++        innerview_authorization;
++        innerview_doorbutton;
++        display_direction;
++        display_currfloor_number;
++        display_currfloor_chain;
++        display_target;
++        display_openingside;
++        outerview_autoscroll;
++    }
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml
+new file mode 100644
+index 0000000..75ef9f3
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml
+@@ -0,0 +1,63 @@
++project PL_SimElevator_frozen_orig {
++
++    version v0;
++    enum ControllerType {DefaultEController, DistanceEController};
++    enum ButtonType {DefaultButton, ArrowButton};
++    Integer elevators = 2;
++    Integer floors;
++    ControllerType controlling_controllertype = ControllerType.DefaultEController;
++    Boolean controlling_synchronized = true;
++    Boolean controlling_accelerated = true;
++    ButtonType outerview_buttontype = ButtonType.DefaultButton;
++    Boolean outerview_emergencybuttons = true;
++    Boolean outerview_cancellation = true;
++    Boolean innerview_emergencybutton = true;
++    Boolean innerview_authorization = true;
++    Boolean innerview_doorbutton = true;
++    Boolean display_direction = true;
++    Boolean display_currfloor_number = true;
++    Boolean display_currfloor_chain = true;
++    Boolean display_target = true;
++    Boolean display_openingside = true;
++    Boolean outerview_autoscroll = true;
++    controlling_synchronized == true implies elevators >= 2;
++    elevators > 0;
++    floors >= 1;
++    
++    elevators = 4;
++    floors = 10;
++    controlling_controllertype = ControllerType.DefaultEController;
++    controlling_synchronized = true;
++    controlling_accelerated = true;
++    outerview_buttontype = ButtonType.DefaultButton;
++    outerview_emergencybuttons = true;
++    outerview_cancellation = true;
++    innerview_emergencybutton = true;
++    innerview_authorization = true;
++    innerview_doorbutton = true;
++    display_direction = true;
++    display_currfloor_number = true;
++    display_currfloor_chain = true;
++    display_target = true;
++    display_openingside = true;
++    outerview_autoscroll = true;
++    freeze {
++        elevators;
++        floors;
++        controlling_controllertype;
++        controlling_synchronized;
++        controlling_accelerated;
++        outerview_buttontype;
++        outerview_emergencybuttons;
++        outerview_cancellation;
++        innerview_emergencybutton;
++        innerview_authorization;
++        innerview_doorbutton;
++        display_direction;
++        display_currfloor_number;
++        display_currfloor_chain;
++        display_target;
++        display_openingside;
++        outerview_autoscroll;
++    }
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml
+new file mode 100644
+index 0000000..0aa4dc0
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml
+@@ -0,0 +1,27 @@
++project CompoundIndividualAssign {
++
++    version v0;
++    
++    annotate Integer at to CompoundIndividualAssign;
++    annotate Integer am to CompoundIndividualAssign;
++    annotate Integer ar to CompoundIndividualAssign;
++    annotate Integer ak to CompoundIndividualAssign;
++    
++    compound cmp {
++        Integer nest = 5;
++        am = nest + 1;
++        at = am - 1;
++        ar = self.nest + 1;
++        ak = self.am - 1;
++        am == ar;
++        at == ak;
++    }
++    
++    cmp c = {};
++    c.nest == 5;
++    c.am == 6;
++    c.at = 5;
++    c.ar = 6;
++    c.ak = 5;
++
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml
+new file mode 100644
+index 0000000..1f8bb53
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml
+@@ -0,0 +1,29 @@
++project ConstraintAnnotationTest {
++
++    annotate Constraint ann = true to ConstraintAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++    
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++
++    t.ann <> true;    
++    i.ann <> true;    
++    r.ann <> true;    
++    s.ann <> true;    
++    e.ann <> true;
++    c.ann <> true;
++    o.ann <> true;
++    d.ann <> true;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml
+new file mode 100644
+index 0000000..a081b70
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml
+@@ -0,0 +1,31 @@
++project BooleanAnnotationTest {
++
++    annotate Boolean ann = true to BooleanAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++    
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann <> true;    
++    i.ann <> true;    
++    r.ann <> true;    
++    s.ann <> true;    
++    e.ann <> true;
++    c.ann <> true;
++    o.ann <> true;
++    d.ann <> true;
++    n.ann <> true;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml
+new file mode 100644
+index 0000000..887a54c
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml
+@@ -0,0 +1,17 @@
++project BooleanInCompoundAssignTest {
++
++    Boolean t;
++    Boolean f;
++    
++    t = true;
++    f = false;
++    
++    Boolean check;
++    check = true;
++    
++    t == true implies check == false;
++    f == false implies check == false;
++    
++   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml
+new file mode 100644
+index 0000000..ef2cf3c
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml
+@@ -0,0 +1,14 @@
++project BooleanDefaultsTest {
++
++    Boolean t = true;
++    Boolean f = false;
++    
++    Boolean check;
++    check = true;
++    
++    t == true implies check == false;
++    f == false implies check == false;
++    
++   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml
+new file mode 100644
+index 0000000..a38c6a3
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml
+@@ -0,0 +1,11 @@
++project BooleanImpliesTest {
++
++    Boolean t = true;
++    Boolean f = false;
++    
++    t implies f == true;
++    
++    
++   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml
+new file mode 100644
+index 0000000..a61b0c5
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml
+@@ -0,0 +1,15 @@
++project BooleanAssignTest {
++
++    sequenceOf(Boolean) t;
++    sequenceOf(Boolean) f;
++    
++    t = {true, true};
++    f = {false, false};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i) implies check == false;
++    f->forAll(i|i==false) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml
+new file mode 100644
+index 0000000..459059c
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml
+@@ -0,0 +1,12 @@
++project BooleanInCollectionDefaultsTest {
++
++    sequenceOf(Boolean) t = {true, true};
++    sequenceOf(Boolean) f = {false, false};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i) implies check == false;
++    f->forAll(i|i==false) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml
+new file mode 100644
+index 0000000..4be1937
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml
+@@ -0,0 +1,19 @@
++project BooleanAssignTest {
++
++    compound C {
++        Boolean t;
++        Boolean f;
++    
++        t = true;
++        f = false;
++    
++        Boolean check;
++        check = true;
++    
++        t == true implies check == false;
++        f == false implies check == false;    
++    }
++    
++    C cmp;   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml
+new file mode 100644
+index 0000000..4711b0f
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml
+@@ -0,0 +1,16 @@
++project BooleanInCompoundDefaultsTest {
++
++    compound C {
++        Boolean t = true;
++        Boolean f = false;
++    
++        Boolean check;
++        check = true;
++        
++        t == true implies check == false;
++        f == false implies check == false;
++    }
++    
++    C cmp; 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml
+new file mode 100644
+index 0000000..4de4f00
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml
+@@ -0,0 +1,14 @@
++project BooleanInCompoundImpliesTest {
++
++
++    compound C {
++        Boolean t = true;
++        Boolean f = false;
++    
++        t implies f == true;    
++    }
++    
++    C cmp;
++   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml
+new file mode 100644
+index 0000000..19b3b10
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml
+@@ -0,0 +1,14 @@
++project BooleanRefAssignTest {
++
++    Boolean t;
++    Boolean f;
++
++    refTo(Boolean) tr = refBy(t);
++    refTo(Boolean) fr = refBy(f);
++    
++    tr = true;
++    fr = false;
++
++    t == false;
++    f == true;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml
+new file mode 100644
+index 0000000..74101e7
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml
+@@ -0,0 +1,35 @@
++project CarExample {
++
++    version v0;
++    
++    typedef HPType Integer with (HPType >= 45 and HPType <= 500);
++    
++    enum transmission {manual, automatic};
++    
++    compound Seat {
++        Boolean reclining;
++        Boolean heightcontrol;
++    }
++
++    compound ComfortSeat refines Seat {
++        Boolean automaticControl;
++        Boolean remoteControl;
++    }
++
++    sequenceOf(Seat) seats;
++    
++    Boolean airconditioning = true;
++    
++    HPType horsePower = 100;
++    
++    airconditioning implies horsePower > 100;
++    
++    size(seats) > 4 implies horsePower > 100;
++    
++    horsePower = 80;
++    
++    seats = {{reclining = true, heightcontrol = true}, {reclining = true, heightcontrol = true}, {reclining = false, heightcontrol = false}, {reclining = false, heightcontrol = false}};
++    
++     
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/ReferenceDerivedBooleanTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/ReferenceDerivedBooleanTest.ivml
+new file mode 100644
+index 0000000..5d722d7
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/ReferenceDerivedBooleanTest.ivml
+@@ -0,0 +1,13 @@
++project ReferenceDerivedBooleanTest {
++
++    typedef RBoolean refTo(Boolean);
++    typedef B Boolean with (B == true);
++    typedef RB refTo(B);
++
++    Boolean b = false;
++    RB r1 = refBy(b);
++    r1 == false;
++    RBoolean r2 = refBy(b);
++    r2 == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanAssignTest.ivml
+deleted file mode 100644
+index 887a54c..0000000
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanAssignTest.ivml
++++ /dev/null
+@@ -1,17 +0,0 @@
+-project BooleanInCompoundAssignTest {
+-
+-    Boolean t;
+-    Boolean f;
+-    
+-    t = true;
+-    f = false;
+-    
+-    Boolean check;
+-    check = true;
+-    
+-    t == true implies check == false;
+-    f == false implies check == false;
+-    
+-   
+-    
+-}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanDefaultsTest.ivml
+deleted file mode 100644
+index ef2cf3c..0000000
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanDefaultsTest.ivml
++++ /dev/null
+@@ -1,14 +0,0 @@
+-project BooleanDefaultsTest {
+-
+-    Boolean t = true;
+-    Boolean f = false;
+-    
+-    Boolean check;
+-    check = true;
+-    
+-    t == true implies check == false;
+-    f == false implies check == false;
+-    
+-   
+-    
+-}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanImpliesTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanImpliesTest.ivml
+deleted file mode 100644
+index a38c6a3..0000000
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanImpliesTest.ivml
++++ /dev/null
+@@ -1,11 +0,0 @@
+-project BooleanImpliesTest {
+-
+-    Boolean t = true;
+-    Boolean f = false;
+-    
+-    t implies f == true;
+-    
+-    
+-   
+-    
+-}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundAssignTest.ivml
+deleted file mode 100644
+index 4be1937..0000000
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundAssignTest.ivml
++++ /dev/null
+@@ -1,19 +0,0 @@
+-project BooleanAssignTest {
+-
+-    compound C {
+-        Boolean t;
+-        Boolean f;
+-    
+-        t = true;
+-        f = false;
+-    
+-        Boolean check;
+-        check = true;
+-    
+-        t == true implies check == false;
+-        f == false implies check == false;    
+-    }
+-    
+-    C cmp;   
+-    
+-}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundDefaultsTest.ivml
+deleted file mode 100644
+index 4711b0f..0000000
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundDefaultsTest.ivml
++++ /dev/null
+@@ -1,16 +0,0 @@
+-project BooleanInCompoundDefaultsTest {
+-
+-    compound C {
+-        Boolean t = true;
+-        Boolean f = false;
+-    
+-        Boolean check;
+-        check = true;
+-        
+-        t == true implies check == false;
+-        f == false implies check == false;
+-    }
+-    
+-    C cmp; 
+-    
+-}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundImpliesTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundImpliesTest.ivml
+deleted file mode 100644
+index 4de4f00..0000000
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundImpliesTest.ivml
++++ /dev/null
+@@ -1,14 +0,0 @@
+-project BooleanInCompoundImpliesTest {
+-
+-
+-    compound C {
+-        Boolean t = true;
+-        Boolean f = false;
+-    
+-        t implies f == true;    
+-    }
+-    
+-    C cmp;
+-   
+-    
+-}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/CarExample.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/CarExample.ivml
+deleted file mode 100644
+index 74101e7..0000000
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/CarExample.ivml
++++ /dev/null
+@@ -1,35 +0,0 @@
+-project CarExample {
+-
+-    version v0;
+-    
+-    typedef HPType Integer with (HPType >= 45 and HPType <= 500);
+-    
+-    enum transmission {manual, automatic};
+-    
+-    compound Seat {
+-        Boolean reclining;
+-        Boolean heightcontrol;
+-    }
+-
+-    compound ComfortSeat refines Seat {
+-        Boolean automaticControl;
+-        Boolean remoteControl;
+-    }
+-
+-    sequenceOf(Seat) seats;
+-    
+-    Boolean airconditioning = true;
+-    
+-    HPType horsePower = 100;
+-    
+-    airconditioning implies horsePower > 100;
+-    
+-    size(seats) > 4 implies horsePower > 100;
+-    
+-    horsePower = 80;
+-    
+-    seats = {{reclining = true, heightcontrol = true}, {reclining = true, heightcontrol = true}, {reclining = false, heightcontrol = false}, {reclining = false, heightcontrol = false}};
+-    
+-     
+-    
+-}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ContainerAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ContainerAnnotationTest.ivml
+new file mode 100644
+index 0000000..3c6b312
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ContainerAnnotationTest.ivml
+@@ -0,0 +1,31 @@
++project ContainerAnnotationTest {
++
++    annotate setOf(Integer) ann = {3, -2} to ContainerAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    size(t.ann) <> 2;
++    size(i.ann) <> 2;    
++    size(r.ann) <> 2;    
++    size(s.ann) <> 2;    
++    size(e.ann) <> 2;    
++    size(c.ann) <> 2;
++    size(o.ann) <> 2;
++    size(d.ann) <> 2;
++    size(n.ann) <> 2;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ReferenceDerivedCollectionTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ReferenceDerivedCollectionTest.ivml
+new file mode 100644
+index 0000000..8fdd8bb
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ReferenceDerivedCollectionTest.ivml
+@@ -0,0 +1,14 @@
++project ReferenceDerivedCollectionTest {
++
++    typedef RMySet refTo(setOf(Integer));
++    typedef ISet setOf(Integer) with (size(ISet) > 2);
++    typedef RISet refTo(ISet);
++
++    ISet c = {1, 2};
++    size(c) > 3;
++    RISet r1 = refBy(c);
++    size(refBy(r1)) > 4;
++    RMySet r2 = refBy(c);
++    size(refBy(r2)) > 5;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest1.ivml
+new file mode 100644
+index 0000000..cbee740
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest1.ivml
+@@ -0,0 +1,10 @@
++project IVML {
++
++    version v0;
++    sequenceOf(String) array = {"Hello", " ", "World"};
++    setOf(refTo(String)) referedVars = {refBy(array[0]), refBy(array[2])};
++    setOf(String) orgVars;
++
++    referedVars->apply(refTo(String) itr;
++      setOf(String) tmpValues = {} | tmpValues.add(refBy(itr))).size() == 1;
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest2.ivml
+new file mode 100644
+index 0000000..737983f
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest2.ivml
+@@ -0,0 +1,10 @@
++project IVML {
++
++    version v0;
++    sequenceOf(String) array = {"Hello", " ", "World"};
++    setOf(refTo(String)) referedVars = {refBy(array[0]), refBy(array[2])};
++    setOf(String) orgVars;
++
++    referedVars->apply(refTo(String) itr;
++      setOf(String) tmpValues = {} | tmpValues.add(refBy(itr))).size() == 2;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest3.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest3.ivml
+new file mode 100644
+index 0000000..7f45425
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest3.ivml
+@@ -0,0 +1,12 @@
++project IVML {
++
++    version v0;
++    sequenceOf(String) array = {"Hello", " ", "World"};
++    setOf(refTo(String)) referedVars = {refBy(array[0]), refBy(array[2])};
++    setOf(String) orgVars;
++
++
++    // "Derefer" values
++    orgVars = referedVars->apply(refTo(String) itr;
++      setOf(String) tmpValues = {} | tmpValues.add(refBy(itr)));
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest4.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest4.ivml
+new file mode 100644
+index 0000000..4e0f78c
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest4.ivml
+@@ -0,0 +1,9 @@
++project IVML {
++
++    version v0;
++    sequenceOf(String) strs1 = {"a", "b", "c"};
++    setOf(refTo(String)) strs2 = {refBy(strs1[0]), refBy(strs1[1]), refBy(strs1[2])};
++
++    setOf(String) set1 = strs1.asSet()->collect(s | s);
++    setOf(String) set2 = strs2->collect(refTo(String) s | refBy(s));
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml
+new file mode 100644
+index 0000000..01a0f38
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml
+@@ -0,0 +1,21 @@
++project constraintSetDerivedCompound {
++
++    version v0;
++    
++    compound Comp {
++        Integer i;
++        i > 10;
++    }
++    
++    compound Comp2 refines Comp {
++        Integer j;
++        j > 20;
++        i <= 20;
++    }
++    
++    typedef TComp Comp with (TComp.i <= 21);
++    typedef TComp2 Comp2 with (TComp2.i <= 21);
++    
++    setOf(TComp) t1 = {{i = 11}, Comp{i=12}, Comp2{i=19}, Comp2{i=21}};
++    setOf(TComp) t2 = {{i = 11}, Comp2{i=16}, Comp2{i=21}};
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml
+new file mode 100644
+index 0000000..cd5b308
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml
+@@ -0,0 +1,8 @@
++project constraintSetSetDefault {
++
++    version v0;
++    
++    Integer i;
++    setOf(setOf(Constraint)) constraints = {{i > 0, i < 1}};
++    i = 1;
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDerivedCompound.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDerivedCompound.ivml
+new file mode 100644
+index 0000000..da5ecd7
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDerivedCompound.ivml
+@@ -0,0 +1,21 @@
++project constraintSetSetDerivedCompound {
++
++    version v0;
++    
++    compound Comp {
++        Integer i;
++        i > 10;
++    }
++    
++    compound Comp2 refines Comp {
++        Integer j;
++        j > 20;
++        i <= 20;
++    }
++    
++    typedef TComp Comp with (TComp.i <= 21);
++    typedef TComp2 Comp2 with (TComp2.i <= 21);
++    
++    setOf(setOf(TComp)) t1 = {{{i = 11}, Comp{i=12}, Comp2{i=19}, Comp2{i=21}}};
++    setOf(setOf(TComp)) t2 = {{{i = 11}, Comp2{i=16}, Comp2{i=21}}};
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml
+new file mode 100644
+index 0000000..08da47c
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml
+@@ -0,0 +1,12 @@
++project setDerivedSet {
++
++    version v0;
++    
++    typedef MyIntSet setOf(Integer) with (size(MyIntSet) > 2);
++    MyIntSet si1 = {1, 2, 3};
++    MyIntSet si2 = {2, 3, 4};
++    MyIntSet si3 = {4, 5};
++
++    setOf(MyIntSet) s = {{1, 2, 3}, {2, 3, 4}, {4, 5}};
++    s->forAll(t|sum(t) > 6);
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml
+new file mode 100644
+index 0000000..7d009ac
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml
+@@ -0,0 +1,34 @@
++project CompoundAnnotationTest {
++
++    compound ACmp {
++       Integer i = 0;
++    };
++    annotate ACmp ann = ACmp{} to CompoundAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann.i <> 0;
++    i.ann.i <> 0;    
++    r.ann.i <> 0;    
++    s.ann.i <> 0;    
++    e.ann.i <> 0;    
++    c.ann.i <> 0;
++    o.ann.i <> 0;
++    d.ann.i <> 0;
++    n.ann.i <> 0;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml
+new file mode 100644
+index 0000000..4c66511
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml
+@@ -0,0 +1,20 @@
++project CompoundAnnotationTest2 {
++
++    enum Binding {compile=0, runtime=1};
++    annotate Binding bindingTime = Binding.compile to CompoundAnnotationTest2;
++
++    compound Info {
++        assign(bindingTime = Binding.runtime) to {
++            Boolean active;
++        }
++    }
++    
++    compound Snk {
++        Integer nr = 1;
++        assign(bindingTime = Binding.runtime) to {
++            Info info;
++        }
++    }
++    
++    Snk snk;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml
+new file mode 100644
+index 0000000..44c6372
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml
+@@ -0,0 +1,18 @@
++project CompoundCompoundTest1 {
++
++    compound ContComp {
++        Integer a;
++    }
++
++    compound MyComp {
++        Integer a;
++        ContComp c;
++        a > c.a;
++    }
++
++    MyComp c1 = {a = 1, c = {a = 0}};
++    MyComp c2 = {a = 100, c = {a = 101}};
++    
++    c2.a > 100;
++    c2.c.a > 100;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest2.ivml
+new file mode 100644
+index 0000000..4e73abb
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest2.ivml
+@@ -0,0 +1,14 @@
++project CompoundCompoundTest2 {
++
++    compound MyComp {
++        Integer a;
++        MyComp c;
++        a > c.a;
++    }
++
++    MyComp c1 = {a = 1, c = {a = 0}};
++    MyComp c2 = {a = 100, c = {a = 101}};
++    
++    c2.a > 100;
++    c2.c.a > 100;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml
+new file mode 100644
+index 0000000..cc0a21e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml
+@@ -0,0 +1,13 @@
++project CompoundConstraintTest {
++
++    compound MyComp {
++        Integer a;
++        Integer b;
++        a > b;
++    }
++
++    MyComp c1 = {a = 1, b = 0};
++    MyComp c2 = {a = 100, b = 101};
++    
++    c2.a > 100;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml
+new file mode 100644
+index 0000000..82bfcba
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml
+@@ -0,0 +1,34 @@
++project CompoundContainerTest1 {
++
++    compound RecComp {
++        setOf(Integer) iSet;
++    }
++
++    compound MyComp {
++        setOf(Integer) iSet;
++        setOf(RecComp) cSet;
++        iSet.size() == cSet.size();
++        cSet->forAll(c|c.iSet.size() > 0);
++    }
++
++    MyComp c1 = {
++      iSet = {1}, 
++      cSet = {
++        RecComp{
++          iSet = {3}
++        }
++      }
++    };
++    MyComp c2 = {
++      iSet = {1, 2}, 
++      cSet = {}
++    };
++    MyComp c3 = {
++      iSet = {1, 2}, 
++      cSet = {
++        RecComp{
++          iSet = {3, 4}
++        }
++      }
++    };
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml
+new file mode 100644
+index 0000000..9b18c4d
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml
+@@ -0,0 +1,32 @@
++project CompoundContainerTest2 {
++
++    compound MyComp {
++        setOf(Integer) iSet;
++        setOf(MyComp) cSet;
++        iSet.size() == cSet.size();
++        cSet->forAll(c|c.iSet.size() > 0);
++    }
++
++    MyComp c1 = {
++      iSet = {1}, 
++      cSet = {
++        MyComp{
++          iSet = {3}, 
++          cSet = {MyComp{}}
++        }
++      }
++    };
++    MyComp c2 = {
++      iSet = {1, 2}, 
++      cSet = {}
++    };
++    MyComp c3 = {
++      iSet = {1, 2}, 
++      cSet = {
++        MyComp{
++          iSet = {3, 4}, 
++          cSet = {MyComp{}}
++        }
++      }
++    };
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml
+new file mode 100644
+index 0000000..5e46643
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml
+@@ -0,0 +1,16 @@
++project CompoundRefAssignTest1 {
++
++    compound MyComp {
++        Integer t;
++        Integer f;
++        refTo(Integer) tr = refBy(t);
++        refTo(Integer) fr = refBy(f);
++    }
++
++    MyComp c = {};
++    c.tr = 1;
++    c.fr = 2;
++
++    c.t == 2;
++    c.f == 1;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml
+new file mode 100644
+index 0000000..d1d791e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml
+@@ -0,0 +1,18 @@
++project CompoundRefAssignTest2 {
++
++    compound RefComp {
++        Integer a;
++        Integer b;
++    }
++
++    compound MyComp {
++        RefComp rc;
++        refTo(RefComp) rcr = refBy(rc);
++    }
++
++    MyComp c;
++    c.rc = {a = 1, b = 2};
++
++    c.rc.a == c.rcr.b;
++    c.rc.b == c.rcr.a;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml
+new file mode 100644
+index 0000000..a93469a
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml
+@@ -0,0 +1,18 @@
++project CompoundRefAssignTest3 {
++
++    compound RefComp {
++        Integer a;
++        Integer b;
++    }
++
++    compound MyComp {
++        RefComp rc;
++        refTo(RefComp) rcr = refBy(rc);
++    }
++
++    MyComp c;
++    c.rc = {a = 1, b = 2};
++
++    c.rc.a == c.rcr.b;
++    c.rc.b == c.rcr.a;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml
+new file mode 100644
+index 0000000..e6f44e4
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml
+@@ -0,0 +1,35 @@
++project DerivedCompoundAnnotationTest {
++
++    compound ACmp {
++       Integer j = 0;
++    };
++    typedef A ACmp with (A.j >= 0);
++    annotate A ann = ACmp{} to DerivedCompoundAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann.j <> 0;
++    i.ann.j <> 0;    
++    r.ann.j <> 0;    
++    s.ann.j <> 0;    
++    e.ann.j <> 0;    
++    c.ann.j <> 0;
++    o.ann.j <> 0;
++    d.ann.j <> 0;
++    n.ann.j <> 0;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml
+new file mode 100644
+index 0000000..92cf3a5
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml
+@@ -0,0 +1,35 @@
++project ReferenceCompoundAnnotationTest {
++
++    compound ACmp {
++       Integer i = 0;
++    };
++    ACmp annotation = ACmp{};
++    annotate refTo(ACmp) ann = refBy(annotation) to ReferenceCompoundAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann.i <> 0;
++    i.ann.i <> 0;    
++    r.ann.i <> 0;    
++    s.ann.i <> 0;    
++    e.ann.i <> 0;    
++    c.ann.i <> 0;
++    o.ann.i <> 0;
++    d.ann.i <> 0;
++    n.ann.i <> 0;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceDerivedCompoundTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceDerivedCompoundTest.ivml
+new file mode 100644
+index 0000000..dfd7442
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceDerivedCompoundTest.ivml
+@@ -0,0 +1,17 @@
++project ReferenceDerivedCompoundTest {
++
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef RMyCmp refTo(MyCmp);
++    typedef Cmp MyCmp with (Cmp.i > 1);
++    typedef RCmp refTo(Cmp);
++
++    Cmp c = Cmp{};
++    c.i > 3;
++    RCmp r1 = refBy(c);
++    r1.i > 4;
++    RMyCmp r2 = refBy(c);
++    r2.i > 5;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValues.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValues.ivml
+new file mode 100644
+index 0000000..cc1a2f5
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValues.ivml
+@@ -0,0 +1,12 @@
++project changingValues {
++
++	version v0;
++	
++	import changingValuesBase;
++
++    cmp1 = MyRefinedCmp{value = 31};
++    cmp2 = MyBaseCmp{value = 36};
++    cmp3 = null;
++    cmp4 = MyBaseCmp{value = 37};
++	
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml
+new file mode 100644
+index 0000000..1a498e0
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml
+@@ -0,0 +1,19 @@
++project changingValuesBase {
++
++	version v0;
++	
++	compound MyBaseCmp {
++	    Integer value = 30;
++	    value > 30;
++	}
++	
++	compound MyRefinedCmp refines MyBaseCmp {
++	    value < 35;
++	}
++	
++	MyBaseCmp cmp1 = MyBaseCmp{};
++    MyBaseCmp cmp2 = MyRefinedCmp{value = 40};
++    MyBaseCmp cmp3 = MyBaseCmp{};
++    MyBaseCmp cmp4 = null;
++	
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Base.ivml
+new file mode 100644
+index 0000000..caaaff6
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Base.ivml
+@@ -0,0 +1,16 @@
++project Base {
++    version v0;
++    enum Binding {compile = 0, runtime = 1};
++    annotate Binding bind = Binding.compile to Base;
++    compound ACmp {
++        String algTopologyClass = null;
++        Integer parallelism = 1;
++        assign(bind = Binding.runtime) to {
++            Integer executors = parallelism;
++            Integer initialExecutors = parallelism;
++        }
++        algTopologyClass == null implies parallelism == 1;
++        algTopologyClass == null implies numtasks == 1;
++        algTopologyClass == null implies scalable == false;
++    };
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Cfg.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Cfg.ivml
+new file mode 100644
+index 0000000..3994321
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Cfg.ivml
+@@ -0,0 +1,6 @@
++project Cfg {
++    version v0;
++    import Base;
++    annotate Binding bind = Binding.compile to Cfg;
++    ACmp c = {parallelism = 14, algTopologyClass = "TSCF"};
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraints.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraints.ivml
+new file mode 100644
+index 0000000..6cefb6a
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraints.ivml
+@@ -0,0 +1,18 @@
++project changingConstraints {
++
++	version v0;
++	
++	import changingConstraintsBase;
++
++	valueConstraint = value < 30;
++    valueNConstraint = null;
++    valueTConstraint = true;
++    valueN2Constraint = value < 30;
++	cmp.value2Constraint = cmp.value2 < 40;
++    cmp.value2NConstraint = null;
++    cmp.value2TConstraint = null;
++    cmp.value2N2Constraint = cmp.value2 < 40;
++	cmpConstraints = {cmp.value2 < 50};
++	cmpConstraints2[0] = cmp.value2 > 0;
++	
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraintsBase.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraintsBase.ivml
+new file mode 100644
+index 0000000..4f3f8a2
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraintsBase.ivml
+@@ -0,0 +1,24 @@
++project changingConstraintsBase {
++
++	version v0;
++	
++	Integer value = 25;
++	Constraint valueConstraint = value < 20;
++	Constraint valueNConstraint = value < 20;
++    Constraint valueTConstraint = value < 20;
++    Constraint valueN2Constraint = null;
++	
++	compound MyCmp {
++	    Integer value2 = 30;
++		Constraint value2Constraint = value2 < 21;
++        Constraint value2NConstraint = value2 < 21;
++        Constraint value2TConstraint = value2 < 21;
++        Constraint value2N2Constraint = null;
++	}
++	
++	MyCmp cmp = MyCmp{};
++	
++	setOf(Constraint) cmpConstraints = {cmp.value2 < 15};
++	sequenceOf(Constraint) cmpConstraints2 = {cmp.value2 < 16};
++	
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml
+new file mode 100644
+index 0000000..9cec427
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml
+@@ -0,0 +1,15 @@
++project constraintsDerived {
++
++	version v0;
++
++    typedef MyConstraint Constraint;
++	
++	compound CP {
++	   MyConstraint c = false;
++	}
++	
++	MyConstraint c = false;
++	CP cmp = {};
++	setOf(MyConstraint) s = {false};
++	
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraints.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraints.ivml
+new file mode 100644
+index 0000000..49a3f99
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraints.ivml
+@@ -0,0 +1,9 @@
++project refinedConstraints {
++
++    version v0;
++    
++    import refinedConstraintsInter;
++
++    CP2 cmp = {no = 0};
++
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsBase.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsBase.ivml
+new file mode 100644
+index 0000000..e9cfe4c
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsBase.ivml
+@@ -0,0 +1,10 @@
++project refinedConstraintsBase {
++
++    version v0;
++
++    compound CP1 {
++        Integer no;
++        Constraint cons = no > 0;
++    }
++
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsInter.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsInter.ivml
+new file mode 100644
+index 0000000..1d01269
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsInter.ivml
+@@ -0,0 +1,10 @@
++project refinedConstraintsInter {
++
++    version v0;
++    import refinedConstraintsBase;
++
++    compound CP2 refines CP1 {
++        cons = null;
++    }
++
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml
+new file mode 100644
+index 0000000..d7187f7
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml
+@@ -0,0 +1,32 @@
++project EnumAnnotationTest {
++
++    enum AEnum {a1, a2};
++    annotate AEnum ann = AEnum::a1 to EnumAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann <> AEnum::a1;
++    i.ann <> AEnum::a1;    
++    r.ann <> AEnum::a1;    
++    s.ann <> AEnum::a1;    
++    e.ann <> AEnum::a1;
++    c.ann <> AEnum::a1;
++    o.ann <> AEnum::a1;
++    d.ann <> AEnum::a1;
++    n.ann <> AEnum::a1;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml
+new file mode 100644
+index 0000000..379849a
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml
+@@ -0,0 +1,12 @@
++project EnumAssignTest {
++
++    enum MyEnum {val1, val2, val3};
++    MyEnum e1;
++    MyEnum e2;
++    MyEnum e3;
++    
++    e1 = MyEnum::val1;
++    e2 = MyEnum::val2;
++    
++    e1 <> e2 implies e3 == MyEnum::val3;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml
+new file mode 100644
+index 0000000..6b696ab
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml
+@@ -0,0 +1,9 @@
++project EnumDefaultsTest {
++
++    enum MyEnum {val1, val2, val3};
++    MyEnum e1 = MyEnum::val1;
++    MyEnum e2 = MyEnum::val2;
++    MyEnum e3;
++ 
++    e1 <> e2 implies e3 == MyEnum::val3;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml
+new file mode 100644
+index 0000000..b2e591d
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml
+@@ -0,0 +1,16 @@
++project EnumInCollectionAssignTest {
++
++    enum MyEnum {val1, val2, val3};
++    sequenceOf(MyEnum) t;
++    sequenceOf(MyEnum) f;
++    
++    t = {MyEnum::val1, MyEnum::val1};
++    f = {MyEnum::val2, MyEnum::val2};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i==MyEnum::val1) implies check == false;
++    f->forAll(i|i==MyEnum::val2) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml
+new file mode 100644
+index 0000000..ddab240
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml
+@@ -0,0 +1,13 @@
++project EnumInCollectionDefaultsTest {
++
++    enum MyEnum {val1, val2, val3};
++    sequenceOf(MyEnum) t = {MyEnum::val1, MyEnum::val1};
++    sequenceOf(MyEnum) f = {MyEnum::val2, MyEnum::val2};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i==MyEnum::val1) implies check == false;
++    f->forAll(i|i==MyEnum::val2) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml
+new file mode 100644
+index 0000000..c1f7e7e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml
+@@ -0,0 +1,17 @@
++project EnumInCompoundAssignTest {
++
++    enum MyEnum {val1, val2, val3};
++    compound C {
++        MyEnum e1;
++        MyEnum e2;
++        MyEnum e3;
++    
++        e1 = MyEnum::val1;
++        e2 = MyEnum::val2;
++    
++        e1 <> e2 implies e3 == MyEnum::val3;
++    }
++    
++    C cmp;   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml
+new file mode 100644
+index 0000000..7b7c464
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml
+@@ -0,0 +1,14 @@
++project EnumInCompoundDefaultsTest {
++
++    enum MyEnum {val1, val2, val3};
++    compound C {
++        MyEnum e1 = MyEnum::val1;
++        MyEnum e2 = MyEnum::val2;
++        MyEnum e3;
++ 
++        e1 <> e2 implies e3 == MyEnum::val3;
++    }
++    
++    C cmp; 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml
+new file mode 100644
+index 0000000..3d00724
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml
+@@ -0,0 +1,15 @@
++project EnumRefAssignTest {
++
++    enum MyEnum {val1, val2, val3};
++    MyEnum t;
++    MyEnum f;
++
++    refTo(MyEnum) tr = refBy(t);
++    refTo(MyEnum) fr = refBy(f);
++    
++    tr = MyEnum.val1;
++    fr = MyEnum.val2;
++
++    t == MyEnum.val2;
++    f == MyEnum.val1;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml
+new file mode 100644
+index 0000000..96ecb23
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml
+@@ -0,0 +1,32 @@
++project EnumAnnotationTest {
++
++    enum AEnum {a1=1, a2=2};
++    annotate AEnum ann = AEnum::a1 to EnumAnnotationTest;
++    
++    enum MyEnum {val1=1, val2=2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann <> AEnum::a1;
++    i.ann <> AEnum::a1;    
++    r.ann <> AEnum::a1;    
++    s.ann <> AEnum::a1;    
++    e.ann <> AEnum::a1;
++    c.ann <> AEnum::a1;
++    o.ann <> AEnum::a1;
++    d.ann <> AEnum::a1;
++    n.ann <> AEnum::a1;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml
+new file mode 100644
+index 0000000..787af7d
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml
+@@ -0,0 +1,13 @@
++project OrderedEnumAssignTest {
++
++    enum MyEnum {val1=1, val2=2, val3=3};
++    MyEnum e1;
++    MyEnum e2;
++    MyEnum e3;
++    
++    e1 = MyEnum::val1;
++    e2 = MyEnum::val2;
++
++    e1 < e2;    
++    e1 <> e2 implies e3 == MyEnum::val3;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml
+new file mode 100644
+index 0000000..c397388
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml
+@@ -0,0 +1,10 @@
++project OrderedEnumDefaultsTest {
++
++    enum MyEnum {val1=1, val2=2, val3=3};
++    MyEnum e1 = MyEnum::val1;
++    MyEnum e2 = MyEnum::val2;
++    MyEnum e3;
++ 
++    e1 < e2;    
++    e1 <> e2 implies e3 == MyEnum::val3;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml
+new file mode 100644
+index 0000000..344c739
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml
+@@ -0,0 +1,16 @@
++project EnumInCollectionAssignTest {
++
++    enum MyEnum {val1=1, val2=2, val3=3};
++    sequenceOf(MyEnum) t;
++    sequenceOf(MyEnum) f;
++    
++    t = {MyEnum::val1, MyEnum::val1};
++    f = {MyEnum::val2, MyEnum::val2};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i==MyEnum::val1) implies check == false;
++    f->forAll(i|i==MyEnum::val2) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml
+new file mode 100644
+index 0000000..32e4584
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml
+@@ -0,0 +1,13 @@
++project EnumInCollectionDefaultsTest {
++
++    enum MyEnum {val1=1, val2=2, val3=3};
++    sequenceOf(MyEnum) t = {MyEnum::val1, MyEnum::val1};
++    sequenceOf(MyEnum) f = {MyEnum::val2, MyEnum::val2};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i==MyEnum::val1) implies check == false;
++    f->forAll(i|i==MyEnum::val2) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml
+new file mode 100644
+index 0000000..8ef2ee0
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml
+@@ -0,0 +1,18 @@
++project OrderedEnumInCompoundAssignTest {
++
++    enum MyEnum {val1=1, val2=2, val3=3};
++    compound C {
++        MyEnum e1;
++        MyEnum e2;
++        MyEnum e3;
++    
++        e1 = MyEnum::val1;
++        e2 = MyEnum::val2;
++    
++        e1 < e2;    
++        e1 <> e2 implies e3 == MyEnum::val3;
++    }
++    
++    C cmp;   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml
+new file mode 100644
+index 0000000..fd5cc55
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml
+@@ -0,0 +1,15 @@
++project OrderedEnumInCompoundDefaultsTest {
++
++    enum MyEnum {val1=1, val2=2, val3=3};
++    compound C {
++        MyEnum e1 = MyEnum::val1;
++        MyEnum e2 = MyEnum::val2;
++        MyEnum e3;
++ 
++        e1 < e2;    
++        e1 <> e2 implies e3 == MyEnum::val3;
++    }
++    
++    C cmp; 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml
+new file mode 100644
+index 0000000..1c35978
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml
+@@ -0,0 +1,15 @@
++project OrderedEnumRefAssignTest {
++
++    enum MyEnum {val1=1, val2=2, val3=3};
++    MyEnum t;
++    MyEnum f;
++
++    refTo(MyEnum) tr = refBy(t);
++    refTo(MyEnum) fr = refBy(f);
++    
++    tr = MyEnum.val1;
++    fr = MyEnum.val2;
++
++    t == MyEnum.val2;
++    f == MyEnum.val1;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/ReferenceDerivedEnumTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/ReferenceDerivedEnumTest.ivml
+new file mode 100644
+index 0000000..91bceef
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/ReferenceDerivedEnumTest.ivml
+@@ -0,0 +1,14 @@
++project ReferenceDerivedEnumTest {
++
++    enum MyEnum {val1, val2};
++    typedef RMyEnum refTo(MyEnum);
++    typedef E MyEnum with (E == MyEnum::val1);
++    typedef RE refTo(E);
++
++    MyEnum e = MyEnum::val2;
++    RE r1 = refBy(e);
++    refBy(r1) == MyEnum::val1;
++    RMyEnum r2 = refBy(e);
++    r2 == MyEnum::val1;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml
+new file mode 100644
+index 0000000..af34d6f
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml
+@@ -0,0 +1,15 @@
++project CompoundEval {
++
++	version v0;
++
++    compound Cmp {
++        Integer a;
++        eval {
++            not(isDefined(a)) implies a == -1;
++        }
++        not(isDefined(a)) implies a == 1;
++    }
++    
++    Cmp c = {};
++    c.a < 0;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_base.ivml
+new file mode 100644
+index 0000000..8ac4770
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_base.ivml
+@@ -0,0 +1,27 @@
++project PL_SimElevator_base {
++
++    version v0;
++    enum ControllerType {DefaultEController, DistanceEController};
++    enum ButtonType {DefaultButton, ArrowButton};
++    Integer elevators = 2;
++    Integer floors;
++    ControllerType controlling_controllertype = ControllerType.DefaultEController;
++    Boolean controlling_synchronized = true;
++    Boolean controlling_accelerated = true;
++    ButtonType outerview_buttontype = ButtonType.DefaultButton;
++    Boolean outerview_emergencybuttons = true;
++    Boolean outerview_cancellation = true;
++    Boolean innerview_emergencybutton = true;
++    Boolean innerview_authorization = true;
++    Boolean innerview_doorbutton = true;
++    Boolean display_direction = true;
++    Boolean display_currfloor_number = true;
++    Boolean display_currfloor_chain = true;
++    Boolean display_target = true;
++    Boolean display_openingside = true;
++    Boolean outerview_autoscroll = true;
++    controlling_synchronized == true implies elevators >= 2;
++    elevators > 0;
++    floors >= 1;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_0.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_0.ivml
+new file mode 100644
+index 0000000..da23450
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_0.ivml
+@@ -0,0 +1,42 @@
++project PL_SimElevator_frozen {
++
++    version v0;
++    import PL_SimElevator_base;
++    
++    elevators = 4;
++    floors = 10;
++    controlling_controllertype = ControllerType.DefaultEController;
++    controlling_synchronized = true;
++    controlling_accelerated = true;
++    outerview_buttontype = ButtonType.DefaultButton;
++    outerview_emergencybuttons = true;
++    outerview_cancellation = true;
++    innerview_emergencybutton = true;
++    innerview_authorization = true;
++    innerview_doorbutton = true;
++    display_direction = true;
++    display_currfloor_number = true;
++    display_currfloor_chain = true;
++    display_target = true;
++    display_openingside = true;
++    outerview_autoscroll = true;
++    freeze {
++        elevators;
++        floors;
++        controlling_controllertype;
++        controlling_synchronized;
++        controlling_accelerated;
++        outerview_buttontype;
++        outerview_emergencybuttons;
++        outerview_cancellation;
++        innerview_emergencybutton;
++        innerview_authorization;
++        innerview_doorbutton;
++        display_direction;
++        display_currfloor_number;
++        display_currfloor_chain;
++        display_target;
++        display_openingside;
++        outerview_autoscroll;
++    }
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_orig.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_orig.ivml
+new file mode 100644
+index 0000000..75ef9f3
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_orig.ivml
+@@ -0,0 +1,63 @@
++project PL_SimElevator_frozen_orig {
++
++    version v0;
++    enum ControllerType {DefaultEController, DistanceEController};
++    enum ButtonType {DefaultButton, ArrowButton};
++    Integer elevators = 2;
++    Integer floors;
++    ControllerType controlling_controllertype = ControllerType.DefaultEController;
++    Boolean controlling_synchronized = true;
++    Boolean controlling_accelerated = true;
++    ButtonType outerview_buttontype = ButtonType.DefaultButton;
++    Boolean outerview_emergencybuttons = true;
++    Boolean outerview_cancellation = true;
++    Boolean innerview_emergencybutton = true;
++    Boolean innerview_authorization = true;
++    Boolean innerview_doorbutton = true;
++    Boolean display_direction = true;
++    Boolean display_currfloor_number = true;
++    Boolean display_currfloor_chain = true;
++    Boolean display_target = true;
++    Boolean display_openingside = true;
++    Boolean outerview_autoscroll = true;
++    controlling_synchronized == true implies elevators >= 2;
++    elevators > 0;
++    floors >= 1;
++    
++    elevators = 4;
++    floors = 10;
++    controlling_controllertype = ControllerType.DefaultEController;
++    controlling_synchronized = true;
++    controlling_accelerated = true;
++    outerview_buttontype = ButtonType.DefaultButton;
++    outerview_emergencybuttons = true;
++    outerview_cancellation = true;
++    innerview_emergencybutton = true;
++    innerview_authorization = true;
++    innerview_doorbutton = true;
++    display_direction = true;
++    display_currfloor_number = true;
++    display_currfloor_chain = true;
++    display_target = true;
++    display_openingside = true;
++    outerview_autoscroll = true;
++    freeze {
++        elevators;
++        floors;
++        controlling_controllertype;
++        controlling_synchronized;
++        controlling_accelerated;
++        outerview_buttontype;
++        outerview_emergencybuttons;
++        outerview_cancellation;
++        innerview_emergencybutton;
++        innerview_authorization;
++        innerview_doorbutton;
++        display_direction;
++        display_currfloor_number;
++        display_currfloor_chain;
++        display_target;
++        display_openingside;
++        outerview_autoscroll;
++    }
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml
+new file mode 100644
+index 0000000..3f7feeb
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml
+@@ -0,0 +1,31 @@
++project IntegerAnnotationTest {
++
++    annotate Integer ann = 1 to IntegerAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann <> 1;
++    i.ann <> 1;    
++    r.ann <> 1;    
++    s.ann <> 1;    
++    e.ann <> 1;
++    c.ann <> 1;
++    o.ann <> 1;
++    d.ann <> 1;
++    n.ann <> 1;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml
+new file mode 100644
+index 0000000..c2d8ce3
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml
+@@ -0,0 +1,13 @@
++project IntegerAssignTest {
++
++    Integer i1;
++    Integer i2;
++    Integer i3;
++    
++    i1 = 6;
++    i2 = 4;
++    
++    i1 > i2;
++    i1 - 1 > i2 implies i3 == 2;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml
+new file mode 100644
+index 0000000..aba30fb
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml
+@@ -0,0 +1,9 @@
++project IntegerDefaultsTest {
++
++    Integer i1 = 1;
++    Integer i2 = 3;
++    Integer i3;
++ 
++    i1 < i2;    
++    i1 + 1 < i2 implies i3 == 2;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml
+new file mode 100644
+index 0000000..1d6bb77
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml
+@@ -0,0 +1,15 @@
++project IntegerAssignTest {
++
++    sequenceOf(Integer) t;
++    sequenceOf(Integer) f;
++    
++    t = {1, 2};
++    f = {-1, -2};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i > 0) implies check == false;
++    f->forAll(i|i < 0) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml
+new file mode 100644
+index 0000000..a093c48
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml
+@@ -0,0 +1,12 @@
++project IntegerInCollectionDefaultsTest {
++
++    sequenceOf(Integer) t = {1, 2};
++    sequenceOf(Integer) f = {-1, -2};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i > 0) implies check == false;
++    f->forAll(i|i < 0) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml
+new file mode 100644
+index 0000000..752f571
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml
+@@ -0,0 +1,17 @@
++project IntegerInCompoundAssignTest {
++
++    compound C {
++        Integer i1;
++        Integer i2;
++        Integer i3;
++    
++        i1 = 6;
++        i2 = 4;
++    
++        i1 > i2;
++        i1 - 1 > i2 implies i3 == 2;
++    }
++    
++    C cmp;   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml
+new file mode 100644
+index 0000000..fc8e09e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml
+@@ -0,0 +1,14 @@
++project IntegerInCompoundDefaultsTest {
++
++    compound C {
++        Integer i1 = 1;
++        Integer i2 = 3;
++        Integer i3;
++ 
++        i1 < i2;    
++        i1 + 1 < i2 implies i3 == 2;
++    }
++    
++    C cmp; 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml
+new file mode 100644
+index 0000000..ca464e5
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml
+@@ -0,0 +1,14 @@
++project IntegerRefAssignTest {
++
++    Integer t;
++    Integer f;
++
++    refTo(Integer) tr = refBy(t);
++    refTo(Integer) fr = refBy(f);
++    
++    tr = 1;
++    fr = 2;
++
++    t == 2;
++    f == 1;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/ReferenceDerivedIntegerTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/ReferenceDerivedIntegerTest.ivml
+new file mode 100644
+index 0000000..1019c56
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/ReferenceDerivedIntegerTest.ivml
+@@ -0,0 +1,13 @@
++project ReferenceDerivedIntegerTest {
++
++    typedef RInteger refTo(Integer);
++    typedef I Integer with (I > 0);
++    typedef RI refTo(I);
++
++    I i = 0;
++    RI r1 = refBy(i);
++    refBy(r1) > 0;
++    RInteger r2 = refBy(i);
++    refBy(r2) > 0;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml
+new file mode 100644
+index 0000000..fd4ad07
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml
+@@ -0,0 +1,6 @@
++project VariableFail {
++
++   Integer horsePower = 101;
++   horsePower = 102;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml
+new file mode 100644
+index 0000000..900d2b5
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml
+@@ -0,0 +1,16 @@
++project Basis {
++
++    interface bIface {
++        export iVal;
++        export sVal;
++    }
++    
++    Integer iVal;
++    String sVal;
++    Integer myVal;
++    
++    sVal == iVal.toString();
++    myVal = iVal;
++    myVal < 7;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml
+new file mode 100644
+index 0000000..f946687
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml
+@@ -0,0 +1,12 @@
++project Frozen {
++
++    import Basis::bIface;
++
++    iVal = 8;
++    sVal = "8";
++
++    freeze {
++        Frozen;
++        Basis;
++    };    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml
+new file mode 100644
+index 0000000..388b0c8
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml
+@@ -0,0 +1,8 @@
++project Unfrozen {
++
++    import Basis::bIface;
++
++    iVal = 8;
++    sVal = "8";
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml
+new file mode 100644
+index 0000000..1e56fca
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml
+@@ -0,0 +1,12 @@
++project typedefCompoundNestedInSequenceInvalid1 {
++
++  compound Dimension {
++    Integer width;
++    Integer height;
++  }
++  typedef MyDimension Dimension with (MyDimension.width >= 0 and MyDimension.height >= 0);
++  
++  sequenceOf(MyDimension) dim;
++
++  dim = {{width = -1, height = -2}, {width = 200, height = 300}};
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml
+new file mode 100644
+index 0000000..5d7a80d
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml
+@@ -0,0 +1,12 @@
++project typedefCompoundNestedInSequenceInvalid2 {
++
++  typedef NaturalInteger Integer with (NaturalInteger >= 0);
++  compound Dimension {
++    NaturalInteger width;
++    NaturalInteger height;
++  }
++  
++  sequenceOf(Dimension) dim;
++
++  dim = {{width = -1, height = -2}, {width = 200, height = 300}};
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml
+new file mode 100644
+index 0000000..8bbd1a0
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml
+@@ -0,0 +1,12 @@
++project typedefCompoundNestedInSequenceValid1 {
++
++  compound Dimension {
++    Integer width;
++    Integer height;
++  }
++  typedef MyDimension Dimension with (MyDimension.width >= 0 and MyDimension.height >= 0);
++  
++  sequenceOf(MyDimension) dim;
++
++  dim = {{width = 1600, height = 1200}, {width = 200, height = 300}};
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml
+new file mode 100644
+index 0000000..7eb1294
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml
+@@ -0,0 +1,12 @@
++project typedefCompoundNestedInSequenceValid2 {
++
++  typedef NaturalInteger Integer with (NaturalInteger >= 0);
++  compound Dimension {
++    NaturalInteger width;
++    NaturalInteger height;
++  }
++  
++  sequenceOf(Dimension) dim;
++
++  dim = {{width = 1600, height = 1200}, {width = 200, height = 300}};
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml
+new file mode 100644
+index 0000000..8b19557
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml
+@@ -0,0 +1,171 @@
++// specific variability model for tests.eu.qualimaster.storm
++
++project QM {
++
++    enum BindingTime {compile = 0, runtime = 1};
++    annotate BindingTime bindingTime = BindingTime.compile to QM;
++
++    compound PipelineElement {
++    }
++
++    compound Node refines PipelineElement {
++        String name;
++        setOf(Constraint) constraints;
++        assign (bindingTime = BindingTime.runtime) to {
++          Boolean isValid = true;
++          Real predictedItemsThreshold;
++        }
++    }
++    
++    compound Source refines Node {
++        setOf(refTo(Node)) next;
++    }
++    
++    compound FamilyElement refines Node {
++        setOf(refTo(Node)) output;
++        refTo(Family) family;
++
++        assign (bindingTime = BindingTime.runtime) to {
++          refTo(Algorithm) actual;
++          setOf(refTo(Algorithm)) available;
++          Real capacity;
++          Integer executors;
++        }
++    }
++    
++    compound Sink refines Node {
++    }
++    
++    compound ReplaySink refines Sink {
++    }
++    
++    compound Family {
++        String name;
++        setOf(refTo(Algorithm)) members;
++    }
++    
++    compound Algorithm {
++        String name;
++        setOf(Constraint) constraints;
++        assign (bindingTime = BindingTime.runtime) to {
++          Real latency;
++          Integer throughputItem;
++          Boolean isValid = true;
++        }
++    }
++    
++    compound HardwareAlgorithm refines Algorithm {
++    }
++    
++    compound SubPipelineAlgorithm refines Algorithm {
++    }
++
++    compound Pipeline {
++        String artifact;
++        String name;
++        setOf(refTo(Source)) sources;
++        setOf(Constraint) constraints;
++
++        assign (bindingTime = BindingTime.runtime) to {
++          Real latency;
++          Integer throughputItem;
++          Real capacity;
++          Integer executors;
++          Boolean isValid = true;
++          
++          capacity > 0.10;
++          capacity < 0.85;
++        }
++    }
++    
++    setOf(refTo(Pipeline)) pipelines;
++    setOf(refTo(Algorithm)) algorithms;
++    
++    compound HwNode {
++	String name;	 	
++    }
++	
++    compound MPCCNode refines HwNode{
++	String host; // possibly needed to direct network stream to
++	Integer monitoringPort;
++	Integer numCPUs;
++	Integer numDFEs;
++    } 
++	
++    sequenceOf(refTo(HwNode)) clusters;
++
++
++    // ---------------------- instances ---------------------
++    
++    Algorithm alg1 = {
++        name = "alg1",
++        constraints = {(throughputItem * throughputItem) <= 500}
++    };
++
++    Algorithm alg2 = {
++        name = "alg2",
++        constraints = {(throughputItem * throughputItem) > 500}
++    };
++    
++    // background info for HW integration test
++    HardwareAlgorithm hwAlg = {
++        name = "GenTopoHardwareCorrelationFinancial"
++    };
++    
++    SubPipelineAlgorithm subAlg = {
++        name = "CorrelationSW"
++    };
++    
++    Family fam1 = {
++        name = "fam1",
++        members = {refBy(alg1), refBy(alg2)}
++    };
++
++    Sink snk = {
++        name = "snk"
++    };
++    
++    FamilyElement famElt1 = {
++        name = "process",
++        family = refBy(fam1), 
++        output = {refBy(snk)},
++        predictedItemsThreshold = 500 // default value
++    };
++    
++    Source src = {
++        name = "source", 
++        next = {refBy(famElt1)}
++    };
++    
++    Pipeline pip = {
++        artifact = "eu.qualiMaster:TestPipeline:0.0.1",
++        name = "pipeline",
++        sources = {refBy(src)}
++    };
++    
++    pipelines = {refBy(pip)};
++    algorithms = {refBy(alg1), refBy(alg2), refBy(hwAlg), refBy(subAlg)};
++    
++    MPCCNode olynthos = {
++        name = "olynthos",
++        host = "147.27.39.12",
++        monitoringPort = 2402,
++	numCPUs = 12,
++	numDFEs = 4
++    };
++
++    clusters = {refBy(olynthos)};
++
++    freeze {
++        alg1;
++        alg2;
++        fam1;
++        snk;
++        famElt1;
++        src;
++        pip;
++        pipelines;
++        algorithms;
++        clusters;
++    } but (v | v.bindingTime == BindingTime.runtime);
++}
+\ No newline at end of file
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml
+new file mode 100644
+index 0000000..1e87ada
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml
+@@ -0,0 +1,31 @@
++project RealAnnotationTest {
++
++    annotate Real ann = 1.0 to RealAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann <> 1.0;
++    i.ann <> 1.0;    
++    r.ann <> 1.0;    
++    s.ann <> 1.0;    
++    e.ann <> 1.0;    
++    c.ann <> 1.0;    
++    o.ann <> 1.0;    
++    d.ann <> 1.0;
++    n.ann <> 1.0;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml
+new file mode 100644
+index 0000000..e74639b
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml
+@@ -0,0 +1,13 @@
++project RealAssignTest {
++
++    Real d1;
++    Real d2;
++    Real d3;
++    
++    d1 = 5.0;
++    d2 = 4.0;
++    
++    d1 > d2;
++    d1 + 0.4 > d2 implies d3 == 2.0;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml
+new file mode 100644
+index 0000000..b71067d
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml
+@@ -0,0 +1,9 @@
++project RealDefaultsTest {
++
++    Real d1 = 1.0;
++    Real d2 = 3.0;
++    Real d3;
++ 
++    d1 < d2;    
++    d1 + 0.4 < d2 implies d3 == 2.0;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml
+new file mode 100644
+index 0000000..e421f43
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml
+@@ -0,0 +1,15 @@
++project RealInCollectionAssignTest {
++
++    sequenceOf(Real) t;
++    sequenceOf(Real) f;
++    
++    t = {1.1, 2.2};
++    f = {-1.3, -2.4};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i > 0) implies check == false;
++    f->forAll(i|i < 0) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml
+new file mode 100644
+index 0000000..ae1cce7
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml
+@@ -0,0 +1,12 @@
++project RealDefaultsTest {
++
++    sequenceOf(Real) t = {1.0, 2.0};
++    sequenceOf(Real) f = {-1.1, -2.2};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|i > 0) implies check == false;
++    f->forAll(i|i < 0) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml
+new file mode 100644
+index 0000000..eb32ed2
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml
+@@ -0,0 +1,17 @@
++project RealInCompoundAssignTest {
++
++    compound C {
++        Real d1;
++        Real d2;
++        Real d3;
++    
++        d1 = 5.0;
++        d2 = 4.0;
++    
++        d1 > d2;
++        d1 + 0.4 > d2 implies d3 == 2.0;
++    }
++    
++    C cmp;   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml
+new file mode 100644
+index 0000000..95cb678
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml
+@@ -0,0 +1,14 @@
++project RealInCompoundDefaultsTest {
++
++    compound C {
++        Real d1 = 5.0;
++        Real d2 = 4.0;
++        Real d3;
++    
++        d1 > d2;
++        d1 + 0.4 > d2 implies d3 == 2.0;
++    }
++    
++    C cmp; 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml
+new file mode 100644
+index 0000000..9a3314e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml
+@@ -0,0 +1,14 @@
++project RealRefAssignTest {
++
++    Real t;
++    Real f;
++
++    refTo(Real) tr = refBy(t);
++    refTo(Real) fr = refBy(f);
++    
++    tr = 1.0;
++    fr = 5.0;
++
++    t < 2.0;
++    f > 3.0;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/ReferenceDerivedRealTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/ReferenceDerivedRealTest.ivml
+new file mode 100644
+index 0000000..674072e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/ReferenceDerivedRealTest.ivml
+@@ -0,0 +1,13 @@
++project ReferenceDerivedRealTest {
++
++    typedef RReal refTo(Real);
++    typedef R Real with (R > 0);
++    typedef RR refTo(R);
++
++    R r = 0.0;
++    RR r1 = refBy(r);
++    refBy(r1) > 0.0;
++    RReal r2 = refBy(r);
++    refBy(r2) > 0.0;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignBase.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignBase.ivml
+new file mode 100644
+index 0000000..1c04ced
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignBase.ivml
+@@ -0,0 +1,13 @@
++project RealRefAssignBase {
++
++    version v0;
++
++    Real t;
++    Real f;
++
++    refTo(Real) tr = refBy(t);
++    refTo(Real) fr = refBy(f);
++    
++    t < 2.0;
++    f > 3.0;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignTest.ivml
+new file mode 100644
+index 0000000..556066c
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignTest.ivml
+@@ -0,0 +1,8 @@
++project RealRefAssignTest {
++
++    version v0;
++    import RealRefAssignBase;
++
++    t < 2.0;
++    f > 3.0;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml
+new file mode 100644
+index 0000000..bfe15cd
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml
+@@ -0,0 +1,4 @@
++project ConstraintDefault1Fail {
++    Constraint C = false;
++    C = true;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml
+new file mode 100644
+index 0000000..05322bc
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml
+@@ -0,0 +1,4 @@
++project ConstraintDefault2Fail {
++    Constraint C = true;
++    C = false;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1.ivml
+new file mode 100644
+index 0000000..85797e0
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1.ivml
+@@ -0,0 +1,5 @@
++project ConstraintDefault1 {
++    version v0;
++    import ConstraintDefault1Base;
++    C = true;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1Base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1Base.ivml
+new file mode 100644
+index 0000000..fe355c8
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1Base.ivml
+@@ -0,0 +1,4 @@
++project ConstraintDefault1Base {
++    version v0;
++    Constraint C = false;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2.ivml
+new file mode 100644
+index 0000000..74eda62
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2.ivml
+@@ -0,0 +1,5 @@
++project ConstraintDefault2 {
++    version v0;
++    import ConstraintDefault2Base;
++    C = false;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2Base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2Base.ivml
+new file mode 100644
+index 0000000..e11b5ac
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2Base.ivml
+@@ -0,0 +1,4 @@
++project ConstraintDefault2Base {
++    version v0;
++    Constraint C = true;
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/ReferenceDerivedStringTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/ReferenceDerivedStringTest.ivml
+new file mode 100644
+index 0000000..feee165
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/ReferenceDerivedStringTest.ivml
+@@ -0,0 +1,13 @@
++project ReferenceDerivedStringTest {
++
++    typedef RString refTo(String);
++    typedef S String with (S == "abba");
++    typedef RS refTo(S);
++
++    S s = "baab";
++    RS r1 = refBy(s);
++    refBy(r1) == "abba";
++    RString r2 = refBy(s);
++    refBy(r2) == "abba";
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAnnotationTest.ivml
+new file mode 100644
+index 0000000..9186f03
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAnnotationTest.ivml
+@@ -0,0 +1,31 @@
++project StringAnnotationTest {
++
++    annotate String ann = "abba" to StringAnnotationTest;
++    
++    enum MyEnum {val1, val2};
++    compound MyCmp {
++       Integer i = 1;
++    };
++    typedef Cmp MyCmp with (Cmp.i > 1);
++
++    Boolean t = true;
++    Integer i = 1;
++    Real r = 0.5;
++    String s = "aaa";
++    MyEnum e = MyEnum::val1;
++    MyCmp c = MyCmp{};
++    setOf(Integer) o = {1, 2};
++    Cmp d = {};
++    Constraint n = true;
++
++    t.ann <> "abba";
++    i.ann <> "abba";    
++    r.ann <> "abba";    
++    s.ann <> "abba";    
++    e.ann <> "abba";    
++    c.ann <> "abba";    
++    o.ann <> "abba";    
++    d.ann <> "abba";
++    n.ann <> "abba";
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml
+new file mode 100644
+index 0000000..09ffc5c
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml
+@@ -0,0 +1,13 @@
++project StringAssignTest {
++
++    String s1;
++    String s2;
++    String s3;
++    
++    s1 = "abba";
++    s2 = "ba";
++    
++    s1.indexOf(s2) > 0;
++    s1 != s2 implies s3 == "assigned";
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml
+new file mode 100644
+index 0000000..1e0d814
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml
+@@ -0,0 +1,9 @@
++project StringDefaultsTest {
++
++    String s1 = "abba";
++    String s2 = "ba";
++    String s3;
++    
++    s1.indexOf(s2) > 0;
++    s1 != s2 implies s3 == "assigned";
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml
+new file mode 100644
+index 0000000..e23201a
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml
+@@ -0,0 +1,15 @@
++project StringInCollectionAssignTest {
++
++    sequenceOf(String) t;
++    sequenceOf(String) f;
++    
++    t = {"aaa", "bbb"};
++    f = {"aa", "bb"};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|size(i) > 2) implies check == false;
++    f->forAll(i|size(i) <= 2) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml
+new file mode 100644
+index 0000000..ca7c25f
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml
+@@ -0,0 +1,12 @@
++project StringInCollectionTest {
++
++    sequenceOf(String) t = {"aaa", "bbb"};
++    sequenceOf(String) f = {"aa", "bb"};
++    
++    Boolean check;
++    check = true;
++    
++    t->forAll(i|size(i) > 2) implies check == false;
++    f->forAll(i|size(i) <= 2) implies check == false;
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml
+new file mode 100644
+index 0000000..e6ed7f9
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml
+@@ -0,0 +1,17 @@
++project StringInCompoundAssignTest {
++
++    compound C {
++        String s1;
++        String s2;
++        String s3;
++    
++        s1 = "abba";
++        s2 = "ba";
++    
++        s1.indexOf(s2) > 0;
++        s1 != s2 implies s3 == "assigned";
++    }
++    
++    C cmp;   
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml
+new file mode 100644
+index 0000000..a79a84e
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml
+@@ -0,0 +1,14 @@
++project StringInCompoundDefaultsTest {
++
++    compound C {
++        String s1 = "abba";
++        String s2 = "ba";
++        String s3;
++    
++        s1.indexOf(s2) > 0;
++        s1 != s2 implies s3 == "assigned";
++    }
++    
++    C cmp; 
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml
+new file mode 100644
+index 0000000..17316ab
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml
+@@ -0,0 +1,14 @@
++project StringRefAssignTest {
++
++    String t;
++    String f;
++
++    refTo(String) tr = refBy(t);
++    refTo(String) fr = refBy(f);
++    
++    tr = "abba";
++    fr = "babba";
++
++    t == "babba";
++    f == "abba";
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/temp/measurements-sse.tsv b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/temp/measurements-sse.tsv
+new file mode 100644
+index 0000000..62ca0b0
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/temp/measurements-sse.tsv
+@@ -0,0 +1,3531 @@
++model name	URI	tag	runCount	caller	MODEL_ANNOTATIONS	MODEL_COMPLEXITY	MODEL_CONSTRAINT_AVG_COMPLEXITY	MODEL_CONSTRAINT_COMPLEXITY	MODEL_CONSTRAINT_INSTANCES	MODEL_CONSTRAINT_VARIABLES	MODEL_CONSTRAINT_VARIABLES_NO_CONTAINER	MODEL_NORMAL_VARIABLES	MODEL_NORMAL_VARIABLES_NO_CONTAINER	MODEL_TOPLEVEL_VARIABLES	MODEL_VARIABLES	MODEL_VARIABLES_WITHOUT_CONTAINER	MODEL_VARIABLE_AVG_COMPLEXITY	MODEL_VARIABLE_COMPLEXITY	REASONER_CONSTRAINT_COUNT	REASONER_EVALUATION_TIME	REASONER_INSTANCE_CREATION_TIME	REASONER_PROBLEMS	REASONER_PROBLEM_ASSIGNMENTS	REASONER_PROBLEM_CONSTRAINTS	REASONER_REASONING_TIME	REASONER_REEVALUATION_COUNT	REASONER_TRANSLATION_TIME	REASONER_VARIABLES_IN_CONSTRAINTS	RESPONSETIME_AUTO	
++CompoundTestProject		CompoundInit	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	16,00	5,00	0,00	4,00	16,00	
++CompoundTestProject		REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	15,00	0,00	1,00	0,00	1,00	15,00	5,00	0,00	4,00	15,00	
++CompoundTestProject		REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	16,00	0,00	1,00	0,00	1,00	16,00	5,00	0,00	4,00	16,00	
++SimpleTestProject		REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	16,00	0,00	1,00	0,00	1,00	16,00	5,00	0,00	3,00	16,00	
++SimpleTestProject		REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++SimpleTestProject		REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++CompoundTestProject		CompoundInit	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++CompoundTestProject		CompoundInit	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	4,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	1,00	1,00	3,00	1,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	1,00	1,00	3,00	1,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	16,00	0,00	0,00	0,00	0,00	16,00	1,00	0,00	0,00	16,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	15,00	1,00	0,00	0,00	15,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	7,75	0,58	1,75	0,00	0,00	0,00	5,00	3,00	3,00	5,00	3,00	1,20	6,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	16,00	0,00	0,00	0,00	0,00	16,00	3,00	0,00	0,00	16,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	7,75	0,58	1,75	0,00	0,00	0,00	5,00	3,00	3,00	5,00	3,00	1,20	6,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	5,75	0,58	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	4,00	6,25	0,42	1,25	0,00	1,00	0,00	3,00	3,00	3,00	4,00	3,00	1,25	5,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	16,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	3,00	5,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,33	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	2,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	1	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	2	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	3	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	4	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	5	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	6	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	7	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	8	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	9	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	10	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	16,00	0,00	0,00	0,00	0,00	16,00	15,00	0,00	7,00	16,00	
++CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	7,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	16,00	36,00	0,00	17,00	16,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	0,00	0,00	8,00	0,00	8,00	0,00	36,00	0,00	17,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	16,00	0,00	0,00	0,00	0,00	16,00	6,00	0,00	6,00	16,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	6,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	15,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	0,00	0,00	2,00	2,00	0,00	0,00	10,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	0,00	0,00	1,00	0,00	1,00	16,00	64,00	0,00	4,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	0,00	0,00	1,00	0,00	1,00	0,00	64,00	0,00	4,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	0,00	0,00	1,00	0,00	1,00	0,00	64,00	0,00	4,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	0,00	0,00	1,00	0,00	1,00	0,00	64,00	0,00	4,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	0,00	0,00	1,00	0,00	1,00	0,00	64,00	0,00	4,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	0,00	0,00	1,00	0,00	1,00	0,00	64,00	0,00	4,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	0,00	0,00	1,00	0,00	1,00	0,00	64,00	0,00	4,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	16,00	0,00	1,00	0,00	1,00	16,00	64,00	0,00	4,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	0,00	0,00	1,00	0,00	1,00	0,00	64,00	0,00	4,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	15,00	0,00	1,00	0,00	1,00	15,00	64,00	0,00	4,00	15,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	1,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	6,00	0,00	
++setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	0,00	0,00	1,00	0,00	1,00	15,00	9,00	0,00	6,00	15,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	16,00	0,00	0,00	0,00	0,00	16,00	4,00	0,00	4,00	16,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	15,00	0,00	0,00	0,00	0,00	15,00	4,00	0,00	4,00	15,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	16,00	3,00	0,00	2,00	16,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	16,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	2,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	0,00	4,00	0,00	0,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	1,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	94,00	0,00	0,00	0,00	0,00	110,00	6,00	0,00	2,00	110,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	15,00	10,00	0,00	4,00	15,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	15,00	0,00	0,00	0,00	0,00	15,00	15,00	0,00	4,00	15,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	16,00	0,00	0,00	0,00	0,00	16,00	3,00	0,00	2,00	16,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	6,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	15,00	10,00	0,00	4,00	15,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	16,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	16,00	0,00	0,00	0,00	0,00	16,00	8,00	0,00	4,00	16,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	16,00	0,00	0,00	0,00	0,00	16,00	10,00	0,00	4,00	16,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	6,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	15,00	0,00	0,00	0,00	0,00	15,00	10,00	0,00	4,00	15,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	15,00	3,00	0,00	4,00	15,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	15,00	0,00	0,00	0,00	0,00	15,00	13,00	0,00	4,00	15,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	16,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	0,00	0,00	0,00	0,00	0,00	0,00	31,00	0,00	6,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	0,00	3,00	0,00	0,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	15,00	9,00	15,00	4,00	15,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	16,00	0,00	0,00	0,00	0,00	16,00	13,00	0,00	4,00	16,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	16,00	0,00	1,00	0,00	1,00	16,00	3,00	0,00	2,00	16,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	16,00	0,00	0,00	0,00	0,00	16,00	10,00	0,00	5,00	16,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	16,00	0,00	0,00	0,00	0,00	16,00	12,00	0,00	6,00	16,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	6,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	16,00	0,00	0,00	0,00	0,00	16,00	4,00	0,00	0,00	16,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	0,00	12,00	0,00	3,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	15,00	0,00	1,00	0,00	1,00	15,00	2,00	0,00	3,00	15,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	1	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	2	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	3	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	4	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	5	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	6	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	7	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	8	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	9	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++ImportCycleTest_CyclingDeclarations_A		REASONING	10	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	1	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	2	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	3	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	4	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	5	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	6	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	7	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	8	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	9	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++NestedCycleTest_MainProject		REASONING	10	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	3,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	15,00	1,00	0,00	0,00	15,00	
++booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	0,00	14,00	0,00	8,00	0,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	0,00	14,00	0,00	8,00	0,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	15,00	14,00	15,00	8,00	15,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	0,00	14,00	0,00	8,00	0,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	0,00	14,00	0,00	8,00	0,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	16,00	0,00	0,00	0,00	0,00	16,00	14,00	0,00	8,00	16,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	0,00	14,00	0,00	8,00	0,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	0,00	14,00	0,00	8,00	0,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	0,00	14,00	0,00	8,00	0,00	
++QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	0,00	0,00	0,00	0,00	0,00	0,00	14,00	0,00	8,00	0,00	
++refinedConstraints		REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++refinedConstraints		REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	1	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	2	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	3	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	4	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	5	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	6	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	7	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	8	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	9	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	10	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	15,00	0,00	0,00	0,00	0,00	15,00	5,00	0,00	2,00	15,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	0,00	0,00	0,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	46,00	0,00	0,00	0,00	0,00	46,00	1701,00	0,00	140,00	46,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	0,00	0,00	0,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	0,00	0,00	0,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	46,00	0,00	0,00	0,00	0,00	46,00	1701,00	0,00	140,00	46,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	0,00	0,00	0,00	32,00	1701,00	0,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	0,00	0,00	0,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	0,00	0,00	0,00	32,00	1701,00	0,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	46,00	0,00	0,00	0,00	0,00	46,00	1701,00	0,00	140,00	46,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	0,00	0,00	0,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	0,00	0,00	0,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	47,00	0,00	0,00	0,00	0,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	47,00	0,00	0,00	0,00	0,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	0,00	0,00	0,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	0,00	0,00	0,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	47,00	0,00	0,00	0,00	0,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	0,00	0,00	0,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	32,00	0,00	0,00	0,00	0,00	32,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	0,00	0,00	0,00	46,00	1701,00	0,00	140,00	46,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	0,00	0,00	0,00	32,00	1701,00	0,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	32,00	0,00	1,00	0,00	1,00	32,00	1701,00	0,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	32,00	0,00	1,00	0,00	1,00	47,00	1701,00	15,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	32,00	0,00	1,00	0,00	1,00	32,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	31,00	1701,00	15,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	32,00	1701,00	16,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	47,00	0,00	1,00	0,00	1,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	47,00	0,00	1,00	0,00	1,00	47,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	16,00	1701,00	0,00	140,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	0,00	0,00	1,00	0,00	1,00	16,00	1701,00	0,00	140,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	16,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	0,00	0,00	1,00	0,00	1,00	31,00	1701,00	16,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	32,00	0,00	1,00	0,00	1,00	32,00	1701,00	0,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	46,00	1701,00	0,00	140,00	46,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	32,00	0,00	1,00	0,00	1,00	32,00	1701,00	0,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	15,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	0,00	0,00	1,00	0,00	1,00	31,00	1701,00	31,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	32,00	0,00	1,00	0,00	1,00	32,00	1701,00	0,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	47,00	0,00	1,00	0,00	1,00	63,00	1701,00	0,00	140,00	63,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	31,00	1701,00	16,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	16,00	1701,00	0,00	140,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	16,00	1701,00	0,00	140,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	0,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	31,00	1701,00	16,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	32,00	0,00	1,00	0,00	1,00	32,00	1701,00	0,00	140,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	31,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	16,00	1701,00	0,00	140,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	15,00	1701,00	0,00	140,00	15,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	15,00	1701,00	0,00	140,00	15,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	16,00	1701,00	0,00	140,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	31,00	1701,00	0,00	140,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	15,00	0,00	1,00	0,00	1,00	15,00	1701,00	0,00	140,00	15,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	16,00	0,00	1,00	0,00	1,00	16,00	1701,00	0,00	140,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	0,00	0,00	1,00	0,00	1,00	15,00	1701,00	0,00	140,00	15,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	32,00	0,00	1,00	0,00	1,00	32,00	1753,00	0,00	139,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	31,00	0,00	1,00	0,00	1,00	31,00	1753,00	0,00	139,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	31,00	0,00	1,00	0,00	1,00	47,00	1753,00	0,00	139,00	47,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	31,00	0,00	1,00	0,00	1,00	31,00	1753,00	0,00	139,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	15,00	0,00	1,00	0,00	1,00	15,00	1753,00	0,00	139,00	15,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	32,00	0,00	1,00	0,00	1,00	32,00	1753,00	0,00	139,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	0,00	0,00	1,00	0,00	1,00	15,00	1753,00	0,00	139,00	15,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	31,00	0,00	1,00	0,00	1,00	31,00	1753,00	0,00	139,00	31,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	0,00	0,00	1,00	0,00	1,00	16,00	1753,00	0,00	139,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	15,00	0,00	1,00	0,00	1,00	15,00	1753,00	0,00	139,00	15,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	7,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	16,00	0,00	1,00	0,00	1,00	16,00	3,00	0,00	6,00	16,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	6,00	0,00	
++MismatchTest		REASONING	1	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	0,00	0,00	2,00	0,00	2,00	46,00	1384,00	0,00	142,00	62,00	
++MismatchTest		REASONING	2	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	32,00	0,00	2,00	0,00	2,00	32,00	1367,00	0,00	142,00	32,00	
++MismatchTest		REASONING	3	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	31,00	0,00	2,00	0,00	2,00	46,00	1375,00	15,00	142,00	46,00	
++MismatchTest		REASONING	4	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	0,00	0,00	2,00	0,00	2,00	32,00	1380,00	0,00	142,00	32,00	
++MismatchTest		REASONING	5	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	31,00	0,00	2,00	0,00	2,00	31,00	1373,00	0,00	142,00	31,00	
++MismatchTest		REASONING	6	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	47,00	0,00	2,00	0,00	2,00	47,00	1384,00	0,00	142,00	47,00	
++MismatchTest		REASONING	7	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	16,00	0,00	2,00	0,00	2,00	31,00	1373,00	0,00	142,00	31,00	
++MismatchTest		REASONING	8	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	0,00	0,00	2,00	0,00	2,00	32,00	1378,00	16,00	142,00	32,00	
++MismatchTest		REASONING	9	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	16,00	0,00	2,00	0,00	2,00	16,00	1375,00	0,00	142,00	16,00	
++MismatchTest		REASONING	10	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	32,00	0,00	2,00	0,00	2,00	32,00	1379,00	0,00	142,00	32,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	1	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	81,00	114,50	0,36	7,50	0,00	10,00	8,00	71,00	60,00	13,00	81,00	68,00	1,32	107,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	2	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	3	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	16,00	2,00	0,00	2,00	16,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	4	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	5	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	6	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	7	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	8	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	9	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	10	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	1	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	81,00	114,50	0,36	7,50	0,00	10,00	8,00	71,00	60,00	13,00	81,00	68,00	1,32	107,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	5,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	2	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	3	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	4	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	5	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	6	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	7	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	8	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	9	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	10	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	68,00	101,50	0,36	7,50	0,00	8,00	8,00	60,00	60,00	13,00	68,00	68,00	1,38	94,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
++ProjectP2		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++ProjectP2		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	13,00	0,00	5,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	0,00	0,00	3,00	0,00	3,00	0,00	11,00	0,00	7,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	0,00	0,00	4,00	0,00	4,00	0,00	16,00	0,00	6,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	5,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	0,00	0,00	1,00	0,00	1,00	0,00	9,00	0,00	0,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	16,00	3,00	0,00	2,00	16,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	15,00	2,00	15,00	4,00	15,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	15,00	0,00	1,00	1,00	0,00	15,00	9,00	0,00	3,00	15,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	1,00	1,00	0,00	0,00	9,00	0,00	3,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	16,00	0,00	1,00	1,00	0,00	16,00	5,00	0,00	2,00	16,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	2,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	15,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault1		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++ConstraintDefault2		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	2,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	15,00	0,00	0,00	0,00	0,00	15,00	3,00	0,00	2,00	15,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	0,00	12,00	0,00	4,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	15,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++test		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
++test		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++test		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
++BooleanIplicationTest		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanIplicationTest		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	16,00	0,00	0,00	0,00	0,00	16,00	8,00	0,00	2,00	16,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	16,00	5,00	0,00	4,00	16,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	16,00	0,00	1,00	0,00	1,00	16,00	10,00	0,00	3,00	16,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	15,00	5,00	0,00	4,00	15,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	16,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
++RealRefAssignTest		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	16,00	0,00	0,00	0,00	0,00	16,00	5,00	0,00	3,00	16,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	15,00	0,00	0,00	0,00	0,00	15,00	6,00	0,00	4,00	15,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	15,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	15,00	5,00	15,00	4,00	15,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	16,00	0,00	0,00	0,00	0,00	16,00	4,00	0,00	4,00	16,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	0,00	30,00	0,00	19,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
++changingValues		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++changingValues		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	0,00	0,00	0,00	0,00	0,00	0,00	20,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	5,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	16,00	21,00	0,00	7,00	16,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	0,00	0,00	4,00	0,00	4,00	0,00	21,00	0,00	7,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	5,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	0,00	34,00	0,00	20,00	0,00	
++Cfg		REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++Cfg		REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	18,00	0,00	5,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	1	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	2	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	3	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	4	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	5	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	6	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	7	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	8	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	9	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	10	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	1	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	2	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	3	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	4	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	5	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	6	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	7	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	8	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	9	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	10	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	1	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	2	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	3	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	4	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	5	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	6	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	7	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	8	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	9	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	10	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	1	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	2	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	3	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	4	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	5	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	6	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	7	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	8	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	9	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	10	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	1	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	2	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	3	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	4	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	5	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	6	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	7	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	8	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	9	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	10	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	1	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	2	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	3	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	4	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	15,00	3,00	0,00	4,00	15,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	5	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	6	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	7	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	8	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	9	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	10	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	1	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	2	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	3	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	4	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	5	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	6	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	7	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	8	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	9	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	10	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	1	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	2	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	3	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	4	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	5	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	6	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	7	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	8	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	9	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	15,00	
++SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	10	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	1	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	16,00	3,00	0,00	4,00	16,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	2	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	3	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	4	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	5	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	6	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	7	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	8	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	9	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	10	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	16,00	400,00	0,00	100,00	16,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	15,00	400,00	0,00	100,00	15,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	16,00	400,00	0,00	100,00	16,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	15,00	400,00	0,00	100,00	15,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	16,00	400,00	0,00	100,00	16,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	15,00	0,00	150,00	0,00	150,00	15,00	400,00	0,00	100,00	15,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	16,00	0,00	150,00	0,00	150,00	16,00	400,00	0,00	100,00	16,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	16,00	400,00	16,00	100,00	16,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	16,00	400,00	16,00	100,00	16,00	
++gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	0,00	0,00	150,00	0,00	150,00	0,00	400,00	0,00	100,00	0,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	0,00	0,00	438,00	0,00	438,00	16,00	1200,00	0,00	300,00	16,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	0,00	0,00	438,00	0,00	438,00	31,00	1200,00	15,00	300,00	31,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	0,00	0,00	438,00	0,00	438,00	16,00	1200,00	0,00	300,00	16,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	15,00	0,00	438,00	0,00	438,00	15,00	1200,00	0,00	300,00	15,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	0,00	0,00	438,00	0,00	438,00	31,00	1200,00	0,00	300,00	31,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	0,00	0,00	438,00	0,00	438,00	16,00	1200,00	0,00	300,00	16,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	16,00	0,00	438,00	0,00	438,00	16,00	1200,00	0,00	300,00	16,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	0,00	0,00	438,00	0,00	438,00	31,00	1200,00	15,00	300,00	31,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	0,00	0,00	438,00	0,00	438,00	15,00	1200,00	0,00	300,00	15,00	
++gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	0,00	0,00	438,00	0,00	438,00	16,00	1200,00	0,00	300,00	16,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	16,00	0,00	726,00	0,00	726,00	16,00	2000,00	0,00	500,00	16,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	15,00	0,00	726,00	0,00	726,00	31,00	2000,00	0,00	500,00	31,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	15,00	0,00	726,00	0,00	726,00	31,00	2000,00	0,00	500,00	31,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	0,00	0,00	726,00	0,00	726,00	47,00	2000,00	16,00	500,00	47,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	0,00	0,00	726,00	0,00	726,00	15,00	2000,00	0,00	500,00	15,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	16,00	0,00	726,00	0,00	726,00	32,00	2000,00	0,00	500,00	32,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	15,00	0,00	726,00	0,00	726,00	31,00	2000,00	0,00	500,00	31,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	15,00	0,00	726,00	0,00	726,00	15,00	2000,00	0,00	500,00	15,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	0,00	0,00	726,00	0,00	726,00	16,00	2000,00	0,00	500,00	32,00	
++gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	15,00	0,00	726,00	0,00	726,00	31,00	2000,00	0,00	500,00	31,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	16,00	0,00	1518,00	0,00	1518,00	62,00	4000,00	15,00	999,00	62,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	31,00	0,00	1518,00	0,00	1518,00	63,00	4000,00	16,00	999,00	63,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	16,00	0,00	1518,00	0,00	1518,00	46,00	4000,00	15,00	999,00	46,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	16,00	0,00	1518,00	0,00	1518,00	47,00	4000,00	16,00	999,00	47,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	15,00	0,00	1518,00	0,00	1518,00	47,00	4000,00	16,00	999,00	47,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	15,00	0,00	1518,00	0,00	1518,00	47,00	4000,00	16,00	999,00	47,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	31,00	0,00	1518,00	0,00	1518,00	47,00	4000,00	0,00	999,00	47,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	15,00	0,00	1518,00	0,00	1518,00	46,00	4000,00	0,00	999,00	46,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	16,00	0,00	1518,00	0,00	1518,00	47,00	4000,00	0,00	999,00	47,00	
++gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	16,00	0,00	1518,00	0,00	1518,00	47,00	4000,00	0,00	999,00	47,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	46,00	0,00	2236,00	0,00	2236,00	297,00	6000,00	16,00	1500,00	297,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	31,00	0,00	2236,00	0,00	2236,00	63,00	6000,00	0,00	1500,00	63,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	31,00	0,00	2236,00	0,00	2236,00	63,00	6000,00	0,00	1500,00	78,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	31,00	0,00	2236,00	0,00	2236,00	62,00	6000,00	0,00	1500,00	62,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	31,00	0,00	2236,00	0,00	2236,00	94,00	6000,00	16,00	1500,00	94,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	31,00	0,00	2236,00	0,00	2236,00	93,00	6000,00	15,00	1500,00	93,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	47,00	0,00	2236,00	0,00	2236,00	78,00	6000,00	0,00	1500,00	78,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	47,00	0,00	2236,00	0,00	2236,00	93,00	6000,00	15,00	1500,00	93,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	32,00	0,00	2236,00	0,00	2236,00	63,00	6000,00	0,00	1500,00	63,00	
++gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	32,00	0,00	2236,00	0,00	2236,00	78,00	6000,00	15,00	1500,00	78,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	16,00	200,00	0,00	98,00	16,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	0,00	200,00	0,00	98,00	0,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	16,00	0,00	124,00	0,00	124,00	16,00	600,00	0,00	289,00	16,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	0,00	600,00	0,00	289,00	0,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	0,00	600,00	0,00	289,00	0,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	16,00	600,00	0,00	289,00	16,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	0,00	600,00	0,00	289,00	0,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	0,00	600,00	0,00	289,00	0,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	0,00	600,00	0,00	289,00	0,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	15,00	600,00	15,00	289,00	15,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	0,00	600,00	0,00	289,00	0,00	
++gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	0,00	0,00	124,00	0,00	124,00	0,00	600,00	0,00	289,00	0,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	0,00	0,00	266,00	0,00	266,00	0,00	1000,00	0,00	481,00	0,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	16,00	0,00	266,00	0,00	266,00	16,00	1000,00	0,00	481,00	16,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	0,00	0,00	266,00	0,00	266,00	0,00	1000,00	0,00	481,00	0,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	15,00	0,00	266,00	0,00	266,00	15,00	1000,00	0,00	481,00	15,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	0,00	0,00	266,00	0,00	266,00	0,00	1000,00	0,00	481,00	0,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	0,00	0,00	266,00	0,00	266,00	16,00	1000,00	0,00	481,00	16,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	0,00	0,00	266,00	0,00	266,00	0,00	1000,00	0,00	481,00	0,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	0,00	0,00	266,00	0,00	266,00	16,00	1000,00	0,00	481,00	16,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	0,00	0,00	266,00	0,00	266,00	0,00	1000,00	0,00	481,00	0,00	
++gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	0,00	0,00	266,00	0,00	266,00	15,00	1000,00	0,00	481,00	15,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	0,00	0,00	504,00	0,00	504,00	15,00	2000,00	0,00	951,00	15,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	16,00	0,00	504,00	0,00	504,00	16,00	2000,00	0,00	951,00	16,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	16,00	0,00	504,00	0,00	504,00	16,00	2000,00	0,00	951,00	16,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	15,00	0,00	504,00	0,00	504,00	15,00	2000,00	0,00	951,00	15,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	16,00	0,00	504,00	0,00	504,00	16,00	2000,00	0,00	951,00	16,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	15,00	0,00	504,00	0,00	504,00	15,00	2000,00	0,00	951,00	15,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	16,00	0,00	504,00	0,00	504,00	16,00	2000,00	0,00	951,00	16,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	16,00	0,00	504,00	0,00	504,00	16,00	2000,00	0,00	951,00	16,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	15,00	0,00	504,00	0,00	504,00	15,00	2000,00	0,00	951,00	15,00	
++gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	16,00	0,00	504,00	0,00	504,00	16,00	2000,00	0,00	951,00	16,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	0,00	0,00	739,00	0,00	739,00	31,00	3000,00	16,00	1419,00	31,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	16,00	0,00	739,00	0,00	739,00	16,00	3000,00	0,00	1419,00	16,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	0,00	0,00	739,00	0,00	739,00	16,00	3000,00	0,00	1419,00	16,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	16,00	0,00	739,00	0,00	739,00	31,00	3000,00	0,00	1419,00	31,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	16,00	0,00	739,00	0,00	739,00	16,00	3000,00	0,00	1419,00	16,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	0,00	0,00	739,00	0,00	739,00	31,00	3000,00	15,00	1419,00	31,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	16,00	0,00	739,00	0,00	739,00	16,00	3000,00	0,00	1419,00	16,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	0,00	0,00	739,00	0,00	739,00	16,00	3000,00	0,00	1419,00	16,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	0,00	0,00	739,00	0,00	739,00	31,00	3000,00	15,00	1419,00	31,00	
++gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	16,00	0,00	739,00	0,00	739,00	16,00	3000,00	0,00	1419,00	16,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	1	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	2	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	3	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	4	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	5	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	6	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	7	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	8	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	9	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
++Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	10	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	2,00	0,00	
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/frontend/ReasoningProcess.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/frontend/ReasoningProcess.java
+index 3148d17..b59f28c 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/frontend/ReasoningProcess.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/frontend/ReasoningProcess.java
+@@ -16,6 +16,8 @@
+  */
+ public class ReasoningProcess implements Runnable {
+ 
++    private static final boolean LOG_RESULT = false;
++
+     private ReasoningOperation desiredOperation;
+     private ReasoningResult result;
+     private Project project;
+@@ -82,18 +84,21 @@
+                 switch(desiredOperation) {
+                 case CONSITENCY_CHECK:
+                     result = reasoner.isConsistent(project, reasonerConfig, observer);
++                    logResult();
+                     break;
+                 case VALIDATION:
+                     if (null == config) {
+                         setErrorResult("No configuration specified for reasoning");
+                     }
+                     result = reasoner.check(project, config, reasonerConfig, observer);
++                    logResult();
+                     break;
+                 case PROPAGATION:
+                     if (null == config) {
+                         setErrorResult("No configuration specified for reasoning");
+                     }
+                     result = reasoner.propagate(project, config, reasonerConfig, observer);
++                    logResult();
+                     break;
+                 default:
+                     result = new ReasoningResult();
+@@ -118,6 +123,16 @@
+     }
+ 
+     /**
++      * Performs the result logging as it was previously integrated into the reasoner but removed for performance 
++      * reasons.
++      */
++    private void logResult() {
++        if (LOG_RESULT) {
++            result.logInformation(project, reasonerConfig);
++        }
++    }
++    
++    /**
+      * Returns the result of the reasoning, i.e. the result of the {@link #run()} method.
+      * This method should be used, if no {@link ReasoningResult} was used.
+      * @return The result of the reasoning.
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/GeneralMeasures.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/GeneralMeasures.java
+new file mode 100644
+index 0000000..c5d1bcb
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/GeneralMeasures.java
+@@ -0,0 +1,76 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.reasoner;
++
++/**
++ * General reasoner measures.
++ * 
++ * @author Holger Eichelberger
++ */
++public enum GeneralMeasures implements IMeasurementKey {
++    
++    /**
++     * Time (in ms) spent for constraint translation.
++     */
++    EVALUATION_TIME("Evaluation time"),
++
++    /**
++     * Time (in ms) spent for translating the model - collected only if the approach performs translation.
++     */
++    TRANSLATION_TIME("Translation time"),
++
++    /**
++     * Total time (in ms) spent for reasoning.
++     */
++    REASONING_TIME("Total time"),
++    
++    /**
++     * Total number of re-evaluations.
++     */
++    REEVALUATION_COUNT("Number of reevaluations"),
++    
++    /**
++     * Total number of constraints.
++     */
++    CONSTRAINT_COUNT("Number of constraints"),
++    
++    /**
++     * Total number of evaluation problems.
++     */
++    PROBLEMS("Number of problems");
++    
++    private String explanation;
++    
++    /**
++     * Creates a measures constant.
++     * 
++     * @param explanation the headline/explanation
++     */
++    private GeneralMeasures(String explanation) {
++        this.explanation = explanation;
++    }
++
++    @Override
++    public String getExplanation() {
++        return explanation;
++    }
++
++    @Override
++    public int outputPos() {
++        return ordinal();
++    }
++
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/IMeasurementKey.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/IMeasurementKey.java
+new file mode 100644
+index 0000000..6b768c3
+--- /dev/null
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/IMeasurementKey.java
+@@ -0,0 +1,46 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.reasoning.core.reasoner;
++
++/**
++ * Base type for measurement keys.
++ * 
++ * @author Holger Eichelberger
++ */
++public interface IMeasurementKey {
++    
++    /**
++     * An explanation/headline for this key.
++     * 
++     * @return the explanation
++     */
++    public String getExplanation();
++    
++    /**
++     * Returns the name of the key.
++     * 
++     * @return the name
++     */
++    public String name();
++    
++    /**
++     * Intended output position for printing.
++     * 
++     * @return an integer number; the higher the earlier the output
++     */
++    public int outputPos();
++    
++}
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasonerConfiguration.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasonerConfiguration.java
+index ee747f9..364273c 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasonerConfiguration.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasonerConfiguration.java
+@@ -10,20 +10,31 @@
+  */
+ public class ReasonerConfiguration {
+ 
++    public static final IAdditionalInformationLogger ADDITIONAL_INFO_LOG_SYSOUT = new IAdditionalInformationLogger() {
++
++        @Override
++        public void info(String text) {
++            System.out.println(text);
++        }
++        
++    };
++
++    public static final IAdditionalInformationLogger ADDITIONAL_INFO_LOG_NONE = new IAdditionalInformationLogger() {
++
++        @Override
++        public void info(String text) {
++        }
++
++    };
++
++    
+     private AttributeValues attributeValues;
+     private int timeout;
+     private ReasonerDescriptor defaultReasoner;
+     private boolean customMessages;
+     private boolean runtime;
+     private boolean freshConfig;
+-    private IAdditionalInformationLogger logger = new IAdditionalInformationLogger() {
+-
+-        @Override
+-        public void info(String text) {
+-            System.out.println(text); // the legacy behavior
+-        }
+-        
+-    };
++    private IAdditionalInformationLogger logger = ADDITIONAL_INFO_LOG_SYSOUT; // the legacy behavior
+ 
+     /**
+      * Describes an information logger.
+diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningResult.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningResult.java
+index a976ffc..8415625 100644
+--- a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningResult.java
++++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningResult.java
+@@ -1,10 +1,15 @@
+ package net.ssehub.easy.reasoning.core.reasoner;
+ 
+ import java.util.ArrayList;
++import java.util.HashMap;
+ import java.util.List;
++import java.util.Map;
++import java.util.Set;
+ 
+ import net.ssehub.easy.basics.messages.Status;
++import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration.IAdditionalInformationLogger;
+ import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.model.Project;
+ 
+ /**
+  * Result of (one) reasoning step.
+@@ -16,6 +21,7 @@
+     private List<IDecisionVariable> affected = null;
+     private List<Message> messages = new ArrayList<Message>();
+     private boolean hasConflict;
++    private Map<IMeasurementKey, Number> measures;
+ 
+     /**
+      * General constructor for new ReasoningResults.
+@@ -150,4 +156,60 @@
+         return affected.get(index);
+     }
+     
++    /**
++     * Sets a reasoner-specific measure.
++     * 
++     * @param key the key (<b>null</b> is ignored)
++     * @param value the measure (may be <b>null</b>)
++     */
++    public void setMeasure(IMeasurementKey key, Number value) {
++        if (null != key) {
++            if (null == measures) {
++                measures = new HashMap<IMeasurementKey, Number>();
++            }
++            measures.put(key, value);
++        }
++    }
++
++    /**
++     * Returns the measure for a specific <code>key</code>.
++     * 
++     * @param key the key (<b>null</b> is ignored)
++     * @return the measure (may be <b>null</b>)
++     */
++    public Number getMeasure(IMeasurementKey key) {
++        return (null == key || null == measures) ? null : measures.get(key);
++    }
++    
++    /**
++     * Returns all measurement keys.
++     * 
++     * @return the keys, may be <b>null</b> if there are none
++     */
++    public Set<IMeasurementKey> measurementKeys() {
++        return null == measures ? null : measures.keySet();
++    }
++    
++    /**
++     * Logs reasoning summary based on <code>prj</code>, the measures and the messages. Reasoners shall not produce
++     * output except for debugging stuff. If explicit output is required, call this method after reasoning.
++     * 
++     * @param prj the project representing the model
++     * @param rConfig the configuration containing the information logger
++     */
++    public void logInformation(Project prj, ReasonerConfiguration rConfig) {
++        logInformation(prj, rConfig.getLogger());
++    }
++
++    /**
++     * Logs reasoning summary based on <code>prj</code>, the measures and the messages. Reasoners shall not produce
++     * output except for debugging stuff. If explicit output is required, call this method after reasoning.
++     * 
++     * @param prj the project representing the model
++     * @param infoLogger the information logger
++     */
++    public void logInformation(Project prj, IAdditionalInformationLogger infoLogger) {
++        // do nothing, just for interface compatibility
++    }
++
+ }
+diff --git a/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementCollector.java b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementCollector.java
+new file mode 100644
+index 0000000..fea3ab3
+--- /dev/null
++++ b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementCollector.java
+@@ -0,0 +1,867 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.varModel.varModel.testSupport;
++
++import java.util.ArrayList;
++import java.util.Collection;
++import java.util.HashMap;
++import java.util.HashSet;
++import java.util.List;
++import java.util.Map;
++import java.util.Set;
++
++import net.ssehub.easy.basics.logger.EASyLoggerFactory;
++import net.ssehub.easy.varModel.confModel.AbstractConfigurationStatisticsVisitor;
++import net.ssehub.easy.varModel.confModel.AbstractConfigurationStatisticsVisitor.ConfigStatistics;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.varModel.testSupport.MeasurementStatisticsVisitor.MeasurementStatistics;
++
++/**
++ * Extensible measurements collection mechanism to be applied while running a test suite. Aims at collecting 
++ * performance data, potentially also detecting performance regression in the future. 
++ * <p/>
++ * Measurements are identified by {@link IMeasurementIdentifier} defined in testing scope only. For practical reasons, 
++ * it is sometimes easier to use different identifiers, e.g., defined in production code. Therefore, the measurement
++ * collector allows registering a global mapping between identifiers using 
++ * {@link #registerMapping(Object, IMeasurementIdentifier)} and the respective method accept an Object that is mapped
++ * internally (nothing happens if no mapping is possible, directly passing in a {@link IMeasurementIdentifier} 
++ * is permitted).
++ * <p/>
++ * Some measurements can be done automatically, e.g., aggregation, averaging or measuring the entire (wall) response
++ * time {@link DefaultMeasurementIdentifier#RESPONSETIME}. For automatic measurements, collectors can be registered
++ * globally {@link #registerAutoCollector(IAutoCollector), which are called when starting or stopping a measurment.
++ * <p/>
++ * There are two ways of collecting measurement data:
++ * <ol>
++ *     <li>All values at once, call {@link #recordMeasurements(Configuration, String, Map) or on the actual instance
++ *         {@link #record(Configuration, String, Map).</li>
++ *     <li>Within the brackets of {@link #startMeasurement(Configuration, String, boolean)} 
++ *         and {@link #endMeasurement(MeasurementRecord)} returning a unique identifier to be used with further calls. 
++ *         Individual measurements can be added by 
++ *         {@link #setMeasurement(String, IMeasurementIdentifier, double)} and read out by 
++ *         {@link #getMeasurement(String, IMeasurementIdentifier)}. For the actual instance, the methods are 
++ *         {@link #start(Configuration, String)}, {@link #end()}, {@link #set(IMeasurementIdentifier, double)}, 
++ *         and {@link #get(String, IMeasurementIdentifier)}.</li>
++ * </ol>
++ * The default implementation in this class does nothing rather than providing the infrastructure. Concrete subclasses
++ * may e.g. log into a file or a database.
++ *  
++ * @author Holger Eichelberger
++ */
++public class MeasurementCollector {
++
++    private static MeasurementCollector instance = new MeasurementCollector("DEFAULT");
++    private static Map<Object, IMeasurementIdentifier> idMapping = new HashMap<Object, IMeasurementIdentifier>();
++    private static List<IAutoCollector> autoCollectors = new ArrayList<IAutoCollector>();
++    private static Set<String> stackStop = new HashSet<String>();
++    private Map<String, MeasurementRecord> records = new HashMap<String, MeasurementRecord>();
++    private Set<IMeasurementIdentifier> disabledCollectors = null;
++    private Object id;
++    
++    /**
++     * Implements automatic collection for some measurement identifiers.
++     * @author Holger Eichelberger
++     *
++     */
++    public interface IAutoCollector {
++        
++        /**
++         * Returns the identifier we are recording for.
++         * 
++         * @return the identifier
++         */
++        public IMeasurementIdentifier getIdentifier();
++        
++        /**
++         * The actual code for start collecting.
++         * 
++         * @param record the record being recorded
++         */
++        public void start(MeasurementRecord record);
++
++        /**
++         * The actual code for end collecting.
++         * 
++         * @param record the record being recorded
++         */
++        public void end(MeasurementRecord record);
++
++    }
++    
++    /**
++     * Defines the type for (extensible) measurement identifier.
++     * 
++     * @author Holger Eichelberger
++     */
++    public interface IMeasurementIdentifier {
++        
++        /**
++         * Returns whether measurement data is obtained automatically, either as part of the 
++         * start-/end bracket or also as part of a single record call.
++         * 
++         * @return <code>true</code> for automatic, <code>false</code> else
++         */
++        public boolean isAutomatic();
++        
++        /**
++         * Returns the name of the identifier.
++         * 
++         * @return the name
++         */
++        public String name();
++    }
++
++    /**
++     * Defines default measurement identifier.
++     * 
++     * @author Holger Eichelberger
++     */
++    public enum DefaultMeasurementIdentifier implements IMeasurementIdentifier {
++        
++        RESPONSETIME_AUTO(true),
++        
++        /**
++         * Number of top-level variables in the model.
++         * 
++         * @see ConfigStatistics#noOfToplevelVariables()
++         */
++        MODEL_TOPLEVEL_VARIABLES(false), 
++
++        /**
++         * Number of variables in the model.
++         * 
++         * @see ConfigStatistics#noOfVariables()
++         */
++        MODEL_VARIABLES(false),
++
++        /**
++         * Number of variables without container in the model.
++         * 
++         * @see ConfigStatistics#noOfVariablesWithoutContainer()
++         */
++        MODEL_VARIABLES_WITHOUT_CONTAINER(false), 
++
++        /**
++         * Number of normal variables in the model.
++         * 
++         * @see ConfigStatistics#noOfNormalVariables()
++         */
++        MODEL_NORMAL_VARIABLES(false),
++
++        /**
++         * Number of normal variables without container in the model.
++         * 
++         * @see ConfigStatistics#noOfNormalVariablesNoContainer()
++         */
++        MODEL_NORMAL_VARIABLES_NO_CONTAINER(false),
++
++        /**
++         * Number of constraint variables in the model.
++         * 
++         * @see ConfigStatistics#noOfConstraintVariables()
++         */
++        MODEL_CONSTRAINT_VARIABLES(false),
++
++        /**
++         * Number of constraint variables without container in the model.
++         * 
++         * @see ConfigStatistics#noOfConstraintVariablesNoContainer()
++         */
++        MODEL_CONSTRAINT_VARIABLES_NO_CONTAINER(false),
++
++        /**
++         * Number of constraints in the model.
++         * 
++         * @see ConfigStatistics#noOfConstraintInstances()
++         */
++        MODEL_CONSTRAINT_INSTANCES(false),
++
++        /**
++         * Number of annotations in the model.
++         * 
++         * @see ConfigStatistics#noOfAnnotations()
++         */
++        MODEL_ANNOTATIONS(false),
++
++        /**
++         * Average constraint complexity as calculated by {@link MeasurementStatisticsVistor}.
++         */
++        MODEL_CONSTRAINT_AVG_COMPLEXITY(false),
++
++        /**
++         * Total constraint complexity as calculated by {@link MeasurementStatisticsVistor}.
++         */
++        MODEL_CONSTRAINT_COMPLEXITY(false),
++
++        /**
++         * Average variable complexity as calculated by {@link MeasurementStatisticsVistor}.
++         */
++        MODEL_VARIABLE_AVG_COMPLEXITY(false),
++        
++        /**
++         * Total variable complexity as calculated by {@link MeasurementStatisticsVistor}.
++         */
++        MODEL_VARIABLE_COMPLEXITY(false),
++
++        /**
++         * Total model complexity as calculated by {@link MeasurementStatisticsVistor}.
++         */
++        MODEL_COMPLEXITY(false);
++        
++        private boolean isAutomatic;
++
++        /**
++         * Creates an identifier.
++         * 
++         * @param isAutomatic whether the measurement is performed automatically
++         */
++        private DefaultMeasurementIdentifier(boolean isAutomatic) {
++            this.isAutomatic = isAutomatic;
++        }
++
++        @Override
++        public boolean isAutomatic() {
++            return isAutomatic;
++        }
++        
++    }
++    
++    /**
++     * Implements a measurement record.
++     * 
++     * @author Holger Eichelberger
++     */
++    protected static class MeasurementRecord {
++        
++        private Map<IMeasurementIdentifier, Double> measurements = new HashMap<IMeasurementIdentifier, Double>();
++        private Configuration cfg;
++        private String tag;
++        private int runCount;
++        private String caller;
++        private long start = -1;
++        private long end = -1;
++        
++        /**
++         * Creates a measurement record.
++         * 
++         * @param cfg the configuration we are recording for
++         * @param tag the measurement tag
++         * @param runCount the repetition number of the experiment
++         */
++        protected MeasurementRecord(Configuration cfg, String tag, int runCount) {
++            this.cfg = cfg;
++            this.tag = tag;
++            this.runCount = runCount;
++            this.caller = null;
++            
++            Throwable t = new Throwable();
++            StackTraceElement[] stack = t.getStackTrace();
++            String lastSignature = null;
++            for (int s = 0; null == caller && s < stack.length; s++) {
++                StackTraceElement elt = stack[s];
++                String clsName = elt.getClassName();
++                boolean stop = stackStop.contains(clsName);
++                if (!stop) {
++                    int innerPos = clsName.lastIndexOf('$');
++                    if (innerPos > 0) {
++                        clsName = clsName.substring(0, innerPos);
++                    }
++                    stop = stackStop.contains(clsName);
++                }
++                if (stop) {
++                    caller = lastSignature;
++                }
++                lastSignature = clsName + "." + elt.getMethodName();
++            }
++        }
++
++        /**
++         * Defines the start timestamp for automatically recording runtime. Starting shall explicitly happen after
++         * creating the record for closer time recording.
++         * 
++         * @param start the start timestamp, invalid if negative
++         */
++        protected void setStart(long start) {
++            this.start = start;
++        }
++        
++        /**
++         * Returns the start timestamp for automatically recording runtime.
++         * 
++         * @return the start timestamp, invalid if negative
++         */
++        protected long getStart() {
++            return start;
++        }
++
++        /**
++         * Defines the end timestamp for automatically recording runtime.
++         * 
++         * @param end the end timestamp, invalid if negative
++         */
++        protected void setEnd(long end) {
++            this.end = end;
++        }
++        
++        /**
++         * Returns the end timestamp for automatically recording runtime.
++         * 
++         * @return the end timestamp, invalid if negative
++         */
++        protected long getEnd() {
++            return end;
++        }
++
++        /**
++         * Returns the recording tag.
++         * 
++         * @return the recording tag
++         */
++        protected String getTag() {
++            return tag;
++        }
++
++        /**
++         * Returns the experiment run count.
++         * 
++         * @return the run count
++         */
++        protected int getRunCount() {
++            return runCount;
++        }
++        
++        /**
++         * Returns the calling method if available.
++         * 
++         * @return the calling method or <b>null</b> for none
++         */
++        protected String getCaller() {
++            return caller;
++        }
++        
++        /**
++         * Returns the related configuration.
++         * 
++         * @return the configuration
++         */
++        protected Configuration getConfiguration() {
++            return cfg;
++        }
++
++        /**
++         * Sets a measurement value.
++         * 
++         * @param id the measurement id (ignored if <b>null</b>)
++         * @param value the measurement value
++         */
++        protected void setMeasurement(IMeasurementIdentifier id, double value) {
++            if (null != id) {
++                measurements.put(id, value);
++            }
++        }
++        
++        /**
++         * Returns the used measurement identifiers.
++         * 
++         * @return the used identifiers
++         */
++        protected Collection<IMeasurementIdentifier> getMeasurementIdentifiers() {
++            return measurements.keySet();
++        }
++        
++        /**
++         * Returns the measurement for a given identifier.
++         * 
++         * @param id the identifier
++         * @return the measurement <code>null</code> if not recorded or <code>id</code> was <b>null</b>
++         */
++        protected Double getMeasurement(IMeasurementIdentifier id) {
++            return null == id ? null : measurements.get(id);
++        }
++        
++        @Override
++        public String toString() {
++            return cfg.getProject().getName() + " " + tag + " " + runCount + " " + caller + " " + measurements;
++        }
++        
++    }
++    
++    /**
++     * Registers the default collectors.
++     */
++    static {
++        registerAutoCollector(new IAutoCollector() {
++            
++            @Override
++            public void start(MeasurementRecord record) {
++            }
++            
++            @Override
++            public void end(MeasurementRecord record) {
++                long start = record.getStart();
++                long end = record.getEnd();
++                if (start >= 0 && end >= 0) {
++                    record.setMeasurement(getIdentifier(), end - start);
++                }
++            }
++
++            @Override
++            public IMeasurementIdentifier getIdentifier() {
++                return DefaultMeasurementIdentifier.RESPONSETIME_AUTO;
++            }
++        });
++        // stop stack at typical jUnit callers
++        stackStop.add("jdk.internal.reflect.NativeMethodAccessorImpl");
++        stackStop.add("java.lang.reflect.Method");
++        stackStop.add("org.junit.runners.model.FrameworkMethod");
++        stackStop.add("sun.reflect.NativeMethodAccessorImpl"); // JDK8
++        stackStop.add("sun.reflect.DelegatingMethodAccessorImpl"); // JDK8
++    }
++    
++    /**
++     * Creates a measurement collector.
++     * 
++     * @param id the id of the collector for checking whether an appropriate one is installed
++     */
++    public MeasurementCollector(Object id) {
++        this.id = id;
++    }
++    
++    /**
++     * Returns the id of this collector.
++     * 
++     * @return the id
++     */
++    public Object getId() {
++        return id;
++    }
++     
++    /**
++     * Changes the actual instance. If the actual instance is changed, this method closes the old instance.
++     * 
++     * @param collector the new instance (ignored if <b>null</b>)
++     * @see #close()
++     */
++    public static final void setInstance(MeasurementCollector collector) {
++        if (null != collector) {
++            instance.close();
++            instance = collector;
++        }
++    }
++
++    /**
++     * Returns the actual instance.
++     * 
++     * @return the actual instance
++     */
++    public static final MeasurementCollector getInstance() {
++        return instance;
++    }
++
++    /**
++     * Starts a measurement on the actual collector and keeps it open until {@link #endMeasurement(MeasurementRecord)}.
++     * {@link #setMeasurement(String, IMeasurementIdentifier, double)} and 
++     * {@link #getMeasurement(String, IMeasurementIdentifier)} can be called.
++     * 
++     * @param cfg the configuration to measure for
++     * @param tag a description what is being measured
++     * @param runCount the repetition number of the experiment
++     * @return a unique measurement id for subsequent functions
++     */
++    public static String start(Configuration cfg, String tag, int runCount) {
++        return instance.startMeasurement(cfg, tag, runCount);
++    }
++    
++    /**
++     * Starts a measurement and keeps it open until {@link #endMeasurement(MeasurementRecord)}.
++     * {@link #setMeasurement(String, IMeasurementIdentifier, double)} and 
++     * {@link #getMeasurement(String, IMeasurementIdentifier)} can be called.
++     * 
++     * @param cfg the configuration to measure for
++     * @param tag a description what is being measured
++     * @param runCount the repetition number of the experiment
++     * @return a unique measurement id for subsequent functions
++     */
++    public String startMeasurement(Configuration cfg, String tag, int runCount) {
++        String baseId = "" + System.currentTimeMillis();
++        String id = baseId;
++        int count = 0;
++        while (records.containsKey(id)) {
++            id = baseId + "-" + (count++);
++        }
++        MeasurementRecord record = new MeasurementRecord(cfg, tag, runCount);
++        records.put(id, record);
++        recordStatistics(cfg, record);
++        record.setStart(System.currentTimeMillis());
++        processAutoCollectors(record, true);
++        for (int i = 0; i < autoCollectors.size(); i++) {
++            autoCollectors.get(i).start(record);
++        }
++        return id;
++    }
++    
++    /**
++     * Processes the registerd auto collectors.
++     * 
++     * @param record the record to process for
++     * @param start <code>true</code> for starting the measurement, <code>false</code> for ending
++     */
++    private void processAutoCollectors(MeasurementRecord record, boolean start) {
++        for (int a = 0; a < autoCollectors.size(); a++) {
++            IAutoCollector collector = autoCollectors.get(a);
++            if (null == disabledCollectors || !disabledCollectors.contains(collector.getIdentifier())) {
++                if (start) {
++                    collector.start(record);
++                } else {
++                    collector.end(record);
++                }
++            }
++        }
++    }
++    
++    /**
++     * Records statistics for <code>cfg</code>.
++     * 
++     * @param cfg the configuration
++     * @param record the measurement record
++     */
++    private void recordStatistics(Configuration cfg, MeasurementRecord record) {
++        AbstractConfigurationStatisticsVisitor sVis = createStatisticsVisitor();
++        cfg.accept(sVis);
++        ConfigStatistics statistics = sVis.getStatistics();
++        storeStatistics(statistics, record);
++    }
++
++    /**
++     * Changes a measurement on the actual instance. Does not permit 
++     * {@link IMeasurementIdentifier#isAutomatic() automatic} measurements to be updated.
++     * 
++     * @param id the record identifier
++     * @param identifier the measurement identifier
++     * @param value the new value
++     */
++    public static void set(String id, Object identifier, double value) {
++        instance.setMeasurement(id, identifier, value);
++    }
++    
++    /**
++     * Changes a measurement. Does not permit {@link IMeasurementIdentifier#isAutomatic() automatic}
++     * measurements to be updated.
++     * 
++     * @param id the record identifier
++     * @param identifier the measurement identifier
++     * @param value the new value
++     */
++    public void setMeasurement(String id, Object identifier, double value) {
++        IMeasurementIdentifier imIdentifier = obtainIdentifier(identifier);
++        if (null != imIdentifier && !imIdentifier.isAutomatic()) {
++            MeasurementRecord record = records.get(id);
++            if (null != record) {
++                record.setMeasurement(imIdentifier, value);
++            }
++        }
++    }
++
++    /**
++     * Returns a recorded measurement from the actual instance.
++     * 
++     * @param id the record identifier
++     * @param identifier the measurement identifier
++     * @return the current value or <b>null</b> if nothing was recorded so far
++     */
++    public static Double get(String id, Object identifier) {
++        return instance.getMeasurement(id, identifier);
++    }
++    
++    /**
++     * Returns a recorded measurement.
++     * 
++     * @param id the record identifier
++     * @param identifier the measurement identifier
++     * @return the current value or <b>null</b> if nothing was recorded so far
++     */
++    public Double getMeasurement(String id, Object identifier) {
++        Double result = null;
++        IMeasurementIdentifier imIdentifier = obtainIdentifier(identifier);
++        if (null != imIdentifier) {
++            MeasurementRecord record = records.get(id);
++            if (null != record) {
++                result = record.getMeasurement(imIdentifier);
++            }
++        }
++        return result;
++    }
++
++    /**
++     * Ends a measurement on the actual instance. <code>id</code> becomes invalid and operations based on 
++     * <code>id</code> will not return results.
++     * 
++     * @param id the measurement identifier
++     */
++    public static void end(String id) {
++        instance.endMeasurement(id);
++    }
++    
++    /**
++     * Completely ends a measurement. <code>id</code> becomes invalid and operations based on <code>id</code>
++     * will not return results.
++     * 
++     * @param id the measurement identifier
++     * @see #endAuto(String)
++     */
++    public void endMeasurement(String id) {
++        endAutoMeasurements(id); // if not already done
++        MeasurementRecord record = records.remove(id);
++        if (null != record) {
++            endMeasurement(record);
++        }
++    }
++
++    /**
++     * Ends automatic measurements.
++     * 
++     * @param id the measurement identifier
++     */
++    public static void endAuto(String id) {
++        instance.endAutoMeasurements(id);
++    }
++
++    /**
++     * Ends automatic measurements.
++     * 
++     * @param id the measurement identifier
++     */
++    public void endAutoMeasurements(String id) {
++        long now = System.currentTimeMillis();
++        MeasurementRecord record = records.get(id);
++        if (null != record) {
++            record.setEnd(now);
++            processAutoCollectors(record, false);
++        }
++    }
++
++    /**
++     * Records a complete set of measurements at once on the actual collector. Id-based measurement operations are not 
++     * supported here. Automatic recording of runtime is not happening.
++     * 
++     * @param cfg the configuration to measure for
++     * @param tag a description what is being measured
++     * @param runCount the repetition number of the experiment
++     * @param measurements the measurements to set, automatic measurements will be ignored, registered mappings will 
++     * be applied
++     */
++    public static void record(Configuration cfg, String tag, int runCount, Map<?, Double> measurements) {
++        instance.recordMeasurements(cfg, tag, runCount, measurements);
++    }
++    
++    /**
++     * Records a complete set of measurements at once. Id-based measurement operations are not supported here. 
++     * Automatic measurements are not modified.
++     * 
++     * @param cfg the configuration to measure for
++     * @param tag a description what is being measured
++     * @param runCount the repetition number of the experiment
++     * @param measurements the measurements to set, automatic measurements will be ignored, registered mappings will 
++     * be applied
++     */
++    public void recordMeasurements(Configuration cfg, String tag, int runCount, Map<?, Double> measurements) {
++        MeasurementRecord record = new MeasurementRecord(cfg, tag, runCount);
++        recordStatistics(cfg, record);
++        for (Map.Entry<?, Double> ent : measurements.entrySet()) {
++            IMeasurementIdentifier identifier = obtainIdentifier(ent.getKey());
++            if (null != identifier && !identifier.isAutomatic()) {
++                record.setMeasurement(identifier, ent.getValue());
++            }
++        }
++        endMeasurement(record);
++    }
++    
++    /**
++     * Closes this collector. Closes also all still open measurement records.
++     */
++    public void close() {
++        for (MeasurementRecord record : records.values()) {
++            endMeasurement(record);
++        }
++        records.clear();
++    }
++    
++    /**
++     * Creates a (configured) statistics visitor ready to use.
++     * 
++     * @return the statistics visitor instance
++     */
++    protected AbstractConfigurationStatisticsVisitor createStatisticsVisitor() {
++        return new MeasurementStatisticsVisitor();
++    }
++    
++    /**
++     * Stores the given statistics result in <code>record</code.
++     * >
++     * @param statistics the statistics object
++     * @param record the record to modify as a side effect
++     */
++    protected void storeStatistics(ConfigStatistics statistics, MeasurementRecord record) {
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_TOPLEVEL_VARIABLES, 
++            statistics.noOfToplevelVariables());
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_VARIABLES, 
++            statistics.noOfVariables());
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_VARIABLES_WITHOUT_CONTAINER, 
++            statistics.noOfVariablesWithoutContainer());
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_NORMAL_VARIABLES, 
++            statistics.noOfNormalVariables());
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_NORMAL_VARIABLES_NO_CONTAINER, 
++            statistics.noOfNormalVariablesNoContainer());
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_VARIABLES, 
++            statistics.noOfConstraintVariables());
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_VARIABLES_NO_CONTAINER, 
++            statistics.noOfConstraintVariablesNoContainer());
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_INSTANCES, 
++            statistics.noOfConstraintInstances());
++        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_ANNOTATIONS, 
++            statistics.noOfAnnotations());
++        // parameterization would be nice, requires parameterization of visitor
++        if (statistics instanceof MeasurementStatistics) {
++            MeasurementStatistics mStatistics = (MeasurementStatistics) statistics;
++            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_AVG_COMPLEXITY, 
++                mStatistics.getAverageConstraintComplexity());
++            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_COMPLEXITY, 
++                mStatistics.getConstraintComplexity());
++            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_VARIABLE_AVG_COMPLEXITY, 
++                mStatistics.getAverageVariableComplexity());
++            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_VARIABLE_COMPLEXITY, 
++                mStatistics.getVariableComplexity());
++            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_COMPLEXITY, 
++                mStatistics.getModelComplexity());
++        }
++    }
++
++    /**
++     * Is called when a measurement record shall be ended.
++     * 
++     * @param record the record
++     */
++    protected void endMeasurement(MeasurementRecord record) {
++    }
++
++    /**
++     * Register arbitrary global key-identifier mappings. Values given for <code>key</code> will be recorded for 
++     * <code>identifier</code>.
++     * 
++     * @param key the key
++     * @param identifier the identifier
++     */
++    public static void registerMapping(Object key, IMeasurementIdentifier identifier) {
++        if (null != key && null != identifier) {
++            idMapping.put(key, identifier);
++        }
++    }
++    
++    /**
++     * Registers a global collector for an automatic measurement.
++     * 
++     * @param collector the collector
++     * @return <code>true</code> for success, <code>false</code> else
++     */
++    public static boolean registerAutoCollector(IAutoCollector collector) {
++        boolean done = false;
++        if (null != collector && collector.getIdentifier().isAutomatic()) {
++            autoCollectors.add(collector);
++            done = true;
++        }
++        return done;
++    }
++    
++    /**
++     * Turns an object into an identifier if possible / mapping is registered.
++     * 
++     * @param key the key/object to return the identifier for
++     * @return the identifier or <b>null</b> of no translation is possible
++     */
++    public static IMeasurementIdentifier obtainIdentifier(Object key) {
++        IMeasurementIdentifier identifier = null;
++        if (key instanceof IMeasurementIdentifier) {
++            identifier = (IMeasurementIdentifier) key;
++        } else if (null != key) {
++            identifier = idMapping.get(key);
++        }
++        return identifier;
++    }
++
++    /**
++     * Disables an automatic collector for the given <code>key</code> on the active measurement collector.
++     * 
++     * @param key the key to disable the collector for
++     * @return <code>true</code> for success, <code>false</code> else
++     */
++    public static boolean disableAutoCollector(Object key) {
++        return instance.disableCollector(key);
++    }
++
++    /**
++     * Disables an automatic collector for the given <code>key</code>.
++     * 
++     * @param key the key to disable the collector for
++     * @return <code>true</code> for success, <code>false</code> else
++     */
++    public boolean disableCollector(Object key) {
++        boolean done = false;
++        IMeasurementIdentifier identifier = obtainIdentifier(key);
++        if (null != identifier && identifier.isAutomatic()) {
++            if (null == disabledCollectors) {
++                disabledCollectors = new HashSet<IMeasurementIdentifier>();
++            }
++            disabledCollectors.add(identifier);
++            done = true;
++        }
++        return done;
++    }
++    
++    /**
++     * Allows defining class names where searching for the caller shall stop.
++     * 
++     * @param clsName the class name (ignored if <b>null</b>)
++     */
++    public static void addStackStop(String clsName) {
++        if (null != clsName) {
++            stackStop.add(clsName);
++        }
++    }
++
++    /**
++     * Returns a system property as integer.
++     * 
++     * @param key the property key
++     * @param deflt the default value if the property is not set/cannot be parsed
++     * @param min the minimum value to be returned
++     * @return the value of the property
++     */
++    public static int getIntProperty(String key, int deflt, int min) {
++        int result = deflt;
++        String prop = System.getProperty(key, null);
++        if (null != prop) {
++            try {
++                result = Integer.parseInt(prop);
++            } catch (NumberFormatException e) {
++                EASyLoggerFactory.INSTANCE.getLogger(MeasurementCollector.class, null).warn("Parsing env value for '" 
++                    + key + "': Number Format Exception " + e.getMessage());
++            }
++        }
++        return Math.max(min, result);
++    }
++    
++    
++}
+diff --git a/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementStatisticsVisitor.java b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementStatisticsVisitor.java
+new file mode 100644
+index 0000000..4c6063b
+--- /dev/null
++++ b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementStatisticsVisitor.java
+@@ -0,0 +1,297 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.varModel.varModel.testSupport;
++
++import net.ssehub.easy.varModel.confModel.DefaultConfigurationStatisticsVisitor;
++import net.ssehub.easy.varModel.confModel.IDecisionVariable;
++import net.ssehub.easy.varModel.cst.AbstractConstraintTreeVisitor;
++import net.ssehub.easy.varModel.cst.AttributeVariable;
++import net.ssehub.easy.varModel.cst.BlockExpression;
++import net.ssehub.easy.varModel.cst.CompoundAccess;
++import net.ssehub.easy.varModel.cst.CompoundInitializer;
++import net.ssehub.easy.varModel.cst.ConstantValue;
++import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
++import net.ssehub.easy.varModel.cst.ContainerInitializer;
++import net.ssehub.easy.varModel.cst.ContainerOperationCall;
++import net.ssehub.easy.varModel.cst.IfThen;
++import net.ssehub.easy.varModel.cst.Let;
++import net.ssehub.easy.varModel.cst.MultiAndExpression;
++import net.ssehub.easy.varModel.cst.OCLFeatureCall;
++import net.ssehub.easy.varModel.cst.Parenthesis;
++import net.ssehub.easy.varModel.cst.Self;
++import net.ssehub.easy.varModel.cst.Variable;
++import net.ssehub.easy.varModel.model.Constraint;
++import net.ssehub.easy.varModel.model.OperationDefinition;
++import net.ssehub.easy.varModel.model.datatypes.Compound;
++import net.ssehub.easy.varModel.model.datatypes.Container;
++import net.ssehub.easy.varModel.model.datatypes.IDatatype;
++
++/**
++ * Extended measurement statistics visitor calculating the average complexity of constraint expressions.
++ * 
++ * @author Holger Eichelberger
++ */
++class MeasurementStatisticsVisitor extends DefaultConfigurationStatisticsVisitor {
++
++    private static final double EXPR_CONSTANT_COMPLEXITY = 0.25;
++    private static final double EXPR_ACCESSOR_COMPLEXITY = 1;
++    private static final double EXPR_OP_COMPLEXITY = 0;
++    private static final double EXPR_CONTAINER_COMPLEXITY = 5;
++    private static final double EXPR_VAR_COMPLEXITY = 0.25;
++
++    private static final double TYPE_VARIABLE_COMPLEXITY = 1;
++    private static final double TYPE_COMPOUND_COMPLEXITY = 2;
++    private static final double TYPE_CONTAINER_COMPLEXITY = 2;
++
++    /**
++     * Extended measurement statistics.
++     * 
++     * @author Holger Eichelberger
++     */
++    public static class MeasurementStatistics extends ConfigStatistics {
++        
++        /**
++         * All variables (non constraint variables + constraint variables), without nested variables.
++         */
++        private double constraintComplexitySum = 0;
++        private int constraintComplexityCount = 0;
++        private double variableComplexitySum = 0;
++        private int variableComplexityCount = 0;
++        
++        /**
++         * Returns the average constraint complexity.
++         * 
++         * @return the average constraint complexity
++         */
++        public double getAverageConstraintComplexity() {
++            return 0 == constraintComplexityCount ? 0 : (constraintComplexitySum / constraintComplexityCount);
++        }
++
++        /**
++         * Returns the model constraint complexity (sum of all constraints).
++         * 
++         * @return the model constraint complexity  (sum of all constraints)
++         */
++        public double getConstraintComplexity() {
++            return constraintComplexitySum;
++        }
++
++        /**
++         * Returns the average model variable complexity (sum of all variables).
++         * 
++         * @return the average model variable complexity  (sum of all variables)
++         */
++        public double getAverageVariableComplexity() {
++            return 0 == variableComplexityCount ? 0 : variableComplexitySum / variableComplexityCount;
++        }
++
++        /**
++         * Returns the model variable complexity (sum of all variables).
++         * 
++         * @return the model variable complexity  (sum of all variables)
++         */
++        public double getVariableComplexity() {
++            return variableComplexitySum;
++        }
++        
++        /**
++         * Returns the model complexity as sum of {@link #getVariableComplexity()} and {@link #getModelComplexity()}.
++         * 
++         * @return the model complexity
++         */
++        public double getModelComplexity() {
++            return variableComplexitySum + constraintComplexitySum;
++        }
++
++    }
++
++    /**
++     * Calculates the complexity of a constraint. Currently, just a kind of McCabe without any empirical justification.
++     * Initializers are maximized over contained complexities, constants are counted just by 1.
++     * 
++     * @author Holger Eichelberger
++     */
++    private static class ComplexityVisitor extends AbstractConstraintTreeVisitor {
++
++        private double complexity = 0;
++        
++        /**
++         * Returns the complexity of the visited constraint and clears the visitor.
++         * 
++         * @return the complexity
++         */
++        private double getComplexityAndClear() {
++            double result = complexity;
++            complexity = 0;
++            return result;
++        }
++        
++        @Override
++        public void visitVariable(Variable variable) {
++            complexity += EXPR_VAR_COMPLEXITY;
++            super.visitVariable(variable);
++        }
++
++        @Override
++        public void visitConstantValue(ConstantValue value) {
++            complexity += EXPR_CONSTANT_COMPLEXITY;
++            super.visitConstantValue(value);
++        }
++
++        @Override
++        public void visitParenthesis(Parenthesis parenthesis) {
++            // currently just sum of contained expressions
++            super.visitParenthesis(parenthesis);
++        }
++        
++        @Override
++        public void visitOclFeatureCall(OCLFeatureCall call) {
++            complexity += EXPR_OP_COMPLEXITY;
++            super.visitOclFeatureCall(call);
++        }
++        
++        @Override
++        public void visitMultiAndExpression(MultiAndExpression expression) {
++            // currently just sum of contained expressions
++            super.visitMultiAndExpression(expression);
++        }
++        
++        @Override
++        public void visitContainerOperationCall(ContainerOperationCall call) {
++            complexity += EXPR_CONTAINER_COMPLEXITY;
++            super.visitContainerOperationCall(call);
++        }
++
++        @Override
++        public void visitLet(Let let) {
++            // currently just sum of contained expressions
++            super.visitLet(let);
++        }
++
++        @Override
++        public void visitIfThen(IfThen ifThen) {
++            // currently just sum of contained expressions
++            super.visitIfThen(ifThen);
++        }
++
++        @Override
++        public void visitCompoundAccess(CompoundAccess access) {
++            complexity += EXPR_ACCESSOR_COMPLEXITY;
++            super.visitCompoundAccess(access);
++        }
++
++        @Override
++        public void visitCompoundInitializer(CompoundInitializer initializer) {
++            // currently just sum of contained expressions
++            super.visitCompoundInitializer(initializer);
++        }
++
++        @Override
++        public void visitContainerInitializer(ContainerInitializer initializer) {
++            // currently just sum of contained expressions
++            super.visitContainerInitializer(initializer);
++        }
++        
++        @Override
++        public void visitSelf(Self self) {
++            complexity += EXPR_CONSTANT_COMPLEXITY;
++            // currently nothing specific
++            super.visitSelf(self);
++        }
++
++        @Override
++        public void visitAnnotationVariable(AttributeVariable variable) {
++            complexity += EXPR_ACCESSOR_COMPLEXITY;
++            super.visitAnnotationVariable(variable);
++        }
++
++        @Override
++        public void visitBlockExpression(BlockExpression block) {
++            // currently just sum of contained expressions
++            super.visitBlockExpression(block);
++        }
++        
++    };
++
++    private MeasurementStatistics statistics;
++    private ComplexityVisitor complexityVisitor = new ComplexityVisitor();
++    
++    /**
++     * Creates an instance with a statistics object of type {@link MeasurementStatistics}.
++     */
++    public MeasurementStatisticsVisitor() {
++        this(new MeasurementStatistics());
++    }
++    
++    /**
++     * Creates a statistics visitor with given statistics object (for extension, overriding).
++     * 
++     * @param statistics A data object to store the statistical information.
++     */
++    protected MeasurementStatisticsVisitor(MeasurementStatistics statistics) {
++        super(statistics);
++        this.statistics = statistics;
++    }
++
++    @Override
++    public MeasurementStatistics getStatistics() {
++        return statistics; // could be avoided if parent type would be parameterized
++    }
++    
++    @Override
++    protected void visitConstraint(Constraint constraint) {
++        processConstraintSyntaxTree(constraint.getConsSyntax());
++    }
++
++    @Override
++    protected void visitDefaultValue(ConstraintSyntaxTree constraint) {
++        processConstraintSyntaxTree(constraint);
++    }
++
++    @Override
++    protected void visitOperationDefinition(OperationDefinition opdef) {
++        processConstraintSyntaxTree(opdef.getOperation().getFunction());
++    }
++
++    /**
++     * Processes a constraint syntax tree.
++     * 
++     * @param cst the constraint syntax tree, may be <b>null</b>
++     */
++    private void processConstraintSyntaxTree(ConstraintSyntaxTree cst) {
++        if (null != cst) {
++            cst.accept(complexityVisitor);
++            double tmp = complexityVisitor.getComplexityAndClear();
++            statistics.constraintComplexitySum += tmp;
++            statistics.constraintComplexityCount++;
++        }
++    }
++    
++    @Override
++    public void visitVariable(IDecisionVariable variable, boolean nestedInContainer) {
++        super.visitVariable(variable, nestedInContainer);
++        IDatatype type = variable.getDeclaration().getType();
++        if (Compound.TYPE.isAssignableFrom(type)) {
++            statistics.variableComplexitySum += TYPE_COMPOUND_COMPLEXITY; 
++        } else if (Container.TYPE.isAssignableFrom(type)) {
++            statistics.variableComplexitySum += TYPE_CONTAINER_COMPLEXITY; 
++        } else {
++            statistics.variableComplexitySum += TYPE_VARIABLE_COMPLEXITY; 
++        }
++        statistics.variableComplexityCount++;
++    }
++    
++}
+diff --git a/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/TSVMeasurementCollector.java b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/TSVMeasurementCollector.java
+new file mode 100644
+index 0000000..f6497d4
+--- /dev/null
++++ b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/TSVMeasurementCollector.java
+@@ -0,0 +1,244 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.varModel.varModel.testSupport;
++
++import java.io.File;
++import java.io.FileOutputStream;
++import java.io.IOException;
++import java.io.PrintStream;
++import java.util.ArrayList;
++import java.util.Arrays;
++import java.util.Collection;
++import java.util.Comparator;
++import java.util.List;
++import java.util.Locale;
++
++import net.ssehub.easy.basics.io.FileUtils;
++import net.ssehub.easy.basics.logger.EASyLoggerFactory;
++import net.ssehub.easy.basics.modelManagement.ModelInfo;
++import net.ssehub.easy.varModel.confModel.Configuration;
++import net.ssehub.easy.varModel.management.VarModel;
++import net.ssehub.easy.varModel.model.Project;
++
++/**
++ * A measurement collector that stores to TSV (tab-separated-values) files.
++ * Always appends to the given file. Might be clearing/deleting the target file before use is helpful.
++ * 
++ * @author Holger Eichelberger
++ */
++public class TSVMeasurementCollector extends MeasurementCollector {
++
++    private File file;
++    private IMeasurementIdentifier[] columns;
++
++    /**
++     * Creates a new measurement collector using <code>file</code> as id.
++     * 
++     * @param file the output file
++     * @param columns the output columns - will be written in the given sequence, even duplicates; if not given, the 
++     *     measurement identifiers of the first record will be taken and sorted alpha-numerically. However, if 
++     *     <code>file</code> does already exist, the column sequence is not guaranteed to match.
++     */
++    public TSVMeasurementCollector(File file, Object... columns) {
++        this(file, file, columns);
++    }
++
++    /**
++     * Creates a new measurement collector.
++     * 
++     * @param id the id of the collector for checking whether an appropriate one is installed
++     * @param file the output file
++     * @param columns the output columns - will be written in the given sequence, even duplicates; if not given, the 
++     *     measurement identifiers of the first record will be taken and sorted alpha-numerically. However, if 
++     *     <code>file</code> does already exist, the column sequence is not guaranteed to match.
++     */
++    public TSVMeasurementCollector(Object id, File file, Object... columns) {
++        super(id);
++        this.file = file;
++        List<IMeasurementIdentifier> tmp = new ArrayList<IMeasurementIdentifier>();
++        for (int c = 0; c < columns.length; c++) {
++            IMeasurementIdentifier identifier = obtainIdentifier(columns[c]);
++            if (null != identifier) {
++                tmp.add(identifier);
++            }
++        }
++        
++        this.columns = new IMeasurementIdentifier[tmp.size()];
++        tmp.toArray(this.columns);
++    }
++    
++    /**
++     * Ensures the installation of an appropriate measurement collector. If no collector exists, a new one is created
++     * and a potentially existing file is deleted before.
++     * 
++     * @param out the file where to write the measurement data to - also used as identification of the collector
++     * @param columns the output columns; if not given, the  measurement identifiers of the first record will be taken 
++     * and sorted alpha-numerically. 
++     */
++    public static void ensureCollector(File out, Object... columns) {
++        if (!out.equals(MeasurementCollector.getInstance().getId())) {
++            out.delete();
++            MeasurementCollector.setInstance(new TSVMeasurementCollector(out, columns));
++        }
++    }
++
++    @Override
++    protected void endMeasurement(MeasurementRecord record) {
++        if (null == columns || 0 == columns.length) {
++            Collection<IMeasurementIdentifier> ids = record.getMeasurementIdentifiers();
++            columns = new IMeasurementIdentifier[ids.size()];
++            ids.toArray(columns);
++            Arrays.sort(columns, new Comparator<IMeasurementIdentifier>() {
++
++                @Override
++                public int compare(IMeasurementIdentifier o1, IMeasurementIdentifier o2) {
++                    return o1.name().compareTo(o2.name());
++                }
++            });
++        }
++        boolean writeHeader = !file.exists() || 0 == file.length();
++        PrintStream out = null;
++        try {
++            File parent = file.getParentFile();
++            if (!parent.exists()) {
++                parent.mkdirs();
++            }
++            out = new PrintStream(new FileOutputStream(file, true));
++            if (writeHeader) {
++                printSep(out, "model name");
++                printSep(out, "URI");
++                printSep(out, "tag");
++                printSep(out, "runCount");
++                printSep(out, "caller");
++                for (IMeasurementIdentifier identifier : columns) {
++                    printSep(out, identifier.name());
++                }
++                printEOL(out);
++            }
++            Configuration cfg = record.getConfiguration();
++            out.print(cfg.getProject().getName());
++            printSeparator(out);
++            ModelInfo<Project> info = VarModel.INSTANCE.availableModels().getModelInfo(cfg.getProject());
++            if (null != info) {
++                out.print(info.getLocation());
++            }
++            printSeparator(out);
++            printSep(out, record.getTag());
++            printSep(out, record.getRunCount());
++            printSep(out, record.getCaller());
++            for (IMeasurementIdentifier identifier : columns) {
++                Double measurement = record.getMeasurement(identifier);
++                if (null != measurement) {
++                    printSep(out, measurement);
++                }
++            }
++            printEOL(out);
++        } catch (IOException e) {
++            FileUtils.closeQuietly(out); // works with null
++            EASyLoggerFactory.INSTANCE.getLogger(TSVMeasurementCollector.class, 
++                "net.ssehub.easy.varModel.tests").error(e.getMessage());
++        }
++    }
++
++    /**
++     * Prints a separator to <code>out</code>.
++     * 
++     * @param out the output stream
++     */
++    private static void printSeparator(PrintStream out) {
++        out.print("\t");
++    }
++
++    /**
++     * Prints an End-Of-Line to <code>out</code>.
++     * 
++     * @param out the output stream
++     */
++    private static void printEOL(PrintStream out) {
++        out.println();
++    }
++
++    /**
++     * Prints a string value.
++     * 
++     * @param out the output stream
++     * @param value the string value
++     */
++    private static void print(PrintStream out, String value) {
++        out.print(value);
++    }
++
++    /**
++     * Prints an integer value.
++     * 
++     * @param out the output stream
++     * @param value the integer value
++     */
++    private static void print(PrintStream out, int value) {
++        out.print(value);
++    }
++
++    /**
++     * Prints a string value and a separator.
++     * 
++     * @param out the output stream
++     * @param value the string value
++     * 
++     * @see #printSeparator(PrintStream)
++     */
++    private static void printSep(PrintStream out, String value) {
++        print(out, value);
++        printSeparator(out);
++    }
++
++    /**
++     * Prints an integer value and a separator.
++     * 
++     * @param out the output stream
++     * @param value the integer value
++     * 
++     * @see #printSeparator(PrintStream)
++     */
++    private static void printSep(PrintStream out, int value) {
++        print(out, value);
++        printSeparator(out);
++    }
++    
++    /**
++     * Prints a double value.
++     * 
++     * @param out the output stream
++     * @param value the double value
++     */
++    private static void print(PrintStream out, Double value) {
++        String tmp = String.format(Locale.ROOT, "%.2f", value).replace('.', ','); // for Excel
++        out.print(tmp);
++    }
++
++    /**
++     * Prints a double value and a separator.
++     * 
++     * @param out the output stream
++     * @param value the double value
++     * 
++     * @see #printSeparator(PrintStream)
++     */
++    private static void printSep(PrintStream out, Double value) {
++        print(out, value);
++        printSeparator(out);
++    }
++
++}
+diff --git a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/AbstractConfigurationStatisticsVisitor.java b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/AbstractConfigurationStatisticsVisitor.java
+index 4131591..e1b133f 100644
+--- a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/AbstractConfigurationStatisticsVisitor.java
++++ b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/AbstractConfigurationStatisticsVisitor.java
+@@ -15,12 +15,34 @@
+  */
+ package net.ssehub.easy.varModel.confModel;
+ 
++import java.util.HashSet;
++
++import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
++import net.ssehub.easy.varModel.model.AbstractVisitor;
++import net.ssehub.easy.varModel.model.Attribute;
++import net.ssehub.easy.varModel.model.AttributeAssignment;
++import net.ssehub.easy.varModel.model.Comment;
++import net.ssehub.easy.varModel.model.CompoundAccessStatement;
++import net.ssehub.easy.varModel.model.Constraint;
++import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
++import net.ssehub.easy.varModel.model.FreezeBlock;
++import net.ssehub.easy.varModel.model.IDecisionVariableContainer;
++import net.ssehub.easy.varModel.model.OperationDefinition;
++import net.ssehub.easy.varModel.model.PartialEvaluationBlock;
+ import net.ssehub.easy.varModel.model.Project;
++import net.ssehub.easy.varModel.model.ProjectImport;
++import net.ssehub.easy.varModel.model.ProjectInterface;
+ import net.ssehub.easy.varModel.model.datatypes.Compound;
+ import net.ssehub.easy.varModel.model.datatypes.ConstraintType;
+ import net.ssehub.easy.varModel.model.datatypes.Container;
++import net.ssehub.easy.varModel.model.datatypes.DerivedDatatype;
++import net.ssehub.easy.varModel.model.datatypes.Enum;
++import net.ssehub.easy.varModel.model.datatypes.EnumLiteral;
+ import net.ssehub.easy.varModel.model.datatypes.IDatatype;
++import net.ssehub.easy.varModel.model.datatypes.OrderedEnum;
+ import net.ssehub.easy.varModel.model.datatypes.Reference;
++import net.ssehub.easy.varModel.model.datatypes.Sequence;
++import net.ssehub.easy.varModel.model.datatypes.Set;
+ 
+ /**
+  * Visitor for a {@link Configuration} to generate statistics of the configuration.
+@@ -155,6 +177,117 @@
+     }
+     
+     private ConfigStatistics statistics;
++    private AbstractVisitor projectVisitor = new AbstractVisitor() {
++
++        private java.util.Set<Project> done = new HashSet<Project>();
++        
++        @Override
++        public void visitProject(Project project) {
++            if (!done.contains(project)) {
++                done.add(project);
++                super.visitProject(project);
++            }
++        }
++        
++        @Override
++        public void visitEnum(Enum eenum) {
++            // not needed
++        }
++
++        @Override
++        public void visitOrderedEnum(OrderedEnum eenum) {
++            // not needed
++        }
++        
++        @Override
++        public void visitCompound(Compound compound) {
++            // done via instances
++        }
++        
++        @Override
++        public void visitProjectImport(ProjectImport pImport) {
++            Project res = pImport.getResolved();
++            if (null != res) {
++                res.accept(this);
++            }
++        }
++
++        @Override
++        public void visitDecisionVariableDeclaration(DecisionVariableDeclaration decl) {
++            // not needed
++        }
++
++        @Override
++        public void visitAttribute(Attribute attribute) {
++            // not needed
++        }
++
++        @Override
++        public void visitConstraint(Constraint constraint) {
++            AbstractConfigurationStatisticsVisitor.this.visitConstraint(constraint);
++        }
++
++        @Override
++        public void visitFreezeBlock(FreezeBlock freeze) {
++            // not needed
++        }
++
++        @Override
++        public void visitOperationDefinition(OperationDefinition opdef) {
++            AbstractConfigurationStatisticsVisitor.this.visitOperationDefinition(opdef);
++        }
++
++        @Override
++        public void visitPartialEvaluationBlock(PartialEvaluationBlock block) {
++            AbstractConfigurationStatisticsVisitor.this.processEvalConstraints(block);
++        }
++
++        @Override
++        public void visitProjectInterface(ProjectInterface iface) {
++            // not needed
++        }
++
++        @Override
++        public void visitComment(Comment comment) {
++            // not needed
++        }
++
++        @Override
++        public void visitAttributeAssignment(AttributeAssignment assignment) {
++            AbstractConfigurationStatisticsVisitor.this.visitAssignment(assignment);
++        }
++
++        @Override
++        public void visitCompoundAccessStatement(CompoundAccessStatement access) {
++            // not needed
++        }
++
++        @Override
++        public void visitDerivedDatatype(DerivedDatatype datatype) {
++            // not needed
++        }
++
++        @Override
++        public void visitEnumLiteral(EnumLiteral literal) {
++            // not needed
++        }
++
++        @Override
++        public void visitReference(Reference reference) {
++            // not needed
++        }
++
++        @Override
++        public void visitSequence(Sequence sequence) {
++            // not needed
++        }
++
++        @Override
++        public void visitSet(Set set) {
++            // not needed
++        }
++        
++    };
+     
+     /**
+      * Sole constructor of this class.
+@@ -166,7 +299,9 @@
+     
+     @Override
+     public void visitConfiguration(Configuration configuration) {
+-        specialTreatment(configuration.getProject());
++        Project prj = configuration.getProject();
++        prj.accept(projectVisitor);
++        specialTreatment(prj);
+         super.visitConfiguration(configuration);
+     }
+     
+@@ -179,7 +314,7 @@
+     /**
+      * Recursive part to visit all (nested) variables.
+      * @param variable The visited decision variable instance.
+-     * @param nestedInContainer <tt>true</tt> if the parent is a container, <tt>false</tt> otherwiese.
++     * @param nestedInContainer <tt>true</tt> if the parent is a container, <tt>false</tt> otherwise.
+      */
+     public void visitVariable(IDecisionVariable variable, boolean nestedInContainer) {
+         statistics.nVariables++;
+@@ -208,6 +343,7 @@
+                 visitRefines((Compound) dereferedType);
+             }
+         }
++        visitDefaultValue(variable.getDeclaration().getDefaultValue());
+         
+         nestedInContainer |= Container.TYPE.isAssignableFrom(type);
+         
+@@ -226,9 +362,56 @@
+     private void visitRefines(Compound cmp) {
+         for (int r = 0; r < cmp.getRefinesCount(); r++) {
+             Compound cType = cmp.getRefines(r);
+-            statistics.nConstraintInstances += cType.getConstraintsCount();
++            visitVariableContainer(cmp);
++            for (int i = 0; i < cmp.getModelElementCount(); i++) {            
++                if (cmp.getModelElement(i) instanceof PartialEvaluationBlock) {
++                    processEvalConstraints((PartialEvaluationBlock) cmp.getModelElement(i));
++                }
++            }
+             visitRefines(cType);
+         }
++    }
++    
++    /**
++     * Processes constraints within an eval-block.
++     * 
++     * @param evalBlock the block to process
++     */
++    protected void processEvalConstraints(PartialEvaluationBlock evalBlock) {
++        for (int i = 0; i < evalBlock.getNestedCount(); i++) {
++            processEvalConstraints(evalBlock.getNested(i));
++        }
++        for (int i = 0; i < evalBlock.getEvaluableCount(); i++) {
++            if (evalBlock.getEvaluable(i) instanceof Constraint) {
++                statistics.nConstraintInstances += 1;
++                visitConstraint((Constraint) evalBlock.getEvaluable(i));
++            }
++        }
++    }
++    
++    /**
++     * Processes elements within a variable container.
++     * 
++     * @param cnt the container
++     */
++    protected void visitVariableContainer(IDecisionVariableContainer cnt) {
++        // do not count declarations - counted twice w.r.t. nested configuration variables
++        statistics.nConstraintInstances += cnt.getConstraintsCount();
++        for (int c = 0; c < cnt.getConstraintsCount(); c++) {
++            visitConstraint(cnt.getConstraint(c));
++        }
++        for (int a = 0; a < cnt.getAssignmentCount(); a++) {
++            visitAssignment(cnt.getAssignment(a));
++        }
++    }
++    
++    /**
++     * Processes attribute assignments.
++     * 
++     * @param assng the assignment
++     */
++    protected void visitAssignment(AttributeAssignment assng) {
++        visitVariableContainer(assng); // recursion included
+     }
+     
+     /**
+@@ -251,5 +434,29 @@
+      * @param mainProject {@link Configuration#getProject()}.
+      */
+     protected abstract void specialTreatment(Project mainProject);
++    
++    /**
++     * Processes a constraint. Added later, so default implementation is empty.
++     * 
++     * @param constraint the constraint to process (contained constraint may be <b>null</b>)
++     */
++    protected void visitConstraint(Constraint constraint) {
++    }
++
++    /**
++     * Processes a default value. Added later, so default implementation is empty.
++     * 
++     * @param constraint the constraint to process (may be <b>null</b>)
++     */
++    protected void visitDefaultValue(ConstraintSyntaxTree constraint) {
++    }
++
++    /**
++     * Processes an operation definition. Added later, so default implementation is empty.
++     * 
++     * @param opdef the operation definition
++     */
++    protected void visitOperationDefinition(OperationDefinition opdef) {
++    }
+ 
+ }
+diff --git a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/DefaultConfigurationStatisticsVisitor.java b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/DefaultConfigurationStatisticsVisitor.java
+new file mode 100644
+index 0000000..233c1c6
+--- /dev/null
++++ b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/DefaultConfigurationStatisticsVisitor.java
+@@ -0,0 +1,52 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.varModel.confModel;
++
++import net.ssehub.easy.varModel.model.Project;
++
++/**
++ * A default implementation of the {@link AbstractConfigurationStatisticsVisitor} with empty implementation
++ * of special treatments.
++ * 
++ * @author Holger Eichelberger
++ */
++public class DefaultConfigurationStatisticsVisitor extends AbstractConfigurationStatisticsVisitor {
++
++    /**
++     * Creates an instance with a statistics object of type {@link ConfigStatistics}.
++     */
++    public DefaultConfigurationStatisticsVisitor() {
++        super(new ConfigStatistics());
++    }
++    
++    /**
++     * Creates a statistics visitor with given statistics object (for extension, overriding).
++     * 
++     * @param statistics A data object to store the statistical information.
++     */
++    protected DefaultConfigurationStatisticsVisitor(ConfigStatistics statistics) {
++        super(statistics);
++    }
++
++    @Override
++    protected void specialTreatment(IDecisionVariable variable) {
++    }
++
++    @Override
++    protected void specialTreatment(Project mainProject) {
++    }
++
++}
+diff --git a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/cst/MultiAndExpression.java b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/cst/MultiAndExpression.java
+index 9be6cec..85d7dc8 100644
+--- a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/cst/MultiAndExpression.java
++++ b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/cst/MultiAndExpression.java
+@@ -28,7 +28,7 @@
+     private OCLFeatureCall[] expressions;
+     
+     /**
+-     * Creates a multi-and expression.
++     * Creates a chained (multi-and) expression.
+      * 
+      * @param expressions the individual expressions
+      * @throws CSTSemanticException if <code>expressions</code> or an expression within is <b>null</b>
+diff --git a/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/test/AbstractTest.java b/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/test/AbstractTest.java
+index 788ffd6..3bf0b95 100644
+--- a/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/test/AbstractTest.java
++++ b/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/test/AbstractTest.java
+@@ -160,6 +160,7 @@
+                     fc.size());
+             /* Instead of using default, pass in a decoder. */
+             fileAsString = Charset.defaultCharset().decode(bb).toString();
++            fc.close();
+         } finally {
+             stream.close();
+         }
+diff --git a/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/translation/LogMessageReceiver.java b/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/translation/LogMessageReceiver.java
+new file mode 100644
+index 0000000..0166088
+--- /dev/null
++++ b/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/translation/LogMessageReceiver.java
+@@ -0,0 +1,105 @@
++/*
++ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ * 
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package net.ssehub.easy.dslCore.translation;
++
++import org.eclipse.emf.common.util.URI;
++import org.eclipse.emf.ecore.EObject;
++import org.eclipse.emf.ecore.EStructuralFeature;
++import org.eclipse.emf.ecore.resource.Resource.Diagnostic;
++
++import net.ssehub.easy.basics.logger.EASyLoggerFactory;
++import net.ssehub.easy.basics.logger.EASyLoggerFactory.EASyLogger;
++import net.ssehub.easy.basics.messages.IMessage;
++
++/**
++ * A simple fallback receiver that does not store messages.
++ * 
++ * @author Holger Eichelberger
++ */
++public class LogMessageReceiver extends MessageReceiver {
++    
++    private EASyLogger logger;
++    private URI locationHint;
++    
++    /**
++     * Creates a log message receiver.
++     * 
++     * @param origin the origin where the messages shall be reported for
++     * @param bundleName the bundle name (may be <b>null</b>)
++     */
++    public LogMessageReceiver(Class<?> origin, String bundleName) {
++        logger = EASyLoggerFactory.INSTANCE.getLogger(origin, bundleName);
++    }
++
++    @Override
++    public void error(String message, EObject cause, EStructuralFeature causeFeature, int code) {
++        logger.error(message + " in " + getLocation(null));
++    }
++
++    @Override
++    public void warning(String message, EObject cause, EStructuralFeature causeFeature, int code) {
++        logger.warn(message + " in " + getLocation(null));
++    }
++
++    @Override
++    public void collect(IMessage message, EObject cause, EStructuralFeature causeFeature, int code) {
++    }
++
++    @Override
++    public int getMessageCount() {
++        return 0;
++    }
++
++    @Override
++    public int getErrorCount() {
++        return 0;
++    }
++
++    @Override
++    public Message getMessage(int index) {
++        return null;
++    }
++
++    @Override
++    public void error(Diagnostic diagnostic) {
++        logger.error(diagnostic.getMessage() + " in " + getLocation(diagnostic) + " line " 
++            + diagnostic.getLine() + " col " + diagnostic.getColumn());
++    }
++    
++    /**
++     * Returns the location of diagnostic taking the location hint as fallback.
++     * 
++     * @param diagnostic the diagnostic (may be <b>null</b>)
++     * @return the location
++     */
++    private String getLocation(Diagnostic diagnostic) {
++        String location = null == diagnostic ? null : diagnostic.getLocation();
++        if (null == location && null != locationHint) {
++            location = locationHint.toString();
++        }
++        return location;
++    }
++
++    /**
++     * Defines a location hint in case that diagnostics do not carry this information. Reset if not used.
++     * 
++     * @param locationHint the location hint, may be <b>null</b> for none
++     */
++    public void setLocationHint(URI locationHint) {
++        this.locationHint = locationHint;
++    }
++    
++};
+diff --git a/Tools/EASy-ANT/EASyLoader/.gitignore b/Tools/EASy-ANT/EASyLoader/.gitignore
+index ae3c172..92145bc 100644
+--- a/Tools/EASy-ANT/EASyLoader/.gitignore
++++ b/Tools/EASy-ANT/EASyLoader/.gitignore
+@@ -1 +1,2 @@
+ /bin/
++/target/
+\ No newline at end of file
+diff --git a/Tools/StandaloneModelLoader/.gitignore b/Tools/StandaloneModelLoader/.gitignore
+new file mode 100644
+index 0000000..09e3bc9
+--- /dev/null
++++ b/Tools/StandaloneModelLoader/.gitignore
+@@ -0,0 +1,2 @@
++/bin/
++/target/
Index: asoner/measures/EASyProducer-measurement-2.patch
===================================================================
--- /reasoner/measures/EASyProducer-measurement-2.patch	(revision 263)
+++ 	(revision )
@@ -1,133422 +1,0 @@
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/Test.class b/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/Test.class
-new file mode 100644
-index 0000000..a86c3fc
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/Test.class
-Binary files differ
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/package-info.class b/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/package-info.class
-new file mode 100644
-index 0000000..ed394f0
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-individual/bin/standaloneTest/package-info.class
-Binary files differ
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/Test.class b/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/Test.class
-new file mode 100644
-index 0000000..9f41899
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/Test.class
-Binary files differ
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/package-info.class b/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/package-info.class
-new file mode 100644
-index 0000000..875c999
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-individual/target/classes/standalone/package-info.class
-Binary files differ
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
-new file mode 100644
-index 0000000..e69de29
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
-new file mode 100644
-index 0000000..4bd01c4
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-individual/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
-@@ -0,0 +1,2 @@
-+W:\IndenicaWorkspace\EASy-Standalone-test\src\standaloneTest\package-info.java
-+W:\IndenicaWorkspace\EASy-Standalone-test\src\standaloneTest\Test.java
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.project b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.project
-new file mode 100644
-index 0000000..5a27378
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.project
-@@ -0,0 +1,23 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<projectDescription>
-+	<name>EASy-Standalone</name>
-+	<comment></comment>
-+	<projects>
-+	</projects>
-+	<buildSpec>
-+		<buildCommand>
-+			<name>org.eclipse.jdt.core.javabuilder</name>
-+			<arguments>
-+			</arguments>
-+		</buildCommand>
-+		<buildCommand>
-+			<name>org.eclipse.m2e.core.maven2Builder</name>
-+			<arguments>
-+			</arguments>
-+		</buildCommand>
-+	</buildSpec>
-+	<natures>
-+		<nature>org.eclipse.jdt.core.javanature</nature>
-+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-+	</natures>
-+</projectDescription>
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.settings/org.eclipse.m2e.core.prefs b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.settings/org.eclipse.m2e.core.prefs
-new file mode 100644
-index 0000000..14b697b
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/.settings/org.eclipse.m2e.core.prefs
-@@ -0,0 +1,4 @@
-+activeProfiles=
-+eclipse.preferences.version=1
-+resolveWorkspaceProjects=true
-+version=1
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/build.xml b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/build.xml
-new file mode 100644
-index 0000000..1e35d14
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/build.xml
-@@ -0,0 +1,258 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<!-- Project name must not contain whitespaces -->
-+<project name="Standalone Tools" default="all" basedir=".">	
-+	<property file="${user.home}/global-build.properties"/>
-+	<property name="easyPlugins" value="easyPlugins"/>
-+
-+	<include file="${home.base.dir}/${projects.standalone.dir}/standalone.macros.xml"/>
-+			
-+	<target name="init">
-+		<!-- Delete generated folders -->
-+		<delete dir="junitResults"/>
-+		<delete dir="${easyPlugins}"/>
-+		<delete dir="build"/>
-+        <delete dir="${home.base.dir}/${projects.standalone.dir}/antLibs"/>
-+		
-+		<!-- Delete accidentally created files and folders -->
-+		<delete dir="easyLoader"/>
-+		<delete dir="emma"/>
-+		<delete dir="newGenerator"/>
-+				
-+		<!-- Create folders -->
-+		<mkdir dir="junitResults"/>
-+		<mkdir dir="${easyPlugins}"/>
-+		<mkdir dir="build"/>
-+		<mkdir dir="build/zip"/>
-+		<mkdir dir="build/zip/Plugins"/>
-+		<mkdir dir="build/zip/Features"/>
-+		<mkdir dir="build/generatedLibs"/>
-+        
-+        <!-- Update/Prepare ANT Generator -->
-+        <mkdir dir="${home.base.dir}/${projects.standalone.dir}/antLibs"/>
-+        <copy todir="${home.base.dir}/${projects.standalone.dir}/antLibs" failonerror="true" overwrite="true" flatten="true">
-+			<fileset dir="${home.easyLoader.dir}/build/jar">
-+				<include name="**/*.jar" />
-+			</fileset>
-+		</copy>
-+	</target>
-+	
-+	<target name="gather.easy.plugins">
-+		<copy todir="${easyPlugins}" failonerror="true" overwrite="true" flatten="true">
-+			<fileset dir="${home.base.dir}">
-+				<include name="**/build/jar/*.jar" />
-+			</fileset>
-+		</copy>
-+	</target>
-+	
-+	<target name="createLibs">
-+		<!-- Lib generation with Patrik's ANT plugin for automated EASy-Bundle generation -->
-+        <taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"/>
-+        <!-- pluginPath="${easy.bundles.dir}" -->
-+        <!-- pluginPath="${easyPlugins}" -->
-+        <antgenerator forced="yes" pluginPath="${easy.bundles.dir}" target="${basedir}/build/generatedLibs"
-+            basedir="${basedir}" eclipsepath="${eclipse.plugins.dir}" classesPath="${home.easyLoader.dir}/build/classes"
-+            libsPath="${home.easyLoader.dir}/libs">
-+            
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.core.no_eclipse_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.ivml.core_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.vil.core_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.reasoning.reasoner_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.apache.commons.io.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.java.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.instantiation.velocity_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.eclipseInfrastructure.Feature"/>
-+            <addfeature path="${projects.features.dir}"/>
-+        </antgenerator>
-+        
-+        <!-- Fix me -->
-+        <copy todir="${basedir}/build/generatedLibs/unbundled" failonerror="true" overwrite="true" flatten="true">
-+            <fileset dir="${easy.bundles.dir}">
-+                <include name="org.eclipse.equinox.common_3.6.200.jar" />
-+                <include name="org.eclipse.equinox.preferences_3.5.100.jar" />
-+            </fileset>
-+        </copy>
-+        
-+        <!-- copy generated bundles to command line tool before compilation -->
-+        <copy todir="EASyCommandLine/lib" failonerror="true" overwrite="true" flatten="true">
-+			<fileset dir="${basedir}/build/generatedLibs/unbundled">
-+				<include name="**/*.jar" />
-+			</fileset>
-+            <fileset dir="${home.easyLoader.dir}/libs/">
-+				<include name="org.eclipse.osgi*.jar" />
-+			</fileset>
-+            <fileset dir="${eclipse.plugins.dir}">
-+				<include name="org.apache.ant*/lib/ant.jar" />
-+			</fileset>
-+		</copy>
-+    </target>
-+
-+    <!-- standalone with some experimental stuff -->
-+	<target name="createLibs.ex">
-+        <mkdir dir="build/generatedLibs.ex"/>
-+	    <!-- Lib generation with Patrik's ANT plugin for automated EASy-Bundle generation -->
-+        <taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"/>
-+        <!-- pluginPath="${easy.bundles.dir}" -->
-+        <!-- pluginPath="${easyPlugins}" -->
-+        <antgenerator forced="yes" pluginPath="${easy.bundles.dir}" target="${basedir}/build/generatedLibs.ex"
-+            basedir="${basedir}" eclipsepath="${eclipse.plugins.dir}" classesPath="${home.easyLoader.dir}/build/classes"
-+            libsPath="${home.easyLoader.dir}/libs">
-+            
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.core.no_eclipse_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.ivml.core_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.vil.core_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.reasoning.reasoner_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.apache.commons.io.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.java.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.instantiation.velocity_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.maven.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.experimental.core_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.eclipseInfrastructure.Feature"/>
-+            <addfeature path="${projects.features.dir}"/>
-+        </antgenerator>
-+        
-+        <!-- Fix me -->
-+        <copy todir="${basedir}/build/generatedLibs.ex/unbundled" failonerror="true" overwrite="true" flatten="true">
-+            <fileset dir="${easy.bundles.dir}">
-+                <include name="org.eclipse.equinox.common_3.6.200.jar" />
-+                <include name="org.eclipse.equinox.preferences_3.5.100.jar" />
-+            </fileset>
-+        </copy>
-+        
-+        <!-- copy generated bundles to command line tool before compilation -->
-+        <copy todir="EASyCommandLine/lib" failonerror="true" overwrite="true" flatten="true">
-+            <fileset dir="${basedir}/build/generatedLibs.ex/unbundled">
-+                <include name="**/*.jar" />
-+            </fileset>
-+            <fileset dir="${home.easyLoader.dir}/libs/">
-+                <include name="org.eclipse.osgi*.jar" />
-+            </fileset>
-+        </copy>
-+        <dist target="build/generatedLibs.ex" />
-+        <!-- cannot be bundled due to various conflicts, rans anyway in own process -->
-+        <withMaven target="build/generatedLibs.ex"/>
-+    </target>
-+    
-+    <!-- standalone runtime without xText but full Java instantiators and some experimental stuff - QM version is 
-+         smaller-->
-+    <target name="createLibs.runtimeNoXtext">
-+        <mkdir dir="build/generatedLibs.rt.noXtext"/>
-+        <!-- Lib generation with Patrik's ANT plugin for automated EASy-Bundle generation -->
-+        <taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"/>
-+        <!-- pluginPath="${easy.bundles.dir}" -->
-+        <!-- pluginPath="${easyPlugins}" -->
-+        <antgenerator forced="yes" pluginPath="${easy.bundles.dir}" target="${basedir}/build/generatedLibs.rt.noXtext"
-+            basedir="${basedir}" eclipsepath="${eclipse.plugins.dir}" classesPath="${home.easyLoader.dir}/build/classes"
-+            libsPath="${home.easyLoader.dir}/libs">
-+            
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.runtime_feature_noXtext"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.reasoning.reasoner_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.java.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.apache.commons.io.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.instantiation.velocity_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.maven.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.serializer.feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.eclipseInfrastructure.Feature"/>
-+            <addfeature path="${projects.features.dir}"/>
-+        </antgenerator>
-+        
-+        <!-- Fix me -->
-+        <copy todir="${basedir}/build/generatedLibs.rt.noXtext/unbundled" failonerror="true" overwrite="true" flatten="true">
-+            <fileset dir="${easy.bundles.dir}">
-+                <include name="org.eclipse.equinox.common_3.6.200.jar" />
-+                <include name="org.eclipse.equinox.preferences_3.5.100.jar" />
-+            </fileset>
-+        </copy>
-+        
-+        <!-- copy generated bundles to command line tool before compilation -->
-+        <copy todir="EASyCommandLine/lib" failonerror="true" overwrite="true" flatten="true">
-+            <fileset dir="${basedir}/build/generatedLibs.rt.noXtext/unbundled">
-+                <include name="**/*.jar" />
-+            </fileset>
-+            <fileset dir="${home.easyLoader.dir}/libs/">
-+                <include name="org.eclipse.osgi*.jar" />
-+            </fileset>
-+        </copy>
-+        <dist target="build/generatedLibs.rt.noXtext" />
-+        <!-- cannot be bundled due to various conflicts, rans anyway in own process -->
-+        <withMaven target="build/generatedLibs.rt.noXtext"/>
-+    </target>
-+	
-+    <!-- a runtime library version - however containing full EASy :o -->
-+    <target name="createLibs.runtime">
-+        <mkdir dir="build/generatedLibs.rt"/>
-+        <!-- Lib generation with Patrik's ANT plugin for automated EASy-Bundle generation -->
-+        <taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"/>
-+        <!-- pluginPath="${easy.bundles.dir}" -->
-+        <!-- pluginPath="${easyPlugins}" -->
-+        <antgenerator forced="yes" pluginPath="${easy.bundles.dir}" target="${basedir}/build/generatedLibs.rt"
-+            basedir="${basedir}" eclipsepath="${eclipse.plugins.dir}" classesPath="${home.easyLoader.dir}/build/classes"
-+            libsPath="${home.easyLoader.dir}/libs">
-+            
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.runtime_feature"/>
-+            <!-- is this one really required, as no_eclipse indirectly requires full EASy -->
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy_producer.core.no_eclipse_feature"/>
-+            <basefeature path="${projects.features.dir}/de.uni_hildesheim.sse.easy.instantiator.java.feature"/>
-+            <addfeature path="${projects.features.dir}"/>
-+        </antgenerator>
-+        
-+        <!-- Fix me -->
-+        <copy todir="${basedir}/build/generatedLibs.rt/unbundled" failonerror="true" overwrite="true" flatten="true">
-+            <fileset dir="${easy.bundles.dir}">
-+                <include name="org.eclipse.equinox.common_3.6.200.jar" />
-+                <include name="org.eclipse.equinox.preferences_3.5.100.jar" />
-+            </fileset>
-+        </copy>
-+        
-+        <!-- copy generated bundles to command line tool before compilation -->
-+        <copy todir="EASyCommandLine/lib" failonerror="true" overwrite="true" flatten="true">
-+			<fileset dir="${basedir}/build/generatedLibs.rt/unbundled">
-+				<include name="**/*.jar" />
-+			</fileset>
-+            <fileset dir="${home.easyLoader.dir}/libs/">
-+				<include name="org.eclipse.osgi*.jar" />
-+			</fileset>
-+		</copy>
-+		<dist target="build/generatedLibs.rt"/>
-+		<!-- cannot be bundled due to various conflicts, rans anyway in own process -->
-+        <withMaven target="build/generatedLibs.rt"/>
-+    </target>
-+    	
-+	<target name="compile">	
-+        <echo>#######################################</echo>
-+        <echo>###  CommandLine Tool (@Standalone) ###</echo>
-+        <echo>#######################################</echo>
-+        <ant dir="EASyCommandLine" antfile="${build.script.name}" />
-+        
-+        <echo>########################################</echo>
-+        <echo>###  CommandLine Tests (@Standalone) ###</echo>
-+        <echo>########################################</echo>
-+        <ant dir="EASyCommandLineTest" antfile="${build.script.name}" />
-+        
-+        <!--
-+        Create Distribution for standard EASyCommandLine
-+        (correct libs are already included, since they are gathered for compiling)
-+        -->
-+        <mkdir dir="build/generatedLibs/dist"/>
-+        <dist target="build/generatedLibs"/>
-+        
-+        <!-- The same game for runtime... -->
-+    </target>
-+    
-+    <target name="zip">
-+        <copy todir="build/zip/Plugins" failonerror="true" overwrite="true" flatten="true">
-+			<fileset dir="${easy.bundles.dir}">
-+				<include name="**/*.jar" />
-+			</fileset>
-+		</copy>
-+        <copy todir="build/zip/Features" failonerror="true" overwrite="true" flatten="false">
-+			<fileset dir="${projects.features.dir}">
-+				<include name="**/*.xml" />
-+			</fileset>
-+		</copy>
-+        <zip destfile="build/zip/BundleSources.zip" basedir="build/zip"/>
-+    </target>
-+	
-+	<!--target name="all" depends="init, gather.easy.plugins, createLibs, compile"/-->
-+	<target name="all" depends="init, createLibs, compile, zip, createLibs.ex, createLibs.runtime, createLibs.runtimeNoXtext"/>
-+	<target name="all.runtime" depends="init, createLibs, compile, zip, createLibs.ex, createLibs.runtime, createLibs.runtimeNoXtext"/>
-+</project>
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/pom.xml b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/pom.xml
-new file mode 100644
-index 0000000..0e4f429
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/pom.xml
-@@ -0,0 +1,63 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>net.ssehub.easy.producer</groupId>
-+  <artifactId>Standalone</artifactId>
-+  <version>1.2.0-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+  
-+  <build>
-+      <sourceDirectory>${basedir}/src</sourceDirectory>
-+        <plugins>
-+      <plugin>
-+        <artifactId>maven-resources-plugin</artifactId>
-+        <executions>
-+          <execution>
-+            <id>copy-resources</id>
-+            <phase>compile</phase>
-+            <goals>
-+              <goal>copy-resources</goal>
-+            </goals>
-+            <configuration>
-+              <outputDirectory>${basedir}/target/classes</outputDirectory>
-+              <resources>          
-+                <resource>
-+                  <directory>${basedir}/resources</directory>
-+                  <filtering>true</filtering>
-+                </resource>
-+              </resources>              
-+            </configuration>            
-+          </execution>
-+        </executions>
-+      </plugin>        
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>
-+            </plugin>
-+        </plugins>
-+  </build>
-+    
-+  <repositories>       
-+    <repository>
-+      <id>sse</id>
-+      <name>sse</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+      <layout>default</layout>
-+    </repository>
-+  </repositories> 
-+  
-+  <!-- Dependency Management -->  
-+ 
-+ <dependencies>
-+	 <dependency>
-+	   <groupId>de.uni_hildesheim.sse.easyProducer.runtime</groupId>
-+	   <artifactId>EASy</artifactId>
-+	   <version>1.2.0-SNAPSHOT</version>
-+	 </dependency>
-+ </dependencies>
-+  
-+  </project>
-\ No newline at end of file
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/standalone.macros.xml b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/standalone.macros.xml
-new file mode 100644
-index 0000000..eb4b52c
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/bin/standalone.macros.xml
-@@ -0,0 +1,77 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<project name="Standalone.Macros">
-+
-+    <!-- use path with
-+      taskdef name="antgenerator" classname="de.uni_hildesheim.sse.easy.ant.AntGenerator" classpathref="easyTaskDef.lib"
-+     -->
-+    <path id="easyTaskDef.lib" >
-+        <fileset dir="${home.base.dir}/${projects.standalone.dir}/antLibs">
-+            <include name="**/*.jar" />
-+        </fileset>
-+    </path>
-+    
-+    <!-- Prepare distribution in target directory -->
-+    <macrodef name="dist">
-+        <attribute name="target" default="NOT_SET" />
-+        <attribute name="exclude" default="" />
-+        <sequential>
-+          <mkdir dir="@{target}/dist"/>
-+          <copy todir="@{target}/dist">
-+            <fileset dir="@{target}/unbundled">
-+                <include name="**/*.jar" />
-+                <exclude name="@{exclude}" />
-+            </fileset>
-+            <fileset dir="${home.standalone.executer.dir}/lib">
-+                <include name="drools-*.jar" />
-+                <exclude name="@{exclude}" />
-+            </fileset>            
-+            <fileset dir="${home.standalone.executer.dir}/lib">
-+                <include name="org.eclipse.osgi*.jar" />
-+                <exclude name="@{exclude}" />
-+            </fileset>            
-+            <fileset dir="${home.standalone.executer.dir}/build/jar">
-+                <include name="*.jar" />
-+                <exclude name="@{exclude}" />
-+            </fileset>            
-+          </copy>
-+        </sequential>
-+    </macrodef>
-+    
-+    <!-- cannot be bundled due to various conflicts, rans anyway in own process; use maven integration
-+         standalone, copy libs, ... -->
-+    <macrodef name="withMaven">
-+        <attribute name="target" default="NOT_SET" />
-+        <sequential>
-+        <!-- <copy todir="@{target}/dist">
-+            <fileset dir="${home.instantiator.maven.dir}/${build.jar.dir}">
-+                <include name="de.uni_hildesheim.sse.easy.instantiator.maven-standalone.jar" />
-+            </fileset>
-+        </copy>-->
-+        <copy todir="@{target}/dist/lib">
-+            <fileset dir="${home.instantiator.maven.dir}/lib">
-+                <include name="**/*.*" />
-+            </fileset>
-+        </copy>
-+        <!-- <unzip src="@{target}/dist/easy-headless.jar" dest="@{target}/dist">
-+            <patternset>
-+                <include name=".easyStartup"/>
-+            </patternset>
-+        </unzip>
-+<local name="easyStartup.before"/>
-+<loadfile property="easyStartup.before" srcFile="@{target}/dist/.easyStartup"/>
-+<echo message="${easyStartup.before}"/>
-+        <concat append="yes" destfile="@{target}/dist/.easyStartup">ACTIVATOR:de.uni_hildesheim.sse.easy.maven.Activator
-+DS:de.uni_hildesheim.sse.easy.maven.Registration</concat>
-+<local name="easyStartup.after"/>
-+<loadfile property="easyStartup.after" srcFile="@{target}/dist/.easyStartup"/>
-+<echo message="${easyStartup.after}"/>
-+        <jar update="true" destfile="@{target}/dist/easy-headless.jar">
-+            <fileset dir="@{target}/dist">
-+                <include name=".easyStartup" />
-+            </fileset>
-+        </jar>
-+        <delete file="@{target}/dist/.easyStartup"/>-->
-+      </sequential>
-+    </macrodef>
-+    
-+</project>
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/AllTests.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/AllTests.class
-new file mode 100644
-index 0000000..f35bb80
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/AllTests.class
-Binary files differ
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/StandaloneTests.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/StandaloneTests.class
-new file mode 100644
-index 0000000..8da1957
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/StandaloneTests.class
-Binary files differ
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/Test.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/Test.class
-new file mode 100644
-index 0000000..a07c222
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/Test.class
-Binary files differ
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/TestFailedException.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/TestFailedException.class
-new file mode 100644
-index 0000000..e8b3394
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/TestFailedException.class
-Binary files differ
-diff --git a/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/package-info.class b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/package-info.class
-new file mode 100644
-index 0000000..875c999
---- /dev/null
-+++ b/EASy-Standalone/EASy-Standalone-mvn-prebuilt/target/classes/standalone/package-info.class
-Binary files differ
-diff --git a/EASy-Standalone/EASyCommandLine/.gitignore b/EASy-Standalone/EASyCommandLine/.gitignore
-index ae3c172..92145bc 100644
---- a/EASy-Standalone/EASyCommandLine/.gitignore
-+++ b/EASy-Standalone/EASyCommandLine/.gitignore
-@@ -1 +1,2 @@
- /bin/
-+/target/
-\ No newline at end of file
-diff --git a/EASy-Standalone/target/classes/standaloneTest/Test.class b/EASy-Standalone/target/classes/standaloneTest/Test.class
-new file mode 100644
-index 0000000..09ec325
---- /dev/null
-+++ b/EASy-Standalone/target/classes/standaloneTest/Test.class
-Binary files differ
-diff --git a/EASy-Standalone/target/classes/standaloneTest/package-info.class b/EASy-Standalone/target/classes/standaloneTest/package-info.class
-new file mode 100644
-index 0000000..ddce694
---- /dev/null
-+++ b/EASy-Standalone/target/classes/standaloneTest/package-info.class
-Binary files differ
-diff --git a/EASyBuildProperties/global-build.properties b/EASyBuildProperties/global-build.properties
-index d98639f..9a79ab0 100644
---- a/EASyBuildProperties/global-build.properties
-+++ b/EASyBuildProperties/global-build.properties
-@@ -1,4 +1,5 @@
- # Local settings
-+benchmarks.home=${user.home}/benchmarks
- eclipse.home=${user.home}/Eclipse/EclipseCompile_SSE400
- eclipse.launcher=${eclipse.home}/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
- eclipse.product.launcher=${user.home}/Eclipse/ProductBuildEclipse/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
-@@ -29,6 +30,8 @@
- test.eclipse.os=linux
- test.eclipse.ws=gtk
- test.eclipse.arch=x86_64
-+# For performance measurements
-+home.scalelog=${home.base.dir}/ScaleLog/workspace
- 
- # Jubula GUI Test
- jubula.dir=/usr/local/jubula_7.1.00055
-diff --git a/Plugins/EASy-Producer/ScenariosTest/META-INF/MANIFEST.MF b/Plugins/EASy-Producer/ScenariosTest/META-INF/MANIFEST.MF
-index 24a6f36..3814373 100644
---- a/Plugins/EASy-Producer/ScenariosTest/META-INF/MANIFEST.MF
-+++ b/Plugins/EASy-Producer/ScenariosTest/META-INF/MANIFEST.MF
-@@ -19,6 +19,10 @@
-  net.ssehub.easy.instantiation.maven;bundle-version="3.2.3",
-  net.ssehub.easy.reasoning.core,
-  net.ssehub.easy.reasoning.sseReasoner,
-- net.ssehub.easy.producer.core
-+ net.ssehub.easy.producer.core,
-+ de.uni_hildesheim.sse.ivml.tests,
-+ net.ssehub.easy.instantiation.velocity,
-+ net.ssehub.easy.reasoning.sseReasoner.tests,
-+ net.ssehub.easy.reasoning.core.tests 
- Bundle-ClassPath: .
- Export-Package: net.ssehub.easy.producer.scenario_tests
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractEasyScenarioTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractEasyScenarioTest.java
-new file mode 100644
-index 0000000..6345ac7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractEasyScenarioTest.java
-@@ -0,0 +1,30 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.producer.scenario_tests;
-+
-+/**
-+ * Common properties for scenario tests in this project.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+abstract class AbstractEasyScenarioTest extends AbstractScenarioTest {
-+    
-+    @Override
-+    protected String getMeasurementFileName() {
-+        return "measurements-scenarios.tsv";
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractRealTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractRealTests.java
-new file mode 100644
-index 0000000..2f0649a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractRealTests.java
-@@ -0,0 +1,114 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.producer.scenario_tests;
-+
-+import java.util.HashSet;
-+import java.util.Set;
-+
-+import org.junit.Assert;
-+
-+import net.ssehub.easy.basics.progress.ProgressObserver;
-+import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.Configuration;
-+import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.Message;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.model.AbstractVariable;
-+import net.ssehub.easy.varModel.model.ModelQuery;
-+import net.ssehub.easy.varModel.model.ModelQueryException;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
-+
-+/**
-+ * Test infrastructure class for real tests.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public abstract class AbstractRealTests extends AbstractEasyScenarioTest {
-+
-+    protected boolean enableRealTimeAsserts;
-+
-+    // a simple runtime variability test, at least that runtime reasoning seems to be working
-+    @Override
-+    protected Configuration assertConfiguration(net.ssehub.easy.varModel.model.Project prj, Mode mode) {
-+        Configuration result = super.assertConfiguration(prj, mode);
-+        if (enableRealTimeAsserts && "QM".equals(prj.getName())) {
-+            net.ssehub.easy.varModel.confModel.Configuration cfg = result.getConfiguration();
-+            try {
-+                AbstractVariable ppfe2 = ModelQuery.findVariable(prj, "PriorityPip_FamilyElement2", null);
-+                if (null != ppfe2) {
-+                    IDecisionVariable cVar = cfg.getDecision(ppfe2);
-+                    IDecisionVariable eVar = cVar.getNestedElement("capacity");
-+                    // set to extreme high capacity, shall lead to failure
-+                    eVar.setValue(ValueFactory.createValue(eVar.getDeclaration().getType(), 1.0), 
-+                        AssignmentState.ASSIGNED);
-+                    System.out.println("Performing runtime reasoning/propagation...");
-+                    ReasonerConfiguration rCfg = new ReasonerConfiguration();
-+                    rCfg.setRuntimeMode(true);
-+                    for (int r = 1; r <= AbstractTest.NUM_INCREMENTAL_REASONING; r++) {
-+                        String id = mode.doMeasure() ? MeasurementCollector.start(cfg, "SCENARIO-INC", r) : null;
-+                        ReasoningResult res = ReasonerFrontend.getInstance().propagate(prj, 
-+                            cfg, rCfg, ProgressObserver.NO_OBSERVER);
-+                        if (null != id) {
-+                            MeasurementCollector.endAuto(id);
-+                            net.ssehub.easy.reasoning.core.reasoner.AbstractTest.transferReasoningMeasures(
-+                                MeasurementCollector.getInstance(), id, getMeasurements(), res);
-+                            MeasurementCollector.end(id);
-+                        }
-+                        res.logInformation(prj, rCfg);
-+                        Assert.assertTrue("Runtime configuration must have conflict", res.hasConflict());
-+                        assertFailureMessage(res, ppfe2);
-+                    }
-+                }
-+            } catch (ModelQueryException e) {
-+                e.printStackTrace();
-+            } catch (ValueDoesNotMatchTypeException e) {
-+                e.printStackTrace();
-+            } catch (ConfigurationException e) {
-+                e.printStackTrace();
-+            }
-+        }
-+        return result;
-+    }
-+
-+    /**
-+     * Asserts failure messages for each <code>vars</code>.
-+     * 
-+     * @param res the reasoning result
-+     * @param vars the variables that must cause conflicts
-+     */
-+    private static void assertFailureMessage(ReasoningResult res, AbstractVariable... vars) {
-+        Set<AbstractVariable> check = new HashSet<AbstractVariable>();
-+        for (AbstractVariable v : vars) {
-+            check.add(v);
-+        }
-+        for (int m = 0; m < res.getMessageCount(); m++) {
-+            Message msg = res.getMessage(m);
-+            for (Set<AbstractVariable> s : msg.getConstraintVariables()) {
-+                for (AbstractVariable v : s) {
-+                    check.remove(v);
-+                }
-+            }
-+        }
-+        Assert.assertTrue("No runtime failure found for " + check, check.isEmpty());
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractScenarioTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractScenarioTest.java
-index daed96a..d187e47 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractScenarioTest.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AbstractScenarioTest.java
-@@ -28,11 +28,23 @@
- import net.ssehub.easy.instantiation.java.Registration;
- import net.ssehub.easy.producer.core.persistence.PersistenceUtils;
- import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.GeneralMeasures;
-+import net.ssehub.easy.reasoning.core.reasoner.IMeasurementKey;
-+import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
-+import net.ssehub.easy.reasoning.sseReasoner.Measures;
- import net.ssehub.easy.reasoning.sseReasoner.Reasoner;
- import net.ssehub.easy.varModel.management.VarModel;
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
-+import net.ssehub.easy.varModel.varModel.testSupport.TSVMeasurementCollector;
- import test.de.uni_hildesheim.sse.vil.buildlang.AbstractTest;
- import test.de.uni_hildesheim.sse.vil.buildlang.BuildLangTestConfigurer;
- import test.de.uni_hildesheim.sse.vil.buildlang.ITestConfigurer;
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+import static net.ssehub.easy.reasoning.core.reasoner.AbstractTest.NUM_FULL_REASONING;
- 
- /**
-  * Abstract functionality for scenario tests.
-@@ -42,7 +54,78 @@
- public abstract class AbstractScenarioTest extends AbstractTest<Script> {
- 
-     protected static boolean debug = false;
-+    // enable/switch of instantiation by default, helpful for reasoning performance experiments
-+    protected static boolean instantiate = Boolean.valueOf(System.getProperty("easy.scenario.instantiate", "true"));
- 
-+    /**
-+     * Test execution modes.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    protected enum Mode {
-+        
-+        LOAD(false, false, true),
-+        REASON(true, false, true),
-+        REASON_NO_MEASURE(true, false, false),
-+        INSTANTIATE(false, true, true),
-+        REASON_INSTANTIATE(true, true, true);
-+        
-+        private boolean doReason;
-+        private boolean doInstantiate;
-+        private boolean doMeasure;
-+        
-+        /**
-+         * Creates a mode.
-+         * 
-+         * @param doReason do reasoning
-+         * @param doInstantiate do instantiation
-+         * @param doMeasure do measure
-+         */
-+        private Mode(boolean doReason, boolean doInstantiate, boolean doMeasure) {
-+            this.doReason = doReason;
-+            this.doInstantiate = doInstantiate;
-+            this.doMeasure = doMeasure;
-+        }
-+        
-+        /**
-+         * Returns whether reasoning shall be done.
-+         * 
-+         * @return <code>true</code> for reasoning, <code>false</code> else
-+         */
-+        protected boolean doReason() {
-+            return doReason;
-+        }
-+        
-+        /**
-+         * Returns whether instantiation shall be done.
-+         * 
-+         * @return <code>true</code> for instantiation, <code>false</code> else
-+         */
-+        protected boolean doInstantiate() {
-+            return doInstantiate;
-+        }
-+
-+        /**
-+         * Returns whether measurements shall be done and collected.
-+         * 
-+         * @return <code>true</code> for measurements, <code>false</code> else
-+         */
-+        protected boolean doMeasure() {
-+            return doMeasure;
-+        }
-+
-+        /**
-+         * Returns the run count for this mode.
-+         * 
-+         * @param runCount the maximum desired run count if measurement is enabled
-+         * @return {@code runCount} if {@link #doMeasure}, 1 else
-+         */
-+        protected int runCount(int runCount) {
-+            return doMeasure ? runCount : 1;
-+        }
-+       
-+    }
-+    
-     /**
-      * Defines the default model paths (IVML, VIL, VTL).
-      */
-@@ -53,11 +136,35 @@
-      */
-     protected static String[] modelPaths = DEFAULT_MODEL_PATHS;
-     
--    @Override
--    protected void furtherInitialization() {
-+    protected static final IMeasurementKey[] MEASUREMENTS = AbstractTestDescriptor.concat(
-+        Measures.values(), GeneralMeasures.values()); 
-+
-+    /**
-+     * Initializes the reasoner.
-+     */
-+    static void initializeReasoner() {
-         Reasoner reasoner = new Reasoner();
-         ReasonerFrontend.getInstance().getRegistry().register(reasoner);
-         ReasonerFrontend.getInstance().setReasonerHint(reasoner.getDescriptor());
-+        // common measurements
-+        AbstractTestDescriptor.registerMeasurementMappings();
-+        // SSE reasoner measurements
-+        TestDescriptor.registerMeasurementMappings();
-+        // see also MEASUREMENTS!
-+    }
-+    
-+    /**
-+     * Returns a reasoner instance.
-+     * 
-+     * @return the instance
-+     */
-+    protected IReasoner createReasoner() {
-+        return new Reasoner();
-+    }
-+    
-+    @Override
-+    protected void furtherInitialization() {
-+        initializeReasoner();
-         Registration.register();
-         net.ssehub.easy.instantiation.ant.Registration.register();
-         net.ssehub.easy.instantiation.aspectj.Registration.register();
-@@ -78,26 +185,6 @@
-      */
-     protected void configureExecution(String projectName, Map<String, Object> args) {
-     }
--
--    /**
--     * Executes a "real-world" case.
--     * 
--     * @param projectName the name of the project
--     * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
--     * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
--     *   corresponds to name) is located in
--     * @param makeExecutable those files (in relative paths) within the temporary copy of the project to be 
--     *   made executable
--     * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
--     * @return the base directory of the instantiated project
--     * @throws IOException in case of I/O problems
--     */
--    protected File executeCase(String projectName, String[] versions, String caseFolder, 
--        String sourceProjectName, String... makeExecutable) throws IOException {
--        String[] names = new String[1];
--        names[0] = projectName;
--        return executeCase(names, versions, caseFolder, sourceProjectName, makeExecutable);
--    }
-     
-     /**
-      * Projects the specified version from <code>versions</code>.
-@@ -110,6 +197,95 @@
-         return null == versions ? null : versions[index];
-     }
-     
-+    // checkstyle: stop parameter number check
-+
-+    /**
-+     * Executes a "real-world" case.
-+     * 
-+     * @param projectName the name of the project
-+     * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
-+     * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
-+     *   corresponds to name) is located in
-+     * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
-+     * @param mode the testing mode
-+     * @return the base directory of the instantiated project
-+     * @throws IOException in case of I/O problems
-+     */
-+    protected File executeCase(String projectName, String[] versions, String caseFolder, 
-+        String sourceProjectName, Mode mode) throws IOException {
-+        return executeCase(projectName, versions, caseFolder, sourceProjectName, mode, null);
-+    }
-+    
-+    /**
-+     * Executes a "real-world" case.
-+     * 
-+     * @param projectName the name of the project
-+     * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
-+     * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
-+     *   corresponds to name) is located in
-+     * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
-+     * @param mode the testing mode
-+     * @param modifier test modifier instance (may be <b>null</b>)
-+     * @return the base directory of the instantiated project
-+     * @throws IOException in case of I/O problems
-+     */
-+    protected File executeCase(String projectName, String[] versions, String caseFolder, 
-+        String sourceProjectName, Mode mode, ITestModifier modifier) throws IOException {
-+        String[] names = new String[1];
-+        names[0] = projectName;
-+        return executeCase(names, versions, caseFolder, sourceProjectName, mode, modifier);
-+    }
-+
-+    /**
-+     * An instance that may modify certain behavior of a real-world test case on-the-fly.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    protected interface ITestModifier {
-+
-+        /**
-+         * Called after copying files from a base test template to the actual test folder.
-+         * 
-+         * @param target the actual test folder
-+         */
-+        public void postCopy(File target);
-+        
-+    }
-+
-+    /**
-+     * A Test modifier that makes given files executable.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    public static class MakeExecutableTestModifier implements ITestModifier {
-+        
-+        private String[] makeExecutable;
-+
-+        /**
-+         * Creates a modifier with a set of files to be made executable.
-+         * 
-+         * @param makeExecutable those files (in relative paths) within the temporary copy of the project to be 
-+         *   made executable
-+         */
-+        public MakeExecutableTestModifier(String... makeExecutable) {
-+            this.makeExecutable = makeExecutable;
-+        }
-+        
-+        @Override
-+        public void postCopy(File target) {
-+            if (null != makeExecutable) {
-+                for (String fName : makeExecutable) {
-+                    File file = new File(target, fName);
-+                    if (file.exists()) {
-+                        file.setExecutable(true); // don't care for owner as this is intended to run on a temporary copy
-+                    }
-+                }
-+            }
-+        }
-+        
-+    }
-+
-+    
-     /**
-      * Executes a "real-world" case.
-      * 
-@@ -118,15 +294,32 @@
-      * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
-      * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
-      *   corresponds to name) is located in
--     * @param makeExecutable those files (in relative paths) within the temporary copy of the project to be 
--     *   made executable
-      * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
--     * @return the base directory of the instantiated project
-+     * @param mode the testing mode
-+     * @return the base directory of the instantiated project (<b>null</b> for no instantiation, i.e., do not assert)
-+     * @throws IOException in case of I/O problems
-+     */
-+    protected File executeCase(String[] names, String[] versions, String caseFolder, String sourceProjectName, 
-+        Mode mode) throws IOException {
-+        return executeCase(names, versions, caseFolder, sourceProjectName, mode, null);
-+    }
-+    
-+    /**
-+     * Executes a "real-world" case.
-+     * 
-+     * @param names the name of the project, if only one entry the project folder / model name, else project folder 
-+     * name, (optional) IVML/VIL model name, (optional) VIL model name
-+     * @param versions the version of the models, index 0 IVML, index 1 VIL build file (may be <b>null</b>)
-+     * @param caseFolder an optional set of intermediary folders where the actual case study (innermost folder 
-+     *   corresponds to name) is located in
-+     * @param sourceProjectName the optional name of the source project (null if same as <code>projectName</code>)
-+     * @param mode the testing mode
-+     * @param modifier test modifier instance (may be <b>null</b>)
-+     * @return the base directory of the instantiated project (<b>null</b> for no instantiation, i.e., do not assert)
-      * @throws IOException in case of I/O problems
-      */
-     protected File executeCase(String[] names, String[] versions, String caseFolder, 
--        String sourceProjectName, String... makeExecutable) throws IOException {
--        ProgressObserver observer = ProgressObserver.NO_OBSERVER;
-+        String sourceProjectName, Mode mode, ITestModifier modifier) throws IOException {
-         ArtifactFactory.clear();
-         String projectName = names[0];
-         String iModelName = names.length > 1 ? names[1] : projectName;
-@@ -140,59 +333,137 @@
-             File sBase = new File(getTestFolder(), caseFolder + sourceProjectName);
-             FileUtils.copyDirectory(sBase, sourceProjectFolder);
-         }
--        makeExecutable(temp, makeExecutable);
-+        if (null != modifier) {
-+            modifier.postCopy(temp);
-+        }
-         File ivmlFolder = getIvmlFolderIn(temp);
-         File vilFolder = getVilFolderIn(temp);
-         File vtlFolder = getVtlFolderIn(temp);
-         activateBuildProperties(vilFolder);
-+        System.out.println("Registering model location...");
-+        doLocations(ivmlFolder, vilFolder, vtlFolder, true);
-+        System.out.println("Loading IVML...");
-+        net.ssehub.easy.varModel.model.Project iModel = obtainIvmlModel(iModelName, project(versions, 0), ivmlFolder);
-+        Configuration config = assertConfiguration(iModel, mode);
-+        File targetFile = null;
-+        if (instantiate && mode.doInstantiate()) {
-+            File sourceFile = temp.getAbsoluteFile();
-+            Project source = createProjectInstance(sourceFile);
-+            targetFile = sourceFile;
-+            Project target = source; // adjust base below if changed
-+            if (null != sourceProjectFolder) {
-+                source = createProjectInstance(sourceProjectFolder.getAbsoluteFile());
-+            }
-+            Map<String, Object> param = new HashMap<String, Object>();
-+            Project[] tmp = new Project[1]; // the EASy way to call it
-+            tmp[0] = source;
-+            param.put(Executor.PARAM_SOURCE, tmp);
-+            param.put(Executor.PARAM_TARGET, target);
-+            param.put(Executor.PARAM_CONFIG, config);
-+            configureExecution(projectName, param);
-+            System.out.println("Executing VIL...");
-+            TracerFactory current = TracerFactory.getInstance();
-+            TracerFactory tFactory = getTracerFactory();
-+            TracerFactory.setDefaultInstance(tFactory);
-+            Script script = obtainVilModel(vModelName, project(versions, 1), vilFolder);
-+            Executor executor = new Executor(script, param);
-+            executor.addBase(targetFile);
-+            try {
-+                executor.execute();
-+            } catch (VilException e) {
-+                System.out.println(tFactory);
-+                e.printStackTrace(System.out);
-+                Assert.fail("VIL execution issue " + e);
-+            }
-+            println(tFactory, debug);
-+            TracerFactory.setDefaultInstance(current);
-+        }
-+        doLocations(ivmlFolder, vilFolder, vtlFolder, false);
-+        return targetFile;
-+    }
-+    
-+    /**
-+     * Operate on the locations.
-+     * 
-+     * @param ivmlFolder the IVML folder
-+     * @param vilFolder the VIL folder
-+     * @param vtlFolder the VTL folder
-+     * @param add <code>true</code> for adding as locations, <code>false</code> for removing
-+     */
-+    private void doLocations(File ivmlFolder, File vilFolder, File vtlFolder, boolean add) {
-         try {
--            VarModel.INSTANCE.locations().addLocation(ivmlFolder, observer);
-             // those loaders shall already be registered through subclassing AbstractTest
--            BuildModel.INSTANCE.locations().addLocation(vilFolder, observer);
--            TemplateModel.INSTANCE.locations().addLocation(vtlFolder, observer);
-+            if (add) {
-+                VarModel.INSTANCE.locations().addLocation(ivmlFolder, ProgressObserver.NO_OBSERVER);
-+                BuildModel.INSTANCE.locations().addLocation(vilFolder, ProgressObserver.NO_OBSERVER);
-+                TemplateModel.INSTANCE.locations().addLocation(vtlFolder, ProgressObserver.NO_OBSERVER);
-+            } else {
-+                VarModel.INSTANCE.locations().removeLocation(ivmlFolder, ProgressObserver.NO_OBSERVER);
-+                BuildModel.INSTANCE.locations().removeLocation(vilFolder, ProgressObserver.NO_OBSERVER);
-+                TemplateModel.INSTANCE.locations().removeLocation(vtlFolder, ProgressObserver.NO_OBSERVER);
-+            }
-         } catch (ModelManagementException e) {
-             Assert.fail("unexpected exception (VIL/VTL): " + e.getMessage());
-         }
--        net.ssehub.easy.varModel.model.Project iModel = obtainIvmlModel(iModelName, project(versions, 0), ivmlFolder);
--        Configuration config = new Configuration(new net.ssehub.easy.varModel.confModel.Configuration(iModel));
--        File sourceFile = temp.getAbsoluteFile();
--        Project source = createProjectInstance(sourceFile);
--        File targetFile = sourceFile;
--        Project target = source; // adjust base below if changed
--        if (null != sourceProjectFolder) {
--            source = createProjectInstance(sourceProjectFolder.getAbsoluteFile());
-+    }
-+
-+    // checkstyle: resume parameter number check
-+
-+    /**
-+     * Creates and asserts a VIL configuration and checks the reasoning/propagation result for no conflicts.
-+     * 
-+     * @param prj the project to create the configuration for
-+     * @param mode the testing mode
-+     * @return the VIL configuration
-+     */
-+    protected Configuration assertConfiguration(net.ssehub.easy.varModel.model.Project prj, Mode mode) {
-+        System.out.println("Creating VIL configuration...");
-+        Configuration config = new Configuration(new net.ssehub.easy.varModel.confModel.Configuration(prj));
-+        Assert.assertNotNull("VIL configuration must not be null", config);
-+        if (mode.doReason()) {
-+            System.out.println("Performing reasoning/propagation...");
-+            ReasonerConfiguration rCfg = new ReasonerConfiguration();
-+            rCfg.setTimeout(5000); // to be on the safe side
-+            TSVMeasurementCollector.ensureCollector(new File(getTestDataDir(), "temp/" + getMeasurementFileName()));
-+            ReasoningResult result = null;
-+            net.ssehub.easy.varModel.confModel.Configuration cfg = config.getConfiguration();
-+            for (int r = 1, n = mode.runCount(NUM_FULL_REASONING); r <= n; r++) {
-+                String id = mode.doMeasure() ? MeasurementCollector.start(cfg, "SCENARIO", r) : null;
-+                ReasoningResult res = ReasonerFrontend.getInstance().propagate(prj, 
-+                    cfg.getConfiguration(), rCfg, ProgressObserver.NO_OBSERVER);
-+                if (null != id) {
-+                    MeasurementCollector.endAuto(id);
-+                    net.ssehub.easy.reasoning.core.reasoner.AbstractTest.transferReasoningMeasures(
-+                        MeasurementCollector.getInstance(), id, getMeasurements(), res);
-+                    MeasurementCollector.end(id);
-+                }
-+                if (n > 1) {
-+                    // we want to cause multiple reasoner calls, not re-reasoning on the same configuration here
-+                    cfg = new net.ssehub.easy.varModel.confModel.Configuration(prj);
-+                }
-+                result = null == result ? res : result;
-+            }
-+            result.logInformation(prj, rCfg);
-+            Assert.assertFalse("Reasoning must not have a conflict", result.hasConflict());
-         }
--        Map<String, Object> param = new HashMap<String, Object>();
--        Project[] tmp = new Project[1]; // the EASy way to call it
--        tmp[0] = source;
--        param.put(Executor.PARAM_SOURCE, tmp);
--        param.put(Executor.PARAM_TARGET, target);
--        param.put(Executor.PARAM_CONFIG, config);
--        configureExecution(projectName, param);
--        
--        TracerFactory current = TracerFactory.getInstance();
--        TracerFactory tFactory = getTracerFactory();
--        TracerFactory.setDefaultInstance(tFactory);
--        Script script = obtainVilModel(vModelName, project(versions, 1), vilFolder);
--        Executor executor = new Executor(script, param);
--        executor.addBase(targetFile);
--        try {
--            executor.execute();
--        } catch (VilException e) {
--            System.out.println(tFactory);
--            e.printStackTrace(System.out);
--            Assert.fail("VIL execution issue " + e);
--        }
--        println(tFactory, debug);
--        TracerFactory.setDefaultInstance(current);
--        try {
--            VarModel.INSTANCE.locations().removeLocation(ivmlFolder, observer);
--            BuildModel.INSTANCE.locations().removeLocation(vilFolder, observer);
--            TemplateModel.INSTANCE.locations().removeLocation(vtlFolder, observer);
--        } catch (ModelManagementException e) {
--            Assert.fail("unexpected exception: " + e.getMessage());
--        }
--        return targetFile;
-+        return config;
-+    }
-+    
-+    /**
-+     * Returns the name of the measurement file.
-+     * 
-+     * @return the name of the measurement file
-+     */
-+    protected abstract String getMeasurementFileName();
-+
-+    /**
-+     * Returns the measurements to be collected for the measurement collector.
-+     * Requires registration of measurement keys!
-+     * 
-+     * @return the measurements
-+     */
-+    protected IMeasurementKey[] getMeasurements() {
-+        return MEASUREMENTS;
-     }
- 
-     /**
-@@ -338,23 +609,6 @@
-             Assert.fail("unexpected exeption: " + e);
-         }
-         return result;
--    }
--    
--    /**
--     * Make the given files (relative to <code>base</code>) executable.
--     * 
--     * @param base the base directory
--     * @param makeExecutable a set of relative files (may be <b>null</b>)
--     */
--    private static void makeExecutable(File base, String[] makeExecutable) {
--        if (null != makeExecutable) {
--            for (String fName : makeExecutable) {
--                File file = new File(base, fName);
--                if (file.exists()) {
--                    file.setExecutable(true); // don't care for owner as this is intended to run on a temporary copy
--                }
--            }
--        }
-     }
-     
-     /**
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AllTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AllTests.java
-index 45348a3..abeaea1 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AllTests.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/AllTests.java
-@@ -9,6 +9,12 @@
-  * @author Holger Eichelberger
-  */
- @RunWith(Suite.class)
--@Suite.SuiteClasses({ RealTests.class, DynamicFreezeTest.class, ConceptsTests.class, ExperimentsTests.class })
-+@Suite.SuiteClasses({ 
-+    ScenarioRampUpTest.class, // must be first
-+    RealTests.class, 
-+    DynamicFreezeTest.class, 
-+    ConceptsTests.class, 
-+    ExperimentsTests.class, 
-+    ExperimentsControlTests.class})
- public class AllTests {
- }
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ConceptsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ConceptsTests.java
-index ac42363..a351008 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ConceptsTests.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ConceptsTests.java
-@@ -48,7 +48,7 @@
-  * 
-  * @author Holger Eichelberger
-  */
--public class ConceptsTests extends AbstractScenarioTest {
-+public class ConceptsTests extends AbstractEasyScenarioTest {
- 
-     @Override
-     protected File getTestFolder() {
-@@ -270,6 +270,7 @@
-             rf.getRegistry().register(new net.ssehub.easy.reasoning.sseReasoner.Reasoner());
-         }
-         ReasoningResult res = rf.propagate(ivmlModel, config, rCfg, ProgressObserver.NO_OBSERVER);
-+        res.logInformation(ivmlModel, rCfg);
-         if (success) { 
-             Assert.assertFalse("The configuration for " + modelName + " shall be free of conflicts", res.hasConflict());
-         } else {
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/DynamicFreezeTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/DynamicFreezeTest.java
-index dce734a..3a765b2 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/DynamicFreezeTest.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/DynamicFreezeTest.java
-@@ -69,7 +69,7 @@
-  * @author El-Sharkawy
-  *
-  */
--public class DynamicFreezeTest extends AbstractScenarioTest {
-+public class DynamicFreezeTest extends AbstractEasyScenarioTest {
- 
-     /**
-      * This modifier is used to freeze all relevant declarations inside the CFG projects of Qualimaster.
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsControlTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsControlTests.java
-new file mode 100644
-index 0000000..1fe8da9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsControlTests.java
-@@ -0,0 +1,418 @@
-+package net.ssehub.easy.producer.scenario_tests;
-+
-+import java.io.File;
-+import java.io.IOException;
-+import java.util.List;
-+
-+import org.junit.AfterClass;
-+import org.junit.Assert;
-+import org.junit.BeforeClass;
-+import org.junit.Ignore;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.basics.progress.ProgressObserver;
-+import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
-+import net.ssehub.easy.reasoning.core.reasoner.Message;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.model.AbstractVariable;
-+import net.ssehub.easy.varModel.model.IvmlException;
-+import net.ssehub.easy.varModel.model.ModelQuery;
-+import net.ssehub.easy.varModel.model.ModelQueryException;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.datatypes.IResolutionScope;
-+import net.ssehub.easy.varModel.model.values.CompoundValue;
-+import net.ssehub.easy.varModel.model.values.ContainerValue;
-+import net.ssehub.easy.varModel.model.values.IntValue;
-+import net.ssehub.easy.varModel.model.values.NullValue;
-+import net.ssehub.easy.varModel.model.values.Value;
-+import net.ssehub.easy.varModel.persistency.IVMLWriter;
-+import test.de.uni_hildesheim.sse.AbstractTest;
-+
-+/**
-+ * A test class for blackbox testing parser and type resolution of 
-+ * IVML files contributed from "external" sources. These are basically IVML tests, which 
-+ * cannot be executed in IVML.tests as the reasoner dependency is not available there. 
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class ExperimentsControlTests extends AbstractTest {
-+
-+    /**
-+     * Creates a file in {@link #getTestDataDir()}.
-+     * 
-+     * @param name
-+     *            the name of the file (excluding ".ivml")
-+     * @return the file
-+     */
-+    private static final File createFile(String name) {
-+        return new File(getTestDataDir(), "experiments/control/" + name + ".ivml");
-+    }
-+    
-+    /**
-+     * Initializes the test.
-+     */
-+    @BeforeClass
-+    public static void startUp() {
-+        setTestDataDir("easy_producer.scenarios.testdata.home");
-+        AbstractTest.startUp();
-+        AbstractScenarioTest.initializeReasoner();
-+        IVMLWriter.setUseIvmlWhitespace(true);
-+    }
-+
-+    /**
-+     * Shuts down the test.
-+     */
-+    @AfterClass
-+    public static void shutDown() {
-+        AbstractTest.shutDown();
-+        setTestDataDir(TESTDATA_SYSTEM_PROPERTY);
-+    }
-+
-+    /**
-+     * Creates a file name, obtains the the project, asserts equality, creates a configuration and returns
-+     * the configuration.
-+     * 
-+     * @param name the name of the project
-+     * @return the configuration
-+     * @throws IOException in case that loading fails
-+     */
-+    private Configuration createAndAssertEqual(String name) throws IOException {
-+        List<Project> prj = assertEqual(createFile(name), null, null);
-+        Assert.assertTrue(null != prj && 1 == prj.size());
-+        Project project = prj.get(0);
-+        Assert.assertNotNull(project);
-+        return new Configuration(project);
-+    }
-+    
-+    /**
-+     * Asserts and returns a decision variable.
-+     * 
-+     * @param config the configuration to read from
-+     * @param name the name of the variable
-+     * @return the variable if it exists
-+     * @throws ModelQueryException if finding the variable fails
-+     */
-+    private IDecisionVariable assertDecisionVariable(Configuration config, String name) throws ModelQueryException {
-+        AbstractVariable decl = ModelQuery.findVariable(config.getProject(), name, null);
-+        Assert.assertNotNull(decl);
-+        IDecisionVariable var = config.getDecision(decl);
-+        Assert.assertNotNull(var);
-+        return var;
-+    }
-+
-+    /**
-+     * Asserts an enumeration value.
-+     * 
-+     * @param scope the scope to search the expected value within
-+     * @param expected the (qualified) expected value as a string (may be <b>null</b>, requiring that 
-+     *     <code>value</code> is also <b>null</b>)
-+     * @param value the actual value
-+     * @throws ModelQueryException if querying the model for <code>expected</code> failed
-+     * @throws IvmlException if creating the value for <code>expected</code> failed
-+     */
-+    private static void assertEnumValue(IResolutionScope scope, String expected, Value value) 
-+        throws ModelQueryException, IvmlException {
-+        if (null == expected) {
-+            Assert.assertTrue(value == null || NullValue.INSTANCE == value);
-+        } else {
-+            Value enumVal = ModelQuery.enumLiteralAsValue(scope, expected);
-+            Assert.assertEquals(enumVal, value);
-+        }
-+    }
-+
-+    /**
-+     * Asserts an enumeration value.
-+     * 
-+     * @param config the configuration to take the value/scope from
-+     * @param expected the (qualified) expected value as a string (may be <b>null</b>, requiring that 
-+     *     the value of <code>slot</code> is also <b>null</b>)
-+     * @param value the actual compound value
-+     * @param slot the slot within <code>value</code> to test for
-+     * @throws ModelQueryException if querying the model for <code>expected</code> failed
-+     * @throws IvmlException if creating the value for <code>expected</code> failed
-+     */
-+    private static void assertEnumValue(Configuration config, String expected, CompoundValue value, String slot) 
-+        throws ModelQueryException, IvmlException {
-+        assertEnumValue(config.getProject(), expected, value.getNestedValue(slot));
-+    }
-+
-+    /**
-+     * Asserts an integer value.
-+     * 
-+     * @param config the configuration to take the value/scope from
-+     * @param expected the (qualified) expected value (may be <b>null</b>, requiring that 
-+     *     the value of <code>slot</code> is also <b>null</b>)
-+     * @param value the actual compound value
-+     * @param slot the slot within <code>value</code> to test for
-+     */
-+    private static void assertIntValue(Configuration config, Integer expected, CompoundValue value, String slot) {
-+        Value val = value.getNestedValue(slot);
-+        if (null == expected) {
-+            Assert.assertNull(val);
-+        } else {
-+            Assert.assertTrue(val instanceof IntValue);
-+            Assert.assertEquals(expected, ((IntValue) val).getValue()); 
-+        }
-+    }
-+
-+    /**
-+     * Tests variant models with same variables/expected results like "defaults1".
-+     * 
-+     * @param name the name of the model/file
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    private void testDefaults(String name) throws IOException, ModelQueryException, IvmlException {
-+        Configuration config = createAndAssertEqual(name);
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
-+        ReasoningResult res = doReasoning(config, rConfig);
-+        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
-+        //Configuration.printConfig(System.out, config);
-+
-+        IDecisionVariable da1 = assertDecisionVariable(config, "a1");
-+        IDecisionVariable da2 = assertDecisionVariable(config, "a2");
-+        CompoundValue v1 = (CompoundValue) da1.getValue();
-+        CompoundValue v2 = (CompoundValue) da2.getValue();
-+
-+        assertEnumValue(config, "Kind.kind1", v1, "produces");
-+        assertEnumValue(config, null, v1, "consumes");
-+        assertIntValue(config, null, v1, "count");
-+        assertEnumValue(config, null, v2, "produces");
-+        assertEnumValue(config, "Kind.kind2", v2, "consumes");
-+        assertIntValue(config, null, v2, "count");
-+
-+        IDecisionVariable dr1 = assertDecisionVariable(config, "r1");
-+        IDecisionVariable dw1 = assertDecisionVariable(config, "w1");
-+        CompoundValue w1 = (CompoundValue) dw1.getValue();
-+        CompoundValue r1 = (CompoundValue) dr1.getValue();
-+
-+        assertEnumValue(config, "Kind.kind1", r1, "produces");
-+        assertEnumValue(config, null, r1, "consumes");
-+        assertIntValue(config, 5, r1, "count");
-+        assertEnumValue(config, null, w1, "produces");
-+        assertEnumValue(config, "Kind.kind2", w1, "consumes");
-+        assertIntValue(config, 10, w1, "count");
-+        
-+        IDecisionVariable dseq = assertDecisionVariable(config, "seq");
-+        ContainerValue seq = (ContainerValue) dseq.getValue();
-+        Assert.assertEquals(2, seq.getElementSize());
-+        CompoundValue s1 = (CompoundValue) seq.getElement(0);
-+        CompoundValue s2 = (CompoundValue) seq.getElement(1);
-+
-+        assertEnumValue(config, "Kind.kind1", s1, "produces");
-+        assertEnumValue(config, null, s1, "consumes");
-+        assertIntValue(config, 6, s1, "count");
-+        assertEnumValue(config, null, s2, "produces");
-+        assertEnumValue(config, "Kind.kind2", s2, "consumes");
-+        assertIntValue(config, 7, s2, "count");
-+    }
-+    
-+    /**
-+     * Tests "defaults1". Uses simple constraints.
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void testControlDefaults1() throws IOException, ModelQueryException, IvmlException {
-+        testDefaults("defaults1");
-+    }
-+
-+    /**
-+     * Tests "defaults2". Uses shadowed slots.
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void testControlDefaults2() throws IOException, ModelQueryException, IvmlException {
-+        testDefaults("defaults2");
-+    }
-+
-+    /**
-+     * Tests "defaults3". This has not completely the same semantics as "defaults1" as slots
-+     * are not uninitialized (Java <b>null</b>) rather than containing the {@link NullValue#INSTANCE IVML null}.
-+     * Uses assigning dynamic-dispatch user-defined operations.
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void testControlDefaults3() throws IOException, ModelQueryException, IvmlException {
-+        testDefaults("defaults3");
-+    }
-+
-+    /**
-+     * Tests "defaults4". Uses assigning dynamic-dispatch user-defined operations.
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void testControlDefaults4() throws IOException, ModelQueryException, IvmlException {
-+        testDefaults("defaults4");
-+    }
-+
-+    /**
-+     * Tests inherited sub-constraints enabled/disabled through default values (from QM).
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Test
-+    public void testSub() throws IOException, ModelQueryException, IvmlException {
-+        Configuration config = createAndAssertEqual("configSub");
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
-+        ReasoningResult res = doReasoning(config, rConfig);
-+        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
-+    }
-+    
-+    /**
-+     * A simple control file test (contributed by M. Keunecke).
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Test
-+    public void simpleTest() throws IOException, ModelQueryException, IvmlException {
-+        Configuration config = createAndAssertEqual("simple/Einfache_Steuerdatei_0");
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
-+        ReasoningResult res = doReasoning(config, rConfig);
-+        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
-+    }
-+
-+    /**
-+     * A test for an existence quantor in a user defined operation utilized by an all quantor (contributed by 
-+     * M. Keunecke).
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Test
-+    public void existsTest() throws IOException, ModelQueryException, IvmlException {
-+        Configuration config = createAndAssertEqual("exists/BaseSD_0");
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
-+        ReasoningResult res = doReasoning(config, rConfig);
-+        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
-+    }
-+
-+    /**
-+     * A test for an asymmetric quantor relation (contributed by M. Keunecke).
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void asymmetricTest() throws IOException, ModelQueryException, IvmlException {
-+        Configuration config = createAndAssertEqual("assymetric/ActivityGraph2Configuration_0");
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
-+        ReasoningResult res = doReasoning(config, rConfig);
-+        // dependenciesAntisymmetry does not fit configuration!
-+        Assert.assertTrue("there should be reasoning conflicts", res.hasConflict());
-+        Assert.assertEquals(1, res.getMessageCount());
-+        Message msg = res.getMessage(0);
-+        boolean found = false;
-+        for (IDecisionVariable v : msg.getNamedConstraintVariables()) {
-+            found |= v.getDeclaration().getName().equals("dependenciesAntisymmetry");
-+        }
-+        Assert.assertTrue("Constraint dependenciesAntisymmetry shall fail", found);
-+    }
-+
-+    /**
-+     * A test for a failing activity graph configuration (contributed by M. Keunecke, J. Hagedorn).
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void activityTestFail() throws IOException, ModelQueryException, IvmlException {
-+        Configuration config = createAndAssertEqual("activity/ActivityGraphConfiguration_0");
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
-+        ReasoningResult res = doReasoning(config, rConfig);
-+        // checkSheetAfterReadSheets does not fit configuration!
-+        for (int m = 0; m < res.getMessageCount(); m++) {
-+            System.out.println(res.getMessage(m));
-+        }
-+        Assert.assertTrue("there should be reasoning conflicts", res.hasConflict());
-+    }
-+
-+    /**
-+     * A test for a succeeding activity graph configuration (contributed by M. Keunecke, J. Hagedorn).
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     * @throws IvmlException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void activityTest() throws IOException, ModelQueryException, IvmlException {
-+        Configuration config = createAndAssertEqual("activity/ActivityGraphConfiguration_1");
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_NONE);
-+        ReasoningResult res = doReasoning(config, rConfig);
-+        // dependenciesAntisymmetry does not fit configuration!
-+        for (int m = 0; m < res.getMessageCount(); m++) {
-+            System.out.println(res.getMessage(m));
-+        }
-+        Assert.assertFalse("there should not be reasoning conflicts", res.hasConflict());
-+    }
-+    
-+    /**
-+     * Performs the reasoning.
-+     * 
-+     * @param cfg the configuration
-+     * @param rConfig the reasoner configuration
-+     * @return the reasoning result
-+     */
-+    private ReasoningResult doReasoning(Configuration cfg, ReasonerConfiguration rConfig) {
-+        ReasoningResult res = ReasonerFrontend.getInstance().propagate(cfg.getProject(), cfg, rConfig, 
-+            ProgressObserver.NO_OBSERVER);
-+        res.logInformation(cfg.getProject(), rConfig);
-+        return res;
-+    }
-+
-+    @Override
-+    protected boolean checkWriteback(File file) {
-+        return false;
-+    }
-+
-+    /**
-+     * Tests a quantified type expression (contributed by M. Keunecke, J. Hagedorn).
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void typeTest() throws IOException {
-+        Configuration config = createAndAssertEqual("types/Testprodukt_0");
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        ReasoningResult res = doReasoning(config, rConfig);
-+        Assert.assertTrue("there should be reasoning conflicts", res.hasConflict());
-+    }
-+    
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsTests.java
-index 3306ee5..1c75891 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsTests.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ExperimentsTests.java
-@@ -28,7 +28,7 @@
-  * 
-  * @author Holger Eichelberger
-  */
--public class ExperimentsTests extends AbstractScenarioTest {
-+public class ExperimentsTests extends AbstractEasyScenarioTest {
- 
-     private static ExperimentsTests tests;
-     
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalConceptsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalConceptsTests.java
-index 5aca03d..a786383 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalConceptsTests.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalConceptsTests.java
-@@ -19,9 +19,13 @@
- 
- import org.junit.After;
- import org.junit.Before;
-+import org.junit.Ignore;
- import org.junit.Test;
- 
- import net.ssehub.easy.basics.modelManagement.ModelManagementException;
-+import net.ssehub.easy.basics.progress.ProgressObserver;
-+import net.ssehub.easy.producer.core.persistence.PersistenceUtils;
-+import net.ssehub.easy.producer.core.persistence.standard.Persistencer;
- 
- /**
-  * Tests that cannot be executed on Jenkins by now.
-@@ -38,6 +42,7 @@
-     @Before
-     public void startup() throws ModelManagementException {
-         super.startup();
-+        PersistenceUtils.loadDefaultModels(Persistencer.class.getClassLoader(), ProgressObserver.NO_OBSERVER, null);
-     }
- 
-     /**
-@@ -54,6 +59,7 @@
-      * Tests availability of IVML default library. Basically the same test as for EASy core
-      * but here without initializing the full EASy core.
-      */
-+    @Ignore("IVML")
-     @Test
-     public void testDefaultLib() {
-         HashMap<String, Object> expected = new HashMap<String, Object>();
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalExperimentsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalExperimentsTests.java
-index 32e4218..3ab0529 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalExperimentsTests.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalExperimentsTests.java
-@@ -349,44 +349,47 @@
-         TimeTracerFactory factory = new TimeTracerFactory();
-         TracerFactory.setInstance(factory);
-         //TracerFactory.setInstance(new ConsoleTracerFactory(true));
--        File tmp = executeCase("xmlExperiments", null, "", null);
--        File expected = new File(tmp, "GenTopoHardwareCorrelationFinancialPom.xml");
--        TextTestUtils.assertFileEquality(new File(tmp, "hwAlg.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "hwAlg1.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "hwAlg2.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "hwAlg3.xml"), expected);
-+        // no reasoning: we just need specific structures/values
-+        File tmp = executeCase("xmlExperiments", null, "", null, Mode.INSTANTIATE);
-+        if (null != tmp) {
-+            File expected = new File(tmp, "GenTopoHardwareCorrelationFinancialPom.xml");
-+            TextTestUtils.assertFileEquality(new File(tmp, "hwAlg.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "hwAlg1.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "hwAlg2.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "hwAlg3.xml"), expected);
-+    
-+            expected = new File(tmp, "InterfacesPom.xml");
-+            TextTestUtils.assertFileEquality(new File(tmp, "ifPom.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "ifPom1.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "ifPom2.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "ifPom3.xml"), expected);
-+    
-+            expected = new File(tmp, "pipelinePom.xml");
-+            TextTestUtils.assertFileEquality(new File(tmp, "pip.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "pip1.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "pip2.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "pip3.xml"), expected);
-+            
-+            expected = new File(tmp, "pipelines.xml");
-+            TextTestUtils.assertFileEquality(new File(tmp, "pips.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "pips1.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "pips2.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "pips3.xml"), expected);
-+            
-+            expected = new File(tmp, "ModelGenPom.xml");
-+            TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom1.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom2.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom3.xml"), expected);
-+    
-+            expected = new File(tmp, "pipSettings.xml");
-+            TextTestUtils.assertFileEquality(new File(tmp, "set.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "set1.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "set2.xml"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "set3.xml"), expected);
- 
--        expected = new File(tmp, "InterfacesPom.xml");
--        TextTestUtils.assertFileEquality(new File(tmp, "ifPom.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "ifPom1.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "ifPom2.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "ifPom3.xml"), expected);
--
--        expected = new File(tmp, "pipelinePom.xml");
--        TextTestUtils.assertFileEquality(new File(tmp, "pip.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "pip1.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "pip2.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "pip3.xml"), expected);
--        
--        expected = new File(tmp, "pipelines.xml");
--        TextTestUtils.assertFileEquality(new File(tmp, "pips.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "pips1.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "pips2.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "pips3.xml"), expected);
--        
--        expected = new File(tmp, "ModelGenPom.xml");
--        TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom1.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom2.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "modelGenPom3.xml"), expected);
--
--        expected = new File(tmp, "pipSettings.xml");
--        TextTestUtils.assertFileEquality(new File(tmp, "set.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "set1.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "set2.xml"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "set3.xml"), expected);
--        
--        factory.printResults();
-+            factory.printResults();
-+        }
-     }
- 
-     /**
-@@ -396,72 +399,74 @@
-      */
-     @Test
-     public void testJava() throws IOException {
--        File tmp = executeCase("javaExperiments", null, "", null);
--
--        File expected = new File(tmp, "FCorrelationFinancial.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "fcFam.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "fcFam0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "fcFam1.java"), expected);
--
--        expected = new File(tmp, "IFCorrelationFinancial.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "fcFamI.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "fcFamI0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "fcFamI1.java"), expected);
--
--        expected = new File(tmp, "IPriorityDataSink.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnk.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnk0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnk1.java"), expected);
--
--        expected = new File(tmp, "PriorityDataSink.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnkI.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnkI0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnkI1.java"), expected);
--
--        expected = new File(tmp, "PriorityDataSinkProfiling.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP1.java"), expected);
--        
--        expected = new File(tmp, "ISpringFinancialData.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrc.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrc0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrc1.java"), expected);
--        
--        expected = new File(tmp, "SpringFinancialData.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrcI.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrcI0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrcI1.java"), expected);
--        
--        expected = new File(tmp, "SpringFinancialDataProfiling.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP1.java"), expected);
--
--        expected = new File(tmp, "SpringFinancialDataProfilingImpl.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI1.java"), expected);
--
--        expected = new File(tmp, "SerializationRegistry.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "serReg.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "serReg0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "serReg1.java"), expected);
--
--        expected = new File(tmp, "FCorrelationFinancialSerializers.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor1.java"), expected);
--        
--        expected = new File(tmp, "GenTopoHardwareFinancialCorrReceiver.cpp");
--        TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver.cpp"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver0.cpp"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver1.cpp"), expected);
--
--        expected = new File(tmp, "GenTopoHardwareFinancialCorrSender.cpp");
--        TextTestUtils.assertFileEquality(new File(tmp, "FCorSender.cpp"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "FCorSender0.cpp"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "FCorSender1.cpp"), expected);
-+        // no reasoning: we just need specific structures/values
-+        File tmp = executeCase("javaExperiments", null, "", null, Mode.INSTANTIATE); 
-+        if (null != tmp) {
-+            File expected = new File(tmp, "FCorrelationFinancial.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "fcFam.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "fcFam0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "fcFam1.java"), expected);
-+    
-+            expected = new File(tmp, "IFCorrelationFinancial.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "fcFamI.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "fcFamI0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "fcFamI1.java"), expected);
-+    
-+            expected = new File(tmp, "IPriorityDataSink.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnk.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnk0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnk1.java"), expected);
-+    
-+            expected = new File(tmp, "PriorityDataSink.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnkI.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnkI0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnkI1.java"), expected);
-+    
-+            expected = new File(tmp, "PriorityDataSinkProfiling.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "psSnkIP1.java"), expected);
-+            
-+            expected = new File(tmp, "ISpringFinancialData.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrc.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrc0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrc1.java"), expected);
-+            
-+            expected = new File(tmp, "SpringFinancialData.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrcI.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrcI0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrcI1.java"), expected);
-+            
-+            expected = new File(tmp, "SpringFinancialDataProfiling.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "spSrcIP1.java"), expected);
-+    
-+            expected = new File(tmp, "SpringFinancialDataProfilingImpl.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "spProfSrcI1.java"), expected);
-+    
-+            expected = new File(tmp, "SerializationRegistry.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "serReg.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "serReg0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "serReg1.java"), expected);
-+    
-+            expected = new File(tmp, "FCorrelationFinancialSerializers.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "tSerFCor1.java"), expected);
-+            
-+            expected = new File(tmp, "GenTopoHardwareFinancialCorrReceiver.cpp");
-+            TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver.cpp"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver0.cpp"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "FCorReceiver1.cpp"), expected);
-+    
-+            expected = new File(tmp, "GenTopoHardwareFinancialCorrSender.cpp");
-+            TextTestUtils.assertFileEquality(new File(tmp, "FCorSender.cpp"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "FCorSender0.cpp"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "FCorSender1.cpp"), expected);
-+        }
-     }
- 
-     /**
-@@ -479,11 +484,14 @@
-         names[1] = "javaExperiments";
-         names[2] = "javaExperimentsDebug";
- 
--        File tmp = executeCase(names, null, "", null);
--        File expected = new File(tmp, "PriorityPip_DataManagementElement0DataManagementElement.java");
--        TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME0.java"), expected);
--        TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME1.java"), expected);
-+        // no reasoning: we just need specific structures/values
-+        File tmp = executeCase(names, null, "", null, Mode.INSTANTIATE); 
-+        if (null != tmp) {
-+            File expected = new File(tmp, "PriorityPip_DataManagementElement0DataManagementElement.java");
-+            TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME0.java"), expected);
-+            TextTestUtils.assertFileEquality(new File(tmp, "PrioPip_DME1.java"), expected);
-+        }
-     }
- 
- }
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalRealTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalRealTests.java
-index 00cf8a2..88c1b19 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalRealTests.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalRealTests.java
-@@ -31,30 +31,31 @@
-         
-         String projectName = "PL_WMS_Platform";
-         File base = executeIndenicaCase(projectName, "0", "0");
--        Assert.assertNotNull(projectName + " execution failed, thus no base file available", base);
--
-+        if (null != base) {
-+            Assert.assertNotNull(projectName + " execution failed, thus no base file available", base);
-+    
-+            /*
-+            String springConfigName = "Web.config";
-+            String springConfigInstance = "WMSsolutionProduct/StorageBinSearchService/" + springConfigName;
-+            assertFileEquality(new File(base, springConfigInstance),
-+                new File(base, "expected_results/" + springConfigName));
-+            
-+            String dbCreationName = "1CreateDatabaseAndTables.sql";
-+            String dbCreationInstance = "WMSsolutionProduct/Config_Resources/" + dbCreationName;
-+            assertFileEquality(new File(base, dbCreationInstance),new File(base, "expected_results/" + dbCreationName));
-+            
-+            String dbDataName = "2InsertExampleData.sql";
-+            String dbDataInstance = "WMSsolutionProduct/Config_Resources/" + dbDataName;
-+            assertFileEquality(new File(base, dbDataInstance), new File(base, "expected_results/" + dbDataName));
-+            
-+            String orMapperName = "mapperfragment.xml";
-+            String orMapperInstance = "WMSsolutionProduct/Config_Resources/" + orMapperName;
-+            assertFileEquality(new File(base, orMapperInstance), new File(base, "expected_results/" + orMapperName));
-+            
-+            FileUtils.deleteQuietly(base);
-+            */
-+        }
-         debug = false; // remove if working
--
--        /*
--        String springConfigName = "Web.config";
--        String springConfigInstance = "WMSsolutionProduct/StorageBinSearchService/" + springConfigName;
--        assertFileEquality(new File(base, springConfigInstance),
--            new File(base, "expected_results/" + springConfigName));
--        
--        String dbCreationName = "1CreateDatabaseAndTables.sql";
--        String dbCreationInstance = "WMSsolutionProduct/Config_Resources/" + dbCreationName;
--        assertFileEquality(new File(base, dbCreationInstance), new File(base, "expected_results/" + dbCreationName));
--        
--        String dbDataName = "2InsertExampleData.sql";
--        String dbDataInstance = "WMSsolutionProduct/Config_Resources/" + dbDataName;
--        assertFileEquality(new File(base, dbDataInstance), new File(base, "expected_results/" + dbDataName));
--        
--        String orMapperName = "mapperfragment.xml";
--        String orMapperInstance = "WMSsolutionProduct/Config_Resources/" + orMapperName;
--        assertFileEquality(new File(base, orMapperInstance), new File(base, "expected_results/" + orMapperName));
--        
--        FileUtils.deleteQuietly(base);
--        */
-     }
- 
-     /**
-@@ -65,8 +66,10 @@
-     @Test
-     public void testQualiMasterApril14() throws IOException {
-         String[] versions = {"0", "0"};
--        File base = executeCase("april14", versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        File base = executeCase("april14", versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
-     
-     /**
-@@ -77,7 +80,7 @@
-      */
-     @Test
-     public void testQualiMasterFeb17() throws IOException {
--        testQualiMasterFeb17Impl();
-+        testQualiMasterFeb17Impl(Mode.REASON_INSTANTIATE);
-     }
-     
-     /**
-@@ -88,7 +91,7 @@
-      */
-     @Test
-     public void testQualiMasterSep17() throws IOException {
--        testQualiMasterFeb17Impl();
-+        testQualiMasterSep17Impl(Mode.REASON_INSTANTIATE);
-     }
--
-+    
- }
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalTests.java
-index 7e541e1..1c93275 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalTests.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/LocalTests.java
-@@ -10,7 +10,12 @@
-  * @author Holger Eichelberger
-  */
- @RunWith(Suite.class)
--@Suite.SuiteClasses({LocalRealTests.class, DynamicFreezeTest.class, LocalConceptsTests.class, 
--    LocalExperimentsTests.class })
-+@Suite.SuiteClasses({
-+    ScenarioRampUpTest.class, // must be first
-+    LocalRealTests.class, 
-+    DynamicFreezeTest.class, 
-+    LocalConceptsTests.class, 
-+    LocalExperimentsTests.class, 
-+    ExperimentsControlTests.class})
- public class LocalTests {
- }
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/MeasurementTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/MeasurementTests.java
-new file mode 100644
-index 0000000..bf24b42
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/MeasurementTests.java
-@@ -0,0 +1,16 @@
-+package net.ssehub.easy.producer.scenario_tests;
-+
-+import org.junit.runner.RunWith;
-+import org.junit.runners.Suite;
-+
-+/**
-+ * Test Suite, which starts all measurement test cases including local ones. 
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+@RunWith(Suite.class)
-+@Suite.SuiteClasses({
-+    ScenarioRampUpTest.class, // must be first
-+    RealMeasurementsTests.class})
-+public class MeasurementTests {
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RampUpTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RampUpTest.java
-new file mode 100644
-index 0000000..2dfcdac
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RampUpTest.java
-@@ -0,0 +1,65 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.producer.scenario_tests;
-+
-+import java.io.File;
-+import java.io.IOException;
-+
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.basics.progress.ProgressObserver;
-+import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.cst.CSTSemanticException;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+
-+/**
-+ * A Scenario ramp-up test.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class RampUpTest extends AbstractEasyScenarioTest {
-+
-+    @Override
-+    protected File getTestFolder() {
-+        return null;
-+    }
-+
-+    /**
-+     * Performs the ram-up test.
-+     * 
-+     * @throws ConfigurationException if setting an expression as default value fails
-+     * @throws ValueDoesNotMatchTypeException if a value does not match a type
-+     * @throws CSTSemanticException if a constraint is erroneously composed
-+     * @throws IOException if loading a model fails
-+     */
-+    @Test
-+    public void rampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
-+        CSTSemanticException, IOException {
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        Configuration cfg = net.ssehub.easy.reasoning.core.reasoner.RampUpTest.createRampUpTest();
-+        IReasoner reasoner = createReasoner();
-+        // NO MEASUREMENT!!!
-+        ReasoningResult rResult = reasoner.propagate(cfg.getProject(), cfg, rConfig, ProgressObserver.NO_OBSERVER);
-+        rResult.logInformation(cfg.getProject(), rConfig);
-+        Assert.assertFalse(rResult.hasConflict());
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealMeasurementsTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealMeasurementsTests.java
-new file mode 100644
-index 0000000..af671a0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealMeasurementsTests.java
-@@ -0,0 +1,140 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.producer.scenario_tests;
-+
-+import java.io.File;
-+import java.io.IOException;
-+
-+import org.apache.commons.io.FileUtils;
-+import org.junit.AfterClass;
-+import org.junit.BeforeClass;
-+import org.junit.Test;
-+
-+/**
-+ * Tests for experiments only. Can be forced to run in an own JVM.
-+ */
-+public class RealMeasurementsTests extends AbstractRealTests {
-+
-+    private static RealMeasurementsTests tests;
-+
-+    /**
-+     * Starts up the test.
-+     */
-+    @BeforeClass
-+    public static void startUp() {
-+        tests = new RealMeasurementsTests();
-+        tests.cleanTemp();
-+    }
-+
-+    /**
-+     * Tears down the test.
-+     */
-+    @AfterClass
-+    public static void shutDown() {
-+        if (!debug && null != tests) {
-+            tests.cleanTemp();
-+            tests = null;
-+        }
-+    }
-+    
-+    @Override
-+    protected String getMeasurementFileName() {
-+        return "measurements-scenarioVariants.tsv";
-+    }
-+    
-+    @Override
-+    protected File getTestFolder() {
-+        return new File(getTestDataDir(), "real");
-+    }
-+
-+    
-+    /**
-+     * Modifies a QM test by enabling a specified variant of the pipelines configuration file.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    private static class QMTestModifier implements ITestModifier {
-+
-+        private int variantNr;
-+        
-+        @Override
-+        public void postCopy(File target) {
-+            copy(new File(target, "variants/PipelinesCfg_" + variantNr + ".ivml"), 
-+                new File(target, "EASY/pipelines/PipelinesCfg.ivml"));
-+            copy(new File(target, "variants/InfrastructureCfg_" + variantNr + ".ivml"), 
-+                new File(target, "EASY/infrastructure/InfrastructureCfg.ivml"));
-+            copy(new File(target, "variants/AlgorithmsCfg_" + variantNr + ".ivml"), 
-+                new File(target, "EASY/infrastructure/AlgorithmsCfg.ivml"));
-+            copy(new File(target, "variants/FamiliesCfg_" + variantNr + ".ivml"), 
-+                new File(target, "EASY/infrastructure/FamiliesCfg.ivml"));
-+            copy(new File(target, "variants/DataManagementCfg_" + variantNr + ".ivml"), 
-+                new File(target, "EASY/infrastructure/DataManagementCfg.ivml"));
-+        }
-+        
-+        /**
-+         * Copies a file if it exists to a target location. Ignores non existing sources files
-+         * 
-+         * @param src the source file
-+         * @param tgt the target location
-+         */
-+        private void copy(File src, File tgt) {
-+            if (src.exists()) {
-+                System.out.println("Copying " + src.getName());
-+                try {
-+                    FileUtils.copyFile(src, tgt);
-+                } catch (IOException e) {
-+                    System.out.println(e.getMessage());
-+                }
-+            }
-+        }
-+        
-+        /**
-+         * Changes the variant to activate.
-+         * 
-+         * @param variantNr the variant nr
-+         */
-+        private void setVariantNr(int variantNr) {
-+            this.variantNr = variantNr;
-+        }
-+        
-+    }
-+
-+    /**
-+     * Tests the QualiMaster model / derivation (February 2017, experimentally modified, without rt-VIL). This is a 
-+     * series of modified models by leaving out certain pipelines. No VIL instantiations are executed on the 
-+     * variants, only reasoning.
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void testQualiMasterSep17Variants() throws IOException {
-+        QMTestModifier modifier = new QMTestModifier();
-+        
-+        String[] versions = {"0", "0"};
-+        String[] names = {"sep17", "QM"};
-+        enableRealTimeAsserts = true;
-+        int[] tests = {0, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // more seems to cause problems with file system on windows
-+        for (int i : tests) {
-+            System.out.println(">> Start Variant " + i);
-+            modifier.setVariantNr(i);
-+            executeCase(names, versions, "QualiMaster/", null, Mode.REASON, modifier);
-+            System.out.println("<< End Variant " + i);
-+        }
-+        enableRealTimeAsserts = false;
-+    }
-+
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealTests.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealTests.java
-index 453b897..a436118 100644
---- a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealTests.java
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/RealTests.java
-@@ -23,6 +23,7 @@
- 
- import net.ssehub.easy.instantiation.core.model.buildlangModel.Script;
- import net.ssehub.easy.instantiation.maven.Registration;
-+import net.ssehub.easy.instantiation.velocity.VelocityInstantiator;
- 
- /**
-  * Real use case tests. Although Maven is available, we run the tests without Maven in order to
-@@ -31,10 +32,9 @@
-  * @author Holger Eichelberger
-  * @author El-Sharkawy
-  */
--public class RealTests extends AbstractScenarioTest {
-+public class RealTests extends AbstractRealTests {
- 
-     protected static final String[] RELATIVE_CURL_EXECUTABLES = {"curl/curl.bat", "curl/curl.sh"};
--    
-     
-     private static RealTests tests;
-     
-@@ -50,6 +50,7 @@
-         tests = new RealTests();
-         tests.cleanTemp();
-         Registration.register();
-+        VelocityInstantiator.register();
-     }
- 
-     /**
-@@ -169,13 +170,14 @@
-      * @param vilVersion the version of the VIL build file (may be <b>null</b>)
-      * @param makeExecutable those files (in relative paths) within the temporary copy of the project to be 
-      *   made executable
--     * @return the base directory of the instantiated project
-+     * @return the base directory of the instantiated project (<b>null</b> for no assert)
-      * @throws IOException in case of I/O problems
-      */
-     protected File executeIndenicaCase(String projectName, String ivmlVersion, String vilVersion, 
-         String... makeExecutable) throws IOException {
-         String[] versions = {ivmlVersion, vilVersion};
--        return executeCase(projectName, versions, "INDENICA/", null, makeExecutable);
-+        return executeCase(projectName, versions, "INDENICA/", null, Mode.REASON_INSTANTIATE, 
-+            new MakeExecutableTestModifier(makeExecutable));
-     }
-     
-     /**
-@@ -186,11 +188,15 @@
-     @Test
-     public void testIndenicaPlRmsPlatform2() throws IOException {
-         File base = executeIndenicaCase("PL_RMS_Platform2", "0", "0", RELATIVE_CURL_EXECUTABLES);
--        assertCurlOut(base);
--        FileUtils.deleteQuietly(base);
-+        if (null != base) {
-+            assertCurlOut(base);
-+            FileUtils.deleteQuietly(base);
-+        }
-         base = executeIndenicaCase("PL_RMS_Platform2", "0", "1", RELATIVE_CURL_EXECUTABLES);
--        assertCurlOut(base);
--        cleanTempFolder(base);
-+        if (null != base) {
-+            assertCurlOut(base);
-+            cleanTempFolder(base);
-+        }
-     }
-     
-     /**
-@@ -204,16 +210,17 @@
- 
-         // Original files
-         File base = executeIndenicaCase(projectName, "0", "0", RELATIVE_CURL_EXECUTABLES);
--        
--        // Generated files
--        File resources = new File(base, "src/main/resources/");
--
--        assertCurlOut(base);
--        String fileName = projectName + ".var";
--        assertFileEquality(new File(base, "curl/" + fileName), new File(resources, fileName));
--        fileName = "resolution.res";
--        assertFileEquality(new File(base, "curl/" + fileName), new File(resources, fileName));
--        cleanTempFolder(base);
-+        if (null != base) {
-+            // Generated files
-+            File resources = new File(base, "src/main/resources/");
-+    
-+            assertCurlOut(base);
-+            String fileName = projectName + ".var";
-+            assertFileEquality(new File(base, "curl/" + fileName), new File(resources, fileName));
-+            fileName = "resolution.res";
-+            assertFileEquality(new File(base, "curl/" + fileName), new File(resources, fileName));
-+            cleanTempFolder(base);
-+        }
-     }
- 
-     /**
-@@ -245,26 +252,28 @@
-     @Test
-     public void testElevator() throws IOException {
-         String[] versions = {"0", "0"};
--        File base = executeCase("New_Product", versions, "elevator/", "PL_SimElevator");
--        
--        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
--        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
--        List<File> files = new ArrayList<File>();
--        enumerateJavaFiles(new File(base, "src"), files);
--        List<String> options = new ArrayList<String>();
--        options.add("-d");
--        options.add(new File(base, "bin").getAbsolutePath());
--        Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(files);
--        StringWriter writer = new StringWriter();
--        boolean success = compiler.getTask(writer, fileManager, null, options, null, compilationUnits).call();
--        try {
--            fileManager.close(); 
--        } catch (IOException e) {
--            Assert.fail("unexpected exception: " + e.getMessage());
-+        File base = executeCase("New_Product", versions, "elevator/", "PL_SimElevator", Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-+            Assert.assertNotNull("No JDK compiler, are you running JRE?", compiler);
-+            StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
-+            List<File> files = new ArrayList<File>();
-+            enumerateJavaFiles(new File(base, "src"), files);
-+            List<String> options = new ArrayList<String>();
-+            options.add("-d");
-+            options.add(new File(base, "bin").getAbsolutePath());
-+            Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(files);
-+            StringWriter writer = new StringWriter();
-+            boolean success = compiler.getTask(writer, fileManager, null, options, null, compilationUnits).call();
-+            try {
-+                fileManager.close(); 
-+            } catch (IOException e) {
-+                Assert.fail("unexpected exception: " + e.getMessage());
-+            }
-+            Assert.assertTrue("compile problems: " + writer.toString(), success);
-+    
-+            cleanTempFolder(base);
-         }
--        Assert.assertTrue("compile problems: " + writer.toString(), success);
--
--        cleanTempFolder(base);
-     }
- 
-     /**
-@@ -294,14 +303,17 @@
-      */
-     @Test
-     public void testInstantiateNumericCSVInstantiation() throws IOException {
--        File base = executeCase("NumericCSVInstantiationTest", new String[] {"0", "0"}, "", null);
--        File expectedFile = new File(base, "NumericCSVInstantiationTest.csv");
--        File producedFile = new File(base, "expected/NumericCSVInstantiationTest.csv");
--        assertExists(expectedFile);
--        assertExists(producedFile);
--        String expectedContent = file2String(expectedFile).replace("\r", "");
--        String actualContent = file2String(producedFile).replace("\r", "");
--        Assert.assertEquals(expectedContent, actualContent);
-+        File base = executeCase("NumericCSVInstantiationTest", new String[] {"0", "0"}, "", null, 
-+            Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            File expectedFile = new File(base, "NumericCSVInstantiationTest.csv");
-+            File producedFile = new File(base, "expected/NumericCSVInstantiationTest.csv");
-+            assertExists(expectedFile);
-+            assertExists(producedFile);
-+            String expectedContent = file2String(expectedFile).replace("\r", "");
-+            String actualContent = file2String(producedFile).replace("\r", "");
-+            Assert.assertEquals(expectedContent, actualContent);
-+        }
-     }
-     
-     /**
-@@ -311,10 +323,15 @@
-      */
-     @Test
-     public void testSvncontrol() throws IOException {
--        String[] versions = {"0", "0"};
--        testSvncontrol(versions);
--        versions[1] = "0.1";
--        testSvncontrol(versions);
-+        String msg = net.ssehub.easy.instantiation.aspectj.Registration.checkEnvironment();
-+        if (null != msg) {
-+            System.out.println("Warning: " + msg);
-+        } else {
-+            String[] versions = {"0", "0"};
-+            testSvncontrol(versions);
-+            versions[1] = "0.1";
-+            testSvncontrol(versions);
-+        }
-     }
- 
-     /**
-@@ -324,13 +341,15 @@
-      * @throws IOException shall not occur
-      */
-     private void testSvncontrol(String[] versions) throws IOException {
--        File base = executeCase("svncontrol", versions, "", null);
--        assertExists(base, "variability/StaticConfiguration", ".java");
--        assertExists(base, "variability/StartupConfiguration", ".java");
--        assertExists(base, "variability/RuntimeConfiguration", ".java");
--        assertExists(base, "gui/HooksTabAspect", ".aj");
--        assertExists(base, "gui/ScheduleTabAspect", ".aj");
--        assertExists(new File(base, "bin/client.jar"));
-+        File base = executeCase("svncontrol", versions, "", null, Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            assertExists(base, "variability/StaticConfiguration", ".java");
-+            assertExists(base, "variability/StartupConfiguration", ".java");
-+            assertExists(base, "variability/RuntimeConfiguration", ".java");
-+            assertExists(base, "gui/HooksTabAspect", ".aj");
-+            assertExists(base, "gui/ScheduleTabAspect", ".aj");
-+            assertExists(new File(base, "bin/client.jar"));
-+        }
-     }
-     
-     /**
-@@ -362,8 +381,10 @@
-     @Test
-     public void testQualiMasterApril14() throws IOException {
-         String[] versions = {"0", "0"};
--        File base = executeCase("april14", versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        File base = executeCase("april14", versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
- 
-     /**
-@@ -374,8 +395,10 @@
-     @Test
-     public void testQualiMasterMay14() throws IOException {
-         String[] versions = {"0", "0"};
--        File base = executeCase("may14", versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        File base = executeCase("may14", versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
- 
-     /**
-@@ -387,8 +410,10 @@
-     public void testQualiMasterFeb15() throws IOException {
-         String[] versions = {"0", "0"};
-         String[] names = {"feb15", "QM"};
--        File base = executeCase(names, versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        File base = executeCase(names, versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
- 
-     /**
-@@ -400,8 +425,12 @@
-     public void testQualiMasterFeb16() throws IOException {
-         String[] versions = {"0", "0"};
-         String[] names = {"feb16", "QM"};
--        File base = executeCase(names, versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        enableRealTimeAsserts = true;
-+        File base = executeCase(names, versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
-+        enableRealTimeAsserts = false;
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
- 
-     /**
-@@ -413,8 +442,10 @@
-     public void testQualiMasterMar15() throws IOException {
-         String[] versions = {"0", "0"};
-         String[] names = {"mar15", "QM"};
--        File base = executeCase(names, versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        File base = executeCase(names, versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
- 
-     /**
-@@ -426,21 +457,28 @@
-     public void testQualiMasterJun15() throws IOException {
-         String[] versions = {"0", "0"};
-         String[] names = {"jun15", "QM"};
--        File base = executeCase(names, versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        File base = executeCase(names, versions, "QualiMaster/", null, Mode.REASON_INSTANTIATE);
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
- 
-     /**
-      * Tests the QualiMaster model / derivation (February 2017, without rt-VIL). Seems to fail on Jenkins.
-      * This is a slightly modified version to ensure creation of artifacts in repeatable sequence.
-      * 
-+     * @param mode the test execution mode
-      * @throws IOException shall not occur
-      */
--    protected void testQualiMasterFeb17Impl() throws IOException {
-+    protected void testQualiMasterFeb17Impl(Mode mode) throws IOException {
-         String[] versions = {"0", "0"};
-         String[] names = {"feb17", "QM"};
--        File base = executeCase(names, versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        enableRealTimeAsserts = true;
-+        File base = executeCase(names, versions, "QualiMaster/", null, mode);
-+        enableRealTimeAsserts = false;
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
-     
-     /**
-@@ -452,20 +490,25 @@
-     @Ignore
-     @Test
-     public void testQualiMasterFeb17() throws IOException {
--        testQualiMasterFeb17Impl();
-+        testQualiMasterFeb17Impl(Mode.REASON_INSTANTIATE);
-     }
-     
-     /**
-      * Tests the QualiMaster model / derivation (February 2017, experimentally modified, without rt-VIL). Seems to 
-      * fail on Jenkins. This is a modified version for evaluating VIL/VTL.
-      * 
-+     * @param mode the test execution mode
-      * @throws IOException shall not occur
-      */
--    protected void testQualiMasterSep17Impl() throws IOException {
-+    protected void testQualiMasterSep17Impl(Mode mode) throws IOException {
-         String[] versions = {"0", "0"};
-         String[] names = {"sep17", "QM"};
--        File base = executeCase(names, versions, "QualiMaster/", null);
--        assertFileEqualityRec(new File(base, "expected"), base);
-+        enableRealTimeAsserts = true;
-+        File base = executeCase(names, versions, "QualiMaster/", null, mode);
-+        enableRealTimeAsserts = false;
-+        if (null != base) {
-+            assertFileEqualityRec(new File(base, "expected"), base);
-+        }
-     }
-     
-     /**
-@@ -477,7 +520,7 @@
-     @Ignore
-     @Test
-     public void testQualiMasterSep17() throws IOException {
--        testQualiMasterFeb17Impl();
-+        testQualiMasterFeb17Impl(Mode.REASON_INSTANTIATE);
-     }
-     
- }
-diff --git a/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ScenarioRampUpTest.java b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ScenarioRampUpTest.java
-new file mode 100644
-index 0000000..725dc63
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/src/net/ssehub/easy/producer/scenario_tests/ScenarioRampUpTest.java
-@@ -0,0 +1,49 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.producer.scenario_tests;
-+
-+import java.io.IOException;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.cst.CSTSemanticException;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+
-+/**
-+ * A Scenario ramp-up test including a QualiMaster model.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class ScenarioRampUpTest extends RampUpTest {
-+
-+    /**
-+     * Performs the ram-up test.
-+     * 
-+     * @throws ConfigurationException if setting an expression as default value fails
-+     * @throws ValueDoesNotMatchTypeException if a value does not match a type
-+     * @throws CSTSemanticException if a constraint is erroneously composed
-+     * @throws IOException if loading a model fails
-+     */
-+    @Test
-+    public void rampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
-+        CSTSemanticException, IOException {
-+        super.rampUpTest();
-+        RealTests t = new RealTests();
-+        t.testQualiMasterFeb17Impl(Mode.REASON_NO_MEASURE);
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_0.ivml
-new file mode 100644
-index 0000000..76146a1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_0.ivml
-@@ -0,0 +1,34 @@
-+project ActivityGraphConfiguration {
-+
-+    version v0;
-+    import PL_ActivityGraph with PL_ActivityGraph.version == v0;
-+    ReadSheets readSheets = {};
-+    Start start = {};
-+    End end = {};
-+
-+    Dependency start_start = {source = start, target = start};
-+    Dependency start_readSheets = {source = start, target = readSheets};
-+    Dependency start_end = {source = start, target = end};
-+    Dependency readSheets_readSheets = {source = readSheets, target = readSheets};
-+    Dependency readSheets_end = {source = readSheets, target = end};
-+    Dependency end_end = {source = end, target = end};
-+
-+    Input input = {position = start_readSheets};
-+    Document document = {position = readSheets_end};
-+
-+    Transformation inputToDocument = {predecessor = input, sucessor = document};
-+
-+    ActivityGraph activityGraph = {
-+        activities = {start, readSheets, end},
-+        objects = {input, document},
-+        transformations = {inputToDocument},
-+        dependencies = {
-+            start_start,
-+            start_readSheets,
-+            start_end,
-+            readSheets_readSheets,
-+            readSheets_end,
-+            end_end
-+        }
-+    };
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_1.ivml
-new file mode 100644
-index 0000000..49d80c6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/ActivityGraphConfiguration_1.ivml
-@@ -0,0 +1,34 @@
-+project ActivityGraphConfiguration1 {
-+
-+    version v0;
-+    import PL_ActivityGraph with PL_ActivityGraph.version == v0;
-+    ReadSheets readSheets = {};
-+    Start start = {};
-+    End end = {};
-+
-+    Dependency start_start = {source = start, target = start};
-+    Dependency start_readSheets = {source = start, target = readSheets};
-+    Dependency start_end = {source = start, target = end};
-+    Dependency readSheets_readSheets = {source = readSheets, target = readSheets};
-+    Dependency readSheets_end = {source = readSheets, target = end};
-+    Dependency end_end = {source = end, target = end};
-+
-+    Input input = {position = start_readSheets};
-+    Output output = {position = end_end};
-+
-+    Transformation inputToDocument = {predecessor = input, sucessor = output};
-+
-+    ActivityGraph activityGraph = {
-+        activities = {start, readSheets, end},
-+        objects = {input, output},
-+        transformations = {inputToDocument},
-+        dependencies = {
-+            start_start,
-+            start_readSheets,
-+            start_end,
-+            readSheets_readSheets,
-+            readSheets_end,
-+            end_end
-+        }
-+    };
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/PL_ActivityGraph_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/PL_ActivityGraph_0.ivml
-new file mode 100644
-index 0000000..82b1781
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/activity/PL_ActivityGraph_0.ivml
-@@ -0,0 +1,75 @@
-+project PL_ActivityGraph {
-+
-+	version v0;
-+
-+	compound ActivityGraph {
-+		setOf(Activity) activities;
-+		setOf(Dependency) dependencies;
-+		setOf(Object) objects;
-+		setOf(Transformation) transformations;
-+
-+		Constraint checkSheetAfterReadSheets = self.objects->forAll(Object o|isTypeOf(o.position.source, refTo(ReadSheets)) implies isTypeOf(o, Sheet));
-+		Constraint checkDocumentAfterRecognizeDocuments = self.objects->forAll(Object o|isTypeOf(o.position.source, refTo(RecognizeDocuments)) implies isTypeOf(o, refTo(Document)));
-+		Constraint checkSheetAfterResolveMailings = self.objects->forAll(o|o.position.source.isTypeOf(refTo(ResolveMailings)) implies o.isTypeOf(refTo(Sheet)));
-+		Constraint checkSheetBeforeRecognizeDocuments = self.objects->forAll(o|o.position.target.isTypeOf(refTo(RecognizeDocuments)) implies o.isTypeOf(refTo(Sheet)));
-+		Constraint checkDocumentBeforeResolveMailings = self.objects->forAll(o|o.position.target.isTypeOf(refTo(ResolveMailings)) implies o.isTypeOf(refTo(Document)));
-+		Constraint checkSheetBeforeWriteSheets = self.objects->forAll(o|o.position.target.isTypeOf(refTo(WriteSheets)) implies o.isTypeOf(refTo(Sheet)));
-+
-+		Constraint dependenciesReflexivity = self.activities->forAll(a|dependsOn(a, a, self.dependencies));
-+		Constraint dependenciesAntisymmetry = self.activities->forAll(a|self.activities->forAll(b|dependsOn(a, b, self.dependencies) and dependsOn(b, a, self.dependencies) implies a == b));
-+		Constraint dependenciesTransitivity = self.activities->forAll(a|self.activities->forAll(b|self.activities->forAll(c|dependsOn(a, b, self.dependencies) and dependsOn(b, c, self.dependencies) implies dependsOn(a, c, self.dependencies))));
-+		Constraint transformationAntisymmetry = self.objects->forAll(o|self.objects->forAll(p|transformedIn(o, p, self.transformations) and transformedIn(p, o, self.transformations) implies o == p));
-+		Constraint transformedInDependOn = self.transformations->forAll(t|dependsOn(t.sucessor.position.target, t.predecessor.position.source, self.dependencies));
-+	}
-+
-+	def Boolean dependsOn(Activity sucessor, Activity predecessor, setOf(Dependency) dependencies) = dependencies->exists(d|d.source == predecessor and d.target == sucessor);
-+	def Boolean transformedIn(Object predecessor, Object sucessor, setOf(Transformation) transformations) = transformations->exists(t|t.predecessor == predecessor and t.sucessor == sucessor);
-+
-+	abstract compound Activity {
-+	}
-+
-+	abstract compound Object {
-+		refTo(Dependency) position;
-+	}
-+
-+	compound Dependency {
-+		refTo(Activity) source;
-+		refTo(Activity) target;
-+	}
-+
-+	compound Transformation {
-+		refTo(Object) predecessor;
-+		refTo(Object) sucessor;
-+	}
-+
-+    compound Start refines Activity {
-+    }
-+
-+    compound End refines Activity {
-+    }
-+
-+	compound ReadSheets refines Activity {
-+	}
-+
-+	compound RecognizeDocuments refines Activity {
-+	}
-+
-+	compound ResolveMailings refines Activity {
-+	}
-+
-+	compound WriteSheets refines Activity {
-+	}
-+
-+	compound Sheet refines Object {
-+	}
-+
-+	compound Document refines Object {
-+	}
-+
-+	compound Input refines Object {
-+	}
-+
-+	compound Output refines Object {
-+	}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/ActivityGraph2Configuration_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/ActivityGraph2Configuration_0.ivml
-new file mode 100644
-index 0000000..741e6e9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/ActivityGraph2Configuration_0.ivml
-@@ -0,0 +1,13 @@
-+project ActivityGraph2Configuration {
-+
-+    version v0;
-+    import PL_ActivityGraph with PL_ActivityGraph.version == v0;
-+    ReadSheets readSheets = {};
-+    RecognizeDocuments recognizeDocuments = {};
-+    WriteSheets writeSheets = {};
-+    Dependency readSheets_readSheets = {source = readSheets, target = readSheets};
-+    Dependency recognizeDocuments_recognizeDocuments = {source = recognizeDocuments, target = recognizeDocuments};
-+    Dependency recognizeDocuments_readSheets = {source = recognizeDocuments, target = readSheets};
-+    Dependency readSheets_recognizeDocuments = {source = readSheets, target = recognizeDocuments};
-+    controlFile = {activities = {readSheets, recognizeDocuments}, dependencies = {readSheets_readSheets, recognizeDocuments_recognizeDocuments, readSheets_recognizeDocuments, recognizeDocuments_readSheets}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/PL_ActivityGraph_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/PL_ActivityGraph_0.ivml
-new file mode 100644
-index 0000000..bffc010
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/assymetric/PL_ActivityGraph_0.ivml
-@@ -0,0 +1,69 @@
-+project PL_ActivityGraph {
-+
-+	version v0;
-+	ControlFile controlFile = {};
-+	enum ActivityType {ReadSheetsType, RecognizeDocumentsType, ResolveMailingsType, WriteSheetsType};
-+	enum ObjectType {SheetType, DocumentType};
-+	compound ControlFile {
-+		setOf(Activity) activities;
-+		setOf(Dependency) dependencies;
-+		setOf(Object) objects;
-+		setOf(Transformation) transformations;
-+		Constraint checkSheetAfterReadSheets = self.objects->forAll(o|o.position.source.type == ActivityType.ReadSheetsType implies o.type == ObjectType.SheetType);
-+		Constraint checkDocumentAfterRecognizeDocuments = self.objects->forAll(o|o.position.source.type == ActivityType.RecognizeDocumentsType implies o.type == ObjectType.DocumentType);
-+		Constraint checkSheetAfterResolveMailings = self.objects->forAll(o|o.position.source.type == ActivityType.ResolveMailingsType implies o.type == ObjectType.SheetType);
-+		Constraint checkSheetBeforeRecognizeDocuments = self.objects->forAll(o|o.position.target.type == ActivityType.RecognizeDocumentsType implies o.type == ObjectType.SheetType);
-+		Constraint checkDocumentBeforeResolveMailings = self.objects->forAll(o|o.position.target.type == ActivityType.ResolveMailingsType implies o.type == ObjectType.DocumentType);
-+		Constraint checkSheetBeforeWriteSheets = self.objects->forAll(o|o.position.target.type == ActivityType.WriteSheetsType implies o.type == ObjectType.SheetType);
-+		Constraint dependenciesReflexivity = self.activities->forAll(a|dependsOn(a, a, self.dependencies));
-+		Constraint dependenciesAntisymmetry = self.activities->forAll(a|self.activities->forAll(b|dependsOn(a, b, self.dependencies) and dependsOn(b, a, self.dependencies) implies a == b));
-+		Constraint dependenciesTransitivity = self.activities->forAll(a|self.activities->forAll(b|self.activities->forAll(c|dependsOn(a, b, self.dependencies) and dependsOn(b, c, self.dependencies) implies dependsOn(a, c, self.dependencies))));
-+	}
-+
-+	def Boolean dependsOn(Activity predecessor, Activity sucessor, setOf(Dependency) dependencies) = dependencies->exists(d|d.source == predecessor and d.target == sucessor);
-+	def Boolean transformedIn(Object predecessor, Object sucessor, setOf(Transformation) transformations) = transformations->exists(t|t.predecessor == predecessor and t.sucessor == sucessor);
-+	abstract compound Activity {
-+		ActivityType type;
-+	}
-+
-+	abstract compound Object {
-+		ObjectType type;
-+		refTo(Dependency) position;
-+	}
-+
-+	compound Dependency {
-+		refTo(Activity) source;
-+		refTo(Activity) target;
-+	}
-+
-+	compound Transformation {
-+		refTo(Object) predecessor;
-+		refTo(Object) sucessor;
-+	}
-+
-+	compound ReadSheets refines Activity {
-+		type = ActivityType.ReadSheetsType;
-+	}
-+
-+	compound RecognizeDocuments refines Activity {
-+		type = ActivityType.RecognizeDocumentsType;
-+	}
-+
-+	compound ResolveMailings refines Activity {
-+		type = ActivityType.ResolveMailingsType;
-+	}
-+
-+	compound WriteSheets refines Activity {
-+		type = ActivityType.WriteSheetsType;
-+	}
-+
-+	compound Sheet refines Object {
-+		type = ObjectType.SheetType;
-+	}
-+
-+	compound Document refines Object {
-+		type = ObjectType.DocumentType;
-+	}
-+
-+	controlFile = {};
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/configSub.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/configSub.ivml
-new file mode 100644
-index 0000000..40798f6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/configSub.ivml
-@@ -0,0 +1,7 @@
-+project ConfigSub {
-+
-+    import MetaSub;
-+    Structure s = {name = "s", next = {1, 2}};
-+    SubStructure u1 = {name = "u1", next = {1, 2}};
-+    SubStructure u2 = {name = "u2", next = {}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults1.ivml
-new file mode 100644
-index 0000000..82bdd8d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults1.ivml
-@@ -0,0 +1,23 @@
-+project defaults1 {
-+
-+    enum Kind {kind1, kind2, kind3};
-+    abstract compound Activity {
-+        Kind produces;
-+        Kind consumes;
-+        Integer count;
-+    }
-+
-+    compound ReaderActivity refines Activity {
-+        produces = Kind.kind1;
-+    }
-+
-+    compound WriterActivity refines Activity {
-+        consumes = Kind.kind2;
-+    }
-+
-+    Activity a1 = ReaderActivity {};
-+    Activity a2 = WriterActivity {};
-+    ReaderActivity r1 = {count = 5};
-+    WriterActivity w1 = {count = 10};
-+    sequenceOf(Activity) seq = {ReaderActivity {count = 6}, WriterActivity {count = 7}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults2.ivml
-new file mode 100644
-index 0000000..1867d7e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults2.ivml
-@@ -0,0 +1,23 @@
-+project defaults2 {
-+
-+    enum Kind {kind1, kind2, kind3};
-+    abstract compound Activity {
-+        Kind produces;
-+        Kind consumes;
-+        Integer count;
-+    }
-+
-+    compound ReaderActivity refines Activity {
-+        Kind produces = Kind.kind1;
-+    }
-+
-+    compound WriterActivity refines Activity {
-+        Kind consumes = Kind.kind2;
-+    }
-+
-+    Activity a1 = ReaderActivity {};
-+    Activity a2 = WriterActivity {};
-+    ReaderActivity r1 = {count = 5};
-+    WriterActivity w1 = {count = 10};
-+    sequenceOf(Activity) seq = {ReaderActivity {count = 6}, WriterActivity {count = 7}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults3.ivml
-new file mode 100644
-index 0000000..a69109c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults3.ivml
-@@ -0,0 +1,25 @@
-+project defaults3 {
-+
-+    enum Kind {kind1, kind2, kind3};
-+    abstract compound Activity {
-+        Kind produces = initProduces(self);
-+        Kind consumes = initConsumes(self);
-+        Integer count;
-+    }
-+
-+    def Kind initProduces(Activity act) = null;
-+    def Kind initConsumes(Activity act) = null;
-+    compound ReaderActivity refines Activity {
-+    }
-+
-+    def Kind initProduces(ReaderActivity act) = Kind.kind1;
-+    compound WriterActivity refines Activity {
-+    }
-+
-+    def Kind initConsumes(WriterActivity act) = Kind.kind2;
-+    Activity a1 = ReaderActivity {};
-+    Activity a2 = WriterActivity {};
-+    ReaderActivity r1 = {count = 5};
-+    WriterActivity w1 = {count = 10};
-+    sequenceOf(Activity) seq = {ReaderActivity {count = 6}, WriterActivity {count = 7}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults4.ivml
-new file mode 100644
-index 0000000..ceae135
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/defaults4.ivml
-@@ -0,0 +1,27 @@
-+project defaults3 {
-+
-+    enum Kind {kind1, kind2, kind3};
-+    abstract compound Activity {
-+        Kind produces;
-+        Kind consumes;
-+        Integer count;
-+        initProduces(self);
-+        initConsumes(self);
-+    }
-+
-+    def Boolean initProduces(Activity act) = true;
-+    def Boolean initConsumes(Activity act) = true;
-+    compound ReaderActivity refines Activity {
-+    }
-+
-+    def Boolean initProduces(ReaderActivity act) = act.produces = Kind.kind1;
-+    compound WriterActivity refines Activity {
-+    }
-+
-+    def Boolean initConsumes(WriterActivity act) = act.consumes = Kind.kind2;
-+    Activity a1 = ReaderActivity {};
-+    Activity a2 = WriterActivity {};
-+    ReaderActivity r1 = {count = 5};
-+    WriterActivity w1 = {count = 10};
-+    sequenceOf(Activity) seq = {ReaderActivity {count = 6}, WriterActivity {count = 7}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/BaseSD_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/BaseSD_0.ivml
-new file mode 100644
-index 0000000..d98cbe6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/BaseSD_0.ivml
-@@ -0,0 +1,8 @@
-+project BaseSD {
-+
-+    version v0;
-+    import PL_Base with PL_Base.version == v0;
-+    ReadSheets readSheets = {};
-+    Dependency readSheets_readSheets = {source = readSheets, target = readSheets};
-+    controlFile = {activities = {readSheets}, dependencies = {readSheets_readSheets}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/PL_Base_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/PL_Base_0.ivml
-new file mode 100644
-index 0000000..e09a1c6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/exists/PL_Base_0.ivml
-@@ -0,0 +1,37 @@
-+project PL_Base {
-+
-+	version v0;
-+
-+    ControlFile controlFile = {};
-+
-+    enum ActivityType {ReadSheetsType, RecognizeDocumentsType, ResolveMailingsType, WriteSheetsType};
-+
-+    compound ControlFile {
-+        setOf(Activity) activities;
-+        setOf(Dependency) dependencies;
-+
-+        Constraint dependenciesReflexivity = self.activities->forAll(a|dependsOn(a, a, self.dependencies));
-+//        Constraint dependenciesAntisymmetry = self.activities->forAll(a|self.activities->forAll(b|dependsOn(a, b, self.dependencies) and dependsOn(b, a, self.dependencies) implies a == b));
-+//        Constraint dependenciesTransitivity = self.activities->forAll(a|self.activities->forAll(b|self.activities->forAll(c|dependsOn(a, b, self.dependencies) and dependsOn(b, c, self.dependencies) implies dependsOn(a, c, self.dependencies))));
-+//        Constraint dependsOn = self.dependencies->forAll(d|dependsOn(d.target, d.source, self.dependencies));
-+
-+
-+    }
-+
-+    def Boolean dependsOn(Activity predecessor, Activity sucessor, setOf(Dependency) dependencies) =
-+        dependencies->exists(d|d.source == predecessor and d.target == sucessor);
-+
-+    abstract compound Activity {
-+        ActivityType type;
-+    }
-+
-+    compound Dependency {
-+        refTo(Activity) source;
-+        refTo(Activity) target;
-+    }
-+
-+    compound ReadSheets refines Activity {
-+        type = ActivityType.ReadSheetsType;
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/metaSub.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/metaSub.ivml
-new file mode 100644
-index 0000000..5e4220f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/metaSub.ivml
-@@ -0,0 +1,16 @@
-+project MetaSub {
-+
-+    compound Structure {
-+        String name;
-+        setOf(Integer) next;
-+        Boolean isSub = false;
-+        Constraint nextCount = if isSub == false then next.size() > 0 else true endif;
-+        Constraint nextCount1 = isSub == false implies next.size() > 0;
-+        Constraint nextCheck = isDefined(next);
-+    }
-+    
-+    compound SubStructure refines Structure {
-+        isSub = true;
-+    }
-+    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/Einfache_Steuerdatei_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/Einfache_Steuerdatei_0.ivml
-new file mode 100644
-index 0000000..33c7e9d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/Einfache_Steuerdatei_0.ivml
-@@ -0,0 +1,8 @@
-+project Einfache_Steuerdatei {
-+
-+    version v0;
-+    import PL_Steuerkarten with PL_Steuerkarten.version == v0;
-+    ReadSheetsActivity readSheets = {paperTray = PaperTray {trayID = "1", sheetRef = "A4"}, id = "Blaetter_Einlesen", produces = NameFuerBlattSeiteDokument.blatt, consumes = NameFuerBlattSeiteDokument.nichts, readMode = FormatMode.Linemode};
-+    WriteSheetsActivity writeSheets = {id = "Blaetter_Ausgeben", produces = NameFuerBlattSeiteDokument.nichts, consumes = NameFuerBlattSeiteDokument.blatt, writeMode = FormatMode.Linemode, inputActivity = refBy(readSheets)};
-+    controlFile = {activities = {readSheets, writeSheets}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/PL_Steuerkarten_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/PL_Steuerkarten_0.ivml
-new file mode 100644
-index 0000000..158245f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/simple/PL_Steuerkarten_0.ivml
-@@ -0,0 +1,86 @@
-+project PL_Steuerkarten {
-+
-+	version v0;
-+	ControlFile controlFile = {};
-+
-+	def Boolean hasActivityWithId(String id, setOf(Activity) activities) = activities->exists(a|a.id == id);
-+
-+    def Activity getActivityById(String id, setOf(Activity) activities) = activities->any(a|a.id == id);
-+
-+    def setOf(Activity) getActivitiesWithInput(setOf(Activity) activities) = activities->select(a|a.inputActivity.isDefined());
-+
-+    enum NameFuerBlattSeiteDokument {nichts, blatt, seite, dokument};
-+
-+    enum FormatMode {Linemode, PDF, AFP};
-+
-+	compound ControlFile {
-+		setOf(Activity) activities;
-+
-+		getActivitiesWithInput(self.activities)->forAll(a|hasActivityWithId(a.inputActivity.id, self.activities));
-+		getActivitiesWithInput(self.activities)->forAll(a|getActivityById(a.inputActivity.id, self.activities).produces == a.consumes);
-+
-+        getActivitiesWithWriteMode(self.activities).notEmpty() implies allModesContained(getActivitiesWithReadMode(self.activities)->collect(Activity a|a.readMode), getActivitiesWithWriteMode(self.activities)->collect(Activity a|a.writeMode));
-+        //getActivitiesWithWriteMode(self.activities)->collect(Activity a|a.writeMode).includes(getActivitiesWithReadMode(self.activities)->collect(Activity a|a.readMode));
-+	}
-+
-+	def Boolean allModesContained(setOf(FormatMode) readModes, setOf(FormatMode) writeModes) = writeModes->forAll(FormatMode m|readModes.includes(m));
-+	//readModes->intersection(writeModes).size() == writeModes.size(); includeAll
-+
-+	def setOf(Activity) getActivitiesWithReadMode(setOf(Activity) activities) = activities->select(a|a.readMode.isDefined());
-+    def setOf(Activity) getActivitiesWithWriteMode(setOf(Activity) activities) = activities->select(a|a.writeMode.isDefined());
-+
-+	abstract compound Activity {
-+		String id;
-+		NameFuerBlattSeiteDokument produces;
-+        NameFuerBlattSeiteDokument consumes;
-+        FormatMode readMode;
-+        FormatMode writeMode;
-+        refTo(Activity) inputActivity;
-+
-+        self.id <> "";
-+        self.readMode.isDefined() implies not self.writeMode.isDefined();
-+        self.writeMode.isDefined() implies not self.readMode.isDefined();
-+	}
-+
-+	abstract compound PrintReader {
-+	    FormatMode mode;
-+	}
-+
-+	abstract compound PrintWriter {
-+	    FormatMode mode;
-+	}
-+
-+	abstract compound StaticOrDynamicFileOrDD {
-+	}
-+
-+	compound LinemodeReader refines PrintReader {
-+	    mode = FormatMode.Linemode;
-+	}
-+
-+	compound LinemodeWriter refines PrintWriter {
-+	    mode = FormatMode.Linemode;
-+		StaticOrDynamicFileOrDD target;
-+	}
-+
-+	compound DD refines StaticOrDynamicFileOrDD {
-+		String name;
-+	}
-+
-+	compound ReadSheetsActivity refines Activity {
-+		produces = NameFuerBlattSeiteDokument.blatt;
-+		PaperTray paperTray;
-+		StaticOrDynamicFileOrDD source;
-+		PrintReader reader;
-+	}
-+
-+	compound WriteSheetsActivity refines Activity {
-+	    PrintWriter writer;
-+		consumes = NameFuerBlattSeiteDokument.blatt;
-+	}
-+
-+	compound PaperTray {
-+		String trayID;
-+		String sheetRef;
-+	}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/types/Testprodukt_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/types/Testprodukt_0.ivml
-new file mode 100644
-index 0000000..29e1f8a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/experiments/control/types/Testprodukt_0.ivml
-@@ -0,0 +1,40 @@
-+project Testprodukt {
-+
-+    version v0;
-+    compound ActivityGraph {
-+        setOf(Activity) activities;
-+        setOf(Dependency) dependencies;
-+        setOf(Object) objects;
-+    }
-+
-+    abstract compound Activity {
-+    }
-+
-+    abstract compound Object {
-+        refTo(Dependency) position;
-+    }
-+
-+    compound Dependency {
-+        refTo(Activity) source;
-+        refTo(Activity) target;
-+    }
-+
-+    compound ReadSheets refines Activity {
-+    }
-+
-+    compound Sheet refines Object {
-+    }
-+
-+    compound Document refines Object {
-+    }
-+
-+    compound WriteSheets refines Activity {
-+    }
-+
-+    ReadSheets readSheets = {};
-+    WriteSheets writeSheets = {};
-+    Document document = {position = dep};
-+    Dependency dep = {source = readSheets, target = writeSheets};
-+    ActivityGraph actGraph = {activities = {readSheets, writeSheets}, objects = {document}, dependencies = {dep}};
-+    actGraph.objects->forAll(Object o|isTypeOf(o.position.source, refTo(ReadSheets)) implies isTypeOf(o, Sheet));
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/.EASyConfig b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/.EASyConfig
-new file mode 100644
-index 0000000..f9eaf10
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/.EASyConfig
-@@ -0,0 +1,15 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<ProductLineProject id="ca74a592-912a-4a0c-ac61-aa6aa3026a51" name="QM" version="0" location="QM2.devel">
-+	<predecessors>
-+	</predecessors>
-+	<successors>
-+	</successors>
-+	<settings>
-+		<entity debug="false" />
-+	</settings>
-+	<reasoners>
-+		<entity timeout="0" />
-+	</reasoners>
-+	<instantiators>
-+	</instantiators>
-+</ProductLineProject>
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.ivml
-new file mode 100644
-index 0000000..e76699a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.ivml
-@@ -0,0 +1,15 @@
-+project QM {
-+
-+	version v0;
-+	import HardwareCfg;
-+	import ReconfigurableHardwareCfg;
-+	import DataManagementCfg;     
-+	import ObservablesCfg;
-+	import AdaptivityCfg;
-+	import StrategiesTacticsCfg;
-+	import AlgorithmsCfg;
-+	import FamiliesCfg; 
-+	import PipelinesCfg;
-+	import InfrastructureCfg;
-+	import CloudResourceCfg;
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.vil b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.vil
-new file mode 100644
-index 0000000..fcacd28
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/QM_0.vil
-@@ -0,0 +1,848 @@
-+@advice(QM)
-+vilScript QM (Project source, Configuration config, Project target, String pipelineName) {
-+
-+    version v0;
-+    Path targetPath = "$target/";
-+    Path pipelines = "$target/pipelines/eu/qualimaster";
-+	Path pipelinesXml = "$target/pipelines.xml";
-+    Path ifGen = "$target/if-gen";
-+    Path modelPom = "$target/pom.xml";
-+    Path serializers = "$target/serializers";
-+    Path hwAlgorithms = "$target/hardwareAlgorithms";
-+    Path hwGen = "$target/hw-gen";
-+    Path modelGen = "$target/model-gen";
-+    
-+    Boolean newSwitch = false; //enable the switch related code
-+    Boolean looseSub = false; //enable the integration of loosing sub-pipeline
-+	
-+	Integer port = 11000;//60010
-+	mapOf(String, Integer) algToPort = {};
-+	
-+    mapOf(String, setOf(DecisionVariable)) lastElementMap = {}; //map<eltVarname, lastElements>
-+    mapOf(Tuple,Tuple) inputToOutputMap = {};
-+    mapOf(Tuple,String) nameToOutputMap = {}; //obtain the interface name of the output tuples. map<outputTuple, familyInterfaceName>
-+    mapOf(String, mapOf(Tuple,sequenceOf(Tuple))) globalMap = {}; //map<eltVarname, map<inputTuple, outputTuple>>
-+    mapOf(String, setOf(DecisionVariable)) familiesInPipeline = {};  
-+    mapOf(String, DecisionVariable) subPipToLastElement = {}; //store the last element per sub-pipeline, shall not clean up (TODO:consider multiple ending nodes in the sub-topology)  
-+	
-+	setOf(HardwareAlgorithm) hardwareAlgorithms = {}; //store hardware algorithms
-+	setOf(Sink) sinks = {}; //store sinks per pipeline.
-+	mapOf(String, String) settingPaths = {}; //store application xml paths from pipelines
-+	setOf(Parameter) permissibleParas ={}; //collect permissible parameters
-+	sequenceOf(DecisionVariable) subPipelines = {}; //collect the generated sub-pipelines
-+	mapOf(String, sequenceOf(String)) nextConsumingNode = {}; //collect the next consuming node for the subpipeline algorithm <subPipelineName, <PipName, nodeName>>
-+	mapOf(String, DecisionVariable) subPipInFamilyElement = {};//collect the family element node (varname) for the subpipeline algorithm <subPipelineName, FamilyElementVarName> 
-+	setOf(SubPipelineAlgorithm) subPipelineAlgorithms = {}; //collect the sub-pipeline algorithms in the generated pipelines
-+	setOf(DecisionVariable) visitedNodes = {}; //mark already-visited nodes
-+	setOf(FamilyElement) hwFamilyElements = {}; //collect the family elements using hardware algorithms.
-+	
-+	String interfaceArtifact;
-+    String repositoryURL;
-+	String modelArtifact;
-+		
-+    cleanup(Project target) = : {
-+		pipelines.delete(); 
-+		pipelinesXml.delete();
-+		//modelPom.delete();   
-+		serializers.delete();
-+		hwAlgorithms.delete();  
-+		hwGen.delete(); 
-+		modelGen.delete();
-+    }
-+    
-+    // this needs to be done separately, please do not clear the interfaces in cleanup
-+    cleanupInterfaces(Project target) = : {
-+        ifGen.delete();
-+    }      
-+    
-+    /**
-+	 * Maps input/output tuple types, one input tuple only maps to one output types.
-+	 */
-+    mapSequence(Tuples input, Tuples output, mapOf(Tuple, Tuple) result) = : {
-+		Integer inputSize = input.size();
-+		Integer outputSize = output.size();
-+		Integer s1 = 0;
-+		Integer s2 = 0;
-+		if(inputSize > 0 and outputSize > 0) {
-+			for(Tuple t : input) {
-+				Fields fSet1 = t.fields;
-+				Integer fs1 =fSet1.size();
-+				for(Tuple e : output) {
-+					Fields fSet2 = e.fields;
-+					Integer fs2 =fSet2.size();
-+					if(fs1 == fs2){
-+						Integer m = 0;
-+						for(Field f1 : fSet1) {
-+							for(Field f2 : fSet2) {
-+								if(f1.name == f2.name and f1.type == f2.type) {
-+									//matched!!
-+									m = m + 1;
-+								}
-+							};
-+						};
-+						if(m == fs1) {
-+							result.add(t, e);
-+						}						
-+					}
-+					
-+				};
-+			};
-+		}
-+	}
-+	
-+	/**
-+	 * Maps input/output tuple types, one input tuple can map to multiple output types.
-+	 */
-+	mapSequenceMulti(Tuples input, Tuples output, mapOf(Tuple, sequenceOf(Tuple)) result) = : {
-+		sequenceOf(Tuple) tmp = {};
-+		Integer inputSize = input.size();
-+		Integer outputSize = output.size();
-+		Integer s1 = 0;
-+		Integer s2 = 0;
-+		if(inputSize > 0 and outputSize > 0) {
-+			for(Tuple t : input) {
-+				Fields fSet1 = t.fields;
-+				Integer fs1 =fSet1.size();
-+				for(Tuple e : output) {
-+					Fields fSet2 = e.fields;
-+					Integer fs2 =fSet2.size();
-+					if(fs1 == fs2){
-+						Integer m = 0;
-+						for(Field f1 : fSet1) {
-+							for(Field f2 : fSet2) {
-+								if(f1.name == f2.name and f1.type == f2.type) {
-+									//matched!!
-+									m = m + 1;
-+								}
-+							};
-+						};
-+						if(m == fs1) {
-+							sequenceOf(Tuple) matchedTuples = {};
-+							if(result.containsKey(t)) {
-+								tmp = result.get(t);
-+								for(Tuple tuple : tmp) {
-+									matchedTuples.add(tuple);
-+								}
-+							}
-+							matchedTuples.add(e);
-+							result.add(t, matchedTuples);
-+						}						
-+					}
-+					
-+				};
-+			};
-+		}
-+	}
-+	
-+	protected assignPorts(Family family) = : {
-+		for(Algorithm alg : family.members) {
-+			String algName = alg.name.firstToUpperCase().toIdentifier();
-+			algToPort.add(algName, port);
-+			port = port + 1;
-+		};
-+	}
-+	
-+    protected processElement(sequenceOf(DecisionVariable) output, DecisionVariable prevar, Configuration config, String topoName, Family subPipelineFamily, String algName, Boolean debug) = : {     	
-+        for(Flow v=output) {
-+        	DecisionVariable elt = v.destination;
-+        	if(!visitedNodes.includes(elt)) { //check whether the destination node is already generated, if true, skip
-+	            visitedNodes.add(elt);//collect the generated destination node
-+	            String eltName = elt.varName().firstToUpperCase();            
-+	            String name = elt.varName().firstToUpperCase() + elt.type(); 
-+	            //collect permissible parameters
-+	            for(Parameter p : elt.byName("permissibleParameters")) {
-+	            	permissibleParas.add(p);
-+	            }
-+	            if(newSwitch) {
-+	            	if(elt.type() == "FamilyElement") {
-+						DecisionVariable fmVar = elt.byName("family");
-+						Family family = fmVar;
-+						assignPorts(family); //assign the ports
-+		            	if(fmVar.byName("members").variables().size() > 1) {
-+		            		for(Algorithm alg : fmVar.byName("members")) {
-+		            			if(isSubTopologyBasedAlgorithm(alg) and !looseSub) {
-+		            			vilTemplateProcessor("stormIntermediarySpout", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(alg.name))}Intermediary.java", topoName=topoName, topLevelPip=null, fmElt=elt, algorithm=alg, globalMap=globalMap, lastElementMap=lastElementMap, nameToOutputMap=nameToOutputMap, algNameToPort=algToPort);
-+		            			vilTemplateProcessor("stormEndBolt", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(alg.name))}EndBolt.java", topoName=topoName, topLevelPip=topoName, fmElt=elt, algorithm=alg, nextNode=null);
-+		            			}
-+		            		};
-+		            		
-+		            	}
-+	               }
-+	            }
-+	            if(elt.type() == "FamilyElement") { //pass the algToPort
-+	            	mapOf(Tuple, Grouping) tupleToGrouping = {};
-+	            	if(!subPipelineFamily.isNull()) {//subPipelineFamily indicates that it is in the sub-pipeline
-+	            		mappingTupleAndGrouping(output, tupleToGrouping);//map the tuple with the grouping type
-+	            		subPipToLastElement.add(topoName, elt);//record the last element from the sub-pipeline
-+	            	}
-+	            	if(looseSub) {
-+		            	//check whether the underlying family has sub-pipeline, if so, generate the sub-pipeline
-+		            	FamilyElement fe = elt;
-+		            	Family fm = fe.family;
-+		            	Flow flow = elt.byName("output").variables().first(); //TODO: take the first flow, may need to consider multiple flows
-+		            	DecisionVariable nextNode = flow.destination;
-+		            	for(alg : fm.members) {	//collect the next consuming node in the main pipeline for the sub-pipeline algorithms
-+			            	if(alg.type() == "SubPipelineAlgorithm") {
-+			    				SubPipelineAlgorithm subAlg = alg;
-+			    				SubPipeline subPipeline = subAlg.subPipeline;
-+			    				String profilingArtifact = subAlg.artifact;		    				
-+			    				subPipelineAlgorithms.add(subAlg);
-+				    			sequenceOf(String) nodeInfo = {}; //<pipName, nodeName>
-+			            		nodeInfo.add(topoName);
-+			            		nodeInfo.add(nextNode.varName());
-+			            		nextConsumingNode.add(subPipeline.name, nodeInfo);
-+			            		subPipInFamilyElement.add(subPipeline.name, fe);
-+			            	}            	
-+		            	}
-+	            	}
-+	            	vilTemplateProcessor("storm" + elt.type(), config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", preElt = prevar, elt=elt, topoName=topoName, nameToOutputMap=nameToOutputMap, globalMap=globalMap, lastElementMap=lastElementMap, algToPort=algToPort, subPipelineFamily=subPipelineFamily, tupleToGrouping=tupleToGrouping, subAlgName=algName, debug=debug, connector=false);
-+	            } else {
-+	            	String type;
-+	            	if(elt.type() == "ReplaySink") {//if it's ReplaySink, execute the stormSink template
-+	            		type = "Sink";
-+	            	} else {
-+	            		type = elt.type();
-+	            	}
-+	            	vilTemplateProcessor("storm" + type, config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", preElt = prevar, elt=elt, topoName=topoName, nameToOutputMap=nameToOutputMap, globalMap=globalMap, lastElementMap=lastElementMap, debug=debug);
-+	            }
-+	            //collect sinks in the pipeline.
-+	            if(elt.type() == "Sink" or elt.type() == "ReplaySink") {
-+	            	Sink sink = elt;
-+	            	sinks.add(sink);
-+	            }
-+	            processElement(elt.byName("output").variables(), elt, config, topoName, subPipelineFamily, algName, debug);
-+        	}
-+        }; 
-+    }
-+    
-+    Boolean isSubTopologyBasedAlgorithm(Algorithm alg) = : {
-+    	Boolean result = false;
-+    	if((alg.type() == "SubPipelineAlgorithm") or (alg.type() == "HardwareAlgorithm")) {
-+    		result = true;
-+    	} 
-+    	if(alg.type() == "SoftwareAlgorithm") {
-+    		SoftwareAlgorithm a = alg;
-+    		if(!a.algTopologyClass.isNull() and a.algTopologyClass.isConfigured()) {
-+    			result = true;
-+    		}
-+    	} 
-+		result;
-+    }
-+    
-+    protected mappingTupleAndGrouping(sequenceOf(DecisionVariable) output, mapOf(Tuple, Grouping) tupleToGrouping) = : {
-+    	for(Flow f : output) {
-+			tupleToGrouping.add(f.tupleType, f.grouping);
-+		}
-+    }
-+    
-+    // entry point for interface generation - do not change the name / signature
-+    interfaces(Project source, Configuration config, Project target) = : cleanupInterfaces(target) {
-+    	QM topLevel = config;
-+    	
-+        // generate data source interfaces
-+		sequenceOf(DataSource) sources = topLevel.dataSources->select(s|!s.profilingSource);
-+	    for(DataSource dataSrc : sources) {
-+            String srcName = dataSrc.name.firstToUpperCase(); 
-+	    	vilTemplateProcessor("dataSourceInterface", config, "$ifGen/eu/qualimaster/data/inf/I${toIdentifier(srcName)}.java", elt=dataSrc, pkg="eu.qualimaster.data"); //generate the data source interface
-+            vilTemplateProcessor("dataSourceImplementation", config, "$ifGen/eu/qualimaster/data/imp/${toIdentifier(srcName)}.java", elt=dataSrc, pkg="eu.qualimaster.data", profiling=false);
-+	    	createProtosFor(dataSrc, srcName, config, target);
-+	    	String prefixImpPath = "$ifGen/eu/qualimaster/data/imp/${toIdentifier(srcName)}";
-+	    	String pkg = "eu.qualimaster.data";
-+	    	vilTemplateProcessor("tupleSerialization", config, "${prefixImpPath}Serializers.java", elt=dataSrc, pkg=pkg); 
-+	    };
-+	    //generate data sink interfaces
-+		sequenceOf(DataSink) sinks = topLevel.dataSinks;
-+	    for(DataSink dataSnk : sinks) {
-+            String snkName = dataSnk.name.firstToUpperCase();
-+	    	vilTemplateProcessor("dataSinkInterface", config, "$ifGen/eu/qualimaster/data/inf/I${toIdentifier(snkName)}.java", elt=dataSnk); //generate the data sink interface
-+            vilTemplateProcessor("dataSinkImplementation", config, "$ifGen/eu/qualimaster/data/imp/${toIdentifier(snkName)}.java", elt=dataSnk, profiling=false);	
-+	    	createProtosFor(dataSnk, snkName, config, target);
-+	    	String prefixImpPath = "$ifGen/eu/qualimaster/data/imp/${toIdentifier(snkName)}";
-+	    	String pkg = "eu.qualimaster.data";
-+	    	vilTemplateProcessor("tupleSerialization", config, "${prefixImpPath}Serializers.java", elt=dataSnk, pkg=pkg);
-+	    };
-+	    
-+		for(DecisionVariable f=topLevel.families) {
-+			Family family = f;
-+			String ifName = "I" + family.name.firstToUpperCase(); 
-+			String fName = family.name.firstToUpperCase();			
-+
-+			//generate the family interfaces and implementations
-+			createInterfacesFor(f, ifName, config, target);			
-+			createProtosFor(f, fName, config, target);
-+			createImpFor(f, fName, config, target);		
-+		};
-+		vilTemplateProcessor("serializationRegistry", config, "$ifGen/eu/qualimaster/families/imp/SerializationRegistry.java", families=topLevel.families);
-+	}  
-+ 
-+    /**
-+     * Obtain the globalMap.
-+     */
-+    protected obtainGlobalMapForTuples(Pipeline pip, setOf(DecisionVariable) families) = : {//globalMap --> <elementName, mapOf(inputTuple, outputTuple)>
-+    	Boolean isSubPipeline = false; //consider the subPipeline
-+    	setOf(DecisionVariable) flows = {};//mark the visited flows
-+    	if(pip.type() == "SubPipeline") {
-+    		isSubPipeline = true;
-+    	}
-+		for(DecisionVariable v = pip.sources){
-+            //add <name,outputTuple> from sources for both main- and sub-pipeline
-+        	Source src = v;
-+            DataSource dataSrc = src.source;
-+            String srcName = dataSrc.name;
-+        	Tuples outputTuples = dataSrc.input;
-+        	String name = "I" + srcName.firstToUpperCase().toIdentifier();
-+            obtainNameToOutputMap(outputTuples, name, true);
-+            
-+            if(!isSubPipeline) {//main pipeline            	
-+            	processForGlobalMap(v.byName("output").variables(), v, families, pip.name, flows);  
-+            }  		
-+		};
-+    	if(isSubPipeline) {//subPipeline
-+    		SubPipeline subPip = pip;
-+    		processForGlobalMap(subPip.connectors, subPip.subPipelineFamily, families, subPip.name, flows); 
-+    	}
-+    }        
-+   
-+	protected checkedLastElementForOutputTuples(setOf(DecisionVariable) lastElementSet, sequenceOf(Tuple) outputTuples) = : {
-+	    //Collect all output tuples from last elements	   	
-+		for(DecisionVariable lastElt : lastElementSet){
-+			sequenceOf(Tuple) tmpTuples = {};
-+	    	if(lastElt.type() == "Source") {
-+	    	   Source src = lastElt;
-+	    	   DataSource dataSrc = src.source;
-+	    	   tmpTuples = dataSrc.input;
-+	    	} else if(lastElt.type() == "FamilyElement") {
-+	     	   Family lastEltFamily = lastElt.byName("family");
-+	   	       tmpTuples = lastEltFamily.output;
-+	    	} else if(lastElt.type() == "DataManagementElement"){
-+	    	   String name = lastElt.varName().firstToUpperCase();
-+	    	   setOf(DecisionVariable) preLastEltSet = lastElementMap.get(name);
-+	    	   checkedLastElementForOutputTuples(preLastEltSet, outputTuples);
-+	    	}	   	    	 	 
-+	        for(Tuple t = tmpTuples){
-+	            if(outputTuples.excludes(t)) {
-+	    	        outputTuples.add(t); 
-+	    	    }
-+	        }
-+	    }
-+	}
-+	
-+	/**
-+	 * @param flows the set of already-visited flows
-+	 */
-+    protected processForGlobalMap(sequenceOf(DecisionVariable)output, DecisionVariable lastVar, setOf(DecisionVariable) families, String topoName, setOf(DecisionVariable) flows) = : {//globalMap --> <elementName, mapOf(inputTuple, outputTuple)>
-+    	setOf(DecisionVariable) lastElementSet = {};
-+    	sequenceOf(Tuple) inputTuples = {};    	
-+    	sequenceOf(Tuple) outputTuples = {};
-+    	for(Flow f = output){    		
-+    		if(flows.excludes(f)) {//check whether the flow is already visited
-+				flows.add(f);				
-+				DecisionVariable elt = f.destination;	
-+	    	    String eltName = elt.varName().firstToUpperCase();
-+	    	    //check current element (FamilyElement, DataManagement or Sink)
-+	    	    if(elt.type() != "DataManagementElement") {
-+	                mapOf(Tuple, sequenceOf(Tuple)) tempMap = {};
-+		    	    if(elt.type() == "FamilyElement"){
-+		    	    	 DecisionVariable eltFamilyVar = elt.byName("family"); 
-+		    	    	 Family eltFamily = elt.byName("family"); 
-+		    	    	 String fName = eltFamily.name; 	    	     	    	 
-+		    	    	 obtainNameToOutputMap(eltFamily.output, "II"+ fName.firstToUpperCase(), true); //obtain <currentElementName, outputTuple>
-+		    	         inputTuples = eltFamily.input;
-+		    	         //collect families
-+		    	         families.add(eltFamily);  
-+		    	         //collect the family element using the hardware algorithm
-+		    	         if(hasHardwareAlgorithm(eltFamily)) {
-+		    	         	hwFamilyElements.add(elt);
-+		    	         } 	         
-+		    	    } else if(elt.type() == "Sink" or elt.type() == "ReplaySink"){
-+		    	    	 Sink snk = elt;
-+		    	    	 DataSink dataSnk = snk.sink;
-+		    	    	 inputTuples = dataSnk.output;
-+		    	    }    	    
-+		    	    //check last elements linked to the current elt in order to obtain the output Tuples from last element(lastElement only can be Source or Family)
-+		    	    lastElementSet = lastElementMap.get(eltName);
-+		    	    checkedLastElementForOutputTuples(lastElementSet, outputTuples); //get all output tuples from last elements	    
-+		    	    //tempMap = inputTuples.mapAny(outputTuples); //the old mapSequence checking all fields in the tuple.
-+		    	    mapSequenceMulti(inputTuples, outputTuples, tempMap);
-+		    	    globalMap.add(eltName, tempMap);
-+		    	    processForGlobalMap(elt.byName("output").variables(), elt, families, topoName, flows); 
-+	    	    } else { // if elt is DataManagementElement, just pass to next bolt
-+	    	    	processForGlobalMap(elt.byName("output").variables(), elt, families, topoName, flows); 
-+	    	    } 
-+	    	    if(looseSub) {//collect nodes information of sub-pipelines
-+	    	    	subPipToLastElement.add(topoName, elt); //record the last element name of the sub-pipeline   
-+	    	    }					
-+			}				    	           	       	    
-+    	};
-+    }
-+    
-+    //used for sub-pipeline case
-+    protected processForGlobalMap(setOf(FamilyElement) connectors, Family subPipelineFamily, setOf(DecisionVariable) families, String topoName, setOf(DecisionVariable) flows) = : {//globalMap --> <elementName, mapOf(inputTuple, outputTuple)>
-+    	sequenceOf(Tuple) inputTuples = {};
-+    	sequenceOf(Tuple) outputTuples = {};    	
-+    	setOf(DecisionVariable) lastElementSet = {};
-+
-+    	obtainNameToOutputMap(subPipelineFamily.input, "II" + subPipelineFamily.name.firstToUpperCase(), false);//the connector in the subpipeline receives the input of the family
-+    	for(DecisionVariable elt = connectors){
-+            mapOf(Tuple, sequenceOf(Tuple)) tempMap = {};
-+    		if(looseSub) {//collect nodes information of sub-pipelines
-+    			subPipToLastElement.add(topoName, elt); //record the last element name of the sub-pipeline
-+    		}
-+    	    String eltName = elt.varName().firstToUpperCase();
-+    	    //connectors will be only FamilyElement
-+	    	DecisionVariable eltFamilyVar = elt.byName("family"); 
-+	    	Family eltFamily = elt.byName("family"); 
-+//	    	String fName = eltFamilyVar.varName(); 	
-+			String fName = eltFamily.name;     	     	    	 
-+	    	obtainNameToOutputMap(eltFamily.output, "II"+ fName.firstToUpperCase(), true); //obtain <currentElementName, outputTuple>
-+	        inputTuples = eltFamily.input;
-+	    	//collect families
-+	    	families.add(eltFamily);   	         
-+	    	
-+	    	//check last elements linked to the current elt in order to obtain the output Tuples from last element(lastElement only can be Source or Family)
-+	    	if(lastElementMap.containsKey(eltName)) {//basically only if there is source as the last element
-+	    		lastElementSet = lastElementMap.get(eltName);
-+	    		checkedLastElementForOutputTuples(lastElementSet, outputTuples); //get all output tuples from last elements	 
-+	    	}
-+	    	for(Tuple t = subPipelineFamily.input) { //the connector has also the input from the up-level family
-+	    		outputTuples.add(t);
-+	    	}           	    	    	       
-+	    	//tempMap = inputTuples.mapAny(outputTuples); //the old mapSequence checking all fields in the tuple.
-+	    	mapSequenceMulti(inputTuples, outputTuples, tempMap);
-+	    	globalMap.add(eltName, tempMap);
-+	    	processForGlobalMap(elt.byName("output").variables(), elt, families, topoName, flows); 
-+    	};
-+    }
-+    
-+    /**
-+     * Obtain nameToOutputMap.
-+     */
-+    protected obtainNameToOutputMap(Tuples tuples,  String elementName, Boolean output) = : {//nameToOutputMap --> <elementName, outputTuple>
-+    	String eName = "";
-+    	String ending;
-+    	if(output) {
-+    		ending = "Output";
-+    	} else {
-+    		ending = "Input";
-+    	}
-+        for(Tuple t = tuples) {
-+			eName = t.name;
-+            String name = elementName + firstToUpperCase(eName) + ending;
-+            nameToOutputMap.add(t,name);    
-+        };
-+    }
-+    
-+    protected obtainLastElementMap(Pipeline pip) = : {//lastElementMap --> <elementName, setOf(lastElement)>
-+       	Boolean isSubPipeline = false; //consider the subPipeline
-+    	if(pip.type() == "SubPipeline") {
-+    		isSubPipeline = true;
-+    	}
-+       	setOf(String) flows = {};
-+       	if(!isSubPipeline) {
-+       		for(DecisionVariable v = pip.sources){
-+       			setOf(DecisionVariable) lasts = {};
-+       			lasts.add(v);
-+            	processForLastElementMap(v.byName("output").variables(), lasts, flows);    		
-+    		};
-+       	} else {//for sub-topology
-+       		SubPipeline subPip = pip; 
-+       		for(DecisionVariable d = subPip.connectors) {//connectors 
-+       			setOf(DecisionVariable) lasts = {};
-+       			lasts.add(d);
-+       			processForLastElementMap(d.byName("output").variables(), lasts, flows);
-+       		};
-+       		for(DecisionVariable v = pip.sources) {//sources
-+       			setOf(DecisionVariable) lasts = {};
-+       			lasts.add(v);
-+       			processForLastElementMap(v.byName("output").variables(), lasts, flows);
-+       		}
-+       	}
-+    } 
-+  
-+    protected processForLastElementMap(sequenceOf(DecisionVariable)output, setOf(DecisionVariable) lastVars, setOf(String) flows) = : { //lastElementMap --> <elementName, setOf(lastElement)>  		
-+  		String flowName;
-+  		for(Flow f = output){
-+  			flowName = f.name;
-+  			if(flows.excludes(flowName)) {
-+				flows.add(flowName);  				
-+	    	    DecisionVariable elt = f.destination;
-+	    	    String eltName = elt.varName().firstToUpperCase();
-+	    	    setOf(DecisionVariable) tempSet = {};
-+	    	    
-+		    	if(lastElementMap.containsKey(eltName)) { 
-+		    	    tempSet = lastElementMap.get(eltName);
-+			    	setOf(DecisionVariable) t = {}; 
-+			    	for(DecisionVariable v : tempSet){
-+			    	    t.add(v);
-+			    	};
-+					for(DecisionVariable dv : lastVars) {//multiple last elements
-+	    	    	   if(t.excludes(dv)) {//if the element is already included, skip this   	    	
-+		    	    	 t.add(dv); 
-+		    	       }
-+	    	    	}
-+	    	    	tempSet = t;
-+		    	} else {
-+		    	   	for(DecisionVariable dv : lastVars) {//multiple last elements
-+		    	    	tempSet.add(dv);
-+		    	    } 
-+		    	}  	       	    
-+		    	lastElementMap.add(eltName, tempSet);
-+		       
-+		       //collect the last elements
-+		       setOf(DecisionVariable) lastElts = {};   
-+	    	   if(elt.type() == "FamilyElement") {//check whether the family element is configured to a sub-pipeline algorithm.
-+    	    	  Family fm = elt.byName("family");
-+    	    	  for(Algorithm alg : fm.members) {
-+    	    		if(alg.type() == "SubPipelineAlgorithm") {
-+    	    			SubPipelineAlgorithm subAlg = alg;
-+						Pipeline pip = subAlg.subPipeline;
-+						String pipName = pip.name;
-+						if(subPipToLastElement.containsKey(pipName)) {
-+							lastElts.add(subPipToLastElement.get(pipName));//add the last element of the sub-pipeline additionally
-+    	    			}
-+    	    	    } 
-+    	    	    lastElts.add(elt);    	    	    
-+    	          }
-+	    	    } else {
-+	    	    	lastElts.add(elt);
-+	    	    }
-+	    	    
-+	    	    if(elt.byName("output").variables().size() > 0){
-+	    	    	processForLastElementMap(elt.byName("output").variables(), lastElts, flows);
-+	    	    }   
-+    	    } 	    
-+    	};
-+    } 
-+	
-+	protected includesVariable(setOf(DecisionVariable) variables, DecisionVariable var, Boolean result) =: {
-+		for(DecisionVariable dVar = variables) {
-+			if(dVar.varName() == var.varName()) {
-+				result = true;
-+			}
-+		}
-+	}
-+	
-+	protected lastTupleTypes(DecisionVariable elt, sequenceOf(Tuple) inputTuples, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, Tuple)) globalMap, setOf(String) lastTypes) =: {
-+	    //get the inputToOutputMapping of this family element
-+		String eltName = elt.varName().firstToUpperCase();
-+		mapOf(Tuple, Tuple) inputToOutputMapping = {};
-+		if(globalMap.containsKey(eltName)){
-+			inputToOutputMapping = globalMap.get(eltName);
-+		}
-+		String tupleName;
-+		String outputInfName;
-+	    for(Tuple t : inputTuples) {
-+			tupleName = t.name;
-+			//get output interface name	
-+			if(inputToOutputMapping.containsKey(t))	{
-+			  Tuple output = inputToOutputMapping.get(t);
-+			  outputInfName = nameToOutputMap.get(output);
-+			  lastTypes.add(outputInfName);				
-+			} 
-+	    };
-+	}
-+	
-+    protected createImpFor(Family family, String fName, Configuration config, Project target) = : {
-+    	String prefixImpPath = "$ifGen/eu/qualimaster/families/imp/${toIdentifier(fName)}";
-+    	String pkg = "eu.qualimaster.families";
-+    	vilTemplateProcessor("familyImplementationJava", config, "$prefixImpPath.java", family=family);
-+    	vilTemplateProcessor("tupleSerialization", config, "${prefixImpPath}Serializers.java", elt=family, pkg=pkg);
-+    }
-+    
-+    protected createInterfacesFor(Family family, String ifName, Configuration config, Project target) = : {
-+        String prefixPath = "$ifGen/eu/qualimaster/families/inf/${toIdentifier(ifName)}";
-+    	vilTemplateProcessor("familyInterfaceJava", config, "$prefixPath.java", family=family, ifName=ifName);
-+    	//vilTemplateProcessor("familyInterfaceC", config, "$prefixPath.c", family=family, ifName=ifName);
-+    	
-+    }
-+    
-+	protected createProtosFor(Family family, String name, Configuration config, Project target) = : {
-+        String prefixPath = "$ifGen/protobuf/${toIdentifier(name)}";
-+        String pkg = "eu.qualimaster.families";
-+    	vilTemplateProcessor("protoFiles", config, "$prefixPath.proto", elt=family, pkg=pkg);    	
-+    }
-+    
-+    protected createProtosFor(DataSource dataSrc, String name, Configuration config, Project target) = : {
-+        String prefixPath = "$ifGen/protobuf/${toIdentifier(name)}";
-+        String pkg = "eu.qualimaster.data";
-+    	vilTemplateProcessor("protoFiles", config, "$prefixPath.proto", elt=dataSrc, pkg=pkg);    	
-+    }
-+    
-+    protected createProtosFor(DataSink dataSnk, String name, Configuration config, Project target) = : {
-+        String prefixPath = "$ifGen/protobuf/${toIdentifier(name)}";
-+        String pkg = "eu.qualimaster.data";
-+    	vilTemplateProcessor("protoFiles", config, "$prefixPath.proto", elt=dataSnk, pkg=pkg);    	
-+    }
-+    
-+    protected createHardwareAlgorithms(FamilyElement fmElt, String pipelineName, Configuration config, Project target) = : {
-+    	Family family = fmElt.family;
-+    	for(Algorithm alg : family.members) {
-+    		String algName = alg.name;
-+    		if(alg.type() == "HardwareAlgorithm") {
-+    			HardwareAlgorithm hwAlg = alg;
-+    			hardwareAlgorithms.add(hwAlg);
-+    			String prefixPath = "$hwAlgorithms/eu/qualimaster/algorithms/${firstToUpperCase(toIdentifier(algName))}";    			
-+    			vilTemplateProcessor("stormHardwareAlgorithmSubTopology", config, "$prefixPath/${firstToUpperCase(toIdentifier(algName))}SubTopology.java", family=family, algorithm=hwAlg, pipelineName=pipelineName, algName=algName);
-+    			vilTemplateProcessor("stormHardwareConnectionBolt", config, "$prefixPath/HardwareConnectionBolt.java", family=family, algorithm=hwAlg);
-+    			vilTemplateProcessor("stormHardwareConnectionSpout", config, "$prefixPath/HardwareConnectionSpout.java", family=family, algorithm=hwAlg, topoName=pipelineName);
-+    			vilTemplateProcessor("hardwareAlgorithmPom", config, "$prefixPath/pom.tmp", algName=algName);
-+    			//generate a mapping xml 
-+				vilTemplateProcessor("hardwareAlgorithmMapping", config, "$prefixPath/mapping.tmp", algorithm=hwAlg, pipName=pipelineName); 
-+    			vilTemplateProcessor("profileCtl", config, "$prefixPath/profiling/profile.ctl", artifact=hwAlg.artifact);
-+    			if(looseSub) {//generate the intermediary nodes for loose integration --TODO: take care of the pipeline name (container)
-+    				vilTemplateProcessor("stormIntermediarySpout", config, "$prefixPath/${firstToUpperCase(toIdentifier(algName))}Intermediary.java", topoName=alg.name,fmElt=fmElt, algorithm=alg, globalMap=globalMap, lastElementMap=lastElementMap, nameToOutputMap=nameToOutputMap, algNameToPort=algToPort);
-+    				vilTemplateProcessor("stormEndBolt", config, "$prefixPath/${firstToUpperCase(toIdentifier(algName))}EndBolt.java", topoName=alg.name, topLevelPip=alg.name, fmElt=fmElt, algorithm = alg, nextNode=null);
-+    				//vilTemplateProcessor("stormPipeline", config, "$prefixPath/Topology.java", pipeline=subPip, familiesInPipeline=familiesInPipeline, lastElementMap=lastElementMap); TODO:generate the Topology class
-+    			}
-+    			//maven("$prefixPath");
-+    			vilTemplateProcessor("hardwareSender", config, "$hwGen/${firstToUpperCase(toIdentifier(algName))}/sender.cpp", family=family);
-+    			vilTemplateProcessor("hardwareReceiver", config, "$hwGen/${firstToUpperCase(toIdentifier(algName))}/receiver.cpp", family=family);
-+    		}
-+    	};
-+    } 
-+    
-+    protected createPipelines(Pipeline pip, DecisionVariable alg, String profilingArtifact) = : {//inputTuples is the input of the algorithm    	      	
-+        	String algName;
-+        	if(alg != null) {
-+        		algName = alg.byName("name"); 
-+        	}
-+        	//clean up mappings
-+        	if(!looseSub) {//for loose integration the map information collected in the sub-pipeline is needed
-+	        	lastElementMap = {}; 
-+	    		inputToOutputMap = {};
-+	    		nameToOutputMap = {}; 
-+	    		globalMap = {}; 
-+    		}
-+    		familiesInPipeline = {}; 
-+    
-+        	String name;
-+        	String topoName = pip.name;
-+        	Boolean debug = pip.debug;
-+        	Boolean isSubPipeline = false; //consider the subPipeline
-+        	Family subPipelineFamily;
-+	    	if(pip.type() == "SubPipeline") {
-+	    		isSubPipeline = true;
-+	    	}  
-+        	sinks = {};//reset the sink collection.
-+        	permissibleParas ={};//reset the permissible parameter set.          
-+        	setOf(DecisionVariable) families = {}; //collect the families of the pipeline in order to manage the imports for the topology class
-+        	//test for map
-+        	obtainLastElementMap(pip);
-+        	obtainGlobalMapForTuples(pip, families); //carrying the input information of the subPipeline algorithm
-+        	
-+        	//generate the hardware algorithms
-+        	//for(Family family : families) {
-+        	for(FamilyElement fElt : hwFamilyElements->toSequence()->sortedBy(e|e.name)) {
-+        		createHardwareAlgorithms(fElt, topoName, config, target);
-+        	};
-+        	
-+        	familiesInPipeline.add(topoName, families);
-+//        	vilTemplateProcessor("pipelineMap", config, "$pipelines/${toIdentifier(topoName)}/pipelineMap.java",nameToOutputMap=nameToOutputMap, globalMap=globalMap, lastElementMap=lastElementMap);             
-+        	if(!isSubPipeline) {        		                  	      	
-+            	vilTemplateProcessor("mappingXml", config, "$pipelines/${toIdentifier(topoName)}/mapping.tmp", pipeline=pip, families=families, subAlgName=null); 
-+            	vilTemplateProcessor("stormPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/Topology.java", pipeline=pip, algName=null, familiesInPipeline=familiesInPipeline, lastElementMap=lastElementMap);
-+				
-+				for(DecisionVariable v=pip.sources) {
-+            		Source src = v;
-+					DataSource dataSrc = src.source;
-+					//collect permissible parameters
-+					for(Parameter p : src.permissibleParameters) {
-+						permissibleParas.add(p);
-+					}
-+            	    if (dataSrc.profilingSource) {
-+                        String srcName = dataSrc.name.firstToUpperCase(); 
-+          	    	    vilTemplateProcessor("dataSourceInterface", config, "$pipelines/${toIdentifier(topoName)}/topology/inf/I${toIdentifier(srcName)}.java", elt=dataSrc, pkg="eu.qualimaster.${toIdentifier(topoName)}.topology"); //generate the data source interface
-+                        vilTemplateProcessor("dataSourceImplementation", config, "$pipelines/${toIdentifier(topoName)}/topology/imp/${toIdentifier(srcName)}.java", elt=dataSrc, pkg="eu.qualimaster.${toIdentifier(topoName)}.topology", profiling=true);
-+                        vilTemplateProcessor("dataSourceProfilingImplementation", config, "$pipelines/${toIdentifier(topoName)}/topology/imp/${toIdentifier(srcName)}Profiling.java", elt=dataSrc, pkg="eu.qualimaster.${toIdentifier(topoName)}.topology", pip=pip, src=src);
-+            	    }
-+					
-+					name = v.varName().firstToUpperCase() + v.type();
-+					vilTemplateProcessor("storm" + v.type(), config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", elt=v, topoName=topoName, debug=debug);
-+					processElement(v.byName("output").variables(), v, config, topoName, subPipelineFamily, algName, debug);
-+				};
-+				//generate a pom xml
-+				setOf(String) subPipNames = {};
-+				for(SubPipeline subPip : subPipelines) {
-+					subPipNames.add(subPip.name);
-+				}
-+        		vilTemplateProcessor("pipelinePom", config, "$pipelines/${toIdentifier(topoName)}/pom.tmp", pipeline=pip, repoURL=repositoryURL, interfaceArtifact=interfaceArtifact, profiling=false, subPipNames=subPipNames);
-+				vilTemplateProcessor("settingsXml", config, "$pipelines/${toIdentifier(topoName)}/settings.tmp", sinks=sinks, permissibleParameters=permissibleParas, lastElementMap=lastElementMap, topoName=topoName);
-+				settingPaths.add(topoName, "$pipelines/${toIdentifier(topoName)}/settings.xml");
-+            } else {
-+            	SubPipeline subPip = pip;
-+            	subPipelineFamily = subPip.subPipelineFamily;
-+            	vilTemplateProcessor("profileCtl", config, "$pipelines/${toIdentifier(topoName)}/profiling/profile.ctl", artifact=profilingArtifact);
-+				//generate a pom xml
-+        		vilTemplateProcessor("pipelinePom", config, "$pipelines/${toIdentifier(topoName)}/pom.tmp", pipeline=pip, repoURL=repositoryURL, interfaceArtifact=interfaceArtifact, profiling=true, subPipNames={}); 								
-+				//generate a mapping xml
-+				vilTemplateProcessor("mappingXml", config, "$pipelines/${toIdentifier(topoName)}/mapping.tmp", pipeline=pip, families={}, subAlgName=algName); 
-+				//equip an intermediary spout and an ending bolt for the sub-pipeline
-+    			if(looseSub) {    			
-+    				sequenceOf(String) nodeInfo = {};
-+    				if(nextConsumingNode.containsKey(subPip.name)) {
-+    					nodeInfo = nextConsumingNode.get(subPip.name);
-+    				}
-+    				String topLevelPip = nodeInfo[0];
-+    				String nextNode = nodeInfo[1];
-+    				DecisionVariable fmElt;
-+    				//obtain the family element name using the subpipeline as an algorithm
-+    				if(subPipInFamilyElement.containsKey(subPip.name)) {
-+    					fmElt = subPipInFamilyElement.get(subPip.name);
-+    				}
-+    				if(newSwitch) {//use the switch nodes
-+    					vilTemplateProcessor("stormIntermediarySpout", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(algName))}Intermediary.java", topoName=topoName,topLevelPip = topLevelPip, fmElt=fmElt, algorithm=alg, globalMap=globalMap, lastElementMap=lastElementMap, nameToOutputMap=nameToOutputMap, algNameToPort=algToPort);
-+    					vilTemplateProcessor("stormEndBolt", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(algName))}EndBolt.java", topoName=topoName, topLevelPip = topLevelPip, fmElt=fmElt, algorithm = alg, nextNode = nextNode);
-+    				} else {
-+    					vilTemplateProcessor("stormIntermediarySpoutSubPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(algName))}Intermediary.java", topoName=topoName, algorithm = alg);
-+    					vilTemplateProcessor("stormEndBoltSubPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(algName))}EndBolt.java", topoName=topoName, topLevelPip = topLevelPip, nextNode = nextNode, algorithm = alg);
-+    				}
-+    			}
-+               
-+				for(DecisionVariable v=subPip.connectors) { //connectors are FamilyElement
-+					name = v.varName().firstToUpperCase() + v.type();
-+					mapOf(Tuple, Grouping) tupleToGrouping = {};
-+	            	if(!subPipelineFamily.isNull()) {
-+	            		mappingTupleAndGrouping(v.byName("output").variables(), tupleToGrouping);
-+	            		subPipToLastElement.add(topoName, v);//record the last element from the sub-pipeline
-+	            	}
-+					vilTemplateProcessor("storm" + v.type(), config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", preElt = v, elt=v, topoName=topoName, nameToOutputMap=nameToOutputMap, globalMap=globalMap, lastElementMap=lastElementMap, subPipelineFamily = subPipelineFamily, tupleToGrouping=tupleToGrouping, subAlgName=algName, debug=debug, connector=true);
-+					processElement(v.byName("output").variables(), v, config, topoName, subPipelineFamily, algName, debug);
-+				};
-+				for(DecisionVariable v=pip.sources) { //sources
-+					name = v.varName().firstToUpperCase() + v.type();
-+					vilTemplateProcessor("storm" + v.type(), config, "$pipelines/${toIdentifier(topoName)}/topology/$name.java", elt=v, topoName=topoName, debug=debug);
-+				}
-+				vilTemplateProcessor("stormSubPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/${firstToUpperCase(toIdentifier(topoName))}SubTopology.java", pipeline=subPip, family=subPipelineFamily, algName=topoName);
-+				if(looseSub) { //generate Topology for sub-pipeline
-+					vilTemplateProcessor("stormPipeline", config, "$pipelines/${toIdentifier(topoName)}/topology/Topology.java", pipeline=subPip, algName=algName, familiesInPipeline=familiesInPipeline, lastElementMap=lastElementMap);
-+				}
-+			}
-+                      
-+           package(topoName);                
-+    }
-+    
-+    package(String topoName) = : {
-+    	//jar("${target.getPath()}/bin", "${target.getPath()}/bin/**/*.class", "${target.getPath()}/Lib.jar");
-+    	//maven("$pipelines/${toIdentifier(topoName)}",true);
-+    }  
-+    
-+    /**
-+	 * Has hardware algorithm among family members.
-+	 */
-+	Boolean hasHardwareAlgorithm(Family fm) = : {
-+		Boolean result = false;
-+		for(Algorithm alg : fm.members) {
-+			if(alg.type() == "HardwareAlgorithm") {
-+				result = true;
-+			}
-+		}
-+		result;
-+	}
-+    
-+    main(Project source, Configuration config, Project target) = : cleanup(target) {  
-+    	//Project level config
-+    	QM cfg = config;
-+    	    	              
-+        interfaces(source, config, target);       
-+	    	    
-+	    sequenceOf(DecisionVariable) activePipelines = cfg.activePipelines.variables();
-+		interfaceArtifact = cfg.interfaceArtifact;
-+		repositoryURL = cfg.repositoryURL;
-+		modelArtifact = cfg.modelArtifact;
-+		
-+		setOf(Algorithm) algorithms = cfg.algorithms;
-+		
-+		setOf(FieldType) types = cfg.types;
-+		
-+	    //generate the interface pom
-+	    vilTemplateProcessor("interfacesPom", config, "$ifGen/pom.tmp", interfaceArtifact=interfaceArtifact, types=types);
-+	    //package interfaces --- should use maven install 
-+	    //maven("$ifGen"); 
-+	    //generate the pom for the model artifact
-+	    vilTemplateProcessor("modelArtifactPom", config, "$modelGen/pom.tmp", modelArtifact=modelArtifact); 
-+	    
-+	    //generate the pipelines ANT mapping
-+        sequenceOf(DecisionVariable) pipelines = {};
-+        
-+        for(DecisionVariable p : activePipelines) {
-+        	pipelines.add(p);
-+        }
-+	    vilTemplateProcessor("pipelinesXml", config, "$target/pipelines.tmp", pipelines=pipelines, interfaceArtifact=interfaceArtifact, modelArtifact=modelArtifact, hardwareAlgorithms=hardwareAlgorithms);
-+	    
-+	    //generate the subPipeline algorithms
-+	    for(Algorithm alg : algorithms) {
-+	    	if(alg.type() == "SubPipelineAlgorithm") {
-+	    		SubPipelineAlgorithm subAlg = alg;
-+	    		SubPipeline subPipeline = subAlg.subPipeline;
-+	    		//collect all configured sub-pipelines
-+	    		subPipelines.add(subPipeline);
-+	    		
-+	    		String profilingArtifact = subAlg.artifact;
-+	    		if(!looseSub) {
-+	    			createPipelines(subPipeline, subAlg, profilingArtifact);
-+	    		} else {//collect sub-pipeline information
-+	    			obtainLastElementMap(subPipeline);
-+	    			setOf(DecisionVariable) families = {};
-+    				obtainGlobalMapForTuples(subPipeline, families); //carrying the input information of the subPipeline algorithm
-+	    		}
-+	    	}
-+	    }
-+
-+	   	//add all sub-pipelines
-+	   	for(DecisionVariable p : subPipelines) {
-+        	pipelines.add(p);
-+        }
-+        
-+        for(DecisionVariable vPip : activePipelines) {
-+			Pipeline pip = vPip;
-+			createPipelines(pip, null, "");  
-+		};  
-+		
-+		if(looseSub) { //generate sub-pipeline after the main pipeline for the loose integration
-+            sequenceOf(SubPipelineAlgorithm) subSeq = subPipelineAlgorithms->toSequence()->sortedBy(SubPipelineAlgorithm a|a.name);
-+            for(SubPipelineAlgorithm subAlg : subSeq) {
-+				SubPipeline subPipeline = subAlg.subPipeline;
-+				String profilingArtifact = subAlg.artifact;
-+				createPipelines(subPipeline, subAlg, profilingArtifact);
-+			}
-+		}
-+		
-+		//copy model files and package them
-+		Path p = "$source/EASy/**/*.*";
-+	    Path pt = "$modelGen/EASy";
-+	    pt.mkdir();
-+	    copy(p, pt); 
-+	    
-+	    //create folder for collecting setting xml files
-+	    Path settingXmls = "$modelGen/settings";
-+	   	settingXmls.mkdir();
-+	   	setOf(String) pipNames = settingPaths.getKeys();
-+	   	for(String s : pipNames) {
-+	   		Path from = settingPaths.get(s);
-+	   		Path to = "$settingXmls/${s}Settings.xml";
-+	   		copy(from, to);
-+	   	}
-+	    
-+	    //maven("$modelGen");
-+	    
-+	    //clear the initial pipelines xml file   
-+	    pipelinesXml.delete(); 
-+	    //regenerate the deployment xml file                       
-+        vilTemplateProcessor("pipelinesXml", config, "$target/pipelines.tmp", pipelines=pipelines, interfaceArtifact=interfaceArtifact, modelArtifact=modelArtifact, hardwareAlgorithms=hardwareAlgorithms);             
-+    }
-+
-+	// entry point for single pipeline generation - do not change the name / signature
-+    pipeline(Project source, Configuration config, Project target, String pipelineName) = : cleanup(target) {
-+    	QM cfg = config;
-+
-+        interfaceArtifact = cfg.interfaceArtifact;
-+        repositoryURL = cfg.repositoryURL;
-+        modelArtifact = cfg.modelArtifact;
-+    	
-+	    setOf(Pipeline) activePipelines = cfg.activePipelines->select(p|p.name == pipelineName);
-+        for(Pipeline p : activePipelines->toSequence()->sortedBy(p|p.name)) {
-+			createPipelines(p, null, "");  
-+		};
-+	}
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/AdaptivityCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/AdaptivityCfg.ivml
-new file mode 100644
-index 0000000..298e24c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/AdaptivityCfg.ivml
-@@ -0,0 +1,68 @@
-+project AdaptivityCfg {
-+ 
-+	import Adaptivity;
-+	import ObservablesCfg;
-+
-+	pipelineImportance = {
-+		{parameter=refBy(qualityParameters[0]), weight = -1},
-+		{parameter=refBy(qualityParameters[1]), weight = 1},
-+		{parameter=refBy(qualityParameters[2]), weight = 1},
-+		{parameter=refBy(qualityParameters[3]), weight = -1},
-+		{parameter=refBy(qualityParameters[4]), weight = -1},
-+		{parameter=refBy(qualityParameters[5]), weight = -1},
-+		{parameter=refBy(qualityParameters[6]), weight = -1},
-+		{parameter=refBy(qualityParameters[7]), weight = -1},
-+		{parameter=refBy(qualityParameters[8]), weight = -1},
-+		{parameter=refBy(qualityParameters[9]), weight = -1},
-+		{parameter=refBy(qualityParameters[10]), weight = 1},
-+		{parameter=refBy(qualityParameters[11]), weight = 1},
-+		{parameter=refBy(qualityParameters[12]), weight = 1},
-+		{parameter=refBy(qualityParameters[13]), weight = 1},
-+		{parameter=refBy(qualityParameters[14]), weight = 1},
-+		{parameter=refBy(qualityParameters[15]), weight = 1},
-+		{parameter=refBy(qualityParameters[16]), weight = 1},
-+		{parameter=refBy(qualityParameters[17]), weight = 1},
-+		{parameter=refBy(qualityParameters[18]), weight = 1},
-+		{parameter=refBy(qualityParameters[19]), weight = -1},
-+		{parameter=refBy(qualityParameters[20]), weight = 1},
-+        {parameter=refBy(qualityParameters[21]), weight = 1},
-+        {parameter=refBy(qualityParameters[22]), weight = 0},
-+        {parameter=refBy(qualityParameters[23]), weight = 0},
-+        {parameter=refBy(qualityParameters[24]), weight = 0},
-+        {parameter=refBy(qualityParameters[25]), weight = 0}
-+	};
-+
-+	crossPipelineTradeoffs = {
-+		{parameter=refBy(qualityParameters[0]), weight = -1},
-+		{parameter=refBy(qualityParameters[1]), weight = 1},
-+		{parameter=refBy(qualityParameters[2]), weight = 1},
-+		{parameter=refBy(qualityParameters[3]), weight = -1},
-+		{parameter=refBy(qualityParameters[4]), weight = -1},
-+		{parameter=refBy(qualityParameters[5]), weight = -1},
-+		{parameter=refBy(qualityParameters[6]), weight = -1},
-+		{parameter=refBy(qualityParameters[7]), weight = -1},
-+		{parameter=refBy(qualityParameters[8]), weight = -1},
-+		{parameter=refBy(qualityParameters[9]), weight = -1},
-+		{parameter=refBy(qualityParameters[10]), weight = 1},
-+		{parameter=refBy(qualityParameters[11]), weight = 1},
-+		{parameter=refBy(qualityParameters[12]), weight = 1},
-+		{parameter=refBy(qualityParameters[13]), weight = 1},
-+		{parameter=refBy(qualityParameters[14]), weight = 1},
-+		{parameter=refBy(qualityParameters[15]), weight = 1},
-+		{parameter=refBy(qualityParameters[16]), weight = 1},
-+		{parameter=refBy(qualityParameters[17]), weight = 1},
-+		{parameter=refBy(qualityParameters[18]), weight = 1},
-+		{parameter=refBy(qualityParameters[19]), weight = -1},
-+		{parameter=refBy(qualityParameters[20]), weight = 1},
-+        {parameter=refBy(qualityParameters[21]), weight = 1},
-+        {parameter=refBy(qualityParameters[22]), weight = 0},
-+        {parameter=refBy(qualityParameters[23]), weight = 0},
-+        {parameter=refBy(qualityParameters[24]), weight = 0},
-+        {parameter=refBy(qualityParameters[25]), weight = 0}
-+	};
-+
-+	freeze {
-+		pipelineImportance;
-+		crossPipelineTradeoffs;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/ObservablesCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/ObservablesCfg.ivml
-new file mode 100644
-index 0000000..40a8290
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/ObservablesCfg.ivml
-@@ -0,0 +1,9 @@
-+project ObservablesCfg {
-+
-+	import Observables;
-+	
-+	freeze {
-+		configuredParameters;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+	
-+}  
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/StrategiesTacticsCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/StrategiesTacticsCfg.ivml
-new file mode 100644
-index 0000000..2c35ba2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/adaptation/StrategiesTacticsCfg.ivml
-@@ -0,0 +1,6 @@
-+project StrategiesTacticsCfg {
-+
-+	import StrategiesTactics;
-+
-+	
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonPomMethods.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonPomMethods.vtl
-new file mode 100644
-index 0000000..a5bf07a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonPomMethods.vtl
-@@ -0,0 +1,24 @@
-+@advice(QM)
-+template commonPomMethods(Configuration config, FileArtifact target) {
-+	
-+	def appendDependencyManagement(Text text) {
-+		text.append("<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>\n");
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonVTLMethods.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonVTLMethods.vtl
-new file mode 100644
-index 0000000..12c2147
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/commonVTLMethods.vtl
-@@ -0,0 +1,1017 @@
-+@advice(QM)
-+template commonVTLMethods(Configuration config, FileArtifact target) { 
-+	
-+	Boolean genInstance = true;
-+	Boolean genMultiOutputs = true;     // generate specific code for multiple output of one algorithm
-+	Boolean genMonitoringProbes = true; // generate monitoring probes (false for experiments)
-+	Boolean genMultiTupleTypes = true; // generate specific code for considering multiple tuple types in the algorithm output as well as 
-+									   // adjusting the stream id to "EltVarName+TupleName/AlgName"
-+	Boolean newSwitch = false;//enable the switch mode
-+	Boolean newSwitchLog = false;//enable the switch-related logs
-+	Boolean hwlog = false; //enable the hardware algorithm-related logs
-+	Boolean fastQueueOperation = true; //faster operation on searching and deleting items from the queue (used LinkedList)
-+	Boolean emitThread = true;//enable the separate thread for emitting the tuples in the hardware Spout
-+	Boolean ackThread = true;//enable the separate thread for acknowledging the tuples in the hardware Bolt
-+	Boolean ackEarlier = true;//acknowledge earlier in the hardware Bolt
-+	Boolean batchData = false; //enable hardware Spout to receive data in the batch manner
-+	Boolean newHWReceive = true; //switch between different receive method
-+	Boolean initByAdaptation = true; // waiting for the adaptation layer to determine about the initial algorithms, autoRegister = true in main VIL
-+	Boolean safeCast = true;//enable the safe cast while creating algorithm instance
-+	Boolean receiveByField = false; //field-based receive statement 
-+	Boolean multiHWThread = false; //enable multiple hardware threads within one spout
-+	Boolean multiHWSpout = false; //enable multiple hardware spout
-+	Boolean looseSub = false; //enable changes for loosing sub-pipeline integration	
-+	Boolean dynamicHWUpload = true;//enable dynamic uploading of hardware algorithm
-+	Boolean separateSourceThread = false;//use a separate thread to emit data
-+	Boolean logData = false;//log the source input rate
-+	
-+	String GenAlgVersion = "0.0.1-SNAPSHOT"; //specify the version for generated algorithm
-+	
-+	def String parameterTypeName(DecisionVariable var) {
-+    	switch(var.type()) {
-+    		"IntegerParameter" : "int",
-+    		"BooleanParameter" : "boolean",
-+    		"RealParameter" : "double",
-+    		"StringParameter" : "String",
-+    		"LongParameter" : "long" 		
-+    	}
-+    }
-+    
-+    def Boolean formatException(String type) {
-+    	switch(type) {
-+    		"String" : false,
-+    		default : true
-+    	}
-+    }
-+    
-+    def String parameterHwProtocol(DecisionVariable var) {
-+    	switch(var.type()) {
-+    		"IntegerParameter" : "a",
-+    		"BooleanParameter" : "b",
-+    		"RealParameter" : "c",
-+    		"StringParameter" : "e",
-+    		"LongParameter" : "f" 
-+    	}
-+    }
-+    
-+    def String parameterProto(DecisionVariable var) {
-+    	switch(var.type()) {
-+    		"IntegerParameter" : "SIntegerParameter",
-+    		"BooleanParameter" : "SBooleanParameter",
-+    		"RealParameter" : "SRealParameter",
-+    		"StringParameter" : "SStringParameter",
-+    		"LongParameter" : "SLongParameter" 
-+    	}
-+    }
-+    
-+    def obtainDefaultValue(FieldType type) {
-+    	switch(type.class) {
-+    		"int" : 0,
-+    		"String" : "\"\"",
-+    		"boolean" : false,
-+    		"long" : 0, 
-+    		"float" : 0.0,
-+    		"double" : 0.0,
-+    		"Object" : null,
-+    		default : null
-+    	}
-+    }	
-+
-+    def String basicTypeForProto(FieldType type) {
-+    	switch(type.class) {
-+    		"int" : "int32",
-+    		"String" : "string",
-+    		"boolean" : "bool",
-+    		"long" : "int64", 
-+    		"float" : "float",
-+    		"double" : "double",
-+    		default : ""
-+    	}
-+    }	
-+    
-+    def String basicTypeForProto(String type) {
-+    	switch(type) {
-+    		"int" : "int32",
-+    		"String" : "string",
-+    		"boolean" : "bool",
-+    		"long" : "int64", 
-+    		"float" : "float",
-+    		"double" : "double",
-+    		default : ""
-+    	}
-+    }
-+    
-+    def Boolean isBasicType(FieldType type) {
-+    	switch(type.class) {
-+    		"int" : true,
-+    		"String" : true,
-+    		"boolean" : true,
-+    		"long" : true, 
-+    		"float" : true,
-+    		"double" : true,
-+    		default : false
-+    	}
-+    }
-+    
-+    def Boolean hasDirectGrouping(setOf(Flow) flows) {
-+    	Boolean result = false;
-+    	for(Flow f : flows) {
-+    		if(f.grouping == Grouping.directGrouping) {
-+    			result = true;
-+    		}
-+    	}
-+    	result;
-+    } 
-+    
-+    /*collect the destinations using direct emit and all grouping */
-+    def directEmitDestination(setOf(Flow) flows, setOf(String) destinations) {
-+    	for(Flow f : flows) {
-+    		if(f.grouping == Grouping.directGrouping or f.grouping == Grouping.allGrouping) {
-+    			PipelineNode dest = f.destination;
-+    			if(!isStringExisted(dest.name, destinations)) {
-+    				destinations.add(dest.name);
-+    			}
-+    		}
-+    	}
-+    }
-+    
-+    def String directEmitDestinationEltName(setOf(Flow) flows, String name) {
-+        String result = "";
-+        for(Flow f : flows) {
-+            if(f.grouping == Grouping.directGrouping or f.grouping == Grouping.allGrouping) {
-+                PipelineNode dest = f.destination;
-+                if (dest.name == name) {
-+                    result = dest.varName();
-+                }
-+            }
-+        }
-+        result;
-+    }
-+    
-+    def Boolean isDirectGroupping(setOf(Flow) flows, Tuple tuple) {
-+    	Boolean result = false;
-+    	for(Flow f : flows) {
-+    		if(f.tupleType == tuple) {
-+    			if(f.grouping == Grouping.directGrouping) {
-+    				result = true;
-+    			}
-+    		}
-+    		
-+    	}
-+    	result;
-+    }      
-+    
-+    def Boolean isAllGroupping(setOf(Flow) flows, Tuple tuple) {
-+    	Boolean result = false;
-+    	for(Flow f : flows) {
-+    		if(f.tupleType == tuple) {
-+    			if(f.grouping == Grouping.allGrouping) {
-+    				result = true;
-+    			}
-+    		}
-+    		
-+    	}
-+    	result;
-+    } 
-+    
-+    /*Gets the name of the destination using all grouping based on given tuple */
-+    def String allGroupingDestName(setOf(Flow) flows, Tuple tuple) {
-+    	String result;
-+    	for(Flow f : flows) {
-+    		if(f.tupleType == tuple) {
-+    			if(f.grouping == Grouping.allGrouping) {
-+    				result = f.destination.name;
-+    			}
-+    		}
-+    	}
-+    	result;
-+    }
-+    
-+    def Boolean isListType(FieldType type) {
-+    	String class = type.class;
-+    	if(class.matches("java.util.List.*")) {
-+    		true;
-+    	} else {
-+    		false;
-+    	}
-+    }
-+    
-+    /**
-+     * Obtain the inner type of the list.
-+     */
-+    def String obtainInnerType(String class) {
-+    	String result;
-+    	Integer len = class.length();
-+    	result = class.substring(15, len - 1);
-+    	result;
-+    }
-+    
-+    def String fieldTypeName(DecisionVariable f) {
-+		DecisionVariable type = f.byName("type");
-+		String typeName = type.byName("class");
-+		typeName;
-+	}
-+	
-+	def String stripTemplates(String typeName) {
-+		typeName = typeName.substitute("<.*>", "");
-+		switch(typeName) {
-+			"java.util.List" : "java.util.ArrayList",
-+			default: typeName
-+		}
-+	}
-+	
-+	def Boolean isStringExisted(String name, setOf(String) checkSet) {
-+    	Boolean exist = false;
-+    	for(String n : checkSet) {
-+    		if(name == n) {
-+    			exist = true;   			
-+    		}
-+    	}
-+    	exist;
-+    }
-+	
-+	/**
-+	 * Has generated sub-pipeline algorithm among family members.
-+	 */
-+	def Boolean hasGenAlgorithm(Family fm) {
-+		Boolean result = false;
-+		if(hasHardwareAlgorithm(fm) or hasSubPipelineAlgorithm(fm)) {
-+			result = true;
-+		}
-+		result;
-+	}
-+	
-+	/**
-+	 * Has distributed algorithm among family members, including manually-implemented algorithm.
-+	 */
-+	def Boolean hasDistAlgorithm(Family fm) {
-+		Boolean result = false;
-+		for(Algorithm alg : fm.members) {
-+			if(isDistAlgorithm(alg)) {
-+				result = true;
-+			}
-+		}
-+		result;
-+	}
-+	
-+	/**
-+	 * Has hardware algorithm among family members.
-+	 */
-+	def Boolean hasHardwareAlgorithm(Family fm) {
-+		Boolean result = false;
-+		for(Algorithm alg : fm.members) {
-+			if(isHardwareAlgorithm(alg)) {
-+				result = true;
-+			}
-+		}
-+		result;
-+	}
-+	
-+	/**
-+	 * Has sub-pipeline-based (gen) algorithm among family members.
-+	 */
-+	def Boolean hasSubPipelineAlgorithm(Family family) {
-+		Boolean result = false;
-+		for(Algorithm alg : family.members) {
-+			if(isGenSubtopology(alg)) {
-+				result = true;
-+			}
-+		}
-+		result;
-+	}
-+	
-+	/**
-+	 * is it a hardware algorithm(gen)?
-+	 */
-+	def Boolean isHardwareAlgorithm(Algorithm alg) {
-+		Boolean result = false;
-+		if(alg.type() == "HardwareAlgorithm") {
-+			result = true;
-+		}
-+		result;
-+	}
-+	
-+	/**
-+	 * is it the manually implemented sub-topology algorithm?
-+	 */
-+	def Boolean isManualSubtopology(Algorithm algorithm) {//isSubtopology
-+		Boolean result = false;
-+		if(algorithm.type() == "SoftwareAlgorithm") {
-+			SoftwareAlgorithm alg = algorithm;
-+			if(!alg.algTopologyClass.isNull() and alg.algTopologyClass.isConfigured() and alg.algTopologyClass.length()>0) {
-+				result = true;
-+			}
-+		}
-+		result;
-+	}
-+	
-+	/**
-+	 * //is it the auto-generated sub-topology algorithm (SubPipelineAlgorithm type)?
-+	 */
-+	def Boolean isGenSubtopology(Algorithm algorithm) {//isSubPipelineAlgorithm
-+		Boolean result = false;
-+		if(algorithm.type() == "SubPipelineAlgorithm") {
-+			result = true;
-+		}
-+		result;
-+	}
-+	
-+	/**
-+	 * Is it the distributed(sub-topology-based) algorithm (subpipeline, hardware or manually implemented algorithm)?
-+	 */
-+	def Boolean isDistAlgorithm(Algorithm alg) {
-+		Boolean result = false;
-+    	if(isManualSubtopology(alg) or isGenSubtopology(alg) or isHardwareAlgorithm(alg)) {
-+    		result = true;
-+    	}     	
-+		result;
-+	}
-+	
-+	def String formulateString(String s) {
-+		String result = s.firstToUpperCase().toIdentifier();
-+		result;
-+	}
-+	
-+	def Boolean isActiveAlgorithm(Family fm, Algorithm currentAlg) { //assume that the first algorithm is the active one.
-+		Boolean result = false;
-+		Algorithm alg = fm.members.toSequence().get(0);
-+		if(alg == currentAlg) {
-+			result = true;
-+		}
-+		result;
-+	}
-+	
-+    def String composePOptionsInit(String confName, String paramName, String type, Any value) {
-+		String result;
-+		if (confName.length() > 0) {
-+			result = "PipelineOptions.getExecutor${type}Argument($confName, getName(), \"${paramName}\", $value)";
-+		} else {
-+			result = "$value";
-+		}
-+		result;
-+	}
-+		
-+	def Boolean composeUndefPOptionsInit(Boolean undef, String confName, String paraName, String type, String neutral, String call, int indent) {
-+   		Boolean u = (undef and confName.length() > 0);
-+	    if (u) {
-+            'if (PipelineOptions.hasExecutorArgument($confName, getName(), \"${paraName}\")) {' | indent;
-+				'$call(PipelineOptions.getExecutor${type}Argument($confName, getName(), \"${paraName}\", $neutral));' | indent + 4;
-+			'}' | indent;
-+		}
-+		!u;
-+	}
-+	
-+	
-+	def setDefaultParameterValue(sequenceOf(Parameter) parameters, String confName, String algName, int indent) {
-+		for(Parameter p : parameters) {	
-+			String paraName = p.name;
-+			String call = "$algName.setParameter${paraName.firstToUpperCase()}";
-+			String ty = p.type();
-+			if(ty == "IntegerParameter") { 
-+				IntegerParameter para = p;
-+				String type = "Int";
-+				Any defaultValue = para.defaultValue;
-+				if(!isConfigured(para.defaultValue)) {
-+					defaultValue = "0";
-+				}
-+				if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "0", call, indent)) {
-+    				String tmp = composePOptionsInit(confName, paraName, type, defaultValue);
-+    				'$call($tmp);' | indent;
-+				}
-+			} else if(ty == "BooleanParameter") { 
-+				BooleanParameter para = p;
-+                String type = "Boolean";
-+                Any defaultValue = para.defaultValue;
-+				if(!isConfigured(para.defaultValue)) {
-+					defaultValue = "false";
-+				}
-+                if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "false", call, indent)) {
-+                    String tmp = composePOptionsInit(confName, paraName, type, defaultValue);
-+                    '$call($tmp);' | indent;
-+                }
-+			} else if(ty == "StringParameter") { 
-+				StringParameter para = p;
-+                String type = "String";
-+                String defaultValue = para.defaultValue;
-+				if(!isConfigured(para.defaultValue)) {
-+					defaultValue = "\"\"";
-+				}
-+                if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "\"\"", call, indent)) {
-+                    String tmp = composePOptionsInit(confName, paraName, type, "\"$defaultValue\"");
-+                    '$call($tmp);' | indent;
-+                }
-+			} else if(ty == "RealParameter") { 
-+				RealParameter para = p;
-+                String type = "Double";
-+                String defaultValue = para.defaultValue;
-+				if(!isConfigured(para.defaultValue)) {
-+					defaultValue = "0.0";
-+				}
-+                if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "0.0", call, indent)) {
-+                    String tmp = composePOptionsInit(confName, paraName, type, defaultValue);
-+                    '$call($tmp);' | indent;
-+                }
-+			} else if(ty == "LongParameter") { 
-+				LongParameter para = p;
-+                String type = "Long";
-+                String defaultValue = para.defaultValue;
-+				if(!isConfigured(para.defaultValue)) {
-+					defaultValue = "0L";
-+				}
-+                if (composeUndefPOptionsInit(!isConfigured(para.defaultValue), confName, paraName, type, "0L", call, indent)) {
-+                    String tmp = composePOptionsInit(confName, paraName, type, defaultValue);
-+                    '$call($tmp);' | indent;
-+                }
-+			}		
-+		}
-+	}
-+	
-+	def produceTypesRegistration(Tuples tuples, String fName, Boolean output, Integer indent) {
-+		String tupleName;
-+		String end;
-+		if(output) {
-+			end = "Output";
-+		} else {
-+			end = "Input";
-+		}
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			String infName = 'I' + fName + "${firstToUpperCase(tupleName)}$end";
-+			'new $infName();' | indent;
-+		}
-+	}
-+	
-+	def produceFieldsForLog(Fields fields, String object, Boolean sender, Boolean file, Integer indent) {
-+		for (Field f : fields) {
-+    			String fname = toIdentifier("${f.name}");
-+    			String mname = firstToUpperCase(fname);
-+    			if(file) {
-+    				if(sender) {
-+    					'out.println(Calendar.getInstance().getTimeInMillis() + " ,Sending data to hardware: " + $object.get${mname}());' | indent;
-+	    				'out.flush();' | indent;
-+	    			} else {
-+	    				'out.println(Calendar.getInstance().getTimeInMillis() + " ,Received data from hardware: " + $object.get${mname}());' | indent;
-+	    				'out.flush();' | indent;
-+	    			}
-+    			} else {
-+	    			if(sender) {
-+	    				'logger.info("Sending data to hardware: " + $object.get${mname}());' | indent;
-+	    			} else {
-+	    				'logger.info("Received data from hardware: " + $object.get${mname}());' | indent;
-+	    			}
-+    			}
-+    		}
-+	}
-+	
-+	def mapOf(String, setOf(String)) produceTuplesForHardwareVariables(Tuples tuples, String fName, Boolean output, int indent) {
-+		mapOf(String, setOf(String)) serializers = {};
-+		setOf(String) tmp;
-+		String type;
-+    	String tupleName;
-+    	String ifName = "I" + fName;
-+    	Boolean flag = true;
-+		for (Tuple t : tuples) {
-+			tmp = {};
-+	    	tupleName = t.name;
-+	    	   if(flag and output) { //for output in the sender
-+	    	       type = "S${ifName}${firstToUpperCase(tupleName)}Output";
-+	    	       'eu::qualimaster::families::protobuf::$type ${tupleName}Output;' | indent;
-+	    	       flag = false; //assume that there is only one output type from the family
-+	    	   }
-+	    	   if(!output) { //for input considering the multiple case
-+	    	       type = "S${ifName}${tupleName}Input";
-+	    	       Boolean once1 = true;
-+	    	       Boolean once2 = true;
-+	    	       for (Field f : t.fields) {
-+    	   		       FieldType ftype = f.type;
-+    	   		       String fieldName = toIdentifier("${f.name}");  
-+    			       String ptype = basicTypeForProto(ftype);
-+    			       if(ptype != "" and once1) {
-+    				       'eu::qualimaster::families::protobuf::$type ${tupleName}Input;' | indent;
-+    				       tmp.add("${tupleName}Input");
-+    				       once1 = false;
-+    			       } else if(isListType(ftype) and once2) {
-+    			       	   'eu::qualimaster::base::protos::SStringList stringList;' | indent;
-+    			       	   tmp.add("stringList");
-+    			       	   once2 = false;
-+    			       } else if(ptype == "" and !isListType(ftype)){//algorithm-specific protobuf TODO: the actual path
-+    			       	   'eu::qualimaster::families::protobuf::S${fieldName} ${fieldName};'
-+    			       	   tmp.add("${fieldName}");
-+    			       }			
-+    		       }
-+	        }
-+	        serializers.add(tupleName, tmp);	    
-+      	}
-+      	serializers;		
-+	}	
-+	
-+	def className(DecisionVariable elt) {
-+    	elt.varName().firstToUpperCase() + elt.type(); 
-+    }		
-+	
-+	def produceImportsFromLastElements(setOf(DecisionVariable) lastElt, mapOf(String, setOf(DecisionVariable)) lastElementMap, String topoName) {
-+	    for(DecisionVariable v : lastElt) {
-+    		if(v.type() == "Source"){
-+    		  Source src = v;
-+    	      DataSource dataSrc = src.source;
-+    	      String srcName = dataSrc.name;
-+		      String srcInfName = "I" + srcName.firstToUpperCase();
-+		      if (dataSrc.profilingSource) {
-+    	         'import eu.qualimaster.${topoName}.topology.inf.${toIdentifier(srcInfName)}.*;'	
-+		      } else {
-+    	         'import eu.qualimaster.data.inf.${toIdentifier(srcInfName)}.*;'	
-+		      }
-+    		}
-+    		if(v.type() == "FamilyElement") {
-+    			//the name is the varName!!
-+    			FamilyElement fe = v;
-+    			Family fm = fe.family;
-+    			String familyName = fm.name;
-+                String ifName = "I" + familyName.firstToUpperCase();
-+    			'import eu.qualimaster.families.inf.${toIdentifier(ifName)}.*;'
-+    		} else if(v.type() == "DataManagementElement") {
-+    			String dmVarName = v.varName().firstToUpperCase();
-+    			setOf(DecisionVariable) lastElt = lastElementMap.get(dmVarName);
-+    			produceImportsFromLastElements(lastElt, lastElementMap, topoName);
-+    		}
-+    	}
-+	}
-+	
-+	/**
-+	 *  Produces the output-related variables for variable declaration.
-+	 */
-+	def produceOutputVariable(sequenceOf(Tuple) tuples, mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping, mapOf(Tuple,String) nameToOutputMap, String fName) {
-+		String ifName = "I" + fName;
-+		String ifInputName = "I" + ifName;
-+		String outputInfName; //output interface name		
-+		String tupleName;	
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			//get output interface name	
-+			if(inputToOutputMapping.containsKey(t))	{
-+			  sequenceOf(Tuple) outputs = inputToOutputMapping.get(t);
-+			  String number;
-+			  Integer size = outputs.size();
-+			  Integer count = 0;
-+			  
-+			  for(Tuple tuple : outputs) {
-+			  	  count = count + 1;
-+			  	  outputInfName = nameToOutputMap.get(tuple);
-+			  	  if(size > 1) {
-+				      number = "$count";
-+				  } else {
-+				  	  number = "";
-+				  }
-+			  	  '    transient $outputInfName iTuple${firstToUpperCase(tupleName)}$number = null;'
-+			  }
-+			  				
-+			} 
-+								
-+	    }
-+	}
-+	
-+	def produceInputVariable(sequenceOf(Tuple) tuples, Boolean variable, String fName) {
-+		String ifName = "I" + fName;
-+		String ifInputName = "I" + ifName;
-+		String tupleName;
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			String inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
-+			String fImpInputName = 	ifName + "${firstToUpperCase(tupleName)}Input";
-+			if(variable) {
-+				'    transient $inputInfName input${firstToUpperCase(tupleName)} = null;'
-+			} else {
-+				'        input${firstToUpperCase(tupleName)} = new $fName.$fImpInputName();'
-+			}
-+		}
-+	}
-+	
-+	def setOf(String) coreTupleTypes (String fmName, Algorithm algorithm, Boolean input) {
-+		setOf(String) listTupleTypes = {};
-+		String tupleName = null;
-+		sequenceOf(Tuple) tuples = algorithm.input;
-+		if(!input) {
-+			tuples = algorithm.output;
-+		}
-+		for(Tuple t : tuples) { //TODO: multiple tuples!!
-+			tupleName = t.name;
-+			tupleName = tupleName.firstToUpperCase().toIdentifier();
-+			if(input) {
-+				listTupleTypes.add("${fmName}${tupleName}Input");
-+			} else {
-+				listTupleTypes.add("${fmName}${tupleName}Output");
-+			}
-+		}
-+		listTupleTypes;
-+	}
-+	
-+	/*
-+ 	 * Produces the calculate methods for the family interface or implementation.
-+ 	 */
-+    def produceForCalculate(Family family, Boolean interface) {   	 
-+    	 String inputTupleName;
-+    	 String outputTupleName;
-+   	   	 Tuples inputTuples = family.input;
-+   	   	 Tuples outputTuples = family.output;
-+   	   	 String ifName = "I" + family.name.firstToUpperCase();
-+   	   	 setOf(String) outTypes = {};
-+   	   	 
-+   	   	 //input tuples loop	  
-+    	 for(Tuple t : inputTuples){ 
-+			inputTupleName = t.name;      	        	      	 	
-+    	 	String inTypeName = "I${ifName}${firstToUpperCase(inputTupleName)}Input";
-+    	 	
-+				//output tuples loop
-+	    	 	for(Tuple p : outputTuples){  
-+				    outputTupleName = p.name;
-+	    	 	    String outTypeName = "I${ifName}${firstToUpperCase(outputTupleName)}Output"; 
-+	    	 	    //collect the output types 	 
-+	    			outTypes.add(outTypeName + " " + outputTupleName + "Result");
-+	    			if(!genMultiTupleTypes) {  	
-+				    	'    /**'
-+				    	'     * Calculates the actual <code>result</code> for <code>input</code>.'
-+				    	'     *'
-+				    	'     * @param input the algorithm input taken from the input stream'
-+				    	'     * @param result the result calculated by the algorithm'
-+				    	'     */'
-+				    	if(interface) {
-+				        '    public void calculate(${inTypeName} input, ${outTypeName} result);'
-+				        } else {
-+				        '    public void calculate(${inTypeName} input, ${outTypeName} result) {'
-+				        '    }'	
-+				        }
-+				        ''
-+					}
-+           }
-+           if(genMultiTupleTypes) {
-+    	       '    /**'
-+		    	'     * Calculates the actual <code>result</code> for <code>input</code>.'
-+		    	'     *'
-+		    	'     * @param input the algorithm input taken from the input stream'
-+		    	'     * @param result the result calculated by the algorithm'
-+		    	'     */'
-+		    	String outTypeString = "";
-+		    	for(String outType : outTypes) {
-+		    		outTypeString = outTypeString + ", " + outType;		    		
-+		    	}
-+		    	if(interface) {
-+		        '    public void calculate(${inTypeName} input$outTypeString);'
-+		        } else {
-+		        '    public void calculate(${inTypeName} input$outTypeString) {'
-+		        '    }'		 	
-+		        }
-+		    }
-+    	}     
-+    }
-+    
-+    def String produceNumTasks(DecisionVariable elt) {
-+	    String result;
-+    	DecisionVariable tasksVar = elt.byName("numtasks"); 
-+		if (isConfigured(tasksVar)) {
-+			Integer tasks = tasksVar;
-+			result = ".setNumTasks(" + tasks + ")";
-+		} else {
-+    	    result = "";
-+		}
-+		result;
-+    }
-+
-+    /**
-+     * Produces code for deserialization via the IDataInput interface. t is the tuple to produce the serialization 
-+     * method for, infType the (interface) type of the data to serialize, type the actual data type to serialize, 
-+     * indent the formatting indent.
-+     * Requires eu.qualimaster.dataManagement.serialization.* as import.
-+     */
-+    def produceDataInputDeserialization(Tuple t, String infType, String type, Integer indent) {
-+        '@Override' | indent + 4;
-+        'public $infType deserializeFrom(IDataInput in) throws IOException {' | indent + 4;
-+            '$type result = new $type();' | indent + 8;
-+            for (Field f : t.fields) {
-+                String fname = toIdentifier("${f.name}");
-+                String mname = firstToUpperCase(fname);                     
-+                if(isBasicType(f.type)) {
-+                    String tname = firstToUpperCase(fieldTypeName(f));
-+                    'result.set${mname}(in.next${tname}());' | indent + 8;                  
-+                } else {
-+                    if(!isListType(f.type)){
-+                        'result.set${mname}(SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).deserializeFrom(in));' | indent + 8;
-+                    } else {
-+                        String innertype = obtainInnerType(f.type.class);
-+                        'result.set${mname}(SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).deserializeFrom(in));' | indent + 8;
-+                    }
-+                }
-+            }
-+        'return result;' | indent + 8;          
-+        '}' | indent + 4;
-+        ''
-+    }
-+    
-+    /**
-+     * Produces code for serialization via the IDataOutput interface. t is the tuple to produce the serialization 
-+     * method for, infType the (interface) type of the data to serialize, indent the formatting indent.
-+     * Requires eu.qualimaster.dataManagement.serialization.* as import.
-+     */
-+    def produceDataInputSerialization(Tuple t, String infType, Integer indent) {
-+        '@Override' | indent + 4;
-+        'public void serializeTo($infType object, IDataOutput out) throws IOException {' | indent + 4;
-+            for (Field f : t.fields) {  
-+                String fname = toIdentifier("${f.name}");
-+                String mname = firstToUpperCase(fname);                     
-+                if(isBasicType(f.type)) {
-+                    String tname = firstToUpperCase(fieldTypeName(f));
-+                    'out.write${tname}(object.get${mname}());' | indent + 8;
-+                } else {
-+                    if(!isListType(f.type)){
-+                        'SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).serializeTo(object.get${mname}(), out);' | indent + 8;
-+                    } else {
-+                        String innertype = obtainInnerType(f.type.class);
-+                        'SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).serializeTo(object.get${mname}(), out);' | indent + 8;
-+                    }
-+                }
-+            }
-+        '}' | indent + 4;
-+        ''   
-+    }
-+    
-+    /**
-+     * Produces the algorithm-related imports. For the generated sub-topology-based algorithm imports shall also be generated, 
-+     * other algorithm imports are taken from the configuration.
-+     */
-+     def produceAlgorithmImports(Family family) {
-+     	for(Algorithm alg : family.members) {
-+			if(isGenSubtopology(alg)) {//generated sub-topology
-+		    	SubPipelineAlgorithm subAlg = alg;
-+		    	String pName = subAlg.subPipeline.name;
-+		    	String algClsName = pName.firstToUpperCase().toIdentifier() + "SubTopology";
-+		    	String cls = "eu.qualimaster." + pName.toIdentifier() + ".topology." + algClsName;
-+		    	'import $cls;'
-+		    } else if (isHardwareAlgorithm(alg)) {//generated hardware algorithm
-+		    	String algName = formulateString(alg.name);
-+		    	String cls = "eu.qualimaster.algorithms." + algName + "." + algName + "SubTopology";
-+		    	'import $cls;'
-+			} else {
-+				SoftwareAlgorithm a = alg;
-+				if (!a.class.isNull()) {
-+					'import ${a.class};'
-+				}
-+            }
-+		}
-+     }
-+     
-+     /**
-+      * Produces the algorithm implementation name.
-+      */
-+      def String algImplName(Algorithm alg) {
-+      	String name;
-+		if(isGenSubtopology(alg)) {//generated sub-topology
-+	    	SubPipelineAlgorithm subAlg = alg;
-+	    	String pName = subAlg.subPipeline.name;
-+	    	name = pName.firstToUpperCase().toIdentifier() + "SubTopology";
-+	    } else if (isHardwareAlgorithm(alg)) {//generated hardware algorithm
-+	    	String algName = formulateString(alg.name);
-+	    	name = algName + "SubTopology";
-+		} else {
-+			SoftwareAlgorithm a = alg;
-+	    	String algNamePath = a.class;
-+			JavaPath algPath = algNamePath;	
-+			name = algPath.getName();
-+        }
-+		name;
-+      }
-+      
-+      /**
-+       * Returns the algorithm qualified class name.
-+       */
-+      def String algQualifiedClsName(Algorithm alg) {
-+      	String cls;
-+      	if(isGenSubtopology(alg)) {//generated sub-topology
-+	    	SubPipelineAlgorithm subAlg = alg;
-+	    	String pName = formulateString(subAlg.subPipeline.name);
-+		    cls = "eu.qualimaster." + pName + ".topology." + pName + "SubTopology";
-+	    } else if (isHardwareAlgorithm(alg)) {//generated hardware algorithm
-+	    	String algName = formulateString(alg.name);
-+	    	cls = "eu.qualimaster.algorithms." + algName + "."+ algName + "SubTopology";
-+		} else {
-+			SoftwareAlgorithm a = alg;
-+	    	cls = a.class;
-+        }
-+        cls;
-+      }
-+      
-+     /**
-+      * Produces the declaration of the stream id.
-+      */
-+      def produceStreamIdDeclaration(DecisionVariable elt, Boolean subAlg, Integer indent) {
-+      	String nameVar = elt.varName();
-+      	Tuples tuples;
-+      	String confName;
-+      	setOf(String) subAlgNames = {};
-+      	if(elt.type() == "Source") {
-+      		Source src = elt;
-+      		DataSource dataSrc = src.source;
-+      		tuples = dataSrc.input;
-+      		confName = src.name;
-+      	} else if (elt.type() == "FamilyElement") {
-+      		FamilyElement fe = elt;
-+      		Family fm = fe.family;
-+      		tuples = fm.output;
-+      		confName = fe.name;
-+      		for(Algorithm alg : fm.members) {// check the subtopology out
-+      			if(isDistAlgorithm(alg)) {
-+      				subAlgNames.add(formulateString(alg.name));
-+      			} 
-+      		}
-+      	} else if (elt.type() == "Sink" or elt.type() == "ReplaySink") {
-+      		Sink snk = elt;
-+      		DataSink dataSnk = snk.sink;
-+      		tuples = dataSnk.output;
-+      		confName = snk.name;
-+      	} 
-+      	//produces the stream id declaration.
-+      	String streamId;
-+      	for(Tuple t : tuples) {//for simple java algorithm: eltName + tupleName
-+      		String fields = "";
-+      		if(subAlg) {
-+      			streamId = formulateString(confName) + formulateString(t.name);
-+      		} else {
-+      			streamId = formulateString(nameVar) + formulateString(t.name);
-+      		}
-+      		if(subAlg and receiveByField) {
-+      			Boolean first = true;
-+      			for(Field f : t.fields) {
-+      				if(first) {
-+      					first = false;
-+      				} else {
-+      					fields = fields + ",";
-+      				}
-+      				fields = fields + "\"${formulateString(f.name)}\"";
-+      			}
-+      		} else {
-+      			fields = "\"${streamId}Fields\"";
-+      		}
-+      		'declarer.declareStream("${streamId}", new Fields($fields));' | indent;
-+      	}	
-+      	for(String name : subAlgNames) {//for sub-topology algorithm: eltName + algName
-+      		if(subAlg) {
-+      			streamId = formulateString(confName) + name;
-+      		} else {
-+  				streamId = formulateString(nameVar) + name;
-+  			}
-+  			'declarer.declareStream("${streamId}", new Fields("${streamId}Fields"));' | indent;	
-+  		}
-+      }  
-+      
-+      /**
-+       * Gets the configured name.
-+       */
-+      def String eltName(DecisionVariable elt) {
-+    	if(elt.type() == "DataSource") {
-+    		DataSource dataSrc = elt;
-+    		dataSrc.name;
-+    	} else if (elt.type() == "Family") {
-+    		Family fm = elt;
-+    		fm.name;
-+    	} else if (elt.type() == "DataSink") {
-+    		DataSink dataSnk = elt;
-+    		dataSnk.name;
-+    	}
-+    } 
-+    
-+    /**
-+	 * Returns the serializer class. If it is not configured, return an empty string.
-+	 */		
-+	def serializerClass(Field field, mapOf(String, String) specificTypes) {
-+		FieldType type = field.type;
-+		if(type.serializer.isConfigured() and type.serializer.length() > 0) {
-+			specificTypes.add(type.name, type.serializer);
-+		}
-+	}
-+	
-+	/**
-+	 * Registers the specific types from the collected specific types (see "serializerClass" method)
-+	 */
-+	def registerSpecificTypes(mapOf(String, String) specificTypes, Integer indent) {
-+		setOf(String) types = specificTypes.getKeys();
-+		for(String tName : types) {
-+			String tCls = specificTypes.get(tName);
-+			'SerializerRegistry.register("${tName}", ${tCls}.class);' | indent;
-+		}
-+	}
-+	
-+	/**
-+	 * Registers all serializers.
-+	 * @param fserializer the name of the serializer class
-+	 * @param type the retrieve name
-+	 * @param secificTypes a map of type name and respective name of the serializer class
-+	 */
-+	def registerSerializer(String fserializer, String type, mapOf(String, String) specificTypes, Integer indent) {
-+		'static {' | indent + 4;    			
-+    		'SerializerRegistry.register("$type", $fserializer.${type}Serializer.class);' | indent + 8;
-+			//register specific types
-+			registerSpecificTypes(specificTypes, indent+8);
-+		'}' | indent + 4;
-+	}
-+	
-+	/**
-+	 * Returns the code for creating/obtaining a data management strategy instance. Requires "import eu.qualimaster.dataManagement.strategies.*;".
-+	 * 
-+	 * @param dataElement the data element to produce the strategy from
-+	 * @return the code for obtaining the data management strategy, may be "null"
-+	 */
-+	def String obtainManagementStrategyInstance(DataElement dataElement) {
-+		String strategyStr = "null"; // just to produce valid code in any case
-+		DataManagementStrategy strategy = dataElement.strategy;	
-+		if(strategy == DataManagementStrategy.None){
-+			strategyStr = "NoStorageStrategyDescriptor.INSTANCE";
-+		} else if(strategy == DataManagementStrategy.FirstInFirstOut){
-+			strategyStr = "FirstInFirstOutStorageStrategyDescriptor.INSTANCE";
-+		} else if(strategy == DataManagementStrategy.LeastFrequentlyUsed){
-+			Integer cutoffCapacity = dataElement.cutoffCapacity;
-+			strategyStr = "new LeastFrequentlyUsedStorageStrategyDescriptor($cutoffCapacity)";			
-+		} else if(strategy == DataManagementStrategy.LeastFrequentlyRecentlyUsed){
-+			Integer timeLine = dataElement.timeLine;
-+			Integer cutoffCapacity = dataElement.cutoffCapacity;
-+			strategyStr = "new LeastFrequentlyRecentlyUsedStorageStrategyDescriptor($cutoffCapacity, $timeLine)";
-+		} else if(strategy == DataManagementStrategy.LeastRecentlyUsed){
-+			Integer timeLine = dataElement.timeLine;
-+			strategyStr = "new LeastRecentlyUsedStorageStrategyDescriptor($timeLine)";			
-+		}
-+		strategyStr;
-+	}
-+	
-+	/**
-+	 * Returns key of the field.
-+	 */
-+	def Boolean key(Field f) {
-+		Boolean key = false;
-+		if(f.keyPart.isConfigured()) {
-+			key = f.keyPart;
-+		} 
-+		key;
-+	}
-+	
-+	def produceDynamicPortObtainment() {
-+		'String localhost = "localhost";' | 8;
-+		'try {' | 8;
-+			'localhost = InetAddress.getLocalHost().getCanonicalHostName();' | 12;
-+		'} catch (UnknownHostException e1) {' | 8;
-+			'e1.printStackTrace();' | 12;
-+		'}' | 8;
-+		'PortAssignmentRequest portRequest = new PortAssignmentRequest(getPipeline(), getName(), 0, localhost, null);' | 8;
-+		'PortManager portManager = getPortManager();' | 8;
-+		'try {' | 8;
-+			'PortAssignment assignment = portManager.registerPortAssignment(portRequest);' | 12;
-+			'port = assignment.getPort();' | 12;
-+			if(newSwitchLog) {
-+			'logger.info("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
-+			'if(out != null) {' | 12;
-+				'out.println("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 16;
-+				'out.flush();' | 16;
-+			'}' | 12;
-+			}
-+			'} catch (SignalException e) {' | 8;
-+				'e.printStackTrace();' | 12;
-+		'}' | 8;
-+	}
-+	
-+	def produceInitMonitor(Boolean prepare, int indent) {
-+		String ending = "Prepare";
-+		if(!prepare) {
-+			ending = "Open";
-+		}
-+		'@Override' | indent;
-+    	'protected boolean initMonitorDuring${ending}() {' | indent;
-+        'return false;' | indent+4;
-+    	'}' | indent;
-+	}
-+	
-+	def appendIntermediaryComponent(String pName, String container, Boolean node, Boolean useThrift, Text text) {
-+		String InImplName = pName.firstToUpperCase().toIdentifier() + "Intermediary";
-+		String EndImplName = pName.firstToUpperCase().toIdentifier() + "EndBolt";
-+		//TODO: task set to 1
-+		if(node) {
-+			text.append('      <node name="$InImplName" type="source">\n');
-+		}
-+		text.append('              <component name="$InImplName" container="${container}" class="eu.qualimaster.$pName.topology.$InImplName" receiver="true" thrift="${useThrift}" tasks="1"/>\n');
-+		if(node) {
-+		    text.append('      </node>\n');
-+		}
-+		if(node) {
-+			text.append('      <node name="$EndImplName" type="sink">\n');
-+		}
-+		text.append('              <component name="$EndImplName" container="${container}" class="eu.qualimaster.$pName.topology.$EndImplName" receiver="true" thrift="${useThrift}" tasks="1"/>\n');
-+		if(node) {
-+		    text.append('      </node>\n');
-+		}
-+	}	
-+	
-+	def catchThrowable(Integer indent) {
-+		'} catch (Throwable e) {' | indent;
-+        	'if (e instanceof DefaultModeException) {' | indent+4;
-+        		'logger.error("Throwable caught - turning to default mode");' | indent+8;
-+            	'e.printStackTrace();' | indent+8;
-+            	'sendDefaultModeMonitoringEvent((DefaultModeException) e);' | indent+8;
-+            '}' | indent+4;          	
-+        '}' | indent;
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkImplementation.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkImplementation.vtl
-new file mode 100644
-index 0000000..d45e50f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkImplementation.vtl
-@@ -0,0 +1,158 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template dataSinkImplementation(Configuration config, FileArtifact target, DataSink elt, Boolean profiling) {  		
-+	mapOf(String, String) specificTypes = {};
-+	/*
-+	 * Produces the tuple type classes.
-+	 */
-+	def produceForTuples(sequenceOf(Tuple) tuples, String snkName, Boolean output, Integer indent) {
-+		String type;
-+		String typeName;		
-+    	String tupleName;
-+    	
-+    	for (Tuple t : tuples) { 
-+    		//get the tuple name
-+    		tupleName = t.name;     
-+	    	if (output) {
-+	    		type = "${toIdentifier(snkName)}${firstToUpperCase(tupleName)}Output";
-+	    		typeName = "output";
-+    	    } else {
-+	    		type = "${toIdentifier(snkName)}${firstToUpperCase(tupleName)}Input";
-+	    		typeName = "input";   		
-+	    	}
-+		    '/**' | indent;
-+		    '* Define the source data input interface.' | indent;
-+		    '**/' | 4;
-+		    'public static class $type implements I${type} {' | indent;		        
-+		   // 'private static final long serialVersionUID = 1L;' | indent + 4;
-+		    //produce the variable instances.	
-+		     for (Field f : t.fields) {
-+	    	    String fname = toIdentifier("${f.name}");
-+	    		String ftype = fieldTypeName(f);	  //previous type management 		
-+	    		'private ${ftype} ${fname};' | indent + 4;
-+    		 }
-+    		   //generate the Getters and Setters. 		
-+    			for (Field f : t.fields) {
-+    				String fname = toIdentifier("${f.name}");
-+    				String mname = firstToUpperCase(fname);
-+    				String ftype = fieldTypeName(f);
-+    				//collect the specific types for registering serialization class.
-+    				serializerClass(f, specificTypes);
-+    				'/**' | indent + 4;
-+					'* Returns the input value for tuple field "${f.name}".' | indent + 4;
-+					'* @return the tuple value' | indent + 4;
-+					'*/' | indent + 4;
-+    				'@Override' | indent + 4;
-+		    		'public ${ftype} get${mname}() {' | indent + 4;
-+		    			'return ${fname};' | indent + 8;
-+		    		'}' | indent + 4;
-+    				''
-+    				'/**' | indent + 4;
-+					'* Sets the output value for tuple field "${f.name}".' | indent + 4;
-+					'* @param ${fname} the field value' | indent + 4;
-+					'*/' | indent + 4;
-+					'@Override' | indent + 4;
-+		    		'public void set${mname}(${ftype} ${fname}) {' | indent + 4;
-+		    			   'this.${fname} = ${fname};' | indent + 8;
-+		    		'}' | indent + 4;
-+    			}
-+    			if(!profiling) {
-+	    			//register the seriliazers.
-+	    			String fserializer = formulateString(snkName) + "Serializers";
-+	    			registerSerializer(fserializer, type, specificTypes, indent);
-+    			}
-+    			'}' | indent;
-+    		}
-+    		
-+    		''   	
-+	}
-+	
-+	def main(Configuration config, FileArtifact target, DataSink dataSnk, Boolean profiling){
-+		String snkName =dataSnk.name;
-+		snkName = snkName.firstToUpperCase();
-+		String inputName = "I" + snkName;
-+		'package eu.qualimaster.data.imp;'
-+		''
-+		//'import java.io.Serializable;'
-+		'import eu.qualimaster.data.inf.I${toIdentifier(snkName)};'
-+		'import eu.qualimaster.data.inf.I${toIdentifier(snkName)}.*;'
-+		'import eu.qualimaster.dataManagement.strategies.*;'
-+		'import eu.qualimaster.observables.*;'
-+		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
-+		''
-+		'/**'
-+		'* Define the data source class(GEN).'
-+		'**/'
-+		'public class ${toIdentifier(snkName)} implements I${toIdentifier(snkName)}{'
-+		''
-+		//generate the tuple type classes.
-+		 produceForTuples(dataSnk.output, snkName, false, 4);		
-+		''
-+		String tupleName;
-+		for(Tuple t : dataSnk.output){
-+			//get the tuple name
-+			tupleName = t.name;
-+			for(Field f : t.fields) {
-+			    String fname = toIdentifier("${f.name}");
-+    		    String mname = firstToUpperCase(fname);	
-+			}
-+			
-+		'/**' | 4;
-+		'* Posts a specific type of data sink.' | 4;
-+		'* @param data the sink data ${toIdentifier(snkName)}${firstToUpperCase(tupleName)}Input' | 4;
-+		'**/' | 4;
-+		'@Override' | 4;
-+	    'public void postData${firstToUpperCase(tupleName)}(${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input data) {' | 4;
-+	    
-+	    '}' | 4;
-+	    ''
-+	    '/**' | 4;
-+		'* Emits tuple along with a ticket.' | 4;
-+		'* @param ticket the ticket to identify the responses for application' | 4;
-+		'* @param tuple the tuple ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input to be emitted ' | 4;
-+		'**/' | 4;
-+   	    'public void emit(int ticket, ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input tuple) {' | 4;
-+   	    '}' | 4;
-+   	    ''
-+		}
-+		
-+        if (dataSnk.parameters.size()>0) {
-+	        '    // data sink parameters'
-+	        ''
-+	        for (Parameter p : dataSnk.parameters) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+    			String type = parameterTypeName(p);
-+	        	'    /**'
-+	        	'     * Sets the data sink parameter "${paramName}".'
-+	        	'     *'
-+	        	'     * @param value the new value of the data sink parameter'
-+	        	'     */'
-+	        	
-+	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
-+	        	'    }'
-+	        	''
-+	    	}
-+    	}
-+    	
-+    	'@Override' | 4;
-+    	'public void connect() {}' | 4;
-+		''
-+		'@Override' | 4;
-+		'public void disconnect(){}' | 4;
-+ 		''
-+ 		'@Override' | 4;
-+ 		'public void setStrategy(IStorageStrategyDescriptor strategy) {}' | 4;
-+ 		''
-+ 		'@Override' | 4;
-+ 		'public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}' | 4;
-+ 		''
-+ 		'@Override' | 4;
-+ 		'public Double getMeasurement(IObservable observable) { return null;}'	| 4;
-+ 				
-+		'}' 
-+		}
-+		
-+		
-+ 
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkInterface.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkInterface.vtl
-new file mode 100644
-index 0000000..b507ecb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSinkInterface.vtl
-@@ -0,0 +1,98 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template dataSinkInterface(Configuration config, FileArtifact target, DataSink elt) {
-+
-+    /*
-+     * Produces the tuple type interfaces.
-+     */	
-+	def produceForTuples(sequenceOf(Tuple) tuples, String snkName, Integer indent) {
-+		Integer tuplesSize = tuples.size();
-+		String inputName = "I" + snkName.firstToUpperCase();
-+    	String tupleName;
-+
-+    		for (Tuple t : tuples) {      
-+				//get the tuple name
-+				tupleName = t.name;
-+		        '/**' | 4;
-+		        '* Define the sink data input interface.' | 4;
-+		        '**/' | 4;
-+		        'public static interface ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input extends Serializable {' | 4;	    		
-+    			for (Field f : t.fields) {
-+    				String fname = toIdentifier("${f.name}");
-+    				String mname = firstToUpperCase(fname);
-+    				String ftype = fieldTypeName(f);
-+    				'/**' | indent + 4;
-+					'* Returns the input value for tuple field "${f.name}".' | indent + 5;
-+					'* @return the tuple value' | indent + 5;
-+					'*/' | indent + 5;
-+    				'public ${ftype} get${mname}();' | indent + 4;
-+    				''
-+    				'/**' | indent + 4;
-+					'* Sets the output value for tuple field "${f.name}".' | indent + 5;
-+					'* @param ${fname} the field value' | indent + 5;
-+					'*/' | indent + 5;
-+					'public void set${mname}(${ftype} ${fname});' | indent + 4;
-+    			}
-+    			'}' | 4;
-+    		}   		
-+    		''   	
-+	}
-+	
-+	def main(Configuration config, FileArtifact target, DataSink dataSnk){
-+		String snkName =dataSnk.name;
-+		snkName = snkName.firstToUpperCase();
-+		String inputName = "I" + snkName;
-+		'package eu.qualimaster.data.inf;'
-+		''
-+		'import java.io.Serializable;'
-+		'import eu.qualimaster.dataManagement.sinks.IDataSink;'
-+		''
-+		'/**'
-+		'* Define the data sink interface(GEN).'
-+		'**/'
-+		'public interface I${toIdentifier(snkName)} extends IDataSink {'
-+		''
-+		//generate the tuple type interfaces.
-+		 produceForTuples(dataSnk.output, snkName, 4);		
-+		''
-+		String tupleName;
-+		for(Tuple t : dataSnk.output){
-+			tupleName = t.name;
-+ 
-+			'/**' | 4;
-+			'* Posts a specific type of data sink.' | 4;
-+			'* @param data the sink data ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input ' | 4;
-+			'**/' | 4;
-+	   	    'public void postData${firstToUpperCase(tupleName)}(${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input data);' | 4;
-+	   	    ''
-+
-+	   	    '/**' | 4;
-+			'* Emits tuple along with a ticket.' | 4;
-+			'* @param ticket the ticket to identify the responses for application' | 4;
-+			'* @param tuple the tuple ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input to be emitted ' | 4;
-+			'**/' | 4;
-+	   	    'public void emit(int ticket, ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Input tuple);' | 4;
-+	   	    ''
-+		}
-+		
-+        if (dataSnk.parameters.size()>0) {
-+	        '    // data sink parameters'
-+	        ''
-+	        for (Parameter p : dataSnk.parameters) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+    			String type = parameterTypeName(p);
-+	        	'    /**'
-+	        	'     * Sets the data sink parameter "${paramName}".'
-+	        	'     *'
-+	        	'     * @param value the new value of the data sink parameter'
-+	        	'     */'
-+	        	
-+	        	'    public void setParameter${mname}(${parameterTypeName(p)} value);'
-+	        	''
-+	    	}
-+    	}		
-+		'}' 
-+		}
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceImplementation.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceImplementation.vtl
-new file mode 100644
-index 0000000..c1c52d3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceImplementation.vtl
-@@ -0,0 +1,180 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template dataSourceImplementation(Configuration config, FileArtifact target, DataSource elt, String pkg, Boolean profiling) {
-+	mapOf(String, String) specificTypes = {};
-+	/**
-+	 * Produces the tuple type classes.
-+	 */
-+	def produceForTuples(sequenceOf(Tuple) tuples, String srcName, Boolean output, Integer indent) {
-+		String type;
-+		String typeName;			
-+    	String tupleName;
-+    		for (Tuple t : tuples) {      
-+				//get the tuple name.
-+				tupleName = t.name;
-+	    		if (output) {
-+	    		    type = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output";
-+	    		    typeName = "output";
-+    	        } else {
-+	    		    type = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Input";
-+	    		    typeName = "input";   		
-+	    	    }
-+		        '/**' | indent;
-+		        '* Define the source data input interface.' | indent;
-+		        '**/' | 4;
-+		        'public static class $type implements I${type} {' | indent;
-+		        
-+		     //   'private static final long serialVersionUID = 1L;' | indent + 4;
-+		        //produce the variable instances.	
-+		        for (Field f : t.fields) {
-+	    			String fname = toIdentifier("${f.name}");
-+	    			String ftype = fieldTypeName(f);
-+	    			'private ${ftype} ${fname};' | indent + 4;
-+    		    }
-+    		    //generate the Getters and Setters.		
-+    			for (Field f : t.fields) {
-+    				String fname = toIdentifier("${f.name}");
-+    				String mname = firstToUpperCase(fname);
-+    				String ftype = fieldTypeName(f);
-+    				//collect the specific types for registering serialization class.
-+    				serializerClass(f, specificTypes);
-+    				
-+    				'/**' | indent + 4;
-+					'* Returns the input value for tuple field "${f.name}".' | indent + 4;
-+					'* @return the tuple value' | indent + 4;
-+					'*/' | indent + 4;
-+    				'@Override' | indent + 4;
-+		    		'public ${ftype} get${mname}(){' | indent + 4;
-+		    			'return ${fname};' | indent + 8;
-+		    		'}' | indent + 4;
-+    				''
-+    				'/**' | indent + 4;
-+					'* Sets the output value for tuple field "${f.name}".' | indent + 4;
-+					'* @param ${fname} the field value' | indent + 4;
-+					'*/' | indent + 4;
-+					'@Override' | indent + 4;
-+		    		'public void set${mname}(${ftype} ${fname}){' | indent + 4;
-+		    			   'this.${fname} = ${fname};' | indent + 8;
-+		    		'}' | indent + 4;
-+    			}
-+    			//register the seriliazers.
-+    			if(!profiling) {
-+	    			String fserializer = formulateString(srcName) + "Serializers";
-+	    			registerSerializer(fserializer, type, specificTypes, indent);
-+    			}
-+    			'}' | indent;
-+    		}
-+    		
-+    		''   	
-+	}
-+	
-+	def main(Configuration config, FileArtifact target, DataSource dataSrc, String pkg, Boolean profiling){
-+		String srcName =dataSrc.name;
-+		srcName = srcName.firstToUpperCase();
-+	
-+		'package ${pkg}.imp;'
-+		''
-+		//'import java.io.Serializable;'
-+		'import java.util.Map;'
-+		'import ${pkg}.inf.I${toIdentifier(srcName)};'
-+		'import ${pkg}.inf.I${toIdentifier(srcName)}.*;'
-+		'import eu.qualimaster.dataManagement.strategies.*;'
-+		'import eu.qualimaster.observables.*;'
-+		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
-+		'import eu.qualimaster.dataManagement.sources.*;'
-+		''
-+		'/**'
-+		'* Define the data source class(GEN).'
-+		'**/'
-+		'public class ${toIdentifier(srcName)} implements I${toIdentifier(srcName)}{'
-+		''
-+		//generate tuple type classes.
-+		 produceForTuples(dataSrc.input, srcName, true, 4);		
-+		''
-+		String tupleName;
-+		for(Tuple t : dataSrc.input){
-+			//get the tuple name
-+			tupleName = t.name;
-+			for(Field f : t.fields) {
-+			    String fname = toIdentifier("${f.name}");
-+    		    String mname = firstToUpperCase(fname);	
-+			}
-+			
-+		'/**' | 4;
-+		'* Returns a specific type of data source.' | 4;
-+		'* @return ${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output the source data' | 4;
-+		'**/' | 4;
-+		'@Override' | 4;
-+	    'public ${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output get${firstToUpperCase(tupleName)}() {' | 4;
-+	    'return null;' | 8;
-+	    '}' | 4;
-+	    ''
-+	    String inputName = "I" + srcName;
-+	    '/**' | 4;
-+	    '* Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.' | 4;
-+	    '* @return an aggregation key' | 4;
-+	    '**/' | 4;
-+	    '@Override' | 4;
-+	    'public String getAggregationKey(${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output tuple) {' | 4;
-+	    'return null;' | 8;
-+	    '}' | 4;
-+		}
-+		
-+        if (dataSrc.parameters.size()>0) {
-+	        '    // data source parameters'
-+	        ''
-+	        for (Parameter p : dataSrc.parameters) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+    			String type = parameterTypeName(p);
-+	        	'    /**'
-+	        	'     * Sets the data source parameter "${paramName}".'
-+	        	'     *'
-+	        	'     * @param value the new value of the data source parameter'
-+	        	'     */'
-+	        	'@Override' | 4;
-+	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
-+	        	'    }'
-+	        	''
-+	    	}
-+    	}
-+        if (dataSrc.profilingSource) {
-+        '@Override' | 4;
-+        'public void forceAutoconnect() {}' | 4;
-+        }   
-+    	'@Override' | 4;
-+    	'public void connect() {}' | 4;
-+		''
-+		'@Override' | 4;
-+		'public void disconnect(){}' | 4;
-+ 		''
-+ 		'@Override' | 4;
-+ 		'public void setStrategy(IStorageStrategyDescriptor strategy) {}' | 4;
-+ 		''
-+ 		'@Override' | 4;
-+ 		'public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}' | 4;
-+ 		''
-+ 		'@Override' | 4;
-+ 		'public Double getMeasurement(IObservable observable) { return null;}' | 4;	
-+ 		''
-+		'@Override' | 4;
-+    	'public IHistoricalDataProvider getHistoricalDataProvider() {' | 4;
-+        	'return null;' | 8;
-+    	'}' | 4;
-+        ''
-+        '@Override' | 4;
-+        'public Map<String, String> getIdsNamesMap() {' | 4;
-+        'return null;' | 8;
-+        '}' | 4;
-+        ''
-+        '@Override' | 4;
-+        'public void setDataSourceListener(IDataSourceListener listener) {' | 4;
-+        '// no mapping, no listener needed' | 8;
-+        '}' | 4;
-+        ''
-+		'}' 
-+		}
-+		
-+		
-+ 
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceInterface.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceInterface.vtl
-new file mode 100644
-index 0000000..798cd63
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceInterface.vtl
-@@ -0,0 +1,109 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template dataSourceInterface(Configuration config, FileArtifact target, DataSource elt, String pkg) {
-+
-+	/**
-+	 * Produces the tuple type classes.
-+	 */
-+	def produceForTuples(sequenceOf(Tuple) tuples, String srcName, Integer indent) {
-+		String inputName = "I" + srcName.firstToUpperCase();
-+    	String tupleName;
-+    		for (Tuple t : tuples) {      
-+				//get the tuple name
-+				tupleName = t.name;
-+		        '/**' | 4;
-+		        '* Define the source data input interface.' | 4;
-+		        '**/' | 4;
-+		        'public static interface ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output extends Serializable{' | 4;	
-+		        //generate the Getters and Setters    		
-+    			for (Field f : t.fields) {
-+    				String fname = toIdentifier("${f.name}");
-+    				String mname = firstToUpperCase(fname);
-+    				String ftype = fieldTypeName(f);
-+    				'/**' | indent + 4;
-+					'* Returns the input value for tuple field "${f.name}".' | indent + 5;
-+					'* @return the tuple value' | indent + 5;
-+					'*/' | indent + 5;
-+    				'public ${ftype} get${mname}();' | indent + 4;
-+    				''
-+    				'/**' | indent + 4;
-+					'* Sets the output value for tuple field "${f.name}".' | indent + 5;
-+					'* @param ${fname} the field value' | indent + 5;
-+					'*/' | indent + 5;
-+					'public void set${mname}(${ftype} ${fname});' | indent + 4;
-+    			}
-+    			'}' | 4;
-+    		}
-+    		
-+    		''   	
-+	}
-+	
-+	def main(Configuration config, FileArtifact target, DataSource dataSrc, String pkg){
-+		String srcName =dataSrc.name;
-+		srcName = srcName.firstToUpperCase();
-+		String inputName = "I" + srcName;
-+		'package ${pkg}.inf;'
-+		''
-+		'import java.io.Serializable;'
-+		'import eu.qualimaster.dataManagement.sources.IDataSource;'
-+		''
-+		'/**'
-+		'* Define the data source interface(GEN).'
-+		'**/'
-+		'public interface I${toIdentifier(srcName)} extends IDataSource {'
-+		''
-+        if (dataSrc.profilingSource) {
-+        '/**' | 4;
-+        '* Enforce the source to autoconnect mode and prevent self-connects (profiling).' | 4;
-+        '**/' | 4;
-+        'public void forceAutoconnect();' | 4;
-+        }
-+		''
-+		//generate the tuple type interfaces
-+		 produceForTuples(dataSrc.input, srcName, 4);		
-+		''
-+		String tupleName;
-+		for(Tuple t : dataSrc.input){
-+			//get the tuple name
-+			tupleName = t.name;
-+			for(Field f : t.fields) {
-+			    String fname = toIdentifier("${f.name}");
-+    		    String mname = firstToUpperCase(fname);	
-+			}
-+			
-+		'/**' | 4;
-+		'* Returns a specific type of data source.' | 4;
-+		'* @return ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output the source data' | 4;
-+		'**/' | 4;
-+	    'public ${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output get${firstToUpperCase(tupleName)}();' | 4;
-+	    ''
-+	    '/**' | 4;
-+	    '* Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.' | 4;
-+	    '* @return an aggregation key' | 4;
-+	    '**/' | 4;
-+	    'public String getAggregationKey(${toIdentifier(inputName)}${firstToUpperCase(tupleName)}Output tuple);' | 4;
-+		}
-+		
-+        if (dataSrc.parameters.size()>0) {
-+	        '    // data source parameters'
-+	        ''
-+	        for (Parameter p : dataSrc.parameters) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+    			String type = parameterTypeName(p);
-+	        	'    /**'
-+	        	'     * Sets the data source parameter "${paramName}".'
-+	        	'     *'
-+	        	'     * @param value the new value of the data source parameter'
-+	        	'     */'
-+	        	
-+	        	'    public void setParameter${mname}(${parameterTypeName(p)} value);'
-+	        	''
-+	    	}
-+    	}		
-+		'}' 
-+		}
-+		
-+		
-+ 
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceProfilingImplementation.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceProfilingImplementation.vtl
-new file mode 100644
-index 0000000..9ccda1d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/dataSourceProfilingImplementation.vtl
-@@ -0,0 +1,254 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template dataSourceProfilingImplementation(Configuration config, FileArtifact target, DataSource elt, String pkg, Pipeline pip, Source src) {
-+	
-+	def Boolean isSingleStringTuple(QM config, sequenceOf(Tuple) tuples) {
-+		if (tuples.size() == 1) {
-+			Tuple tuple = tuples.first();
-+			if (tuple.fields.size() == 1) {
-+				Field field = tuple.fields.first();
-+				config.StringType == field.type; 
-+			} else {
-+				false;
-+			}
-+		} else {
-+			false;
-+		}
-+	}
-+	
-+	def main(Configuration config, FileArtifact target, DataSource dataSrc, String pkg, Pipeline pip, Source src) {
-+		QM cfg = config;
-+		String srcName = dataSrc.name;
-+		srcName = srcName.firstToUpperCase();
-+	
-+		'package ${pkg}.imp;'
-+		''
-+		'import java.io.*;'
-+		'import org.apache.log4j.Logger;'
-+		'import java.util.ArrayDeque;'
-+		'import java.util.ArrayList;'
-+		'import java.util.List;'
-+		'import java.util.Queue;'
-+		'import javax.annotation.Generated;'
-+		'import ${pkg}.inf.I${toIdentifier(srcName)};'
-+		'import ${pkg}.inf.I${toIdentifier(srcName)}.*;'
-+		'import eu.qualimaster.dataManagement.strategies.*;'
-+		'import eu.qualimaster.dataManagement.serialization.*;'
-+		'import eu.qualimaster.observables.*;'
-+		'import eu.qualimaster.events.EventManager;'
-+		'import eu.qualimaster.infrastructure.EndOfDataEvent;'
-+		'import eu.qualimaster.dataManagement.sources.DataQueueDescriptor;'
-+        'import eu.qualimaster.dataManagement.sources.GenericMultiSourceHandler;'
-+		'import eu.qualimaster.dataManagement.sources.ReplayMechanism;'
-+		'import eu.qualimaster.dataManagement.sources.ReplayMechanism.ProfilingQueueItem;'
-+		'import eu.qualimaster.dataManagement.sources.replay.LongTimestampParser;'
-+		'import eu.qualimaster.dataManagement.sources.IHistoricalDataProvider;'
-+		''
-+		'/**'
-+		'* Implements the data source class for profiling (GEN).'
-+		'**/'
-+		'@Generated("by QM")'
-+		'public class ${toIdentifier(srcName)}Profiling extends ${toIdentifier(srcName)} {'
-+		''
-+		Integer tupleCount = dataSrc.input.size();
-+		'private static final Logger logger = Logger.getLogger(${toIdentifier(srcName)}Profiling.class); ' | 4;
-+		'private static final int MAXIMUM_DATA_ENTRIES = 400000;' | 4;
-+		'private GenericMultiSourceHandler handler = new GenericMultiSourceHandler(${tupleCount});' |4;
-+		'private ReplayMechanism replay = new ReplayMechanism(LongTimestampParser.INSTANCE);' |4;
-+        'private boolean eodSent = false;' | 4;
-+        'private boolean isConnected = false;' | 4;
-+        sequenceOf(String) dataTypes = {};
-+        for(Tuple t : dataSrc.input){
-+			//get the tuple name
-+			String tupleName = t.name;
-+			for(Field f : t.fields) {
-+			    String fname = toIdentifier("${f.name}");
-+    		    String mname = firstToUpperCase(fname);	
-+			}
-+			String resultType = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output";
-+			dataTypes.add(resultType);
-+			'private transient Queue<ProfilingQueueItem<${resultType}>> ${resultType}Queue = 
-+				new ArrayDeque<ProfilingQueueItem<${resultType}>>();' | 4;
-+		}
-+		'private transient List<DataQueueDescriptor<?>> queueList = new ArrayList<DataQueueDescriptor<?>>();' | 4;
-+		''
-+		String tupleName;
-+		// legacy - pass rest except for potential identification directly through as String data
-+		Boolean singleStringCase = isSingleStringTuple(cfg, dataSrc.input);
-+		for(Tuple t : dataSrc.input){
-+			//get the tuple name
-+			tupleName = t.name;
-+			for(Field f : t.fields) {
-+			    String fname = toIdentifier("${f.name}");
-+    		    String mname = firstToUpperCase(fname);	
-+			}
-+			
-+		String resultType = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output";
-+
-+        '/**' | 4;
-+        '* Provides a serializer for the test data.' | 4;
-+        '*/' | 4;
-+        'public static class ${resultType}Serializer implements ISerializer<${resultType}> {' | 4;
-+        ''
-+        '@Override' | 8;
-+        'public void serializeTo($resultType object, OutputStream out) throws IOException {' | 8;
-+        '// no protobuf by now' | 12;
-+        '}' |8;
-+        ''
-+        '@Override' | 8;
-+        'public $resultType deserializeFrom(InputStream in) throws IOException {' | 8;
-+        'return null; // no protobuf by now' | 12;
-+        '}' |8;
-+        ''
-+        produceDataInputSerialization(t, resultType, 4);
-+        ''
-+        produceDataInputDeserialization(t, resultType, resultType, 4);
-+        '}' | 4;
-+        ''
-+		'@Override' |4;
-+	    'public ${resultType} get${firstToUpperCase(tupleName)}() {' | 4;
-+		    '${resultType} result = null;' | 8;
-+		    'if (isConnected) {' | 8;
-+		    String checkEmpty = "";
-+		    Boolean first = true;
-+		    String forAnd;
-+		    for (String type : dataTypes) {
-+		    	if(first) {
-+		    		forAnd = "";
-+		    		first = false;
-+		    	} else {
-+		    		forAnd = " && ";
-+		    	}
-+		    	checkEmpty = checkEmpty + "${forAnd}${type}Queue.isEmpty()";
-+		    }
-+		    'if (!${resultType}Queue.isEmpty()) {' | 12;
-+                'try {' | 16;
-+                    'result = replay.getNextItem(${resultType}Queue);' | 20;
-+                '} catch (InterruptedException e) {' | 16;
-+                    'e.printStackTrace();' | 20;
-+                '}' | 16;
-+            '}' | 12;
-+		    'if (${checkEmpty}) {' | 12;
-+                'if (!eodSent) {' | 16;
-+					'EventManager.send(new EndOfDataEvent("${pip.name}", "${src.name}"));' | 20;
-+	            	'eodSent = true;' | 20;
-+	            '}' | 16;
-+            '}' | 12;
-+            
-+		    /* previous version
-+			'if (replay.isEOD()) {' | 8;
-+			'if (!eodSent) {' | 12;
-+			'EventManager.send(new EndOfDataEvent("${pip.name}", "${src.name}"));' | 16;
-+            'eodSent = true;' | 16;
-+            '}' | 12;
-+			'} else {' | 8;
-+	        'String genericInput = replay.getNext();' | 12;
-+	        'if (null != genericInput) {' | 12;
-+	        'char separator = replay.getSeparator();' | 16;
-+	        'result = handler.next("${t.name}", ${resultType}.class, genericInput, separator, ${singleStringCase});' | 16;
-+	        '}' | 12;
-+			'}' | 8;
-+			*/
-+			'}' | 8;
-+			'//logger.info("get${firstToUpperCase(tupleName)} -- Returning the result: " + result);' | 8;
-+			'return result;' | 8;
-+	    '}' |4;
-+	    
-+	    '@Override' |4;
-+	    'public String getAggregationKey(I${resultType} tuple) {' | 4;
-+	        'return null;' | 8;
-+	    '}' |4;
-+		}
-+		
-+		if (dataSrc.parameters.size()>0) {
-+	        '// data source parameters' | 4;
-+	        ''
-+	        for (Parameter p : dataSrc.parameters) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+    			String type = parameterTypeName(p);
-+	        	'@Override' | 4;
-+	        	'public void setParameter${mname}(${parameterTypeName(p)} value) {' | 4;
-+				'replay.setParameter${mname}(value);' | 8;
-+	        	'}' | 4;
-+	        	''
-+	    	}
-+    	}
-+    	
-+    	if (dataSrc.profilingSource) {
-+    	'@Override' | 4;
-+        'public void forceAutoconnect() {' | 4;
-+        'replay.forceAutoconnect();' | 8;
-+        '}' | 4;
-+        }   
-+        ''
-+		
-+		'@Override' | 4;
-+		'public void connect() {' | 4;
-+		'logger.info("Connecting the source...");' | 8;
-+		'SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);' | 8; // preliminary until registrations are done properly
-+		for (String dataType : dataTypes) {
-+		    'SerializerRegistry.register(${dataType}.class, ${dataType}Serializer.class);' | 8;
-+		}
-+		'replay.connect();' | 8;
-+		for(Tuple t : dataSrc.input){
-+			//get the tuple name
-+			tupleName = t.name;
-+			for(Field f : t.fields) {
-+			    String fname = toIdentifier("${f.name}");
-+    		    String mname = firstToUpperCase(fname);	
-+			}
-+			
-+			String resultType = "${toIdentifier(srcName)}${firstToUpperCase(tupleName)}Output";
-+			'queueList.add(new DataQueueDescriptor<${resultType}>("$tupleName", ${resultType}Queue, 
-+            ${resultType}.class));' | 8;
-+		}
-+		'//read profiling data in advance' | 8;
-+		'try {' | 8;
-+			'replay.readProfilingData(handler, MAXIMUM_DATA_ENTRIES, queueList);' | 12;          
-+	        '} catch (IOException e) {' | 8;
-+	            'e.printStackTrace();' | 12;
-+	        '}' | 8;
-+	        for (String dataType : dataTypes) {
-+	        	'logger.info("The size of the ${dataType}Queue : " + ${dataType}Queue.size());' | 8;
-+	        }
-+	        'isConnected = true;' | 8;
-+	        'logger.info("Connected the source...");' | 8;
-+		'}' |4;
-+		
-+		'@Override' | 4;
-+        'public void disconnect() {' | 4;
-+        'logger.info("Disconnecting the source...");' | 8;
-+        'isConnected = false;' | 8;
-+		'replay.disconnect();' | 8;
-+        for (String dataType : dataTypes) {
-+            'SerializerRegistry.unregister(${dataType}.class);' | 8;
-+        }
-+        'logger.info("Disconnected the source...");' | 8;
-+		'}' | 4;
-+
-+		'@Override' | 4;
-+        'public void setStrategy(IStorageStrategyDescriptor strategy) {' | 4;
-+		'replay.setStrategy(strategy);' | 8;
-+		'}' | 4;
-+    
-+	    '@Override' | 4;
-+        'public IStorageStrategyDescriptor getStrategy() {' | 4;
-+		'return replay.getStrategy();' | 8;
-+		'}' | 4;
-+		
-+		'@Override' | 4;
-+		'public Double getMeasurement(IObservable observable) {' | 4;
-+		'return replay.getMeasurement(observable);' | 8;
-+		'}' |4;
-+    	''
-+		'@Override' | 4;
-+    	'public IHistoricalDataProvider getHistoricalDataProvider() {' | 4;
-+        'return replay.getHistoricalDataProvider();' | 8;
-+        '}' |4;
-+    	
-+		
-+		'}'
-+    }
-+ 
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyImplementationJava.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyImplementationJava.vtl
-new file mode 100644
-index 0000000..8ca4672
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyImplementationJava.vtl
-@@ -0,0 +1,146 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template familyImplementationJava(Configuration config, FileArtifact target, Family family) {   
-+	String fName = family.name.firstToUpperCase();
-+	mapOf(String) specificTypes = {};
-+	 
-+    def produceForTuples(Tuples tuples, Boolean output, Boolean implementation, String fName, Integer indent) {
-+	    String type;
-+	    String typeName;
-+    	String tupleName; 	    	   	   	
-+    	for (Tuple t : tuples) {
-+    		tupleName = t.name;
-+    		tupleName = firstToUpperCase(tupleName);
-+	        if (output) {
-+    		    type = "${fName}${tupleName}Output";
-+    		    typeName = "output";
-+    	    } else {
-+    		    type = "${fName}${tupleName}Input";
-+    		    typeName = "input";   		
-+    	    }
-+    	    		  	    	   		   
-+		    '/**' | indent;
-+            '* Provides a default implementation of the data ${typeName} for the {@link ${type}} algorithm.' | indent + 1;
-+            '* Actual execution system code may also directly wrap the respective tuple concept.' | indent + 1; 
-+		    '*/' | indent + 1;
-+		    String parents = "implements I${type}";
-+		    if (genMultiOutputs and output) {
-+		    	parents = "extends eu.qualimaster.base.algorithm.AbstractOutputItem<I${type}> $parents";
-+		    }
-+    	    'public static class $type $parents {' | indent;    	
-+    	    ''	
-+    	    //'private static final long serialVersionUID = 1L;' | indent + 4;
-+    	    if (genMultiOutputs and output) {
-+    	        '/**' | indent + 4;
-+                '* Creates the item.' | indent + 5;
-+                '*/' | indent + 5;
-+                'public ${type}() {' | indent + 4;
-+                'this(true);' | indent + 8;
-+                '}' | indent + 4;
-+                ''
-+                '/**' | indent + 4;
-+                '* Creates a sub-item.' | indent + 5;
-+                '*' | indent + 5;
-+                '* @param topLevel whether it is a top-level item' | indent + 5;
-+                '*/' | indent + 5;
-+                'private ${type}(boolean topLevel) {' | indent + 4;
-+                'super(topLevel);' | indent + 8;
-+                'setParent(this);' | indent + 8;
-+                '}' | indent + 4;
-+                ''
-+                '@Override' | indent + 4;
-+                'public ${type} createItem() {' | indent + 4;
-+                    'return new ${type}(false);' | indent + 8;
-+                '}' | indent + 4;
-+                
-+                '@Override' | indent + 4;
-+                'public void setTaskId(int taskId) {' | indent + 4;
-+                	'this.taskId = taskId;' | indent + 8;
-+                '}' | indent + 4;
-+                
-+                '@Override' | indent + 4;
-+                'public int getTaskId() {' | indent + 4;
-+                	'return taskId;' | indent + 8;
-+                '}' | indent + 4;
-+                'private transient int taskId;' | indent + 4;
-+    	    }   
-+    		for (Field f : t.fields) {
-+    			String fname = toIdentifier("${f.name}");
-+    			String ftype = fieldTypeName(f);
-+    			//collect the specific types for registering serialization class.
-+    			serializerClass(f, specificTypes);
-+    			
-+    			'private ${ftype} ${fname};' | indent + 4;
-+    		}
-+    		''
-+    		
-+    		for (Field f : t.fields) {
-+    			String fname = toIdentifier("${f.name}");
-+    			String mname = firstToUpperCase(fname);
-+    			String ftype = fieldTypeName(f);
-+				'@Override' | indent + 4;
-+	    		'public ${ftype} get${mname}(){' | indent + 4;
-+	    			'return ${fname};' | indent + 8;
-+	    		'}' | indent + 4;	    			
-+	    		''
-+	    		
-+				'@Override' | indent + 4;
-+	    		'public void set${mname}(${ftype} ${fname}){' | indent + 4;
-+	    			   'this.${fname} = ${fname};' | indent + 8;
-+	    		'}' | indent + 4;
-+    		}
-+    		//register the seriliazers.
-+    		String fserializer = fName.substring(1, fName.length()) + "Serializers";
-+    		registerSerializer(fserializer, type, specificTypes, indent);
-+    	'}' | indent;
-+    	''	   	       	
-+      }
-+    }    
-+		
-+    def main(Configuration config, FileArtifact target, Family family) {
-+    	'package eu.qualimaster.families.imp;'
-+    	''
-+    	//'import java.io.Serializable;'
-+    	'import eu.qualimaster.families.inf.*;'
-+    	'import eu.qualimaster.observables.IObservable;'
-+    	'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
-+    	''
-+    	String ifName = "I" + fName;
-+    	'/**'
-+    	' * The implementation for the algorithm family "${ifName}" (GEN).'
-+    	' */'
-+    	'public class $fName implements $ifName {'
-+    	''
-+    	produceForTuples(family.input, false, true, ifName, 4);
-+    	produceForTuples(family.output, true, true, ifName, 4);
-+    	
-+    	//produce the calculate method based on multiple input and output string
-+        produceForCalculate(family, false); 
-+             	
-+        if (family.byName("parameters").variables().size()>0) {
-+	        ''
-+	        for (Parameter p : family.byName("parameters")) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+	        	'    /**'
-+	        	'     * Sets the algorithm parameter "${paramName}".'
-+	        	'     *'
-+	        	'     * @param value the new value of the algorithm parameter'
-+	        	'     */'
-+	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
-+	        	'    }'
-+	        	''      	
-+	    	}
-+    	}
-+				'    @Override'
-+				'    public void switchState(State arg0) {'					
-+				'    }'
-+				''
-+				'    @Override'
-+				'    public Double getMeasurement(IObservable arg0) {'
-+				'	    return null;'
-+				'    }'     	
-+    '}'
-+    }
-+    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceC.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceC.vtl
-new file mode 100644
-index 0000000..12a3938
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceC.vtl
-@@ -0,0 +1,14 @@
-+template familyInterfaceC(Configuration config, FileArtifact target, DecisionVariable family, String ifName) {
-+
-+    def main(Configuration config, FileArtifact target, DecisionVariable family, String ifName) {
-+    	'class $ifName {'
-+    	''
-+    	'    public:'
-+    	''
-+        '    void calculate(/* put in "stream" here, may need a specific parameter interface */);'
-+        ''
-+        '    // put in methods for the parameters in here'
-+    	'};'
-+    }
-+    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceJava.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceJava.vtl
-new file mode 100644
-index 0000000..49d18cb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/familyInterfaceJava.vtl
-@@ -0,0 +1,98 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template familyInterfaceJava(Configuration config, FileArtifact target, Family family, String ifName) {
-+
-+    /*
-+     * Produces the tuple type classes.
-+     */
-+    def produceForTuples(Tuples tuples, Boolean output, String fName, Integer indent) {
-+	    String type;
-+	    String typeName;
-+    	String tupleName;  	
-+  					    
-+	    for (Tuple t : tuples){
-+    		tupleName = t.name;	
-+	   		if (output) {
-+    			type = "${fName}${firstToUpperCase(tupleName)}Output";
-+    			typeName = "output";
-+    		} else {
-+    			type = "${fName}${firstToUpperCase(tupleName)}Input";
-+    			typeName = "input";   		
-+    		}   	
-+    		type = "I" + type;
-+    		'/**' | indent;
-+    		'* Defines the data ${typeName} interface for the {@link ${type}} algorithm (over all defined ${typeName} tuples).' | indent + 1;
-+			'*/' | indent + 1;
-+			String baseInterface = "Serializable";
-+			if (genMultiOutputs and output) {
-+				baseInterface = "Serializable, eu.qualimaster.base.algorithm.IOutputItem<$type>, IDirectGroupingInfo";
-+			}
-+    		'public static interface $type extends $baseInterface {' | indent;
-+    		''
-+    		for (Field f : t.fields) {
-+    			String fname = toIdentifier("${f.name}");
-+    			String mname = firstToUpperCase(fname);
-+    			String ftype = fieldTypeName(f);
-+    			'/**' | indent + 4;
-+				'* Returns the input value for tuple field "${f.name}".' | indent + 5;
-+				'* @return the tuple value' | indent + 5;
-+				'*/' | indent + 5;
-+    			'public ${ftype} get${mname}();' | indent + 4;
-+    			''
-+    			'/**' | indent + 4;
-+				'* Changes the output value for tuple field "${f.name}".' | indent + 5;
-+				'* @param ${fname} the field value' | indent + 5;
-+				'*/' | indent + 5;
-+    			'public void set${mname}(${ftype} ${fname});' | indent + 4;
-+    		}
-+    	
-+    	'}' | indent;
-+    	''	    		    	
-+	    }
-+    } 	 		
-+
-+    def main(Configuration config, FileArtifact target, Family family, String ifName) {
-+    	/* think about the family interface name is better from varName or name field
-+    	Family fm = family;
-+    	String familyName = fm.name;
-+    	familyName = "I" + familyName.firstToUpperCase();
-+    	* 
-+    	*/
-+    	'package eu.qualimaster.families.inf;'
-+    	''
-+    	'import java.io.Serializable;'
-+    	'import eu.qualimaster.base.algorithm.IFamily;'
-+    	'import eu.qualimaster.base.algorithm.IDirectGroupingInfo;'
-+    	''
-+    	'/**'
-+    	' * Defines the interface for the algorithm family "${ifName}" (GEN).'
-+    	' */'
-+    	'public interface ${toIdentifier(ifName)} extends IFamily{'
-+    	''
-+    	 produceForTuples(family.input, false, ifName, 4);
-+    	 produceForTuples(family.output, true, ifName, 4);
-+    	 
-+    	 //produce the calculate method based on multiple input and output string
-+         produceForCalculate(family, true);        
-+        
-+        if (family.byName("parameters").variables().size()>0) {
-+	        ''
-+	        for (Parameter p : family.byName("parameters")) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+    			String type = parameterTypeName(p);
-+    		
-+	        	'    /**'
-+	        	'     * Sets the algorithm parameter "${paramName}".'
-+	        	'     *'
-+	        	'     * @param value the new value of the algorithm parameter'
-+	        	'     */'
-+	        	
-+	        	'    public void setParameter${mname}(${parameterTypeName(p)} value);'
-+	        	''
-+	    	}
-+    	}
-+    	'}'
-+    }
-+    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmMapping.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmMapping.vtl
-new file mode 100644
-index 0000000..5a42b81
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmMapping.vtl
-@@ -0,0 +1,45 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template hardwareAlgorithmMapping(Configuration config, FileArtifact target, HardwareAlgorithm algorithm, String pipName) {
-+	Boolean useThrift;
-+    def main(Configuration config, FileArtifact target, HardwareAlgorithm algorithm, String pipName) {
-+    	useThrift = not(genMonitoringProbes);
-+    	Text text = target.getText();
-+    		
-+    	text.append("<mapping>\n");
-+    	
-+    	String algName = algorithm.name;
-+    	String topologyClsName = "eu.qualimaster.algorithms.$algName.";
-+    	String container;
-+    	if(looseSub) {
-+    		container = algName;
-+    	} else {
-+    		container = pipName;
-+    	}
-+    	Integer senderParallelism = algorithm.senderParallelism;
-+		Integer receiverParallelism = algorithm.receiverParallelism;
-+    	if(looseSub) {
-+    		topologyClsName = topologyClsName + "Topology";
-+    	} else {
-+    		topologyClsName = topologyClsName + "${algName}SubTopology";
-+    	}
-+    	text.append('  <pipeline name="${algName}" class="$topologyClsName">\n');
-+    	
-+    	text.append('      <node name="${algName}HardwareConnectionBolt" type="family">\n');
-+    	text.append("             <component name=\"${algName}HardwareConnectionBolt\" container=\"$container\" class=\"eu.qualimaster.algorithms.$algName.HardwareConnectionBolt\" receiver=\"true\" thrift=\"${useThrift}\" tasks=\"${senderParallelism}\" type=\"HARDWARE\"/>\n");
-+    	text.append('      </node>\n');
-+    	text.append('      <node name="${algName}HardwareConnectionSpout" type="source">\n');
-+		text.append("             <component name=\"${algName}HardwareConnectionSpout\" container=\"$container\" class=\"eu.qualimaster.algorithms.$algName.HardwareConnectionSpout\" receiver=\"true\" thrift=\"${useThrift}\" tasks=\"${receiverParallelism}\" type=\"HARDWARE\"/>\n");    	
-+    	text.append('      </node>\n');
-+    	if(looseSub) {
-+	    	appendIntermediaryComponent(algName, container, true, useThrift, text);
-+    	}
-+    	text.append('  </pipeline>\n');
-+		text.append('\n');				        			
-+
-+		text.append("</mapping>\n");
-+		target.rename("mapping.xml");
-+    	
-+    }
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmPom.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmPom.vtl
-new file mode 100644
-index 0000000..40eb289
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareAlgorithmPom.vtl
-@@ -0,0 +1,98 @@
-+import commonPomMethods;
-+import commonVTLMethods;
-+@advice(QM)
-+template hardwareAlgorithmPom(Configuration config, FileArtifact target, String algName) {
-+	def main(Configuration config, FileArtifact target, String algName) {
-+		Text text = target.getText();
-+		text.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n");		
-+		text.append("  <modelVersion>4.0.0</modelVersion>\n");
-+//		sequenceOf(String) artList = artifact.split(":");
-+//		if(artList.size() == 3) {
-+//		    text.append("  <groupId>${artList[0]}</groupId>\n");
-+//			text.append("  <artifactId>${artList[1]}</artifactId>\n");
-+//			text.append("  <version>${artList[2]}</version>\n");	
-+//		}		
-+		
-+	    text.append("  <groupId>eu.qualimaster</groupId>\n");
-+		text.append("  <artifactId>$algName</artifactId>\n");
-+		text.append("  <version>$GenAlgVersion</version>\n");
-+		
-+		text.append("  <packaging>jar</packaging>\n");
-+		text.append("\n");
-+		text.append("  <build>\n");
-+		text.append("    <sourceDirectory>"+"$"+"{basedir}/</sourceDirectory>\n");
-+		text.append("    <plugins>\n");
-+		appendPlugins(text);
-+		text.append("    </plugins>\n");		
-+		text.append("  </build>\n");
-+		text.append("  <repositories>\n");		
-+		appendRepositories(text);
-+		text.append("  </repositories>\n");
-+		text.append("\n");
-+		appendDependencyManagement(text);
-+		text.append("  <dependencies>\n");
-+		appendDependencies(text);
-+		text.append("  </dependencies>\n");		
-+		text.append("</project>\n");
-+		target.rename("pom.xml");
-+	}
-+	
-+	def appendPlugins(Text text) {		
-+            text.append("            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>\n");	
-+            text.append("            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>\n");  
-+            text.append("            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-source-plugin</artifactId>
-+				<version>2.2.1</version>
-+				<executions>
-+					<execution>
-+						<id>attach-sources</id>
-+						<phase>verify</phase>
-+						<goals>
-+							<goal>jar</goal>
-+						</goals>
-+					</execution>
-+				</executions>
-+			</plugin>\n"); 			     	
-+	}
-+	def appendDependencies(Text text) {
-+	   text.append("   <dependency>
-+	     <groupId>org.apache.storm</groupId>
-+	     <artifactId>storm-core</artifactId>
-+	   </dependency>\n");
-+	   		text.append("   <dependency>
-+	     <groupId>eu.qualimaster</groupId>
-+	     <artifactId>StormCommons</artifactId>
-+	   </dependency>\n");
-+   		text.append("    <dependency>
-+			<groupId>eu.qualimaster</groupId>
-+			<artifactId>PriorityPipelineInterfaces</artifactId>
-+			<version>0.5.0-SNAPSHOT</version>
-+		</dependency>\n");
-+   		text.append("   <dependency>
-+     	<groupId>eu.qualimaster</groupId>
-+     	<artifactId>QualiMaster.Events</artifactId>
-+   	</dependency>\n"); 
-+	   text.append("   <dependency>
-+	     <groupId>eu.qualimaster</groupId>
-+	     <artifactId>DataManagementLayer</artifactId>
-+	   </dependency>\n"); 
-+	}
-+	def appendRepositories(Text text) {
-+		text.append("    <repository>\n      <id>qm.eu</id>\n      <name>qm.eu</name>\n      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>\n    </repository>\n");
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareReceiver.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareReceiver.vtl
-new file mode 100644
-index 0000000..938118e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareReceiver.vtl
-@@ -0,0 +1,254 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template hardwareReceiver(Configuration config, FileArtifact target, Family family) {
-+	Integer indent = 0;
-+	String fNameUpper = family.name.firstToUpperCase();
-+	setOf(String) parametersByType = {};
-+	sequenceOf(String) letters = {"a", "b", "c", "d", "e"}; 
-+	def main(Configuration config, FileArtifact target, Family family) {
-+		'#include <stdio.h>'
-+		'#include <stdlib.h>'
-+		'#include <strings.h>'
-+		'#include <unistd.h>'
-+		'#include <sys/types.h>'
-+		'#include <sys/socket.h>'
-+		'#include <netinet/in.h>'
-+		'#include <arpa/inet.h>'
-+		'#include <sys/wait.h>'
-+		'#include <signal.h>'
-+		'#include <string>'
-+		'#include <iostream>'
-+		'#include <google/protobuf/io/coded_stream.h>'
-+		'#include <google/protobuf/generated_message_util.h>'
-+		'#include <google/protobuf/message.h>'
-+		'#include <google/protobuf/extension_set.h>'
-+		'#include <google/protobuf/unknown_field_set.h>'
-+		'#include <google/protobuf/io/zero_copy_stream_impl_lite.h>'
-+		''
-+		'#include "SerializeServerTemplateCpuCode.h"'
-+		'#include "parameters.pb.h"'
-+		produceTuplesForInclude(family.input); 
-+		'using namespace std;'
-+		''
-+		'void receiver(parm *arg)'
-+		'{'
-+			'struct sockaddr_in server_addr;' | indent+4;
-+			'int receiver_socket;' | indent+4;
-+			'int true_var=1;' | indent+4;
-+			'struct sockaddr_in receiver_addr;' | indent+4;
-+			'socklen_t sin_size;' | indent+4;
-+			''
-+			'if ((receiver_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)' | indent+4;
-+			'{'  | indent+4;
-+				'perror("Socket");' | indent+8;
-+				'exit(1);' | indent+8;
-+			'}'  | indent+4;
-+			''
-+			'if (setsockopt(receiver_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)' | indent+4;
-+			'{' | indent+4;
-+				'perror("Setsockopt");' | indent+8;
-+				'exit(1);' | indent+8;
-+			'}' | indent+4;
-+			''
-+			'server_addr.sin_family = AF_INET;' | indent+4;
-+			'server_addr.sin_port = htons(2400);' | indent+4;
-+			'server_addr.sin_addr.s_addr = INADDR_ANY;' | indent+4;
-+			'bzero(&(server_addr.sin_zero),8);' | indent+4;
-+			''
-+			'if (bind(receiver_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)' | indent+4;
-+			'{' | indent+4;
-+				'perror("Unable to bind");' | indent+8;
-+				'exit(1);' | indent+8;
-+			'}' | indent+4;
-+			''
-+			'if (listen(receiver_socket, 5) == -1)' | indent+4;
-+			'{' | indent+4;
-+				'perror("Listen failed");' | indent+8;
-+				'exit(1);' | indent+8;
-+			'}' | indent+4;
-+			''
-+			'printf("TCPServer Waiting for client on port 2400\\n");' | indent+4;
-+			''
-+			'sin_size = (socklen_t)sizeof(receiver_addr);' | indent+4;
-+			'int receiver_socket_connected = accept(receiver_socket, (struct sockaddr *)&receiver_addr,&sin_size);' | indent+4;
-+			'printf("Got a connection from (%s , %d)\\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port));' | indent+4;
-+			'printf("Connection with Bolt\\n");' | indent+4;
-+			''
-+			mapOf(String, setOf(String)) serializers = produceTuplesForHardwareVariables(family.input, fNameUpper, false, indent+4);
-+			produceParametersForVariables(family.parameters, indent+4);
-+			''
-+			'google::protobuf::uint32 size;' | indent+4;
-+			'google::protobuf::io::CodedInputStream::Limit msgLimit;' | indent+4;
-+			'unsigned char buffer[MAXDATASIZE];' | indent+4;
-+			'unsigned char temp[10];' | indent+4;
-+			'int numbytes = 0;' | indent+4;
-+			'int internal_size = 0;' | indent+4;
-+			'int pointer = 0;' | indent+4;
-+			'int j, i;' | indent+4;
-+			'bzero(buffer,0);' | indent+4;
-+			''
-+			'struct message_receiver_processor msg;' | indent+4;
-+			'while(1)' | indent+4;
-+			'{' | indent+4;
-+				'numbytes = 0;' | indent+8;
-+				'while(pointer < MESSAGE_HEADER)' | indent+8;
-+				'{' | indent+8;
-+					'numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);' | indent+12;
-+					'if(numbytes > 0)' | indent+12;
-+						'pointer = pointer + numbytes;' | indent+16;
-+				'}' | indent+8;
-+				''
-+//				'google::protobuf::io::ArrayInputStream arrayIn(buffer, pointer);' | indent+8;
-+				'google::protobuf::io::CodedInputStream codedIn1(&arrayIn);' | indent+8;
-+				''
-+				'codedIn1.ReadRaw(temp, 2); // Read the protocol Message type' | indent+8;
-+				'codedIn1.ReadVarint32(&size);' | indent+8;
-+				'if((size & 0x7f800000) > 0)' | indent+8;
-+				'{' | indent+8;
-+					'message_size = 4 + (size + 2); //size of size variable in the message + size Bytes + 2 Bytes protocol' | indent+12;
-+				'}' | indent+8;
-+				'else if((size & 0x7f8000) > 0)' | indent+8;
-+				'{' | indent+8;
-+					'message_size = 3 + (size + 2);' | indent+12;
-+				'}' | indent+8;
-+				'else if((size & 0x7f80) > 0)' | indent+8;
-+				'{' | indent+8;
-+					'message_size = 2 + (size + 2);' | indent+12;
-+				'}' | indent+8;
-+				'else' | indent+8;
-+				'{' | indent+8;
-+					'message_size = 1 + (size + 2);' | indent+12;
-+				'}' | indent+8;
-+				'//Read the remaining Bytes from the incoming message from TCP buffer' | indent+8;
-+				'while(pointer < message_size)' | indent+8;
-+				'{' | indent+8;
-+					'numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);' | indent+12;
-+					'if(numbytes > 0)' | indent+12;
-+						'pointer = pointer + numbytes;' | indent+16;
-+				'}' | indent+8;
-+				'//Deserialize the complete incoming message' | indent+8;
-+				'google::protobuf::io::CodedInputStream codedIn(buffer, message_size);' | indent+8;
-+				''
-+				'// Omit the first two Bytes (Message ID)' | indent+8;
-+				'codedIn.Skip(2);' | indent+8;
-+				''
-+				produceTuplesForHardware(family.input, serializers, indent+12);
-+				produceParametersForHardware(family.parameters, indent+12);
-+				'else if(temp[0] == \'c\')' | indent+12;
-+				'{' | indent+12;
-+					'printf("Connection closed\\n");' | indent+16;
-+					'return;' | indent+16;
-+				'}' | indent+12;
-+				''
-+			'}' | indent+4;
-+			'close(receiver_socket_connected);' | indent+4;
-+		'}'
-+	}
-+	def produceTuplesForInclude(Tuples tuples) {
-+		Boolean once1 = true;
-+	    Boolean once2 = true;
-+		for(Tuple t : tuples) {
-+			for(Field f : t.fields) {
-+				FieldType ftype = f.type;
-+				String fieldName = toIdentifier("${f.name}");
-+				String ptype = basicTypeForProto(ftype);
-+				if(ptype != "" and once1) {
-+					'#include "${fNameUpper}.pb.h"'
-+					once1 = false;
-+				}
-+				if(isListType(ftype) and once2) {
-+					'#include "stringlist.pb.h"'
-+					once2 = false;
-+				} else if(ptype == "" and !isListType(ftype)){
-+					'#include "${fieldName}.pb.h"' //Notice that the algorithm-specific proto name is the configured field name
-+				}
-+			}
-+		}
-+	}
-+	def produceParametersForVariables(sequenceOf(Parameter) parameters, Integer indent) {
-+		String paraType;
-+		for(Parameter p : parameters) {
-+			DecisionVariable para = p;
-+			paraType = para.type();
-+			if(!isStringExisted(paraType, parametersByType)) {
-+				'eu::qualimaster::base::protos::S$paraType $paraType;' | indent;
-+				parametersByType.add(paraType);
-+			}
-+		}
-+	}
-+	def produceParametersForHardware(sequenceOf(Parameter) parameters, Integer indent) {
-+		setOf(String) marker = {};
-+		String protocol;
-+		String paraType;
-+		if(parameters.size()>0){
-+			'else if(temp[0] == \'p\') { //Parameters' | indent;
-+			for(Parameter p : parameters) {
-+				DecisionVariable para = p;
-+				paraType = para.type();
-+				protocol = parameterHwProtocol(p);
-+				if(!isStringExisted(protocol, marker)){
-+					'if(temp[1] == \'${protocol}\')  {//${parameterTypeName(p)} Parameter' | indent+4;
-+						produceHardwareSerialization(paraType, indent+8);
-+						produceSizeCode(indent+8);
-+					'}' | indent+4;
-+					marker.add(protocol);
-+				}
-+			}
-+			'}' | indent;
-+		}
-+	}
-+	def produceTuplesForHardware(Tuples tuples, mapOf(String, setOf(String)) serializers, Integer indent) {		
-+		String tupleName;
-+		Integer counter = 0;
-+		'if(temp[0] == \'d\') { //Data' | indent;
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			setOf(String) setS = serializers.get(tupleName);
-+			String letter = letters.get(counter);
-+			counter = counter + 1;
-+				'if(temp[1] == \'${letter}\') { //${counter}st Data Type' | indent+4;
-+				for(String s : setS) {
-+					produceHardwareSerialization(s, indent+8);
-+					produceCommonCode(s, indent+8);
-+				}
-+				'}' | indent+4;
-+		}
-+		'}' | indent;
-+	}
-+	def produceHardwareSerialization(String serializer, Integer indent) {
-+		'codedIn.ReadVarint32(&size);' | indent;
-+		'msgLimit = codedIn.PushLimit(size);' | indent;
-+    	'${serializer}.ParseFromCodedStream(&codedIn);' | indent;
-+    	'codedIn.PopLimit(msgLimit);' | indent;
-+	}
-+	def produceSizeCode(Integer indent) {
-+		'if((size & 0x7f800000) > 0)' | indent;
-+		'{' | indent;
-+			'internal_size = internal_size + size + 4;' | indent+4;
-+		'}' | indent;
-+		'else if((size & 0x7f8000) > 0)' | indent;
-+		'{' | indent;
-+			'internal_size = internal_size + size + 3;' | indent+4;
-+		'}' | indent;
-+		'else if((size & 0x7f80) > 0)' | indent;
-+		'{' | indent;
-+			'internal_size = internal_size + size + 2;' | indent+4;
-+		'}' | indent;
-+		'else' | indent;
-+		'{' | indent;
-+			'internal_size = internal_size + size + 1;' | indent+4;
-+		'}' | indent;
-+	}
-+	
-+	def produceCommonCode(String variable, Integer indent) {
-+		'// Parse the message data' | indent;
-+		'msg.type = 0;' | indent;
-+		'msg.data = ${variable}.randominteger();' | indent;
-+		''
-+		'//Push data into the lockfree structure' | indent;
-+		'while(!arg->queue_receiver_processor->push(msg))' | indent;
-+		'{' | indent;
-+			';' | indent+4;
-+		'}' | indent;
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareSender.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareSender.vtl
-new file mode 100644
-index 0000000..0585fb6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/hardwareSender.vtl
-@@ -0,0 +1,118 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template hardwareSender(Configuration config, FileArtifact target, Family family) {
-+	Integer indent = 0;
-+	String fNameUpper = family.name.firstToUpperCase();
-+	def main(Configuration config, FileArtifact target, Family family) {
-+		'#include <stdio.h>'
-+		'#include <stdlib.h>'
-+		'#include <strings.h>'
-+		'#include <unistd.h>'
-+		'#include <sys/types.h>'
-+		'#include <sys/socket.h>'
-+		'#include <netinet/in.h>'
-+		'#include <arpa/inet.h>'
-+		'#include <sys/wait.h>'
-+		'#include <signal.h>'
-+		'#include <string>'
-+		'#include <iostream>'
-+		'#include <netdb.h>'
-+		'#include <netinet/in.h>'
-+		'#include <string.h>'
-+		'#include <google/protobuf/io/coded_stream.h>'
-+		'#include <google/protobuf/generated_message_util.h>'
-+		'#include <google/protobuf/message.h>'
-+		'#include <google/protobuf/extension_set.h>'
-+		'#include <google/protobuf/unknown_field_set.h>'
-+		'#include <google/protobuf/io/zero_copy_stream_impl_lite.h>'
-+		''
-+		'#include "SerializeServerTemplateCpuCode.h"'
-+		'#include "$fNameUpper.pb.h"'
-+		''
-+		'void sender(parm *arg)'
-+		'{'
-+			'struct sockaddr_in server_addr;' | indent+4;
-+			'int transmitter_socket;' | indent+4;
-+			'socklen_t sin_size;' | indent+4;
-+			'int true_var=1;' | indent+4;
-+			'struct sockaddr_in transmitter_addr;' | indent+4;
-+			''
-+			'if ((transmitter_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)' | indent+4;
-+			'{' | indent+4;
-+				'perror("Socket");' | indent+8;
-+				'exit(1);' | indent+8;
-+			'}' | indent+4;
-+			''
-+			'if (setsockopt(transmitter_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)' | indent+4;
-+			'{' | indent+4;
-+				'perror("Setsockopt");' | indent+8;
-+				'exit(1);' | indent+8;
-+			'}' | indent+4;
-+			''
-+			'server_addr.sin_family = AF_INET;' | indent+4;
-+			'server_addr.sin_port = htons(2401);' | indent+4;
-+			'server_addr.sin_addr.s_addr = INADDR_ANY;' | indent+4;
-+			'bzero(&(server_addr.sin_zero),8);' | indent+4;
-+			''
-+			'if (bind(transmitter_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)' | indent+4;
-+			'{' | indent+4;
-+				'perror("Unable to bind");' | indent+8;
-+				'exit(1);' | indent+8;
-+			'}' | indent+4;
-+			''
-+			'if (listen(transmitter_socket, 5) == -1)' | indent+4;
-+			'{' | indent+4;
-+				'perror("Listen failed");' | indent+8;
-+				'exit(1);' | indent+8;
-+			'}' | indent+4;
-+			''
-+			'printf("TCPServer Waiting for client on port 2401\\n");' | indent+4;
-+			''
-+			'sin_size = sizeof(transmitter_addr);' | indent+4;
-+			'int transmitter_socket_connected = accept(transmitter_socket, (struct sockaddr *)&transmitter_addr,&sin_size);' | indent+4;
-+			'printf("Got a connection from (%s , %d)\\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));' | indent+4;
-+			'printf("Connection with Spout\\n");' | indent+4;
-+			''
-+			String type;
-+    		String tupleName;
-+    		String ifName = "I" + fNameUpper;
-+    		Boolean flag = true;
-+			for (Tuple t : family.output) {
-+	    		tupleName = t.name;
-+	    		tupleName = firstToUpperCase(tupleName);
-+	    		type = "S${ifName}${tupleName}Output";
-+	    	    if(flag) {
-+	    	    	'eu::qualimaster::families::protobuf::$type to;' | indent+4;
-+	    	    	flag = false; //assume that there is only one output type from the family
-+	    	    }	    
-+      		}	
-+			''
-+			'struct message_processor_sender msg;' | indent+4;
-+			'while(1)' | indent+4;
-+			'{' | indent+4;
-+				'while(!arg->queue_processor_sender->pop(msg))' | indent+8;
-+				'{' | indent+8;
-+					';' | indent+12;
-+				'}' | indent+8;
-+				'to.set_randominteger(msg.data);' | indent+8;
-+				'//already set up a message object called serverAck' | indent+8;
-+				'//make a buffer that can hold message + room for a 32bit delimiter' | indent+8;
-+				'int ackSize=to.ByteSize()+ google::protobuf::io::CodedOutputStream::VarintSize32(to.ByteSize());' | indent+8;
-+				'char* ackBuf=new char[ackSize];' | indent+8;
-+				''
-+				'//write varint delimiter to buffer' | indent+8;
-+				'google::protobuf::io::ArrayOutputStream arrayOut(ackBuf, ackSize);' | indent+8;
-+				'google::protobuf::io::CodedOutputStream codedOut(&arrayOut);' | indent+8;
-+				''
-+				'//write protobuf ack to buffer' | indent+8;
-+				'codedOut.WriteVarint32(to.ByteSize());' | indent+8;
-+				'to.SerializeToCodedStream(&codedOut);' | indent+8;
-+				''
-+				'//send buffer to client' | indent+8;
-+				'send(transmitter_socket_connected, ackBuf, ackSize, 0);' | indent+8;
-+				''
-+				'delete(ackBuf);' | indent+8;
-+			'}' | indent+4;
-+		'}'
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/AlgorithmsCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/AlgorithmsCfg.ivml
-new file mode 100644
-index 0000000..b98de1b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/AlgorithmsCfg.ivml
-@@ -0,0 +1,3024 @@
-+project AlgorithmsCfg {
-+
-+	import ReconfigurableHardware;
-+	import ReconfigurableHardwareCfg;
-+	import Algorithms;
-+	import BasicsCfg;
-+	import PipelinesCfg;
-+	SoftwareAlgorithm swPreprocessor;
-+	SoftwareAlgorithm SWTopoCorrelationFinancial;
-+	SoftwareAlgorithm HWTopoCorrelationFinancial;
-+	HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+	SoftwareAlgorithm HWTopoCorrelationTwitter;
-+	SoftwareAlgorithm SWTopoCorrelationTwitter;
-+	SoftwareAlgorithm topoSentiWord;
-+	SoftwareAlgorithm topoSVM;
-+	SoftwareAlgorithm mismatchedAlg;
-+	SoftwareAlgorithm randomAlg1;
-+	SoftwareAlgorithm randomAlg2;
-+	SoftwareAlgorithm switchAlg1;
-+	SoftwareAlgorithm switchAlg2;
-+	HardwareAlgorithm switchAlgHw;
-+	SoftwareAlgorithm preprocessorTest;
-+	SoftwareAlgorithm financialCorrelationTest;
-+	SoftwareAlgorithm sentimentAnalysisTest;
-+	SoftwareAlgorithm twitterCorrelationTest;
-+	SoftwareAlgorithm AlgorithmVar_18;
-+	SoftwareAlgorithm AlgorithmVar_19;
-+	SoftwareAlgorithm AlgorithmVar_20;
-+	SoftwareAlgorithm AlgorithmVar_21;
-+	SoftwareAlgorithm AlgorithmVar_22;
-+	SoftwareAlgorithm AlgorithmVar_23;
-+	SoftwareAlgorithm AlgorithmVar_24;
-+	SoftwareAlgorithm recommendations;
-+	SoftwareAlgorithm eventEnrichment;
-+	SoftwareAlgorithm keywordAnalyzer;
-+	SoftwareAlgorithm tweetClassifier;
-+	SoftwareAlgorithm spamRemoval;
-+	SoftwareAlgorithm spamDetection;
-+	SoftwareAlgorithm twitterStreamFiltering;
-+	SoftwareAlgorithm twitterCrawling;
-+	SoftwareAlgorithm expertSearch;
-+	SoftwareAlgorithm financialNetworkExtraction;
-+	SoftwareAlgorithm AlgorithmVar_25;
-+	SoftwareAlgorithm AlgorithmVar_26;
-+	SoftwareAlgorithm AlgorithmVar_27;
-+	HardwareAlgorithm AlgorithmVar_28;
-+	SoftwareAlgorithm aMapper;
-+	SoftwareAlgorithm aHayashiYoshida;
-+	SubPipelineAlgorithm correlationSW;
-+	SoftwareAlgorithm SoftwareAlgorithmVar_29;
-+	HardwareAlgorithm HardwareAlgorithmVar_30;
-+	HardwareAlgorithm HardwareAlgorithmVar_31;
-+	SubPipelineAlgorithm SubPipelineAlgorithmVar_32;
-+	SoftwareAlgorithm SoftwareAlgorithmVar_33;
-+	SoftwareAlgorithm SoftwareAlgorithmVar_34;
-+	SoftwareAlgorithm SoftwareAlgorithmVar_35;
-+	SoftwareAlgorithm SoftwareAlgorithmVar_36;
-+	SubPipelineAlgorithm SubPipelineAlgorithmVar_37;
-+	SubPipelineAlgorithm SubPipelineAlgorithmVar_38;
-+	algorithms = {
-+		refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(HWTopoCorrelationFinancial), refBy(SWTopoCorrelationTwitter), refBy(HWTopoCorrelationTwitter), refBy(topoSentiWord), refBy(topoSVM), refBy(mismatchedAlg), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(switchAlgHw), refBy(preprocessorTest), refBy(financialCorrelationTest), refBy(sentimentAnalysisTest), refBy(twitterCorrelationTest), refBy(AlgorithmVar_18), refBy(AlgorithmVar_19), refBy(AlgorithmVar_20), refBy(AlgorithmVar_21), refBy(AlgorithmVar_22), refBy(AlgorithmVar_23), refBy(AlgorithmVar_24), refBy(recommendations), refBy(eventEnrichment), refBy(keywordAnalyzer), refBy(tweetClassifier), refBy(spamRemoval), refBy(spamDetection), refBy(twitterStreamFiltering), refBy(twitterCrawling), refBy(expertSearch), refBy(financialNetworkExtraction), refBy(AlgorithmVar_25), refBy(AlgorithmVar_26), refBy(AlgorithmVar_27), refBy(GenHWTopoCorrelationFinancial), refBy(AlgorithmVar_28), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(SoftwareAlgorithmVar_29), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SubPipelineAlgorithmVar_32), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36), refBy(SubPipelineAlgorithmVar_37), refBy(SubPipelineAlgorithmVar_38)
-+	};
-+	algorithms.bindingTime = BindingTime.compile;
-+	swPreprocessor = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "Preprocessor", 
-+		input = {
-+			Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+		algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+		scalable = true, 
-+		parallelism = 14, 
-+		minParallelism = 4, 
-+		minNumtasks = 1, 
-+		name = "TopoSoftwareCorrelationFinancial", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items < 850
-+		}, 
-+		isValid = true
-+	};
-+	HWTopoCorrelationFinancial = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.hardwaresubtopology.TopoHardwareCorrelationFinancial", 
-+		algTopologyClass = "TopoHardwareCorrelationFinancial", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TopoHardwareCorrelationFinancial", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-financial-hardware:3.1-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or (family_Items * family_Items) / (2 * pipeline_Hosts) >= 20000
-+		}, 
-+		isValid = true
-+	};
-+	GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+		hwNode = refBy(cluster2), 
-+		scalable = false, 
-+		senderParallelism = 1, 
-+		receiverParallelism = 12, 
-+		name = "GenTopoHardwareCorrelationFinancial", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items >= 850
-+		}, 
-+		isValid = true
-+	};
-+	HWTopoCorrelationTwitter = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.hardwaresubtopology.TopoHardwareCorrelationTwitter", 
-+		algTopologyClass = "TopoHardwareCorrelationTwitter", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TopoHardwareCorrelationTwitter", 
-+		input = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseTwitter", 
-+				fields = {
-+					Field {
-+						name = "pairwiseCorrelationTwitter", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-twitter-hardware:3.0-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SWTopoCorrelationTwitter = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationTwitter", 
-+		algTopologyClass = "TopoSoftwareCorrelationTwitter", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TopoSoftwareCorrelationTwitter", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseTwitter", 
-+				fields = {
-+					Field {
-+						name = "pairwiseCorrelationTwitter", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-twitter-software:3.0-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	topoSentiWord = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+		algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SentimentAnaylsisSentiWordNetTopology", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 60, 
-+				name = "timeSeriesGranularity"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "sentimentClass"
-+			}, RealParameter {
-+				defaultValue = 2.5, 
-+				name = "classificationThreshold"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	topoSVM = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+		algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SentimentAnaylsisSVMTopology", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 60, 
-+				name = "timeSeriesGranularity"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "sentimentClass"
-+			}, RealParameter {
-+				defaultValue = 2.5, 
-+				name = "classificationThreshold"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	mismatchedAlg = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.impl.MismatchedAlg", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "MismatchedAlg", 
-+		input = {
-+			Tuple {
-+				name = "misString", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "misString", 
-+				fields = {
-+					Field {
-+						name = "streamID1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "quote", 
-+						type = refBy(RealType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:MismatchedAlg:0.0.1", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	randomAlg1 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+		algTopologyClass = "RandomProcessor1", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "RandomProcessor1", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 5, 
-+				name = "delay"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "flag"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items < 500
-+		}, 
-+		isValid = true
-+	};
-+	randomAlg2 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+		algTopologyClass = "RandomProcessor2", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "RandomProcessor2", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 0, 
-+				name = "delay"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "flag"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items >= 500
-+		}, 
-+		isValid = true
-+	};
-+	switchAlg1 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SwitchProcessor1", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 0, 
-+				name = "aggregationFactor"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "delay"
-+			}, BooleanParameter {
-+				defaultValue = true, 
-+				name = "flag"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items < 500
-+		}, 
-+		isValid = true
-+	};
-+	switchAlg2 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SwitchProcessor2", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 0, 
-+				name = "aggregationFactor"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "delay"
-+			}, BooleanParameter {
-+				defaultValue = true, 
-+				name = "flag"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items >= 500
-+		}, 
-+		isValid = true
-+	};
-+	switchAlgHw = HardwareAlgorithm {
-+		hwNode = refBy(cluster1), 
-+		scalable = false, 
-+		senderParallelism = 1, 
-+		receiverParallelism = 1, 
-+		name = "HardwareAlgorithmSubTopology", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 0, 
-+				name = "aggregationFactor"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "delay"
-+			}, BooleanParameter {
-+				defaultValue = true, 
-+				name = "flag"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:SwitchProcessorHardware:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	preprocessorTest = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "PreprocessorTSI", 
-+		input = {
-+			Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	financialCorrelationTest = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.FinancialCorrelationTest", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "FinancialCorrelationTest", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "pairwiseCorrelationFinancial", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:FinancialCorrelationTest:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	sentimentAnalysisTest = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.SentimentAnalysisTest", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SentimentAnalysisTest", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 60, 
-+				name = "timeSeriesGranularity"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "sentimentClass"
-+			}, RealParameter {
-+				defaultValue = 2.5, 
-+				name = "classificationThreshold"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:SentimentAnalysisTest:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	twitterCorrelationTest = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.TwitterCorrelationTest", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TwitterCorrelationTest", 
-+		input = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseTwitter", 
-+				fields = {
-+					Field {
-+						name = "pairwiseCorrelationTwitter", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:TwitterCorrelationTest:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_18 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionMovingAverageAlgorithm", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TwitterEventDetectionTopologyMovingAverage", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(ObjectType)
-+					}, Field {
-+						name = "stocks", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 1000, 
-+				name = "hardThreshold"
-+			}, RealParameter {
-+				defaultValue = 0.5, 
-+				name = "percentageThreshold"
-+			}, IntegerParameter {
-+				defaultValue = 86400, 
-+				name = "lengthOfTimeWindow"
-+			}, IntegerParameter {
-+				defaultValue = 1, 
-+				name = "frequenceOfCheckForEvent"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:EventDetectionMovingAverageAlgorithm:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_19 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.eventdetection.topology.impl.TwitterEventDetectionTopologyKleinberg", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TwitterEventDetectionTopologyKleinberg", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "symbols", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:EventDetectionKleinbergTopology:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_20 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.event.prediction.topology.impl.EventPredictionFuturedatementionsTopology", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "EventPredictionFuturedatementionsTopology", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "symbols", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:EventPredictionFuturedatementionsTopology:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_21 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.event.prediction.topology.impl.EventPredictionCalendarTopology", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "EventPredictionCalendarTopology", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "symbols", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:EventPredictionCalendarTopology:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_22 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "StockParser  ", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "stocks", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_23 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.simpleRecommendations.family.impl.SimpleRecommendationsAlgorithm", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SimpleRecommendations", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "recommendations", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:SimpleRecommendations:0.0.2-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_24 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "EventDetectionHardThreshold", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "stocks", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 1000, 
-+				name = "hardThreshold"
-+			}, RealParameter {
-+				defaultValue = 0.5, 
-+				name = "percentageThreshold"
-+			}, IntegerParameter {
-+				defaultValue = 86400, 
-+				name = "lengthOfTimeWindow"
-+			}, IntegerParameter {
-+				defaultValue = 1, 
-+				name = "frequenceOfCheckForEvent"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	recommendations = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "Recommendations", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "recommendationStream", 
-+				fields = {
-+					Field {
-+						name = "recommendations", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				defaultValue = 0.5, 
-+				name = "impactThreshold"
-+			}, RealParameter {
-+				defaultValue = 0.5, 
-+				name = "stockCooccurrenceThreshold"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	eventEnrichment = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "EventEnrichment", 
-+		description = "simply adds keywords to events", 
-+		input = {
-+			Tuple {
-+				name = "eventStream", 
-+				fields = {
-+					Field {
-+						name = "tweet", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "keywordStream", 
-+				fields = {
-+					Field {
-+						name = "keywords", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "enrichedEventsStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	keywordAnalyzer = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "KeywordAnalyzer", 
-+		description = "deduces typical keywords for a current event", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				defaultValue = 0.5, 
-+				name = "threshold"
-+			}, RealParameter {
-+				defaultValue = 0.5, 
-+				name = "decay"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	tweetClassifier = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TweetClassifier", 
-+		description = "checks if tweet belongs to a certain stock", 
-+		input = {
-+			Tuple {
-+				name = "modifiedTwitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(StatusType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "keywordStream", 
-+				fields = {
-+					Field {
-+						name = "keywords", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "modifiedTwitterStream", 
-+				fields = {
-+					Field {
-+						name = "tweet", 
-+						type = refBy(StatusType)
-+					}, Field {
-+						name = "stocks", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	spamRemoval = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SpamRemoval", 
-+		description = "Removes Spam from twitter stream", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "spamPropability", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				defaultValue = 0.5, 
-+				name = "spamThreshold"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	spamDetection = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SpamDetection", 
-+		description = "Detects spam in tweet stream", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "spamPropability", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	twitterStreamFiltering = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TwitterStreamFiltering", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(ObjectType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(ObjectType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	twitterCrawling = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TwitterCrawling", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	expertSearch = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "ExpertSearch", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(StatusType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "experts", 
-+						type = refBy(IFExpertListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType), 
-+						keyPart = false
-+					}, Field {
-+						name = "keywords", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "symbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	financialNetworkExtraction = SoftwareAlgorithm {
-+		class = "eu.qualimaster.test.algorithms.PreprocessorTSI", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "FinancialNetworkExtraction", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(StatusType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "edges", 
-+						type = refBy(IFEdgeListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.test:PreprocessorTSI:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_25 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "DynamicGraphCompilation", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "edgeStream", 
-+				fields = {
-+					Field {
-+						name = "edge", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				name = "correlationThreshold"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_26 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+		algTopologyClass = "TopoDynamicHubComputation", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TopoDynamicHubComputation", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "edgeStream", 
-+				fields = {
-+					Field {
-+						name = "edge", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "hubStream", 
-+				fields = {
-+					Field {
-+						name = "hubList", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "hubListSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_27 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.transferentropy.hardwaresubtopology.TopoHardwareTransferEntropyFinancial", 
-+		algTopologyClass = "TopoHardwareTransferEntropyFinancial", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TransferEntropy", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "pairwiseCorrelationFinancial", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:transferentropy-financial-hardware:3.0-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	AlgorithmVar_28 = HardwareAlgorithm {
-+		hwNode = refBy(cluster2), 
-+		scalable = false, 
-+		senderParallelism = 1, 
-+		receiverParallelism = 1, 
-+		name = "GenTransferEntropy", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 120, 
-+				name = "windowSize"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "windowAdvance"
-+			}, IntegerParameter {
-+				defaultValue = 32, 
-+				name = "densitySize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:GenTransferEntropy:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	aMapper = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "Mapper", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "symbolsStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "configurationStream", 
-+				fields = {
-+					Field {
-+						name = "pairKey", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "pairValue", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "resetWindowStream", 
-+				fields = {
-+					Field {
-+						name = "windowStart", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	aHayashiYoshida = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "HayashiYoshida", 
-+		input = {
-+			Tuple {
-+				name = "symbolsStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "configurationStream", 
-+				fields = {
-+					Field {
-+						name = "pairKey", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "pairValue", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "resetWindowStream", 
-+				fields = {
-+					Field {
-+						name = "windowStart", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "pairwiseCorrelationFinancial", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	correlationSW = SubPipelineAlgorithm {
-+		subPipeline = refBy(SubTopology), 
-+		name = "CorrelationSW", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items < 850
-+		}, 
-+		isValid = true
-+	};
-+	SoftwareAlgorithmVar_29 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.timegraph.TimeGraph", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SoftwareTimeGraph", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "dataStream", 
-+				fields = {
-+					Field {
-+						name = "update", 
-+						type = refBy(ObjectType)
-+					}, Field {
-+						name = "isAddition", 
-+						type = refBy(BooleanType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "snapshotQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "vertexA", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "vertexB", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "type", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "snapshotStream", 
-+				fields = {
-+					Field {
-+						name = "snapshot", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathStream", 
-+				fields = {
-+					Field {
-+						name = "path", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+		hwNode = refBy(cluster1), 
-+		scalable = false, 
-+		senderParallelism = 1, 
-+		receiverParallelism = 1, 
-+		name = "TransferEntropyHardware", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+		hwNode = refBy(cluster1), 
-+		scalable = false, 
-+		senderParallelism = 1, 
-+		receiverParallelism = 1, 
-+		name = "MutualInformationHardware", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SubPipelineAlgorithmVar_32 = SubPipelineAlgorithm {
-+		subPipeline = refBy(SubPipelineVar_11), 
-+		name = "RandomSubPipelineAlgorithm1", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "delay"
-+			}, BooleanParameter {
-+				name = "flag"
-+			}, IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TransferEntropySoftware", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 300, 
-+				name = "windowSize"
-+			}, IntegerParameter {
-+				defaultValue = 1, 
-+				name = "windowAdvance"
-+			}, IntegerParameter {
-+				defaultValue = 128, 
-+				name = "densitySize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.timegraph.TimeGraphMapper", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TimeGraphMapper", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "edgeStream", 
-+				fields = {
-+					Field {
-+						name = "edge", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "dataStream", 
-+				fields = {
-+					Field {
-+						name = "update", 
-+						type = refBy(ObjectType), 
-+						keyPart = false
-+					}, Field {
-+						name = "isAddition", 
-+						type = refBy(BooleanType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TimeGraphIndexer", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "dataStream", 
-+				fields = {
-+					Field {
-+						name = "update", 
-+						type = refBy(ObjectType), 
-+						keyPart = false
-+					}, Field {
-+						name = "isAddition", 
-+						type = refBy(BooleanType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "internalRequests", 
-+				fields = {
-+					Field {
-+						name = "internalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "unicastRequests", 
-+				fields = {
-+					Field {
-+						name = "unicastExternalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "broadcastRequests", 
-+				fields = {
-+					Field {
-+						name = "broadcastExternalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "externalResponses", 
-+				fields = {
-+					Field {
-+						name = "externalResponse", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "internalRequests", 
-+				fields = {
-+					Field {
-+						name = "internalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
-+		class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
-+		algTopologyClass = "", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "TimeGraphQueryExecutor", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "snapshotQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "vertexA", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "vertexB", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "type", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "externalResponses", 
-+				fields = {
-+					Field {
-+						name = "externalResponse", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "snapshotStream", 
-+				fields = {
-+					Field {
-+						name = "snapshot", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathStream", 
-+				fields = {
-+					Field {
-+						name = "path", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "unicastRequests", 
-+				fields = {
-+					Field {
-+						name = "unicastExternalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "broadcastRequests", 
-+				fields = {
-+					Field {
-+						name = "broadcastExternalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SubPipelineAlgorithmVar_37 = SubPipelineAlgorithm {
-+		subPipeline = refBy(SubPipelineVar_15), 
-+		name = "RandomSubPipelineAlgorithm2", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "delay"
-+			}, BooleanParameter {
-+				name = "flag"
-+			}, IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SubPipelineAlgorithmVar_38 = SubPipelineAlgorithm {
-+		subPipeline = refBy(SubPipelineVar_19), 
-+		name = "CorrelationSWAlternative", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	freeze {
-+		algorithms;
-+		swPreprocessor;
-+		SWTopoCorrelationFinancial;
-+		HWTopoCorrelationFinancial;
-+		GenHWTopoCorrelationFinancial;
-+		HWTopoCorrelationTwitter;
-+		SWTopoCorrelationTwitter;
-+		topoSentiWord;
-+		topoSVM;
-+		mismatchedAlg;
-+		randomAlg1;
-+		randomAlg2;
-+		switchAlg1;
-+		switchAlg2;
-+		switchAlgHw;
-+		preprocessorTest;
-+		financialCorrelationTest;
-+		sentimentAnalysisTest;
-+		twitterCorrelationTest;
-+		AlgorithmVar_18;
-+		AlgorithmVar_19;
-+		AlgorithmVar_20;
-+		AlgorithmVar_21;
-+		AlgorithmVar_22;
-+		AlgorithmVar_23;
-+		AlgorithmVar_24;
-+		recommendations;
-+		eventEnrichment;
-+		keywordAnalyzer;
-+		tweetClassifier;
-+		spamRemoval;
-+		spamDetection;
-+		twitterStreamFiltering;
-+		twitterCrawling;
-+		expertSearch;
-+		financialNetworkExtraction;
-+		AlgorithmVar_25;
-+		AlgorithmVar_26;
-+		AlgorithmVar_27;
-+		AlgorithmVar_28;
-+		aMapper;
-+		aHayashiYoshida;
-+		correlationSW;
-+		SoftwareAlgorithmVar_29;
-+		HardwareAlgorithmVar_30;
-+		HardwareAlgorithmVar_31;
-+		SubPipelineAlgorithmVar_32;
-+		SoftwareAlgorithmVar_33;
-+		SoftwareAlgorithmVar_34;
-+		SoftwareAlgorithmVar_35;
-+		SoftwareAlgorithmVar_36;
-+		SubPipelineAlgorithmVar_37;
-+		SubPipelineAlgorithmVar_38;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/BasicsCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/BasicsCfg.ivml
-new file mode 100644
-index 0000000..e5353ab
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/BasicsCfg.ivml
-@@ -0,0 +1,136 @@
-+project BasicsCfg {
-+
-+	import Basics;
-+	FieldType IntegerType;
-+	FieldType LongType;
-+	FieldType StringType;
-+	FieldType BooleanType;
-+	FieldType FloatType;
-+	FieldType DoubleType;
-+	FieldType RealType;
-+	FieldType ObjectType;
-+	FieldType StringListType;
-+	FieldType IFExpertListType;
-+	FieldType IFTimeIntervalType;
-+	FieldType StatusType;
-+	FieldType IFEdgeListType;
-+	FieldType IFEventListType;
-+	FieldType TimeStampType;
-+	FieldType StringTimeStampType;
-+	FieldType FieldTypeVar_16;
-+	types = {
-+		refBy(IntegerType), refBy(LongType), refBy(StringType), refBy(BooleanType), refBy(FloatType), refBy(DoubleType), refBy(RealType), refBy(ObjectType), refBy(StringListType), refBy(IFTimeIntervalType), refBy(IFExpertListType), refBy(StatusType), refBy(IFEdgeListType), refBy(IFEventListType), refBy(TimeStampType), refBy(StringTimeStampType), refBy(FieldTypeVar_16)
-+	};
-+	types.bindingTime = BindingTime.compile;
-+	IntegerType = FieldType {
-+		name = "INTEGER", 
-+		class = "int"
-+	};
-+	LongType = FieldType {
-+		name = "LONG", 
-+		class = "long"
-+	};
-+	StringType = FieldType {
-+		name = "STRING", 
-+		class = "String"
-+	};
-+	BooleanType = FieldType {
-+		name = "BOOLEAN", 
-+		class = "boolean"
-+	};
-+	FloatType = FieldType {
-+		name = "Float", 
-+		class = "float"
-+	};
-+	DoubleType = FieldType {
-+		name = "Double", 
-+		class = "double"
-+	};
-+	RealType = FieldType {
-+		name = "REAL", 
-+		class = "double"
-+	};
-+	ObjectType = FieldType {
-+		name = "OBJECT", 
-+		class = "Object"
-+	};
-+	StringListType = FieldType {
-+		name = "STRINGLIST", 
-+		class = "java.util.List<String>", 
-+		artifact = "", 
-+		serializer = "eu.qualimaster.base.serializer.StringListSerializer", 
-+		serializerArtifact = "eu.qualimaster:StormCommons:0.5.0-SNAPSHOT"
-+	};
-+	IFExpertListType = FieldType {
-+		name = "IFEXPERTLIST", 
-+		class = "java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert>", 
-+		artifact = "eu.qualimaster.families:Datatypes:0.0.1-SNAPSHOT", 
-+		serializer = "", 
-+		serializerArtifact = ""
-+	};
-+	IFTimeIntervalType = FieldType {
-+		name = "IFTIMEINTERVAL", 
-+		class = "eu.qualimaster.families.datatypes.common.IFTimeInterval", 
-+		artifact = "eu.qualimaster.families:Datatypes:0.0.1-SNAPSHOT", 
-+		serializer = "", 
-+		serializerArtifact = ""
-+	};
-+	StatusType = FieldType {
-+		name = "STATUS", 
-+		class = "twitter4j.Status", 
-+		artifact = "org.twitter4j:twitter4j-stream:4.0.1", 
-+		serializer = "", 
-+		serializerArtifact = ""
-+	};
-+	IFEdgeListType = FieldType {
-+		name = "IFEDGETYPE", 
-+		class = "java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge>", 
-+		artifact = "eu.qualimaster.families:Datatypes:0.0.1-SNAPSHOT", 
-+		serializer = "", 
-+		serializerArtifact = ""
-+	};
-+	IFEventListType = FieldType {
-+		name = "IFEVENTLISTTYPE", 
-+		class = "java.util.List<eu.qualimaster.families.datatypes.events.IFEvent>", 
-+		artifact = "eu.qualimaster.families:Datatypes:0.0.1-SNAPSHOT", 
-+		serializer = "", 
-+		serializerArtifact = ""
-+	};
-+	TimeStampType = FieldType {
-+		name = "TIMESTAMP", 
-+		class = "long",
-+		isTimestamp = true
-+	};
-+    StringTimeStampType = FieldType {
-+        name = "STRING-TIMESTAMP", // must be in format MM/dd/yyyy,HH:mm:ss 
-+        class = "String",
-+        isTimestamp = true
-+    };
-+	FieldTypeVar_16 = FieldType {
-+		name = "LABELLEDTWEET", 
-+		class = "eu.qualimaster.data.stream.source.LabelledTweet", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		serializer = "", 
-+		serializerArtifact = ""
-+	};
-+	freeze {
-+		types;
-+		IntegerType;
-+		LongType;
-+		StringType;
-+		BooleanType;
-+		FloatType;
-+		DoubleType;
-+		RealType;
-+		ObjectType;
-+		StringListType;
-+		IFExpertListType;
-+		IFTimeIntervalType;
-+		StatusType;
-+		IFEdgeListType;
-+		IFEventListType;
-+		TimeStampType;
-+		StringTimeStampType;
-+		FieldTypeVar_16;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/CloudResourceCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/CloudResourceCfg.ivml
-new file mode 100644
-index 0000000..daf1466
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/CloudResourceCfg.ivml
-@@ -0,0 +1,32 @@
-+project CloudResourceCfg {
-+	
-+	import CloudResources;	
-+	
-+	PublicCloudEnvironment AWS;
-+	
-+	AWS =  {
-+		maxMemory = 100000,
-+		maxProcessors = 100.0,
-+		maxWorkingStorage = 160000,
-+		name = "AWS",
-+		amiID = "ami-51dbde38",
-+		pathToKeyFile = "AwsVM"
-+	};
-+	
-+	PrivateCloudEnvironment ON;
-+	
-+	ON = {
-+		name = "OpenNebula",
-+		maxMemory = 800000,
-+		maxProcessors = 1.0,
-+		maxWorkingStorage = 160000
-+	};
-+	
-+	cloudEnvironments = {refBy(ON), refBy(AWS)};
-+	
-+	freeze{
-+		ON;
-+		AWS;
-+		cloudEnvironments;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/DataManagementCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/DataManagementCfg.ivml
-new file mode 100644
-index 0000000..826e3ac
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/DataManagementCfg.ivml
-@@ -0,0 +1,744 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+	DataSource spring;
-+	DataSource twitter;
-+	DataSource randomSource;
-+	DataSink priorSnk;
-+	DataSink randomSink;
-+	PersistentDataElement hBaseDataManagement;
-+	DataSource DataSourceVar_4;
-+	DataSource DataSourceVar_5;
-+	DataSink DataSinkVar_2;
-+	DataSink DataSinkVar_3;
-+	DataSink DataSinkVar_4;
-+	DataSource DataSourceVar_6;
-+	DataSource DataSourceVar_7;
-+	DataSource DataSourceVar_8;
-+	DataSink DataSinkVar_5;
-+	DataSource DataSourceVar_9;
-+	DataSink DataSinkVar_6;
-+	DataSource DataSourceVar_10;
-+	DataSource DataSourceVar_11;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_4), refBy(DataSourceVar_5), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_8), refBy(DataSourceVar_9), refBy(DataSourceVar_10), refBy(DataSourceVar_11)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_4), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	randomSource = DataSource {
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 0, 
-+				name = "delay"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Random Source", 
-+		description = "", 
-+		artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+		storageLocation = "random", 
-+		strategy = DataManagementStrategy.None
-+	};
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	randomSink = DataSink {
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = true
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+		isValid = true, 
-+		name = "Random Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+		storageLocation = "random", 
-+		strategy = DataManagementStrategy.None
-+	};
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+	DataSourceVar_4 = DataSource {
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(StatusType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = true, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "NewTwitterStreamDataSource", 
-+		description = "", 
-+		artifact = "eu.qualimaster:NewTwitterStreamDataSource:0.0.1-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	DataSourceVar_5 = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "resetWindow", 
-+				fields = {
-+					Field {
-+						name = "windowStart", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "windowEnd", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.WindowedSpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Windowed Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:windowed-spring-client:3.0-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	DataSinkVar_2 = DataSink {
-+		output = {
-+			Tuple {
-+				name = "hubStream", 
-+				fields = {
-+					Field {
-+						name = "hubList", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+		isValid = true, 
-+		name = "DynamicGraphSink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	DataSinkVar_3 = DataSink {
-+		output = {
-+			Tuple {
-+				name = "recommendationStream", 
-+				fields = {
-+					Field {
-+						name = "recommendations", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "edgeStream", 
-+				fields = {
-+					Field {
-+						name = "edge", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+		isValid = true, 
-+		name = "FocusSink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	DataSinkVar_4 = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.MIDataSinkForFinancial", 
-+		isValid = true, 
-+		name = "MI_data_Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:mi-data-sink:1.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	DataSourceVar_6 = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "playerList"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "FocusFincancialData", 
-+		description = "", 
-+		artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	DataSourceVar_7 = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				defaultValue = 1.0, 
-+				name = "speedFactor"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "SimulatedFinancialData", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	DataSourceVar_8 = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				defaultValue = 1.0, 
-+				name = "speedFactor"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "playerList"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.focus.FocusedSpringClientSimulator", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "SimulatedFocusFinancialData", 
-+		description = "", 
-+		artifact = "eu.qualimaster:focused-spring-client-simulator:0.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	DataSinkVar_5 = DataSink {
-+		output = {
-+			Tuple {
-+				name = "snapshotStream", 
-+				fields = {
-+					Field {
-+						name = "snapshot", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathStream", 
-+				fields = {
-+					Field {
-+						name = "path", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
-+		isValid = true, 
-+		name = "TimeTravelSink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	DataSourceVar_9 = DataSource {
-+		input = {
-+			Tuple {
-+				name = "snapshotQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "vertexA", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "vertexB", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "type", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				name = "snapshotQuery"
-+			}, StringParameter {
-+				name = "pathQuery"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "TimeGraphQueriesSource", 
-+		description = "", 
-+		artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+		storageLocation = "input/query", 
-+		strategy = DataManagementStrategy.None
-+	};
-+	DataSinkVar_6 = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
-+		isValid = true, 
-+		name = "TransferSink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	DataSourceVar_10 = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithm.FixRateFinancialDataSource", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "FixedRateSimulatedFinancialData", 
-+		description = "", 
-+		artifact = "eu.qualimaster:DataSourceSimulator:0.0.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed
-+	};
-+	DataSourceVar_11 = DataSource {
-+		input = {
-+			Tuple {
-+				name = "edgeStream", 
-+				fields = {
-+					Field {
-+						name = "edge", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "SimulatedGraphData", 
-+		description = "", 
-+		artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+		storageLocation = "input/simulatedGraphData", 
-+		strategy = DataManagementStrategy.None
-+	};
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+		randomSource;
-+		priorSnk;
-+		randomSink;
-+		hBaseDataManagement;
-+		DataSourceVar_4;
-+		DataSourceVar_5;
-+		DataSinkVar_2;
-+		DataSinkVar_3;
-+		DataSinkVar_4;
-+		DataSourceVar_6;
-+		DataSourceVar_7;
-+		DataSourceVar_8;
-+		DataSinkVar_5;
-+		DataSourceVar_9;
-+		DataSinkVar_6;
-+		DataSourceVar_10;
-+		DataSourceVar_11;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/FamiliesCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/FamiliesCfg.ivml
-new file mode 100644
-index 0000000..cbb50eb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/FamiliesCfg.ivml
-@@ -0,0 +1,1545 @@
-+project FamiliesCfg {
-+
-+	import ReconfigurableHardware;
-+	import Families;
-+	import AlgorithmsCfg;
-+	import BasicsCfg;
-+	Family fPreprocessor;
-+	Family fCorrelationFinancial;
-+	Family fSentimentAnalysis;
-+	Family fCorrelationTwitter;
-+	Family fMismatchedFamily;
-+	Family randomFamily;
-+	Family switchFamily;
-+	Family fExpertSearch;
-+	Family fFinancialNetworkExtraction;
-+	Family fTwitterCrawling;
-+	Family fTwitterEventDetection;
-+	Family fTwitterEventPrediction;
-+	Family fTwitterStreamFiltering;
-+	Family FamilyVar_14;
-+	Family FamilyVar_15;
-+	Family FamilyVar_16;
-+	Family FamilyVar_17;
-+	Family FamilyVar_18;
-+	Family FamilyVar_19;
-+	Family FamilyVar_20;
-+	Family FamilyVar_21;
-+	Family FamilyVar_22;
-+	Family FamilyVar_23;
-+	Family FamilyVar_24;
-+	Family fMapper;
-+	Family fHayashiYoshida;
-+	Family FamilyVar_25;
-+	Family FamilyVar_26;
-+	Family FamilyVar_27;
-+	Family FamilyVar_28;
-+	families = {
-+		refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(fCorrelationTwitter), refBy(fMismatchedFamily), refBy(randomFamily), refBy(switchFamily), refBy(fExpertSearch), refBy(fFinancialNetworkExtraction), refBy(fTwitterCrawling), refBy(fTwitterEventDetection), refBy(fTwitterEventPrediction), refBy(fTwitterStreamFiltering), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_16), refBy(FamilyVar_17), refBy(FamilyVar_18), refBy(FamilyVar_19), refBy(FamilyVar_20), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(fMapper), refBy(fHayashiYoshida), refBy(FamilyVar_25), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
-+	};
-+	families.bindingTime = BindingTime.compile;
-+	fPreprocessor = Family {
-+		name = "fPreprocessor", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(swPreprocessor)
-+		}
-+	};
-+	fCorrelationFinancial = Family {
-+		name = "fCorrelationFinancial", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		members = {
-+			//refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+			refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SubPipelineAlgorithmVar_38)
-+		}
-+	};
-+	fSentimentAnalysis = Family {
-+		name = "fSentimentAnalysis", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}, IntegerParameter {
-+				name = "sentimentClass"
-+			}, RealParameter {
-+				name = "classificationThreshold"
-+			}
-+		}, 
-+		members = {
-+			refBy(topoSentiWord), refBy(topoSVM)
-+		}
-+	};
-+	fCorrelationTwitter = Family {
-+		name = "fCorrelationTwitter", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseTwitter", 
-+				fields = {
-+					Field {
-+						name = "pairwiseCorrelationTwitter", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		members = {
-+			refBy(SWTopoCorrelationTwitter), refBy(HWTopoCorrelationTwitter)
-+		}
-+	};
-+	fMismatchedFamily = Family {
-+		name = "fMismatchedFamily", 
-+		input = {
-+			Tuple {
-+				name = "misString", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "misString", 
-+				fields = {
-+					Field {
-+						name = "streamID1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "quote", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(mismatchedAlg)
-+		}
-+	};
-+	randomFamily = Family {
-+		name = "randomFamily", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "delay"
-+			}, BooleanParameter {
-+				name = "flag"
-+			}, IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		members = {
-+			refBy(randomAlg1), refBy(randomAlg2)
-+		}
-+	};
-+	switchFamily = Family {
-+		name = "switchFamily", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(TimeStampType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "aggregationFactor"
-+			}, IntegerParameter {
-+				name = "delay"
-+			}, BooleanParameter {
-+				name = "flag"
-+			}, IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		members = {
-+			refBy(switchAlg1), refBy(switchAlg2)
-+		}
-+	};
-+	fExpertSearch = Family {
-+		name = "fExpertSearch", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(StatusType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "experts", 
-+						type = refBy(IFExpertListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType), 
-+						keyPart = false
-+					}, Field {
-+						name = "keywords", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "symbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		members = {
-+			refBy(expertSearch)
-+		}
-+	};
-+	fFinancialNetworkExtraction = Family {
-+		name = "fFinancialNetworkExtraction", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(StatusType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "edges", 
-+						type = refBy(IFEdgeListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		members = {
-+			refBy(financialNetworkExtraction)
-+		}
-+	};
-+	fTwitterCrawling = Family {
-+		name = "fTwitterCrawling", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		members = {
-+			refBy(twitterCrawling)
-+		}
-+	};
-+	fTwitterEventDetection = Family {
-+		name = "fTwitterEventDetection", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16), 
-+						keyPart = false
-+					}, Field {
-+						name = "stocks", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 1000, 
-+				name = "hardThreshold"
-+			}, RealParameter {
-+				defaultValue = 0.5, 
-+				name = "percentageThreshold"
-+			}, IntegerParameter {
-+				defaultValue = 86400, 
-+				name = "lengthOfTimeWindow"
-+			}, IntegerParameter {
-+				defaultValue = 1, 
-+				name = "frequenceOfCheckForEvent"
-+			}
-+		}, 
-+		members = {
-+			refBy(AlgorithmVar_24)
-+		}
-+	};
-+	fTwitterEventPrediction = Family {
-+		name = "fTwitterEventPrediction", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "symbols", 
-+						type = refBy(IFEventListType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timeInterval", 
-+						type = refBy(IFTimeIntervalType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}
-+		}, 
-+		members = {
-+			refBy(AlgorithmVar_20), refBy(AlgorithmVar_21)
-+		}
-+	};
-+	fTwitterStreamFiltering = Family {
-+		name = "fTwitterStreamFiltering", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(ObjectType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analysis", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(ObjectType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(twitterStreamFiltering)
-+		}
-+	};
-+	FamilyVar_14 = Family {
-+		name = "fSpamDetection", 
-+		description = "Detects spam in tweet stream", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "spamPropability", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(spamDetection)
-+		}
-+	};
-+	FamilyVar_15 = Family {
-+		name = "fSpamRemoval", 
-+		description = "Removes Spam from twitter stream", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "spamPropability", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				defaultValue = 0.5, 
-+				name = "spamThreshold"
-+			}
-+		}, 
-+		members = {
-+			refBy(spamRemoval)
-+		}
-+	};
-+	FamilyVar_16 = Family {
-+		name = "fTweetClassifier", 
-+		description = "checks if tweet belongs to a certain stock", 
-+		input = {
-+			Tuple {
-+				name = "modifiedTwitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(StatusType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "keywordStream", 
-+				fields = {
-+					Field {
-+						name = "keywords", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "modifiedTwitterStream", 
-+				fields = {
-+					Field {
-+						name = "tweet", 
-+						type = refBy(StatusType)
-+					}, Field {
-+						name = "stocks", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(tweetClassifier)
-+		}
-+	};
-+	FamilyVar_17 = Family {
-+		name = "fKeywordAnalyzer", 
-+		description = "deduces typical keywords for a current event", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				defaultValue = 0.5, 
-+				name = "threshold"
-+			}, RealParameter {
-+				defaultValue = 0.5, 
-+				name = "decay"
-+			}
-+		}, 
-+		members = {
-+			refBy(keywordAnalyzer)
-+		}
-+	};
-+	FamilyVar_18 = Family {
-+		name = "fEventEnrichment", 
-+		description = "simply adds keywords to events", 
-+		input = {
-+			Tuple {
-+				name = "eventStream", 
-+				fields = {
-+					Field {
-+						name = "tweet", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "keywordStream", 
-+				fields = {
-+					Field {
-+						name = "keywords", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "enrichedEventsStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(eventEnrichment)
-+		}
-+	};
-+	FamilyVar_19 = Family {
-+		name = "fRecommendations", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "recommendationStream", 
-+				fields = {
-+					Field {
-+						name = "recommendations", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				defaultValue = 0.5, 
-+				name = "impactThreshold"
-+			}, RealParameter {
-+				defaultValue = 0.5, 
-+				name = "stockCooccurrenceThreshold"
-+			}
-+		}, 
-+		members = {
-+			refBy(recommendations)
-+		}
-+	};
-+	FamilyVar_20 = Family {
-+		name = "fSimpleRecommendations", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "events", 
-+						type = refBy(IFEventListType)
-+					}, Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "recommendations", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(AlgorithmVar_23)
-+		}
-+	};
-+	FamilyVar_21 = Family {
-+		name = "fStockParser", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}, Field {
-+						name = "stocks", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(AlgorithmVar_22)
-+		}
-+	};
-+	FamilyVar_22 = Family {
-+		name = "fDynamicGraphCompilation", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "edgeStream", 
-+				fields = {
-+					Field {
-+						name = "edge", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			RealParameter {
-+				name = "correlationThreshold"
-+			}
-+		}, 
-+		members = {
-+			refBy(AlgorithmVar_25)
-+		}
-+	};
-+	FamilyVar_23 = Family {
-+		name = "fDynamicHubComputation", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "edgeStream", 
-+				fields = {
-+					Field {
-+						name = "edge", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "hubStream", 
-+				fields = {
-+					Field {
-+						name = "hubList", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "hubListSize"
-+			}
-+		}, 
-+		members = {
-+			refBy(AlgorithmVar_26)
-+		}
-+	};
-+	FamilyVar_24 = Family {
-+		name = "fTransferEntropy", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 300, 
-+				name = "windowSize"
-+			}, IntegerParameter {
-+				defaultValue = 1, 
-+				name = "windowAdvance"
-+			}, IntegerParameter {
-+				defaultValue = 128, 
-+				name = "densitySize"
-+			}
-+		}, 
-+		members = {
-+			refBy(SoftwareAlgorithmVar_33)
-+		}
-+	};
-+	fMapper = Family {
-+		name = "fMapper", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "symbolsStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "configurationStream", 
-+				fields = {
-+					Field {
-+						name = "pairKey", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "pairValue", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "resetWindowStream", 
-+				fields = {
-+					Field {
-+						name = "windowStart", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		members = {
-+			refBy(aMapper)
-+		}
-+	};
-+	fHayashiYoshida = Family {
-+		name = "fHayashiYoshida", 
-+		input = {
-+			Tuple {
-+				name = "symbolsStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "configurationStream", 
-+				fields = {
-+					Field {
-+						name = "pairKey", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "pairValue", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "resetWindowStream", 
-+				fields = {
-+					Field {
-+						name = "windowStart", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "pairwiseCorrelationFinancial", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(aHayashiYoshida)
-+		}
-+	};
-+	FamilyVar_25 = Family {
-+		name = "fTimeGraph", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "dataStream", 
-+				fields = {
-+					Field {
-+						name = "update", 
-+						type = refBy(ObjectType)
-+					}, Field {
-+						name = "isAddition", 
-+						type = refBy(BooleanType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "snapshotQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "vertexA", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "vertexB", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "type", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "snapshotStream", 
-+				fields = {
-+					Field {
-+						name = "snapshot", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathStream", 
-+				fields = {
-+					Field {
-+						name = "path", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(SoftwareAlgorithmVar_29)
-+		}
-+	};
-+	FamilyVar_26 = Family {
-+		name = "fTimeGraphMapper", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "edgeStream", 
-+				fields = {
-+					Field {
-+						name = "edge", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "dataStream", 
-+				fields = {
-+					Field {
-+						name = "update", 
-+						type = refBy(ObjectType), 
-+						keyPart = false
-+					}, Field {
-+						name = "isAddition", 
-+						type = refBy(BooleanType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(SoftwareAlgorithmVar_34)
-+		}
-+	};
-+	FamilyVar_27 = Family {
-+		name = "fTimeGraphIndexer", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "dataStream", 
-+				fields = {
-+					Field {
-+						name = "update", 
-+						type = refBy(ObjectType), 
-+						keyPart = false
-+					}, Field {
-+						name = "isAddition", 
-+						type = refBy(BooleanType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "internalRequests", 
-+				fields = {
-+					Field {
-+						name = "internalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "unicastRequests", 
-+				fields = {
-+					Field {
-+						name = "unicastExternalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "broadcastRequests", 
-+				fields = {
-+					Field {
-+						name = "broadcastExternalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "externalResponses", 
-+				fields = {
-+					Field {
-+						name = "externalResponse", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "internalRequests", 
-+				fields = {
-+					Field {
-+						name = "internalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(SoftwareAlgorithmVar_35)
-+		}
-+	};
-+	FamilyVar_28 = Family {
-+		name = "fTimeGraphQueryExecutor", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "snapshotQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathQueryStream", 
-+				fields = {
-+					Field {
-+						name = "start", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "end", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "vertexA", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "vertexB", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "type", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "externalResponses", 
-+				fields = {
-+					Field {
-+						name = "externalResponse", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "snapshotStream", 
-+				fields = {
-+					Field {
-+						name = "snapshot", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "pathStream", 
-+				fields = {
-+					Field {
-+						name = "path", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "unicastRequests", 
-+				fields = {
-+					Field {
-+						name = "unicastExternalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "broadcastRequests", 
-+				fields = {
-+					Field {
-+						name = "broadcastExternalRequest", 
-+						type = refBy(ObjectType)
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(SoftwareAlgorithmVar_36)
-+		}
-+	};
-+	freeze {
-+		families;
-+		fPreprocessor;
-+		fCorrelationFinancial;
-+		fSentimentAnalysis;
-+		fCorrelationTwitter;
-+		fMismatchedFamily;
-+		randomFamily;
-+		switchFamily;
-+		fExpertSearch;
-+		fFinancialNetworkExtraction;
-+		fTwitterCrawling;
-+		fTwitterEventDetection;
-+		fTwitterEventPrediction;
-+		fTwitterStreamFiltering;
-+		FamilyVar_14;
-+		FamilyVar_15;
-+		FamilyVar_16;
-+		FamilyVar_17;
-+		FamilyVar_18;
-+		FamilyVar_19;
-+		FamilyVar_20;
-+		FamilyVar_21;
-+		FamilyVar_22;
-+		FamilyVar_23;
-+		FamilyVar_24;
-+		fMapper;
-+		fHayashiYoshida;
-+		FamilyVar_25;
-+		FamilyVar_26;
-+		FamilyVar_27;
-+		FamilyVar_28;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/HardwareCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/HardwareCfg.ivml
-new file mode 100644
-index 0000000..8d9c06f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/HardwareCfg.ivml
-@@ -0,0 +1,709 @@
-+project HardwareCfg {
-+
-+	import Hardware;
-+	Machine machine1;
-+	Machine machine2;
-+	Machine machine3;
-+	Machine machine4;
-+	Machine machine5;
-+	Machine machine6;
-+	Machine machine7;
-+	Machine machine8;
-+	Machine machine9;
-+	Machine machine10;
-+	Machine machine11;
-+	Machine machine12;
-+	Machine machine13;
-+	Machine machine14;
-+	Machine machine15;
-+	Machine machine16;
-+	Machine machine17;
-+	Machine machine18;
-+	Machine machine19;
-+	Machine machine20;
-+	Machine machine21;
-+	Machine machine22;
-+	Machine machine23;
-+	Machine machine24;
-+	Machine machine25;
-+	Machine machine26;
-+	Machine machine27;
-+	Machine machine28;
-+	Machine machine29;
-+	Machine machine30;
-+	Machine machine31;
-+	Machine machine32;
-+	Machine machine33;
-+	Machine machine34;
-+	Machine machine35;
-+	Machine machine36;
-+	Machine machine37;
-+	Machine machine38;
-+	Machine machine39;
-+	Machine machine40;
-+	Machine machine41;
-+	Machine machine42;
-+	Machine machine43;
-+	Machine machine44;
-+	Machine machine45;
-+	Machine machine46;
-+	Machine machine47;
-+	Machine machine48;
-+	Machine machine49;
-+	Machine machine50;
-+    Machine machine51;
-+    Machine machine52;
-+    Machine machine53;
-+    Machine machine54;
-+	machines = {
-+		refBy(machine1), refBy(machine2), refBy(machine3), refBy(machine4), refBy(machine5), refBy(machine6), refBy(machine7), refBy(machine8), refBy(machine9), refBy(machine10), refBy(machine11), refBy(machine12), refBy(machine13), refBy(machine14), refBy(machine15), refBy(machine16), refBy(machine17), refBy(machine18), refBy(machine19), refBy(machine20), refBy(machine21), refBy(machine22), refBy(machine23), refBy(machine24), refBy(machine25), refBy(machine26), refBy(machine27), refBy(machine28), refBy(machine29), refBy(machine30), refBy(machine31), refBy(machine32), refBy(machine33), refBy(machine34), refBy(machine35), refBy(machine36), refBy(machine37), refBy(machine38), refBy(machine39), refBy(machine40), refBy(machine41), refBy(machine42), refBy(machine43), refBy(machine44), refBy(machine45), refBy(machine46), refBy(machine47), refBy(machine48), refBy(machine49), refBy(machine50), refBy(machine51), refBy(machine52), refBy(machine53), refBy(machine54)
-+	};
-+	machines.bindingTime = BindingTime.compile;
-+	usedMachines.bindingTime = BindingTime.runtimeMon;
-+	availableMachines.bindingTime = BindingTime.runtimeMon;
-+	machine1 = Machine {
-+		name = "snf-618466.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {}, 
-+		role = MachineRole.Manager
-+	};
-+	machine2 = Machine {
-+		name = "snf-618463.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine3 = Machine {
-+		name = "snf-618464.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine4 = Machine {
-+		name = "snf-618465.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine5 = Machine {
-+		name = "snf-625826.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine6 = Machine {
-+		name = "snf-625827.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine7 = Machine {
-+		name = "snf-625828.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine8 = Machine {
-+		name = "snf-625829.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine9 = Machine {
-+		name = "snf-626254.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine10 = Machine {
-+		name = "snf-618454.vm.okeanos.grnet.gr", 
-+		memory = 8178512, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2100, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine11 = Machine {
-+		name = "nimbus1.ssecluster.local", 
-+		memory = 7918000, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 1860, 
-+		ports = {}, 
-+		role = MachineRole.Manager
-+	};
-+	machine12 = Machine {
-+		name = "host4.ssecluster.local", 
-+		memory = 7919000, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 1860, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine13 = Machine {
-+		name = "host-11.ssecluster.local", 
-+		memory = 7984000, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 2200, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine14 = Machine {
-+		name = "server1.ssecluster.local", 
-+		memory = 5902000, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 1860, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine15 = Machine {
-+		name = "host-16.ssecluster.local", 
-+		memory = 7910000, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 1862, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine16 = Machine {
-+		name = "host-12.ssecluster.local", 
-+		memory = 7910000, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 1862, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine17 = Machine {
-+		name = "host-10.ssecluster.local", 
-+		memory = 7910000, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 1862, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine18 = Machine {
-+		name = "host-13.ssecluster.local", 
-+		memory = 7910000, 
-+		processors = 2, 
-+		executors = 4, 
-+		frequency = 1862, 
-+		ports = {
-+			6700, 6701, 6702, 6703
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine19 = Machine {
-+		name = "clu01.softnet.tuc.gr", 
-+		memory = 32900100, 
-+		processors = 12, 
-+		executors = 0, 
-+		frequency = 2500, 
-+		ports = {}, 
-+		role = MachineRole.Manager
-+	};
-+	machine20 = Machine {
-+		name = "clu02.softnet.tuc.gr", 
-+		memory = 32900100, 
-+		processors = 8, 
-+		executors = 20, 
-+		frequency = 2500, 
-+		ports = {
-+			6700, 6701, 6702, 6703, 6704
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine21 = Machine {
-+		name = "clu03.softnet.tuc.gr", 
-+		memory = 32900100, 
-+		processors = 8, 
-+		executors = 20, 
-+		frequency = 2500, 
-+		ports = {
-+			6700, 6701, 6702, 6703, 6704
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine22 = Machine {
-+		name = "clu04.softnet.tuc.gr", 
-+		memory = 32900100, 
-+		processors = 8, 
-+		executors = 20, 
-+		frequency = 2500, 
-+		ports = {
-+			6700, 6701, 6702, 6703, 6704
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine23 = Machine {
-+		name = "clu05.softnet.tuc.gr", 
-+		memory = 16423240, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700, 6701
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine24 = Machine {
-+		name = "clu06.softnet.tuc.gr", 
-+		memory = 16423240, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700, 6701
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine25 = Machine {
-+		name = "clu07.softnet.tuc.gr", 
-+		memory = 16423240, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700, 6701
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine26 = Machine {
-+		name = "clu08.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine27 = Machine {
-+		name = "clu09.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine28 = Machine {
-+		name = "clu10.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine29 = Machine {
-+		name = "clu14.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine30 = Machine {
-+		name = "clu16.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine31 = Machine {
-+		name = "clu17.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine32 = Machine {
-+		name = "clu18.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine33 = Machine {
-+		name = "clu19.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine34 = Machine {
-+		name = "clu20.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine35 = Machine {
-+		name = "clu24.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine36 = Machine {
-+		name = "clu25.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine37 = Machine {
-+		name = "clu26.softnet.tuc.gr", 
-+		memory = 8165740, 
-+		processors = 8, 
-+		executors = 8, 
-+		frequency = 2500, 
-+		ports = {
-+			6700
-+		}, 
-+		role = MachineRole.Worker
-+	};
-+	machine38 = Machine {
-+        name = "node09.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine39 = Machine {
-+        name = "node10.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine40 = Machine {
-+        name = "node11.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine41 = Machine {
-+        name = "node12.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine42 = Machine {
-+        name = "node13.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine43 = Machine {
-+        name = "node14.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine44 = Machine {
-+        name = "node15.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine45 = Machine {
-+        name = "node16.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine46 = Machine {
-+        name = "node17.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine47 = Machine {
-+        name = "node18.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine48 = Machine {
-+        name = "node19.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine49 = Machine {
-+        name = "node20.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine50 = Machine {
-+        name = "node21.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine51 = Machine {
-+        name = "node22.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine52 = Machine {
-+        name = "node23.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine53 = Machine {
-+        name = "node24.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+    machine54 = Machine {
-+        name = "node25.ib", 
-+        memory = 134217728, 
-+        processors = 12, 
-+        executors = 12, 
-+        frequency = 2100, 
-+        ports = {
-+            6700, 6701, 6702, 6703, 6704, 6705, 6706, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715
-+        }, 
-+        role = MachineRole.Worker
-+    };
-+	freeze {
-+		machines;
-+		machine1;
-+		machine2;
-+		machine3;
-+		machine4;
-+		machine5;
-+		machine6;
-+		machine7;
-+		machine8;
-+		machine9;
-+		machine10;
-+		machine11;
-+		machine12;
-+		machine13;
-+		machine14;
-+		machine15;
-+		machine16;
-+		machine17;
-+		machine18;
-+		machine19;
-+		machine20;
-+		machine21;
-+		machine22;
-+		machine23;
-+		machine24;
-+		machine25;
-+		machine26;
-+		machine27;
-+		machine28;
-+		machine29;
-+		machine30;
-+		machine31;
-+		machine32;
-+		machine33;
-+		machine34;
-+		machine35;
-+		machine36;
-+		machine37;
-+        machine38;
-+        machine39;
-+        machine40;
-+        machine41;
-+        machine42;
-+        machine43;
-+        machine44;
-+        machine45;
-+        machine46;
-+        machine47;
-+        machine48;
-+        machine49;
-+        machine50;
-+        machine51;
-+        machine52;
-+        machine53;
-+        machine54;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/InfrastructureCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/InfrastructureCfg.ivml
-new file mode 100644
-index 0000000..dbd7090
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/InfrastructureCfg.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10)/*, refBy(PipelineVar_12)*/, refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17), refBy(PipelineVar_18)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/ReconfigurableHardwareCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/ReconfigurableHardwareCfg.ivml
-new file mode 100644
-index 0000000..a8e4150
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/infrastructure/ReconfigurableHardwareCfg.ivml
-@@ -0,0 +1,35 @@
-+project ReconfigurableHardwareCfg {
-+
-+    import ReconfigurableHardware;	
-+
-+    MPCCNode cluster1;
-+    MPCCNode cluster2;
-+    cluster1 = MPCCNode {
-+        name = "olynthos1",
-+        host = "147.27.39.12",
-+        monitoringPort = 2402,
-+        commandSendingPort = 2400,
-+        commandReceivingPort = 2401,
-+		numCPUs = 12,
-+		numDFEs = 4
-+	};
-+	
-+	cluster2 = MPCCNode {
-+        name = "olynthos2",
-+        host = "147.27.39.13",
-+        monitoringPort = 2402,
-+        commandSendingPort = 2400,
-+        commandReceivingPort = 2401,
-+		numCPUs = 12,
-+		numDFEs = 4
-+	};
-+
-+	clusters = {refBy(cluster1), refBy(cluster2)};
-+		 
-+	freeze {
-+		cluster1;
-+		cluster2;
-+		clusters; 
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/interfacesPom.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/interfacesPom.vtl
-new file mode 100644
-index 0000000..d84ef0f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/interfacesPom.vtl
-@@ -0,0 +1,168 @@
-+import commonPomMethods;
-+@advice(QM)
-+template interfacesPom(Configuration config, FileArtifact target, String interfaceArtifact, setOf(FieldType) types) {
-+	
-+	mapOf(String, String) artifactsMap = {};//collect the artifacts that are included as dependencies.
-+	
-+	def appendRepositories(Text text) {
-+		text.append("    <repository>\n      <id>qm.eu</id>\n      <name>qm.eu</name>\n      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>\n    </repository>\n");
-+	}
-+	
-+	def appendResources(Text text) {
-+		text.append("        <resource>
-+            <directory>"+"$"+"{basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>protobuf/*.proto</include>
-+            </includes>
-+        </resource>\n");        
-+	}
-+	
-+	def appendPlugins(Text text) {		
-+            text.append("            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>\n");	
-+            text.append("            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>\n");
-+//            text.append("            <plugin>
-+//                <groupId>org.apache.maven.plugins</groupId>
-+//                <artifactId>maven-jar-plugin</artifactId>
-+//                <version>2.4</version>
-+//                <configuration>
-+//                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+//                </configuration>
-+//            </plugin>\n");  
-+            text.append("            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-source-plugin</artifactId>
-+				<version>2.2.1</version>
-+				<executions>
-+					<execution>
-+						<id>attach-sources</id>
-+						<phase>verify</phase>
-+						<goals>
-+							<goal>jar</goal>
-+						</goals>
-+					</execution>
-+				</executions>
-+			</plugin>\n"); 
-+			text.append("            <plugin>
-+    			<groupId>com.github.os72</groupId>
-+    			<artifactId>protoc-jar-maven-plugin</artifactId>
-+    			<version>3.0.0-a3</version>
-+    			<executions>
-+        			<execution>
-+            			<phase>generate-sources</phase>
-+			            <goals>
-+			                <goal>run</goal>
-+			            </goals>
-+			            <configuration>
-+			                <protocVersion>2.6.1</protocVersion> <!-- 2.4.1, 2.5.0, 2.6.1, 3.0.0 -->
-+			                <includeDirectories>
-+			                    <include>"+"$"+"{basedir}/protobuf</include>
-+			                </includeDirectories>
-+			                <inputDirectories>
-+			                    <include>"+"$"+"{basedir}/protobuf</include>
-+			                </inputDirectories>
-+			            </configuration>
-+			        </execution>
-+			    </executions>
-+			</plugin>\n");       	
-+	}
-+
-+	def appendDependencies(Text text) {
-+		
-+   text.append("   <dependency>
-+     <groupId>org.apache.storm</groupId>
-+     <artifactId>storm-core</artifactId>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>com.esotericsoftware.kryo</groupId>
-+     <artifactId>kryo</artifactId>
-+   </dependency>\n");
-+   text.append("    <dependency>
-+    <groupId>com.google.protobuf</groupId>
-+    <artifactId>protobuf-java</artifactId>
-+    <version>2.6.1</version>
-+</dependency>\n");
-+   		text.append("   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>\n");
-+   		artifactsMap.add("eu.qualimaster:StormCommons", "eu.qualimaster:StormCommons:0.0.5-SNAPSHOT");
-+   		text.append("   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>\n"); 
-+   		artifactsMap.add("eu.qualimaster:QualiMaster.Events", "eu.qualimaster:QualiMaster.Events:0.0.5-SNAPSHOT");
-+   text.append("   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>\n"); 
-+     artifactsMap.add("eu.qualimaster:DataManagementLayer", "eu.qualimaster:DataManagementLayer:0.0.5-SNAPSHOT");		
-+	}
-+	
-+	def appendTypeDependencies(Text text, setOf(FieldType) types) {
-+		for(FieldType type : types) {
-+			String artifact = type.artifact;
-+			sequenceOf(String) artList = artifact.split(":");
-+			if(artList.size() == 3) {
-+				String artKey = artList[0]+":"+artList[1];
-+				if(artifact.length()>0 and !artifactsMap.containsKey(artKey)) {							
-+					text.append("    <dependency>\n");
-+				    text.append("        <groupId>${artList[0]}</groupId>\n");
-+					text.append("        <artifactId>${artList[1]}</artifactId>\n");
-+					text.append("        <version>${artList[2]}</version>\n");	
-+					text.append("    </dependency>\n");
-+					artifactsMap.add(artKey, artifact);
-+				}	
-+			}		
-+		}
-+	}
-+	
-+	def main(Configuration config, FileArtifact target, String interfaceArtifact, setOf(FieldType) types) {
-+		Text text = target.getText();
-+		text.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n");		
-+		text.append("  <modelVersion>4.0.0</modelVersion>\n");
-+		sequenceOf(String) artList = interfaceArtifact.split(":");
-+		if(artList.size() == 3) {
-+		    text.append("  <groupId>${artList[0]}</groupId>\n");
-+			text.append("  <artifactId>${artList[1]}</artifactId>\n");
-+			text.append("  <version>${artList[2]}</version>\n");	
-+		}		
-+		text.append("  <packaging>jar</packaging>\n");
-+		text.append("\n");
-+		text.append("  <build>\n");
-+		text.append("    <sourceDirectory>"+"$"+"{basedir}/</sourceDirectory>\n");
-+		text.append("    <plugins>\n");
-+		appendPlugins(text);
-+		text.append("    </plugins>\n");
-+		text.append("    <resources>\n");
-+		appendResources(text);
-+		text.append("    </resources>\n");
-+		text.append("  </build>\n");
-+		text.append("  <repositories>\n");
-+		
-+		appendRepositories(text);
-+		text.append("  </repositories>\n");
-+		text.append("\n");
-+		appendDependencyManagement(text);
-+		text.append("  <dependencies>\n");
-+		appendDependencies(text);
-+		appendTypeDependencies(text, types);
-+		text.append("  </dependencies>\n");		
-+		text.append("</project>\n");
-+		target.rename("pom.xml");
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/mappingXml.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/mappingXml.vtl
-new file mode 100644
-index 0000000..fb67be4
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/mappingXml.vtl
-@@ -0,0 +1,396 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template mappingXml(Configuration config, FileArtifact target, Pipeline pipeline, setOf(DecisionVariable) families, String subAlgName) {
-+	setOf(String, String) parameterToNode = {};
-+	mapOf(String, setOf(String)) componentsInSubtopology = {};
-+	setOf(Source) sources = {};
-+	setOf(Sink) sinks = {};
-+	Boolean useThrift;
-+	Boolean forSubPip = false;
-+	
-+    def collectParametersXml(sequenceOf(Parameter) parameters, String fName, String nodeName, String prefix) { //consider the prefix for the receiver (the actual receiver name at runtime)
-+    	String paraString = "";
-+    	String decNodeName = prefix.firstToUpperCase() + nodeName.firstToUpperCase();
-+    	for(Parameter p : parameters) {
-+    		paraString = "parameter=\"${p.name}\" name=\"$fName\" receiver=\"$decNodeName\"";
-+    		parameterToNode.add(paraString);
-+    	}
-+    }
-+   
-+   def collectParametersXml(sequenceOf(Parameter) parameters, String fName, String receiver) { //the receiver here is referred to the name of the family element
-+    	String paraString = "";
-+    	for(Parameter p : parameters) {
-+    		paraString = "parameter=\"${p.name}\" name=\"$fName\" receiver=\"$receiver\"";
-+    		parameterToNode.add(paraString);
-+    	}
-+    }
-+    
-+    def collectComponentsInSubtopology(String nodeName, String nodeClsName, FamilyElement fe, String subPipName) {
-+    	String componentName = formulateString(subPipName) + formulateString(nodeName);
-+    	String algs = "";
-+	    int pos = 0;
-+    	String pipName = pipeline.name;
-+    	Integer parallelism = fe.parallelism;
-+    	for(Algorithm alg : fe.family.members) {
-+            String algName = algName(alg);
-+            if (algs.length() > 0) {
-+                algs = algs + " ";
-+            }
-+            algs = algs + 'alternative${pos} = "${algName}"';
-+            pos = pos + 1;
-+        }
-+        if (algs.length() > 0) {
-+            algs = " " + algs;
-+        }
-+        setOf(String) tmp = {};
-+        Boolean receiver = fe.family.parameters.size() > 0;
-+        //SET IT ALWAYS TO TRUE
-+        receiver = true;
-+    	String component = "<component name=\"$componentName\" container=\"$subPipName\" class=\"eu.qualimaster.$subPipName.topology.$nodeClsName\" receiver=\"$receiver\" thrift=\"${useThrift}\" tasks=\"$parallelism\"/>\n";
-+    	if(componentsInSubtopology.containsKey(subPipName)) {
-+    		tmp = componentsInSubtopology.get(subPipName);
-+    	} 
-+    	if(tmp.excludes(component)) {
-+    		tmp.add(component);
-+    	}
-+    	componentsInSubtopology.add(subPipName, tmp);//used the sub-pipeline name as the key!
-+    }
-+    
-+    def collectComponentsInHWAlgorithm(HardwareAlgorithm algorithm, String pipName) { 
-+    	String algName = algorithm.name;  
-+		Integer senderParallelism = algorithm.senderParallelism;
-+		Integer receiverParallelism = algorithm.receiverParallelism;
-+        setOf(String) tmp = {};
-+    	String comBolt = "<component name=\"${algName}HardwareConnectionBolt\" container=\"$algName\" class=\"eu.qualimaster.algorithms.$algName.HardwareConnectionBolt\" receiver=\"true\" thrift=\"${useThrift}\" tasks=\"${senderParallelism}\" type=\"HARDWARE\"/>\n";
-+    	tmp.add(comBolt);
-+    	String comSpout = "<component name=\"${algName}HardwareConnectionSpout\" container=\"$algName\" class=\"eu.qualimaster.algorithms.$algName.HardwareConnectionSpout\" receiver=\"true\" thrift=\"${useThrift}\" tasks=\"${receiverParallelism}\" type=\"HARDWARE\"/>\n";
-+    	tmp.add(comSpout);
-+    	componentsInSubtopology.add(algName, tmp);
-+    }
-+    
-+    def subTopologyMapping(SubPipelineAlgorithm alg, String fName, setOf(Algorithm) algorithms, Text text) {
-+    	setOf(String) subNodes = {};
-+        String pipName = pipeline.name;
-+    	for(DecisionVariable v : alg.subPipeline.connectors) {
-+    		subNodes.add(v.varName());
-+		    appendForNode(v, subNodes, algorithms, pipName, alg.subPipeline.name, fName, true, null, text);
-+		    processElement(v.byName("output").variables(), text, subNodes, algorithms, pipName, alg.subPipeline.name, fName, null, true);
-+	    }
-+    }
-+    
-+    def processElement(sequenceOf(DecisionVariable) output, Text text, setOf(String) nodes, setOf(Algorithm) algorithms, String pipName, String subPipName, String subPipelineFamilyName, Boolean isSubPipeline, String currentAlg) {     	
-+        for(Flow v : output) { 
-+            DecisionVariable elt = v.destination;
-+            String nodeName = elt.varName();
-+            if(!isStringExisted(nodeName, nodes)) {
-+            	nodes.add(nodeName);
-+				appendForNode(elt, nodes, algorithms, pipName, subPipName, subPipelineFamilyName, isSubPipeline, currentAlg, text); 
-+            	processElement(elt.byName("output").variables(), text, nodes, algorithms, pipName, subPipName, subPipelineFamilyName, isSubPipeline, currentAlg);
-+            }
-+        } 
-+    }
-+    
-+    def appendForNode(DecisionVariable elt, setOf(String) nodes, setOf(Algorithm) algorithms, String pipName, String subPipName, String subPipelineFamilyName, Boolean isSubPipeline, String currentAlg, Text text) {
-+    	String nodeName = elt.varName();
-+    	String nodeClsName = elt.varName().firstToUpperCase() + elt.type();
-+    	String space="";
-+    	if(elt.type() == "Source") {  
-+	    	Source src =elt;
-+	        DataSource dataSrc = src.source;
-+	        String srcName = src.name; 
-+	        if(subPipName != null) {
-+    			nodeName = formulateString(currentAlg) + formulateString(srcName);
-+    			space = "    ";
-+    		} 
-+	        //if(subPipelineFamilyName != null) {//only for collecting parameters
-+    			collectParametersXml(dataSrc.parameters, srcName, nodeName);
-+    		//} else {
-+    			Boolean receiver = dataSrc.parameters.size() > 0; 
-+    			//SET IT ALWAYS TO TRUE!
-+    			receiver = true;
-+    			if(!isSubPipeline) {
-+		        	text.append('      ${space}<node name="${srcName}" type="source">\n');
-+		        }
-+		        text.append('          ${space}<component name="$nodeName" container="${pipName}" class="eu.qualimaster.$pipName.topology.$nodeClsName" receiver="$receiver" thrift="${useThrift}" tasks="${src.parallelism}"/>\n');                    
-+		        if(!isSubPipeline) {
-+		        	text.append('      ${space}</node>\n');
-+		        }
-+	        //}
-+	    }
-+    	if(elt.type() == "Sink" or elt.type() == "ReplaySink") {
-+    		//collect sinks
-+    		sinks.add(elt);
-+    		String sinkType;
-+    		if(elt.type() == "Sink") {
-+    			sinkType = "sink";
-+    		} else {
-+    			sinkType = "replaySink";
-+    		}
-+            Sink snk = elt;
-+            DataSink dataSnk = snk.sink;
-+            String snkName = snk.name;
-+            if(subPipName != null) {
-+    			nodeName = formulateString(currentAlg) + formulateString(snkName);
-+    			space = "    ";
-+    		}
-+           // if(subPipelineFamilyName != null) {
-+            	collectParametersXml(dataSnk.parameters, snkName, nodeName);
-+           // } else {
-+            	Boolean receiver = dataSnk.parameters.size() > 0; 
-+            	//SET IT ALWAYS TO TRUE!
-+    			receiver = true;
-+            	if(elt.type() == "ReplaySink") {
-+            		receiver = true;//receiver is always true for the replay sink
-+            	}
-+            	if(!isSubPipeline) {
-+	            	text.append('      ${space}<node name="${snkName}" type="$sinkType">\n');
-+	            }
-+	            text.append('          ${space}<component name="$nodeName" container="${pipName}" class="eu.qualimaster.$pipName.topology.$nodeClsName" receiver="$receiver" thrift="${useThrift}" tasks="${snk.parallelism}"/>\n'); 
-+	            if(!isSubPipeline) {
-+	            	text.append('      ${space}</node>\n');
-+	            } 
-+            //}
-+        }         
-+        if(elt.type() == "FamilyElement") {
-+            FamilyElement fe = elt;
-+            Family fm = fe.family;
-+            String fmName = fe.name;
-+            String topPipName = pipName;
-+            if(subPipName != null) {
-+            	if(looseSub) {
-+            		nodeName = formulateString(currentAlg) + formulateString(fmName);//[subPipName+fmName] for loose sub-pipelines
-+            	} else {
-+    				nodeName = currentAlg + formulateString(fmName); //[algName+fmName] for tight sub-pipelines
-+    				topPipName = pipeline.name;//use the top-level(main) pipeline name for tight case
-+    			}
-+    			if(!forSubPip) {
-+    				space = "    ";
-+    			}
-+    		}
-+            //if(subPipelineFamilyName != null) {
-+            	collectParametersXml(fm.parameters, fmName, nodeName);
-+//            	collectComponentsInSubtopology(fmName, nodeClsName, fe, subPipName);
-+            //} else {
-+	            String algs = "";
-+	            int pos = 0;
-+	            for(Algorithm alg : fm.members) {
-+	                String algName = algName(alg);
-+	                algorithms.add(alg);
-+	                if (algs.length() > 0) {
-+	                    algs = algs + " ";
-+	                }
-+	                algs = algs + 'alternative${pos} = "${algName}"';
-+	                pos = pos + 1;
-+	            }
-+	            if (algs.length() > 0) {
-+	                algs = " " + algs;
-+	            }
-+
-+				Boolean receiver = fm.parameters.size() > 0;
-+				//SET IT ALWAYS TO TRUE!
-+    			receiver = true;
-+				if(!isSubPipeline or forSubPip) { 										
-+	            	text.append('      ${space}<node name="${fmName}" type="family">\n');
-+	            }
-+	            text.append('          ${space}<component name="$nodeName" container="${topPipName}" class="eu.qualimaster.$pipName.topology.$nodeClsName" receiver="$receiver" thrift="${useThrift}" tasks="${fe.parallelism}"$algs/>\n'); 
-+	            
-+	            
-+	            if(hasSubPipelineAlgorithm(fm) or hasHardwareAlgorithm(fm)) { //appending the components under this family -- DO NOT NEEDED!
-+	            	for(Algorithm alg : fm.members) {
-+	            		/* 
-+	            		if(isGenSubtopology(alg)) {
-+		                	SubPipelineAlgorithm subAlg = alg;
-+		                	//collect the components in the sub-topology
-+		                	Pipeline subPipeline = subAlg.subPipeline;
-+		                	subTopologyMapping(subAlg, fe.name, algorithms, text);
-+	                	} else */if (isHardwareAlgorithm(alg)) {
-+	                		HardwareAlgorithm hwAlg = alg;
-+	                		collectComponentsInHWAlgorithm(hwAlg, pipName);
-+	                	}
-+	            	}
-+	            }
-+	            
-+	            if(!isSubPipeline or forSubPip) {
-+	            	text.append('      ${space}</node>\n'); 
-+	            }	            
-+           // }
-+        }
-+        if(elt.type() == "DataManagementElement") {
-+            DataManagementElement fe = elt;
-+            String fmName = fe.name;
-+            
-+            //if(subPipelineFamilyName != null) {
-+            //} else { 
-+            	Boolean receiver = true;//always to true
-+	            text.append('      <node name="${fmName}" type="data_mgt">\n');
-+	            text.append('          <component name="$nodeName" container="${pipName}" class="eu.qualimaster.$pipName.topology.$nodeClsName" receiver="$receiver" thrift="${useThrift}"/>\n'); 
-+	            text.append('      </node>\n'); 
-+            //}
-+        }   		
-+    }
-+    
-+	def main(Configuration config, FileArtifact target, Pipeline pipeline, setOf(DecisionVariable) families, String subAlgName) {		
-+		useThrift = not(genMonitoringProbes);		
-+		Text text = target.getText();	
-+		if(families.size() == 0)	{
-+			forSubPip = true;
-+		}		
-+		
-+		text.append("<mapping>\n");
-+
-+		String pipName = pipeline.name;
-+		String topologyClsName = "eu.qualimaster.$pipName.topology.Topology";
-+        setOf(String) nodes = {};
-+        setOf(Algorithm) algorithms = {};
-+		text.append('  <pipeline name="${pipName}" class="$topologyClsName">\n');
-+		//add the entries for sub-pipelines
-+		if(looseSub) {
-+		for(Family fm : families) {
-+			for(Algorithm alg : fm.members) {				
-+				if(isHardwareAlgorithm(alg) or isGenSubtopology(alg)) {
-+					String name;
-+					if(isGenSubtopology(alg)) {//generated sub-algorithm
-+						SubPipelineAlgorithm subAlg = alg;
-+						SubPipeline subPip = subAlg.subPipeline;
-+						name = subPip.name;
-+					} else {//hardware algorithm
-+						name = alg.name;
-+					}					
-+					text.append('      <pipeline name="${name}" algorithm="${alg.name}"/>\n');
-+				}
-+			}
-+		}
-+		}
-+		
-+		processPipeline(pipeline, subAlgName, nodes, algorithms, text);
-+		
-+		//add intermediary nodes for the loosely integrated pipelines
-+		if(forSubPip and looseSub) {
-+	        appendIntermediaryComponent(subAlgName, pipName, true, useThrift, text);
-+	    }
-+	    //add intermediary nodes for the tightly integrated pipeline with manual algorithms in the switch case
-+	    if(newSwitch) {
-+		    for(Algorithm alg : algorithms) {
-+		    	if(isManualSubtopology(alg)) {
-+		    		appendIntermediaryComponent(algName(alg), pipName, true, useThrift, text);	
-+		    	}
-+		    } 
-+	    }  
-+	         
-+        for(Algorithm alg : algorithms) {
-+	        String algName = algName(alg);
-+            String cls;
-+            String implName;
-+            if(isGenSubtopology(alg)) {//generated subtopology
-+            	SubPipelineAlgorithm subAlg = alg;
-+			    String pName = subAlg.subPipeline.name;
-+			    implName = pName.firstToUpperCase().toIdentifier() + "SubTopology";
-+			    cls = "eu.qualimaster." + pName.toIdentifier() + ".topology." + implName;
-+			    text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}">\n');
-+			    setOf(String) nodes = {};
-+        		setOf(Algorithm) algorithms = {};
-+			    processPipeline(subAlg.subPipeline, algName, nodes, algorithms, text);
-+			    //append intermediary nodes		    
-+			    if(looseSub) {
-+			    	appendIntermediaryComponent(algName, pName, false, useThrift, text);
-+			    }				
-+			    text.append('      </algorithm>\n');
-+            } else if (isHardwareAlgorithm(alg)) { //generated hardware algorithm
-+            	implName = formulateString(alg.name) + "SubTopology";
-+            	cls = "eu.qualimaster.algorithms." + formulateString(alg.name) + "." + implName;
-+            	text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}">\n');
-+        		if(componentsInSubtopology.containsKey(algName)) {
-+			    	setOf(String) coms = componentsInSubtopology.get(algName);
-+			    	for(String com : coms) {
-+			    		text.append('          $com');
-+			    	}
-+			    }
-+			    text.append('      </algorithm>\n');
-+           	} else {
-+           		SoftwareAlgorithm a = alg;
-+            	cls = a.class;
-+            	JavaPath algPath = cls;
-+            	implName = algPath.getName();           	
-+            	text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}"/>\n');
-+            }
-+        }
-+        //append source algorithms
-+        for(Source source : sources) {
-+        	DataSource dataSrc = source.source;
-+        	String algName = dataSrc.name;
-+        	String cls = dataSrc.sourceCls;
-+        	JavaPath algPath = cls;
-+            String implName = algPath.getName();
-+        	text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}"/>\n');
-+        }
-+        //apend sink algorithms
-+        for(Sink sink : sinks) {
-+        	DataSink dataSnk = sink.sink;
-+        	String algName = dataSnk.name;
-+        	String cls = dataSnk.sinkCls;
-+        	JavaPath algPath = cls;
-+            String implName = algPath.getName();
-+        	text.append('      <algorithm name="${algName}" implName="${implName}" class="${cls}"/>\n');
-+        }
-+    	for(String para : parameterToNode) {
-+    		text.append('      <parameter $para/> \n');
-+    	}
-+        	
-+		text.append('  </pipeline>\n');
-+		text.append('\n');				        			
-+
-+		text.append("</mapping>\n");
-+		target.rename("mapping.xml");
-+	}
-+	
-+	def String algName(Algorithm alg) {
-+	    // old mapping
-+        //String n = alg.class;
-+        //JavaPath algPath = n;
-+	    //algPath.getName();
-+	    // new mapping, this is the name as defined in the configuration!
-+	    alg.name;
-+	}
-+	
-+	/**
-+	 * @param pipeline pipeline to be traversed
-+	 * @param currentAlg the current algorithm name to be used in the algorithm information as part of the component name for tight sub-pipelines
-+	 * @param nodes already-visited nodes
-+	 * @param algorithms the algorithms used in the (sub-)pipeline
-+	 */
-+	def processPipeline(Pipeline pipeline, String currentAlg, setOf(String) nodes, setOf(Algorithm) algorithms, Text text) {
-+		String pipName = pipeline.name;
-+		Boolean isSub = isSubPipeline(pipeline);		
-+		for(DecisionVariable v : pipeline.sources) {
-+				//collect sources
-+				sources.add(v);
-+				String nodeName = v.varName();
-+	            String nodeClsName = v.varName().firstToUpperCase() + v.type();	
-+	            if(!isStringExisted(nodeName, nodes)) {
-+	            	nodes.add(nodeName);
-+		            appendForNode(v, nodes, algorithms, pipName, null, null, isSub, currentAlg, text);  
-+		            processElement(v.byName("output").variables(), text, nodes, algorithms, pipName, null, null, isSub, currentAlg);
-+	            }
-+	        }
-+	    if(pipeline.type() == "SubPipeline") {
-+	    	SubPipeline subPip = pipeline;
-+	        for(DecisionVariable v : subPip.connectors) {//considering the connectors from subpipeline
-+		        String nodeName = v.varName();
-+		        if(!isStringExisted(nodeName, nodes)) {
-+	            	nodes.add(nodeName);
-+			    	appendForNode(v, nodes, algorithms, pipName, pipName, null, isSub, currentAlg, text);
-+			    	processElement(v.byName("output").variables(), text, nodes, algorithms, pipName, pipName, null, isSub, currentAlg);
-+		    	}
-+	    	}
-+    	}
-+	}
-+	
-+	def Boolean isSubPipeline(Pipeline pipeline) {
-+		Boolean isSub = false;
-+		if(pipeline.type() == "SubPipeline") {
-+			isSub = true;
-+		}
-+		isSub;
-+	}
-+    	
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxHost.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxHost.vtl
-new file mode 100644
-index 0000000..b7ada17
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxHost.vtl
-@@ -0,0 +1,68 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template maxHost(Configuration config, FileArtifact target, Pipeline pipeline) {  
-+
-+    def main(Configuration config, FileArtifact target, Pipeline pip) {  
-+        '#include "Maxfiles.h"'
-+        '#include <MaxSLiCInterface.h>'
-+        ''
-+        'int main(void)'
-+        '{'
-+        '    while(true) {'
-+        '        int32_ *inData;'
-+        '        int count = readDataFromNetwork(inData); // simplification, we need a loop or so'
-+        '        int32_ *outData;' 
-+        '        outData = malloc(count); // just for now'
-+        String param = "";
-+    	for (DecisionVariable r : pip.sources) { 
-+    		param = param + processElement(r, "");
-+    	}
-+    	if (param.length() > 0) {
-+    		param = param + ",";
-+    	} 
-+        '' 
-+        '        Pipeline($param inData, outData);'
-+        '        writeToNetwork(outData);'
-+        '    }'
-+        '}'  
-+    }  
-+       
-+    def String processElement(DecisionVariable elt, String param) {
-+		param; // force return
-+    }
-+ 
-+    def String processElement(FamilyElement elt, String param) {
-+	    Family family = elt.family;
-+	    for (Algorithm alg : family.members) {
-+	    	if(isHardwareAlgorithm(alg)) {
-+	    		HardwareAlgorithm hwAlg = alg;
-+	    		if (hwAlg.hwNode.type() == ReconfigurableHardware::MPCCNode) {
-+            	String familyName = elt.varName();
-+            	String enabledSwitch = "${familyName}Enabled";
-+            	'int $enabledSwitch = readIntFromNetwork(); // just for now' | 8;
-+                if (param.length() > 0) {
-+            	    param = param + ", ";
-+                }
-+                param = param + enabledSwitch;
-+            	}
-+	    	}
-+        }    		
-+		for (Flow flow : elt.output) {
-+			param = processElement(flow.destination, param);
-+		}
-+		param;
-+    }
-+    
-+    def String processElement(Source elt, String param) {
-+		for (Flow flow : elt.output) {
-+			param = processElement(flow.destination, param);
-+		}
-+		param;
-+    }
-+    
-+   def String processElement(Sink elt, String param) {
-+	    // simplifying assumption - only family elements are suitable for hw
-+		param;
-+   }
-+   
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxKernel.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxKernel.vtl
-new file mode 100644
-index 0000000..6461675
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxKernel.vtl
-@@ -0,0 +1,66 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template maxKernel(Configuration config, FileArtifact target, Pipeline pipeline) {  
-+
-+    String streamInType = "dfeInt(32)";  // fixed for now
-+    String streamOutType = "dfeInt(32)"; // fixed for now
-+
-+    def main(Configuration config, FileArtifact target, Pipeline pip) { 
-+    	String name = pip.name;
-+
-+    	'package qm;'
-+    	''
-+    	'import com.maxeler.maxcompiler.v2.kernelcompiler.Kernel;'
-+		'import com.maxeler.maxcompiler.v2.kernelcompiler.KernelParameters;'
-+		'import com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.memory.Memory;'
-+		'import com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEVar;'
-+		''
-+		'class PipelineKernel extends Kernel {'
-+        '    PipelineKernel(KernelParameters parameters) {'
-+		'        super(parameters);'
-+		'        DFEVar inData = io.input("inData", $streamInType);'
-+    	for (DecisionVariable r : pip.sources) {
-+    		processElement(r, "inData");
-+    	}
-+		'    }' 
-+		'}'   
-+    } 
-+       
-+    def processElement(DecisionVariable elt, String lastName) {
-+    }
-+    
-+    def processElement(FamilyElement elt, String lastName) {
-+	    Family family = elt.family;
-+	    for (Algorithm alg : family.members) {
-+	    	if(isHardwareAlgorithm(alg)) {
-+	    		HardwareAlgorithm hwAlg = alg;
-+	            if (hwAlg.hwNode.type() == ReconfigurableHardware::MPCCNode) {
-+	            	String familyName = elt.varName();
-+	            	String enabledSwitch = "${familyName}Enabled";
-+	            	String resultName = "${familyName}Result";
-+			        'DFEVar $enabledSwitch = io.scalarInput("$familyName", dfeInt(32));' | 8;
-+			        'DFEVar $resultName;' | 8;
-+			        '$resultName = ($enabledSwitch != 0 ? ${hwAlg.artifact}($lastName) : $lastName);' | 8;
-+			        lastName = resultName;
-+	            }
-+            }
-+        }
-+		for (Flow flow : elt.output) {
-+			processElement(flow.destination, lastName);
-+		}
-+    }
-+
-+    def processElement(Source elt, String lastName) {
-+		// simplifying assumption - only family elements are suitable for hw
-+		for (Flow flow : elt.output) {
-+			processElement(flow.destination, lastName);
-+		}
-+    }
-+
-+    def processElement(Sink elt, String lastName) {
-+		// simplifying assumption - only family elements are suitable for hw
-+		// simplifying assumption - exactly one output stream :o
-+		'io.output("outData", $lastName, $streamInType);' | 8;
-+    }
-+        
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxManager.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxManager.vtl
-new file mode 100644
-index 0000000..6f0b26b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/maxManager.vtl
-@@ -0,0 +1,25 @@
-+template maxManager(Configuration config, FileArtifact target, DecisionVariable pipeline) {
-+
-+    def main(Configuration config, FileArtifact target, DecisionVariable pipeline) {
-+    	'package qm;'
-+        ''
-+        'import com.maxeler.maxcompiler.v2.build.EngineParameters;'
-+        'import com.maxeler.maxcompiler.v2.kernelcompiler.Kernel;'
-+        'import com.maxeler.maxcompiler.v2.managers.standard.Manager;'
-+        'import com.maxeler.maxcompiler.v2.managers.standard.Manager.IOType;'
-+        ''
-+		'class PipelineManager {'
-+		''
-+		'    public static void main(String[] args) {'
-+		'        Manager manager = new Manager(new EngineParameters(args));'
-+		'        Kernel kernel = new PipelineKernel(manager.makeKernelParameters());'
-+		'        // sorry, I have to ask MAX how to link Kernels'
-+		'        manager.setKernel(kernel);'
-+		'        manager.setIO(IOType.ALL_CPU);'
-+		'        manager.createSLiCinterface();'
-+		'        manager.build();'
-+	    '    }'
-+        '}'
-+    }
-+    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.ivml
-new file mode 100644
-index 0000000..f56fcc0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.ivml
-@@ -0,0 +1,34 @@
-+project Adaptivity {
-+
-+	import Basics;
-+	import Observables;
-+
-+	annotate BindingTime bindingTime = BindingTime.compile to Adaptivity;
-+
-+	// relative importance of the quality dimensions as well as the tradeoffs to be considered for cross-pipeline adaptation
-+	compound QualityParameterWeighting {
-+		refTo(QualityParameter) parameter;
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+		   Real weight;
-+		}
-+	}
-+
-+	assign(bindingTime = BindingTime.runtimeMon) to {
-+		Integer updateFrequency = 1000; // in milliseconds
-+		Constraint updateFrequencyLimit = updateFrequency == 0 or updateFrequency > 500;
-+		Percentage capacityLowWatermark = 0.1;
-+		Percentage capacityHighWatermark = 0.6; // for testing, was 0.8
-+		Constraint capacityHighLowWatermark = capacityHighWatermark > capacityLowWatermark;
-+		Percentage capacityPipelineSheddingWatermark = 0.85;
-+		Constraint capacityPipelineSheddingWatermarkMin = capacityPipelineSheddingWatermark > 0.5;
-+		Percentage capacityAveragePipelineOverload = 0.8;
-+		Constraint capacityAveragePipelineOverloadMin = capacityAveragePipelineOverload > 0.5;
-+		Boolean supportsTaskReallocation = true;
-+		Percentage maxClusterAllocation = 0.9;
-+	}
-+
-+	sequenceOf(QualityParameterWeighting) pipelineImportance = null;
-+	Constraint pipelineImportanceTypes = size(asSet(pipelineImportance->collect(p|p.parameter))) == size(pipelineImportance);
-+	sequenceOf(QualityParameterWeighting) crossPipelineTradeoffs = null;
-+	Constraint crossPipelineTradeoffsTypes = size(asSet(crossPipelineTradeoffs->collect(p|p.parameter))) == size(crossPipelineTradeoffs);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.text
-new file mode 100644
-index 0000000..ddcd8aa
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Adaptivity.text
-@@ -0,0 +1,16 @@
-+Adaptivity::updateFrequency = Adaptation frequency (ms)|Longest distance between two adaptation runs in milliseconds.
-+Adaptivity::updateFrequencyLimit = Update Frequency must be 0 or more than 500
-+Adaptivity::capacityLowWatermark = Pipeline node low load (%)|The lower load (percentage) boundary causing resource re-allocation for scale-in
-+Adaptivity::capacityHighWatermark = Pipeline node high load (%)|The upper load (percentage) boundary causing resource re-allocation for scale-out
-+Adaptivity::capacityHighLowWatermark = Pipeline node low load watermark must be smaller than high watermark
-+Adaptivity::capacityPipelineSheddingWatermark = Pipeline shedding load (%)|The boundary causing load shedding for extreme overload cases.
-+Adaptivity::capacityPipelineSheddingWatermarkMin = Pipeline shedding load must be larger than 0.5 (recommended 0.8 or higher)
-+Adaptivity::capacityAveragePipelineOverload = Pipeline overload (%)|Average boundary enabling overload adaptation
-+Adaptivity::capacityAveragePipelineOverloadMin = Pipeline overload load must be larger than 0.5 (recommended 0.8 or higher)
-+Adaptivity::pipelineImportance = Pipeline observable weights|Weights to prioritize the importance of individual observables in single-pipeline adaptation.
-+Adaptivity::crossPipelineTradeoffs = Cross-pipeline observable weights|Weights to prioritize the importance of individual observables in cross-pipeline adaptation.
-+Adaptivity::supportsTaskReallocation = support task reallocation|Does the installed platform support task reallocation - set by monitoring.
-+Adaptivity::maxClusterAllocation = maximum cluster allocation|The maximum rate the cluster shall be allocated, the rest shall be residual.
-+Adaptivity::QualityParameterWeighting = Defines the weighting for a quality parameter.
-+Adaptivity::QualityParameterWeighting::parameter = quality parameter|The quality parameter to define a weight for.
-+Adaptivity::QualityParameterWeighting::weight = weight|The weight to indicate tradeoffs between quality parameters. Negative values cause an inversion by the actual maximum and a weighting by the absolute value.
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.ivml
-new file mode 100644
-index 0000000..01f863d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.ivml
-@@ -0,0 +1,93 @@
-+project Algorithms {
-+
-+	import Basics;
-+	import Observables;
-+	import ReconfigurableHardware;
-+	annotate BindingTime bindingTime = BindingTime.compile to Algorithms;
-+
-+	abstract compound Algorithm {
-+		NonEmptyString name; 
-+		Description description;
-+		Tuples input;	
-+		Tuples output;
-+		Parameters parameters;
-+		ArtifactString artifact;
-+		refTo(Algorithm) successor = null;
-+		setOf(Constraint) constraints;
-+
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			Latency latency;
-+			Throughput_Items throughputItems;
-+			Throughput_Volume throughputVolume;
-+			Used_Memory usedMemory;
-+			Accuracy_Confidence accuracyConfidence;
-+			Accuracy_Error_Rate accuracyErrorRate;
-+			Believability believability;
-+			Relevancy relevancy;
-+			Completeness completeness;
-+			Volume volume;
-+			Velocity velocity;
-+			Variety variety;
-+			Hosts pipeline_Hosts;
-+			Items items;
-+			Items family_Items; // == propagate from pipeline node?
-+			Items family_PredecessorItems; // == propagate from pipeline node?
-+			Items family_PredictedItemsThreshold;
-+			Boolean isValid = true;
-+		} 
-+		Constraint inputGivenCheck = isDefined(input);
-+		Constraint outputGivenCheck = isDefined(output); 
-+	} 
-+	
-+	compound SoftwareAlgorithm refines Algorithm {
-+		ClassString class;
-+
-+        // should go into a "programmed sub-topology algorithm"
-+		OptionalClassString algTopologyClass = null;
-+        Boolean scalable = false;             // allow for pipeline scaling on startup? do not move into Algorithm
-+        PositiveInteger parallelism = 1;      // configured executors
-+        OptionalPositiveInteger numtasks;     // configured tasks
-+        PositiveInteger minParallelism = 1;
-+        PositiveInteger minNumtasks = 1;
-+        OptionalPositiveInteger maxParallelism;
-+        OptionalPositiveInteger maxNumtasks;
-+        Constraint minParallel = minParallelism <= parallelism;
-+        Constraint minTasks = minNumtasks <= numtasks;
-+        Constraint maxParallel = parallelism <= maxParallelism;
-+        Constraint maxTasks = numtasks <= maxNumtasks;
-+        Constraint stormInvariant = parallelism <= numtasks;
-+        assign(bindingTime = BindingTime.runtimeEnact) to {
-+            Tasks tasks = numtasks;
-+            Executors executors = parallelism;
-+            Executors initialExecutors = parallelism;
-+        }
-+        algTopologyClass == null implies parallelism == 1;
-+        algTopologyClass == null implies numtasks == 1;
-+        algTopologyClass == null implies scalable == false;
-+	} 
-+	
-+	compound HardwareAlgorithm refines Algorithm {
-+		refTo(HwNode) hwNode;
-+        Boolean scalable = false;         // allow for pipeline scaling on startup? do not move into Algorithm!
-+		PositiveInteger senderParallelism;
-+		PositiveInteger receiverParallelism;
-+		OptionalPositiveInteger senderNumTasks;
-+		OptionalPositiveInteger receiverNumTasks;
-+        Constraint stormInvariantSender = senderNumTasks <= senderParallelism;
-+        Constraint stormInvariantReceiver = receiverNumTasks <= receiverParallelism;
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			refTo(HwNode) actualHwNode;
-+		}
-+        assign(bindingTime = BindingTime.runtimeEnact) to { // pip startup!
-+            PositiveInteger actualSenderParallelism = senderParallelism;
-+            PositiveInteger actualReceiverParallelism = receiverParallelism;
-+            PositiveInteger initialSenderParallelism = senderParallelism;
-+            PositiveInteger initialReceiverParallelism = receiverParallelism;
-+            OptionalPositiveInteger actualSenderNumTasks = senderNumTasks;
-+            OptionalPositiveInteger actualReceiverNumTasks = receiverNumTasks;
-+        }
-+	}
-+	
-+	setOf(refTo(Algorithm)) algorithms;
-+	Constraint algNamesUnique = size(algorithms->collect(a|substitutes(a.name, " ", ""))) == size(algorithms); 
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.text
-new file mode 100644
-index 0000000..dbda977
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Algorithms.text
-@@ -0,0 +1,56 @@
-+Algorithms::Algorithm::name = name|The logical name of this algorithm as it is used in further parts of the model.
-+Algorithms::Algorithm::artifact = implementing artifact|The Maven artifact implementing this algorithm.
-+Algorithms::Algorithm::description = description|Free text description for documentation purposes.
-+Algorithms::Algorithm::input = input fields|The input data fields accepted by this algorithm. Must match the input fields of the family.
-+Algorithms::Algorithm::output = output fields|The output data fields provided by this family. Must match the output fields of the family.
-+Algorithms::Algorithm::parameters = adaptable parameters|Parameters of the algorithm that can be changed at runtime (can be a subset of the family).
-+Algorithms::SoftwareAlgorithm::class = implementing class|The (qualified) name of the Java class implementing this algorithm.
-+Algorithms::SoftwareAlgorithm::algTopologyClass = algTopologyClass|Experimental - do not touch.
-+Algorithms::SoftwareAlgorithm::scalable = scalable|Shall the algorithm be scalable during pipeline startup (only for sub-topology algorithms).
-+Algorithms::SoftwareAlgorithm::stormInvariant = The intended parallelism must not exceed the number of tasks.
-+Algorithms::SoftwareAlgorithm::parallelism = intended parallelism|The intended parallelism of this node in terms of (Storm) executors (at least 1 must be given, sub-topologies only).
-+Algorithms::SoftwareAlgorithm::numtasks = intended tasks|The number of (potentially sequential or parallel Storm) tasks of this algorithms (same as parallelism if not given, sub-topologies only).
-+Algorithms::SoftwareAlgorithm::minParallelism = minimum parallelism|The minimum parallelism of this node in terms of (Storm) executors (at least 1 must be given, sub-topologies only).
-+Algorithms::SoftwareAlgorithm::minNumtasks = minimum tasks|The minimum number of (potentially sequential or parallel Storm) tasks of this algorithms (same as parallelism if not given, sub-topologies only).
-+Algorithms::SoftwareAlgorithm::maxParallelism = maximum parallelism|The maximum parallelism of this node in terms of (Storm) executors (sub-topologies only).
-+Algorithms::SoftwareAlgorithm::maxNumtasks = maximum tasks|The maximum number of (potentially sequential or parallel Storm) tasks of this algorithms (sub-topologies only).
-+Algorithms::SoftwareAlgorithm::minParallel = Intended parallelism is smaller than minimum parallelism.
-+Algorithms::SoftwareAlgorithm::minTasks = Intended number of tasks is smaller than minimum tasks.
-+Algorithms::SoftwareAlgorithm::maxParallel = Intended parallelism is larger than maximum parallelism.
-+Algorithms::SoftwareAlgorithm::maxTasks = Intended number of tasks is larger than maximum tasks.
-+Algorithms::SoftwareAlgorithm::executors = actual parallelism|The actual parallelism of this node in terms of (Storm) executors (sub-topologies only).
-+Algorithms::SoftwareAlgorithm::tasks = actual tasks|The actual number of (potentially sequential or parallel Storm) tasks of this algorithms (sub-topologies only).
-+Algorithms::HardwareAlgorithm::hwNode = hardware node|The hardware node to run the algorithm on.
-+Algorithms::HardwareAlgorithm::actualHwNode = actual hardware node|The actual hardware node running the algorithm on.
-+Algorithms::HardwareAlgorithm::scalable = scalable|Shall the algorithm be scalable during pipeline startup.
-+Algorithms::HardwareAlgorithm::senderParallelism = intended sender parallelism|The intended parallelism of the node sending data to the hardware in terms of (Storm) executors.
-+Algorithms::HardwareAlgorithm::receiverParallelism = intended receiver parallelism|The intended parallelism of the node receiving data from the hardware in terms of (Storm) executors.
-+Algorithms::HardwareAlgorithm::senderNumTasks = intended sender tasks | The number of (potentially sequential or parallel Storm) tasks used for sending data to the hardware (same as parallelism if not given).
-+Algorithms::HardwareAlgorithm::receiverNumTasks = intended receiver tasks | The number of (potentially sequential or parallel Storm) tasks used for receiving data from the hardware (same as parallelism if not given).
-+Algorithms::HardwareAlgorithm::actualSenderParallelism = actual sender parallelism|The actual parallelism of the node sending data to the hardware in terms of (Storm) executors.
-+Algorithms::HardwareAlgorithm::actualReceiverParallelism = actual receiver parallelism|The actual parallelism of the node receiving data from the hardware in terms of (Storm) executors.
-+Algorithms::HardwareAlgorithm::actualSenderNumTasks = actual sender tasks | The actual number of (potentially sequential or parallel Storm) tasks used for sending data to the hardware (same as parallelism if not given).
-+Algorithms::HardwareAlgorithm::actualReceiverNumTasks = actual receiver parallelism|The actual parallelism of the node receiving data from the hardware in terms of (Storm) executors.
-+Algorithms::HardwareAlgorithm::stormInvariantSender = The intended parallelism for the sender must not exceed its number of tasks.
-+Algorithms::HardwareAlgorithm::stormInvariantReceiver = The intended parallelism for the receiver must not exceed its number of tasks.
-+Algorithms::Algorithm::successor = successor|Successor algorithm bound to this algorithm as part of a hardware library.
-+Algorithms::Algorithm::inputGivenCheck = Input must be assigned
-+Algorithms::Algorithm::outputGivenCheck = Output must be assigned
-+Algorithms::algorithms = configured algorithms
-+Algorithms::Algorithm::latency = processing latency (runtime)|algorithm processing latency in milliseconds
-+Algorithms::Algorithm::throughputItems = throughput in items (runtime)|algorithm throughput in items per second
-+Algorithms::Algorithm::throughputVolume = throughput in bytes (runtime)|algorithm throughput in bytes per second
-+Algorithms::Algorithm::usedMemory = memory use (runtime)|algorithm memory use in bytes
-+Algorithms::Algorithm::accuracyConfidence = accuracy confidence (runtime)|accuracy in terms of confidence
-+Algorithms::Algorithm::accuracyErrorRate = accuracy error rate (runtime)|accuracy in terms of error rate
-+Algorithms::Algorithm::believability = believability (runtime)|believability
-+Algorithms::Algorithm::relevancy = relevancy (runtime)|relevancy
-+Algorithms::Algorithm::completeness = completeness (runtime)|completeness
-+Algorithms::Algorithm::volume = data stream volume (runtime)|processed data stream volume in bytes
-+Algorithms::Algorithm::velocity = data stream velocity (runtime)|processed stream velocity in items per second
-+Algorithms::Algorithm::variety = data stream variety (runtime)|processed stream variety
-+Algorithms::Algorithm::items = output items (runtime)|output items/s
-+Algorithms::Algorithm::family_Items = family output items (runtime)|output items/s of the family
-+Algorithms::Algorithm::family_PredecessorItems = family input items (runtime)|input items/s of the family
-+Algorithms::Algorithm::family_PredictedItemsThreshold = family predicted output items threshold (runtime)|predicted threshold for output items/s
-+Algorithms::algNamesUnique = All algorithm names must be unique
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.ivml
-new file mode 100644
-index 0000000..30a0c8f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.ivml
-@@ -0,0 +1,105 @@
-+project Basics {
-+
-+	// common type definitions
-+
-+	typedef NaturalNumber Integer with (NaturalNumber >= 0 and isDefined(NaturalNumber));
-+	typedef PositiveInteger Integer with (PositiveInteger > 0 and isDefined(PositiveInteger));
-+	typedef OptionalNaturalNumber Integer with (OptionalNaturalNumber >= 0);
-+	typedef OptionalPositiveInteger Integer with (OptionalPositiveInteger > 0);
-+	typedef NonEmptyString String with (size(NonEmptyString) > 0 and isDefined(NonEmptyString));
-+	typedef PortInteger Integer with (PortInteger > 0 and PortInteger < 65536 and isDefined(PortInteger));
-+	typedef NonNegativeReal Real with (NonNegativeReal >= 0 and isDefined(NonNegativeReal));
-+	typedef OptionalNonNegativeReal Real with (OptionalNonNegativeReal >= 0);
-+	typedef ArtifactString String with (size(ArtifactString) > 0 and matches(ArtifactString, ".+:.+:.+") and isDefined(ArtifactString)); 
-+	typedef OptionalArtifactString String with (size(OptionalArtifactString) > 0 implies matches(OptionalArtifactString, ".+:.+:.+")); 
-+	typedef OptionalClassString String;
-+	typedef ClassString OptionalClassString with (size(ClassString) > 0 and isDefined(ClassString));
-+	typedef Description String;
-+	typedef OptionalUrlString String with (size(OptionalUrlString) > 0);
-+	typedef UrlString OptionalUrlString with (isDefined(UrlString));
-+	typedef MemorySize PositiveInteger;
-+	typedef Frequency PositiveInteger;
-+	typedef OptionalMemorySize OptionalPositiveInteger;
-+	typedef OptionalFrequency OptionalPositiveInteger;
-+	typedef Percentage Real with (Percentage >=0 and Percentage <=1);
-+	enum BindingTime {compile = 0, startup = 1, runtimeMon = 2, runtimeEnact = 3};
-+	annotate BindingTime bindingTime = BindingTime.compile to Basics;
-+
-+	compound FieldType {
-+		NonEmptyString name;
-+		ClassString class;
-+		OptionalArtifactString artifact; // optional
-+		OptionalClassString serializer; // optional
-+		OptionalArtifactString serializerArtifact; // optional
-+		Boolean isTimestamp = false;
-+		// currently unclear: own compounds for inherited types, generic types
-+	}
-+
-+	setOf(refTo(FieldType)) types = {};
-+	Constraint typeNamesUnique = size(types->collect(t|t.name)) == size(types);
-+
-+	compound Field { // in order to fit the data structure in the Storm
-+		NonEmptyString name;
-+		refTo(FieldType) type;
-+		Boolean keyPart = false; //TODO: need to add constraint if the keypart is used in the instantiation
-+		Constraint typeCheck = isDefined(type);
-+	}
-+	typedef Fields sequenceOf(Field) with (Fields->collect(f|f.name).hasDuplicates() == false/* and isDefined(Fields)*/);
-+
-+	// for the moment we assume that we will not have nested Tuples
-+	compound Tuple { // this conception is based on how the Storm describes the stream
-+		NonEmptyString name;
-+		Fields fields;
-+		Constraint fieldsCheck = size(fields) > 0; 
-+	} 
-+	typedef Tuples sequenceOf(Tuple) /*with (isDefined(Tuples))*/;
-+	
-+	
-+	// parameters are different than fields as they may have a configured default value for startup
-+	
-+	compound Parameter {
-+		NonEmptyString name;
-+	}
-+	typedef Parameters sequenceOf(Parameter) with (Parameters->collect(p|p.name).size() == Parameters.size()/*  and isDefined(Parameters)*/);
-+
-+	compound IntegerParameter refines Parameter {
-+		Integer defaultValue;
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			Integer value; // this may get a "default/startup" value from the configuration
-+		}
-+		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
-+	}
-+	
-+	compound StringParameter refines Parameter {
-+		String defaultValue;
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			String value; // this may get a "default/startup" value from the configuration
-+		}
-+		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
-+	}
-+
-+	compound RealParameter refines Parameter {
-+		Real defaultValue;
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			Real value; // this may get a "default/startup" value from the configuration
-+		}
-+		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
-+	}
-+
-+	compound BooleanParameter refines Parameter {
-+		Boolean defaultValue;
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			Boolean value; // this may get a "default/startup" value from the configuration
-+		}
-+		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
-+	}
-+	
-+	compound LongParameter refines Parameter {
-+		Real defaultValue;
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			Real value; // this may get a "default/startup" value from the configuration
-+		}
-+		//Constraint defaultValueCheck = isDefined(defaultValue); // disabled - model does not comply with
-+	}
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.text
-new file mode 100644
-index 0000000..723df32
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Basics.text
-@@ -0,0 +1,22 @@
-+Basics::Tuple::fields = data fields
-+Basics::Tuple::fieldsCheck = There must be at least one field configured
-+Basics::Field::name = name
-+Basics::Field::type = type
-+Basics::Field::typeCheck = type must be given
-+Basics::Parameter::name = name
-+Basics::IntegerParameter::name = value
-+Basics::IntegerParameter::defaultValueCheck = value must be given
-+Basics::StringParameter::name = value
-+Basics::StringParameter::defaultValueCheck = value must be given
-+Basics::RealParameter::name = value
-+Basics::RealParameter::defaultValueCheck = value must be given
-+Basics::BooleanParameter::name = value
-+Basics::BooleanParameter::defaultValueCheck = value must be given
-+Basics::FieldType::name = type name|The name of the type to be configured as it will appear in sources, algorithms, etc.
-+Basics::FieldType::class = realizing class|The class realizing the type in the implementation language. This may be a primitive or a (qualified) class name.
-+Basics::FieldType::artifact = implementing artifact|The Maven artifact implementing the type. Not required in case of types from the Java library.
-+Basics::FieldType::serializer = Kryo serializer class|The Kryo serializer responsible for efficiently serializing the configured type. Java serialization is used if no serializer is given.
-+Basics::FieldType::serializerArtifact = serializer artifact|The Maven artifact containing the Kryo serializer. This may be a the same artifact used for defining the type.
-+Basics::FieldType::isTimestamp = timestamp?|Whether this type represents a time stamp.
-+Basics::types = configured types
-+Basics::typeNamesUnique = All type names must be unique
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.ivml
-new file mode 100644
-index 0000000..55a38df
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.ivml
-@@ -0,0 +1,50 @@
-+project CloudResources {
-+	
-+	import Basics;
-+	import Observables;	
-+	
-+	annotate BindingTime bindingTime = BindingTime.compile to CloudResources;
-+	
-+	abstract compound CloudResource{
-+		
-+		MemorySize maxMemory;
-+		NonNegativeReal maxProcessors;
-+		MemorySize maxWorkingStorage;
-+	
-+		NonEmptyString name;
-+		
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			
-+			UsedHarddiscMem usedHarddiscMem;
-+			UsedProcessors usedProcessors;
-+			UsedWorkingStorage usedWorkingStorage;
-+		
-+			Ping ping;
-+			Bandwidth bandwidth;
-+		
-+		}
-+		Constraint nameCheck = isDefined(name);
-+		Constraint maxWorkingStorageCheck = isDefined(maxWorkingStorage);
-+		Constraint maxProcessorsCheck = isDefined(maxProcessors);
-+		Constraint maxMemoryCheck = isDefined(maxMemory);
-+		Constraint returnToCluster = ping < 300.0;
-+	}
-+	
-+	compound PublicCloudEnvironment refines CloudResource{
-+		NonEmptyString amiID;
-+		NonEmptyString pathToKeyFile;
-+	
-+		
-+		Constraint amiIDCheck = isDefined(amiID);
-+		Constraint pathToKeyFileCheck = isDefined(pathToKeyFile);
-+		
-+				
-+	}
-+	
-+	compound PrivateCloudEnvironment refines CloudResource{		
-+		NonEmptyString pathToTemplate;	
-+					
-+	}
-+	
-+	setOf(refTo(CloudResource)) cloudEnvironments;
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.text
-new file mode 100644
-index 0000000..0b5ca2c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/CloudResources.text
-@@ -0,0 +1,6 @@
-+CloudResources::CloudResource::nameCheck = name must be defined
-+CloudResources::CloudResource::maxWorkingStorageCheck = max working storage must be defined
-+CloudResources::CloudResource::maxProcessorsCheck = max processors must be defined
-+CloudResources::CloudResource::maxMemoryCheck = max memory must be defined
-+CloudResources::PublicCloudEnvironment::amiIDCheck = ami id must be defined
-+CloudResources::PublicCloudEnvironment::pathToKeyFileCheck = path to key file must be defined
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.ivml
-new file mode 100644
-index 0000000..301735e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.ivml
-@@ -0,0 +1,72 @@
-+project DataManagement {
-+
-+	import Basics;
-+	import Observables;
-+
-+	annotate BindingTime bindingTime = BindingTime.compile to DataManagement;
-+	annotate Boolean userVisible = true to DataManagement;
-+
-+	enum DataManagementStrategy {None, FirstInFirstOut, LeastFrequentlyUsed, LeastRecentlyUsed, LeastFrequentlyRecentlyUsed};
-+
-+	compound DataElement {
-+		NonEmptyString name;
-+		Description description;
-+		ArtifactString artifact;
-+		NonEmptyString storageLocation;
-+		DataManagementStrategy strategy;
-+		OptionalNaturalNumber timeLine;
-+		OptionalNaturalNumber cutoffCapacity;
-+
-+		Constraint strategyAssigned = isDefined(strategy); 
-+		Constraint strategyC1 = strategy == DataManagementStrategy.LeastFrequentlyUsed or strategy == DataManagementStrategy.LeastFrequentlyRecentlyUsed implies cutoffCapacity > 0;
-+		Constraint strategyC2 = strategy == DataManagementStrategy.LeastRecentlyUsed or strategy == DataManagementStrategy.LeastFrequentlyRecentlyUsed implies timeLine > 0;
-+		Constraint strategyC3 = strategy == DataManagementStrategy.None or strategy == DataManagementStrategy.FirstInFirstOut implies timeLine == 0 and cutoffCapacity == 0;
-+	}
-+	
-+	compound DataSource refines DataElement {
-+		Tuples input;
-+		Parameters parameters;
-+		ClassString sourceCls;
-+		setOf(Constraint) constraints;
-+		Integer aggregationFrequency = 60000;
-+		Constraint aggregationFrequencyConstraint = 500 <= aggregationFrequency and aggregationFrequency < 1800000; 
-+		assign(userVisible = false) to {
-+			Boolean profilingSource = false;
-+		}
-+		// runtime observables
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			Velocity velocity;
-+			Volume volume;
-+			Volatility volatility;
-+			Accuracy_Confidence accuracyConfidence;
-+			Completeness completeness;
-+			Integer aggregationFreq = aggregationFrequency;
-+			
-+			Boolean isValid = true;
-+		} 
-+	}
-+	
-+	sequenceOf(refTo(DataSource)) dataSources;
-+	Constraint sourceNamesUnique = not (hasDuplicates(dataSources->collect(s|s.name)));
-+	compound DataSink refines DataElement {		
-+		Tuples output;
-+		Parameters parameters;
-+		ClassString sinkCls;
-+		setOf(Constraint) constraints;
-+		// runtime observables
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			Velocity velocity;
-+			Volume volume;
-+			Accuracy_Confidence accuracyConfidence;
-+			//MPVolatility mpVolatility;
-+			Boolean isValid = true;
-+		} 
-+	}	
-+ 
-+	sequenceOf(refTo(DataSink)) dataSinks;
-+	Constraint sinkNamesUnique = not (hasDuplicates(dataSinks->collect(s|s.name)));
-+	compound PersistentDataElement refines DataElement{
-+	}
-+	
-+	sequenceOf(refTo(PersistentDataElement)) persistentDataElements;
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.text
-new file mode 100644
-index 0000000..dfe64e1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/DataManagement.text
-@@ -0,0 +1,34 @@
-+DataManagement::DataElement::name = name|The logical name of this source, sink, data element.
-+DataManagement::DataElement::storageLocation = storage name|The name of the container used for storing the related data according to the storage strategy.
-+DataManagement::DataElement::strategy = storage strategy|Strategy for saving data, in particular how to handle mass data over time.
-+DataManagement::DataElement::timeLine = time line|Time in milliseconds after the data element has been stored - for time-based storage strategies.
-+DataManagement::DataElement::cutoffCapacity = cutoff capacity|Capacity in bytes when to start throwing away data - for capacity-based storage strategies.
-+DataManagement::DataElement::description = description|Freetext description for documentation purposes.
-+DataManagement::DataElement::artifact = artifact|The implementing Maven artifact.
-+DataManagement::DataElement::strategyAssigned = Strategy must be assigned
-+DataManagement::DataElement::strategyC1 = Capacity-based strategies require a positive cutoff capacity
-+DataManagement::DataElement::strategyC2 = Time-based strategies require a positive time line
-+DataManagement::DataElement::strategyC3 = For the current strategy, time line and cutoff capacitiy must be 0.
-+DataManagement::DataSource::input = data fields|The data fields provided by this data source.
-+DataManagement::DataSource::constraints = SLA constraints|Runtime constraints to be considered by the adaptation.
-+DataManagement::DataSource::parameters = adaptable parameters|Parameters of the data source that can be changed at runtime.
-+DataManagement::DataSource::sourceCls = class|The implementing Java class as qualified class name.
-+DataManagement::DataSource::velocity = data stream velocity (runtime)|Data stream velocity
-+DataManagement::DataSource::volume = data stream volume (runtime)|Data stream volumes
-+DataManagement::DataSource::volatility = data stream volatility (runtime)|Data stream volatility
-+DataManagement::DataSource::confidence = data confidence (runtime)|Data stream confidence
-+DataManagement::DataSource::completeness = data completeness (runtime)|Data completeness
-+DataManagement::DataSource::profilingSource = profiling|internal use - shall not be visible - do not set to true
-+DataManagement::DataSource::aggregationFrequency = volume aggregation frequency|How often shall the volume aggregation be executed (valid values in ms are between 500 and 1800000).
-+DataManagement::DataSource::aggregationFrequencyConstraint = Volume aggregation frequency is not within 500 and 1800000 ms. 
-+DataManagement::dataSources = configured data sources
-+DataManagement::sourceNamesUnique = All source names must be unique
-+DataManagement::DataSink::output = data fields|The data fields accepted by this data sink.
-+DataManagement::DataSink::parameters = parameters|Configuration parameters of the data sink that can be changed at runtime.
-+DataManagement::DataSink::constraints = SLA constraints|Runtime constraints to be considered by the adaptation.
-+DataManagement::DataSink::sinkCls = class|The implementing Java class as qualified class name.
-+DataManagement::DataSink::velocity = data stream velocity (runtime)|Data stream velocity
-+DataManagement::DataSink::volume = data stream volume (runtime)|Data stream volume
-+DataManagement::DataSink::confidence = data confidence (runtime)|Data stream confidence
-+DataManagement::dataSinks = configured data sinks
-+DataManagement::sinkNamesUnique = All sink names must be unique
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.ivml
-new file mode 100644
-index 0000000..111162b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.ivml
-@@ -0,0 +1,35 @@
-+project Families {
-+	
-+	import Basics;
-+	import Algorithms;
-+	
-+	annotate BindingTime bindingTime = BindingTime.compile to Families;
-+	
-+	compound Family {
-+		NonEmptyString name;
-+		Description description;
-+		Tuples input;
-+		Tuples output;
-+		Parameters parameters;
-+		setOf(refTo(Algorithm)) members; 
-+
-+		// we go now for names + types as required by the pipeline		
-+//		Constraint inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input);
-+//		Constraint outputCheck = members->forAll(refTo(Algorithm) algorithm | output == algorithm.output);
-+		Constraint inputCheck = members->forAll(refTo(Algorithm) algorithm | fieldCheck(input, algorithm.input));
-+		Constraint outputCheck = members->forAll(refTo(Algorithm) algorithm | fieldCheck(output, algorithm.output));
-+		Constraint parameterCheck = members->forAll(refTo(Algorithm) algorithm | contains(parameters, algorithm.parameters));
-+		Constraint memberCheck = size(members) > 0 and isDefined(members);
-+		Constraint inputGivenCheck = isDefined(input); //untested
-+		Constraint outputGivenCheck = isDefined(output); //untested		
-+	}
-+
-+	def static Boolean contains(Parameters parameters1, Parameters parameters2) = parameters2->forAll(p2 | parameters1->exists(p1 | p1.name == p2.name and typeOf(p1) == typeOf(p2)));
-+
-+	setOf(refTo(Family)) families;
-+	Constraint familyNameUnqiue = size(families->collect(f|f.name)) == size(families);
-+	def static sequenceOf(sequenceOf(NonEmptyString)) collectFieldNames(Tuples tuples) = tuples->collect(Tuple tuple|append(tuple.fields->collect(Field field|field.name), tuple.name)); // boldly add the tuple name for checking
-+	def static sequenceOf(sequenceOf(refTo(FieldType))) collectFieldTypes(Tuples tuples) = tuples->collect(Tuple tuple|tuple.fields->collect(Field field | field.type));
-+	def static Boolean fieldOverlapCheck(Tuples fTuples, Tuples aTuples) = overlaps(collectFieldNames(fTuples), collectFieldNames(aTuples)) and overlaps(collectFieldTypes(fTuples), collectFieldTypes(aTuples));
-+	def static Boolean fieldCheck(Tuples fTuples, Tuples aTuples) = (collectFieldNames(fTuples) ==  collectFieldNames(aTuples)) and (collectFieldTypes(fTuples) == collectFieldTypes(aTuples));
-+} 
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.text
-new file mode 100644
-index 0000000..4ffc2dc
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Families.text
-@@ -0,0 +1,28 @@
-+Families::Family::name = name|The logical name of the algorithm family as it is used in pipelines.
-+Families::Family::input = input fields|The input data fields accepted by this family (and its members).
-+Families::Family::output = output fields|The output data fields provided by this family (and its members).
-+Families::Family::members = family members|The actual members of the family serving as a pool for runtime selection.
-+Families::Family::description = description|Freetext description for documentation purposes.
-+Families::Family::parameters = adaptable parameters|Parameters of the family that can be changed at runtime.
-+Families::Family::members = members|The actual algorithm members of this family.
-+Families::Family::memberCheck = member must be configured
-+Families::Family::inputCheck = Input of at least one algorithm in the Family does not match the input of the Family
-+Families::Family::outputCheck = Output of at least one algorithm in the Family does not match the output of the Family
-+Families::Family::parameterCheck = Algorithm parameters must be declared in Family
-+Families::Family::memberCount = There should be at least 1 member
-+Families::Family::inputGivenCheck = Input should be assigned
-+Families::Family::outputGivenCheck = Output should be assigned
-+Families::Family::latency = processing latency (runtime)|algorithm processing latency in milliseconds
-+Families::Family::throughputItems = throughput in items (runtime)|algorithm throughput in items per second
-+Families::Family::throughputVolume = throughput in bytes (runtime)|algorithm throughput in bytes per second
-+Families::Family::usedMemory = memory use (runtime)|algorithm memory use in bytes
-+Families::Family::accuracyConfidence = accuracy confidence (runtime)|accuracy in terms of confidence
-+Families::Family::accuracyErrorRate = accuracy error rate (runtime)|accuracy in terms of error rate
-+Families::Family::believability = believability (runtime)|believability
-+Families::Family::relevancy = relevancy (runtime)|relevancy
-+Families::Family::completeness = completeness (runtime)|completeness
-+Families::Family::volume = data stream volume (runtime)|processed data stream volume in bytes
-+Families::Family::velocity = data stream velocity (runtime)|processed stream velocity in items per second
-+Families::Family::variety = data stream variety (runtime)|processed stream variety
-+Algorithms::algNamesUnique = All algorithm names must be uniqueFamilies::families = configured families
-+Families::familyNameUnqiue = All family names must be unique
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.ivml
-new file mode 100644
-index 0000000..7835f36
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.ivml
-@@ -0,0 +1,64 @@
-+project Hardware {
-+
-+    import Basics;
-+    import Observables;
-+	
-+	annotate BindingTime bindingTime = BindingTime.compile to Hardware;
-+	
-+	enum MachineRole {Manager, Worker};
-+	
-+	compound Machine {
-+		NonEmptyString name;
-+		MemorySize memory;          // open
-+		PositiveInteger processors; // open
-+        NaturalNumber executors;    // may be 0, shall not process then
-+		Frequency frequency;        // open
-+		setOf(PortInteger) ports;
-+		MachineRole role;
-+		assign(bindingTime = BindingTime.runtimeMon) to { 
-+            Bandwidth bandwidth;
-+            Used_Memory usedMemory;
-+            Available_Memory availableMemory;
-+            Available_Frequency availableFrequency;
-+            Load load;
-+		}
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+		    IsAvailable available;
-+		}
-+		Constraint portsCheck = isDefined(ports);
-+		Constraint roleCheck = isDefined(role);
-+		// managers do not have configured ports
-+		Constraint managerRole = role == MachineRole.Manager implies ports.isEmpty();
-+		// workers without configured ports receive the default Storm ports
-+        Constraint workerRole = role == MachineRole.Worker and ports.isEmpty() implies ports == {6700, 6701, 6702, 6703};
-+   	}
-+	 
-+	  
-+	setOf(refTo(Machine)) machines;
-+
-+	// legacy
-+	//Constraint duplicatePorts = machines->apply(Machine machine; sequenceOf(Integer) usedPorts = {} | usedPorts.union(machine.ports.asSequence())).hasDuplicates() == false;
-+	
-+	// At least one manager must be assigned
-+	Constraint managerReq = machines->exists(refTo(Machine) machine | machine.role == MachineRole.Manager);
-+	
-+	// At least one worker must be assigned
-+	Constraint workerReq = machines->exists(refTo(Machine) machine | machine.role == MachineRole.Worker);	
-+ 
-+	// Machine names must be unique
-+ 	Constraint machineName = machines->collect(m|m.name).size() == machines.size();
-+ 	
-+// 	Constraint cloudCheck = (usedMachines / (usedMachines + availableMachines)) < 0.8;
-+// 	Constraint testConstraint = usedMachines < 5;
-+ 	//Constraint cloudCheckRe = (usedMachines / (usedMachines + availableMachines)) < 0.6;
-+ 
-+    enum ClusterScalingMode {UseAll, ModuloMachineCount};
-+    ClusterScalingMode clusterScalingMode = ClusterScalingMode.ModuloMachineCount;
-+ 
-+ 	assign(bindingTime = BindingTime.runtimeMon) to {
-+ 		//Constraint cloudCheck = (usedMachines / availableMachines) < 0.8;
-+	    Used_Machines usedMachines = 0;
-+	    Available_Machines availableMachines = 0;
-+	}
-+ 
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.text
-new file mode 100644
-index 0000000..5e5206b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Hardware.text
-@@ -0,0 +1,24 @@
-+Hardware::Machine::name = network name|The network name of the machine, may be a qualified name or an IP address.
-+Hardware::Machine::memory = total amount of memory (KB)|The total amount of memory (future use in adaptation).
-+Hardware::Machine::processors = number of processor cores|The number of processor cores (future use in adaptation).
-+Hardware::Machine::executors = maximum number of executors|The maximum number of executors that can handled in parallel by this machine.
-+Hardware::Machine::frequency = maximum processor frequency (MHz)|The maximum processor frequency (future use in adaptation).
-+Hardware::Machine::ports = ports|Ports used for parallel processing. A worker shall have ports, a manager must not have ports.
-+Hardware::Machine::role = role|The role of the machine in the cluster.
-+Hardware::Machine::managerRole = If Machines role is set to manager, no ports should be used by the machine
-+Hardware::Machine::workerRole = If Machines role is set to Worker, no ports must be set to 6700, 6701, 6702, 6703
-+Hardware::Machine::bandwidth = network bandwidth (runtime)|The maximum bandwith of the network connection (future use in adaptation).
-+Hardware::machines = available machines for software execution
-+Hardware::managerReq = At least one manager should be assigned
-+Hardware::workerReq = At least one worker should be assigned
-+Hardware::machineName = Machine name must be unique
-+Hardware::duplicatePorts = At least one machine is using a port already used by another machine
-+Hardware::usedMachines = total number of used machines (runtime)
-+Hardware::availableMachines= total number of available machines (runtime)
-+Hardware::Machine::portsCheck = ports must be configured
-+Hardware::Machine::roleCheck = role must be given
-+Hardware::clusterScalingMode = cluster scaling mode|How to determine the free executors for an upcoming pipeline.
-+Hardware::ClusterScalingMode::UseAll = use all|Just use all (remaining) executors on all available machines.
-+Hardware::ClusterScalingMode::ModuloMachineCount = modulo machines|Try limit scaling to a multiplicity of the number of available machines.
-+Hardware::MachineRole::Manager = manager|A manager machine not to be used for data processing.
-+Hardware::MachineRole::Worker = worker|A worker machine used for data processing.
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.ivml
-new file mode 100644
-index 0000000..e403f6e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.ivml
-@@ -0,0 +1,37 @@
-+project Infrastructure {
-+	
-+    import Basics;
-+	import Hardware;
-+	import ReconfigurableHardware;
-+	import Families;
-+	import Observables;
-+	import Adaptivity;
-+	import Pipelines;
-+	import CloudResources; 
-+
-+	annotate BindingTime bindingTime = BindingTime.compile to Infrastructure;
-+	
-+	setOf(refTo(Pipeline)) activePipelines;
-+	ArtifactString interfaceArtifact;
-+	ArtifactString modelArtifact;
-+//	OptionalUrlString repositoryURL; 
-+	UrlString repositoryURL; 
-+	OptionalUrlString deploymentURL;
-+
-+    // function calculating the workers of the active pipelines	
-+	def static Integer activePipelinesNumWorkers() = 
-+	  activePipelines->apply(refTo(Pipeline) pipeline; Integer totalNumWorkers = 0 | totalNumWorkers = totalNumWorkers + pipeline.numworkers);
-+    
-+    // function calculating the (different) configured worker ports
-+    def static Integer workerMachinesPortsCount() =
-+      machines->select(m|m.role==MachineRole.Worker)->apply(refTo(Machine) machine; Integer usedPorts = 0 | usedPorts = usedPorts + machine.ports.size());
-+	
-+	// Constraint for checking if the number of workers for the active pipelines is less then reserved ports for machines	
-+	Constraint workerportCheck = activePipelinesNumWorkers() <= workerMachinesPortsCount();	
-+	Constraint activePipelinesCheck = isDefined(activePipelines);
-+	
-+    assign(bindingTime = BindingTime.runtimeMon) to {
-+        PositiveInteger clusterMonitoringFrequency = 1000;
-+    }
-+	
-+}  
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.text
-new file mode 100644
-index 0000000..71ede1e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Infrastructure.text
-@@ -0,0 +1,8 @@
-+Infrastructure::activePipelines = active pipeline|The active pipelines for which code shall be generated.
-+Infrastructure::activePipelinesCheck = active pipelines must be configured.
-+Infrastructure::subPipelineAlgorithms = sub-pipelines|Experimental - do not touch.
-+Infrastructure::interfaceArtifact = interface artifact|The Maven artifact that contains the most recent version of the interfaces of algorithm families, sources and sinks.
-+Infrastructure::modelArtifact = model artifact|The Maven artifact that contains the most recent version of this model.
-+Infrastructure::repositoryURL = repository URL|The URL of the Maven repository for obtaining artifacts from.
-+Infrastructure::deploymentURL = deployment URL|The URL of the (Nexus) Maven repository for deploying artifacts to (future use).
-+Infrastructure::workerportCheck = All pipeline number of workers should be less then reserved ports for all machines
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ModelModificationCollection.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ModelModificationCollection.text
-new file mode 100644
-index 0000000..b2bfe56
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ModelModificationCollection.text
-@@ -0,0 +1,14 @@
-+02-27  added the name attribute in the compound Tuple of Basics.ivm
-+03-02  added the description attribute in Algorithms, Families and Pipelines.
-+03-03  added an artifact attribute in Infrastructure and Pipelines.
-+       added an ArtifactString in Basics
-+04-22  added a Description type in Basics
-+       replaced "String" of the description attribute to Description in Algorithms, Families and Pipelines.
-+       added a repositoryURL attribute in Infrastructure.
-+04-27  added a LongParameter in Basics.
-+04-28  added a modelArtifact in Infrastructure.
-+06-10  added a FieldType in Basics
-+       changed the Type from Field to FieldType
-+06-12  added a debug attribute to Pipeline.
-+06-16  added a port attribute for MPCCNode in ReconfigurableHardware.
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.ivml
-new file mode 100644
-index 0000000..8be3226
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.ivml
-@@ -0,0 +1,96 @@
-+project Observables {
-+	
-+    import Basics;
-+	
-+	annotate BindingTime bindingTime = BindingTime.compile to Observables;
-+
-+    // don't move these alias definitions!
-+    // define each category of observable / quality property as an own type
-+    // avoid derived types with constraints here - speed up reasoning
-+    
-+    // time-behavior
-+    typedef Latency Integer;
-+    typedef Throughput_Items Integer;
-+    typedef Throughput_Volume Integer;
-+    typedef Enactment_Delay Integer;
-+    
-+    // resource utilization
-+    typedef Used_Memory Integer;
-+    typedef Available_Memory Integer;
-+    typedef Available_Frequency Integer;
-+    typedef Used_Machines Integer;
-+    typedef Available_Machines Integer;
-+    typedef Bandwidth Real;
-+    typedef Capacity Real;
-+    typedef Executors Integer;
-+    typedef Hosts Integer;
-+    typedef Tasks Integer;
-+    typedef IsAvailable Boolean;
-+    typedef Load Real;
-+    typedef Ping NonNegativeReal; // TODO new
-+    typedef UsedHarddiscMem Integer; // TODO new
-+    typedef UsedProcessors NonNegativeReal; // TODO new
-+    typedef UsedWorkingStorage PositiveInteger; // TODO new
-+    
-+    typedef Accuracy_Confidence Real;
-+    typedef Accuracy_Error_Rate Real;
-+    typedef Believability Real;
-+    typedef Relevancy Real;
-+    typedef Completeness Real;
-+    // MPVolatility?
-+    
-+    typedef Volume Real;
-+    typedef Velocity Real;
-+    typedef Volatility Real;
-+    typedef Variety Integer;
-+    typedef Items Real;
-+
-+    abstract compound ObservableDecl {
-+    	NonEmptyString type; // not nice
-+    }
-+
-+    compound QualityParameter refines ObservableDecl {
-+    }
-+
-+    compound ConfiguredQualityParameter refines QualityParameter{
-+    	NonEmptyString monitorCls = null;
-+    	OptionalArtifactString artifact;
-+    }
-+
-+    sequenceOf(ConfiguredQualityParameter) qualityParameters = {
-+    	{type="Latency"},
-+    	{type="Throughput_Items"},
-+    	{type="Throughput_Volume"},
-+    	{type="Enactment_Delay"},
-+    	{type="Used_Memory"},
-+    	{type="Used_Machines"},
-+    	{type="Available_Machines"},
-+    	{type="Bandwidth"},
-+    	{type="Capacity"},
-+    	{type="Executors"},
-+        {type="Tasks"},
-+        {type="IsAvailable"}, // internal
-+    	{type="Accuracy_Confidence"},
-+    	{type="Accuracy_Error_Rate"},
-+    	{type="Believability"},
-+    	{type="Relevancy"},
-+    	{type="Completeness"},
-+    	{type="Volume"},
-+    	{type="Velocity"},
-+    	{type="Volatility"},
-+    	{type="Variety"},
-+    	{type="Items"},
-+    	{type="Ping"},
-+    	{type="UsedHarddiscMem"},
-+    	{type="UsedProcessors"},
-+    	{type="UsedWorkingStorage"}
-+    };
-+    Constraint paramTypes = qualityParameters->collect(p|p.type).asSet().size() == qualityParameters.size();
-+    
-+    sequenceOf(ConfiguredQualityParameter) configuredParameters = {};
-+    Constraint cfgParamTypes = configuredParameters->collect(p|p.type).asSet().size() == configuredParameters.size();
-+    	 
-+    freeze {
-+    	qualityParameters;
-+    }
-+} 
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.text
-new file mode 100644
-index 0000000..d7c69fa
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Observables.text
-@@ -0,0 +1,8 @@
-+Observables::paramTypes = Quality parameter count must much
-+Observables::cfgParamTypes = Configuration parameter count must much
-+Observables::ObservableDecl::type = type|The observable type this element is assigned to.
-+Observables::ConfiguredQualityParameter::monitorCls = monitor|The (optional) class name of the monitor observing the value.
-+Observables::ConfiguredQualityParameter::artifact = artifact|The (optional) artifact specification implementing the monitor.
-+Observables::ObservableDecl = Characterized an observable.
-+Observables::QualityParameter = Characterizes a quality parameter.
-+Observables::ConfiguredQualityParameter = Characterized an (externally defined) quality parameter.
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.ivml
-new file mode 100644
-index 0000000..530662b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.ivml
-@@ -0,0 +1,351 @@
-+project Pipelines {
-+   
-+	import Basics;
-+	import Families;
-+	import DataManagement;
-+	import Hardware;
-+	import CloudResources;
-+	import Adaptivity;
-+	   
-+	annotate BindingTime bindingTime = BindingTime.compile to Pipelines;
-+	annotate Boolean userVisible = true to Pipelines;
-+
-+	enum Grouping {shuffleGrouping, fieldsGrouping, globalGrouping, directGrouping, allGrouping, customGrouping, noneGrouping}; // this is very storm specific - can we infer this from the element type?
-+	enum Scaling {doNotScale, startAsIs, useFree};
-+
-+	compound LoadShedder {
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			String name;
-+			Real lastDeviation;
-+			Parameters parameters;
-+		}
-+	}
-+	
-+	// all elements in a pipeline
-+	abstract compound PipelineElement {
-+		NonEmptyString name;
-+		setOf(Constraint) constraints = {}; // user constraints
-+		
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			Boolean isValid = true;
-+			refTo(CloudResource) environment;		   
-+			PositiveInteger monitoringFrequency = 500;
-+			PositiveInteger resourceMonitoringFrequency = 1000;
-+		}
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			LoadShedder shedder;
-+		}
-+	} 
-+   
-+	// a flow among pipeline nodes
-+	compound Flow refines PipelineElement {
-+		refTo(PipelineNode) destination;
-+		Grouping grouping;
-+		refTo(Tuple) tupleType;
-+		Constraint destinationConst = typeOf(destination) <> Source;
-+		Constraint destinationCheck = isDefined(destination);
-+		Constraint groupingCheck = isDefined(grouping);
-+		Constraint tupleTypeCheck = isDefined(tupleType);
-+	}
-+	
-+	// all nodes in a pipeline
-+	abstract compound PipelineNode refines PipelineElement{
-+		PositiveInteger parallelism;      // configured executors
-+		OptionalPositiveInteger maxParallelism;
-+		OptionalPositiveInteger numtasks; // configured tasks
-+		OptionalPositiveInteger maxNumtasks;
-+		Boolean loadShedding = false; //allow for loadShedding
-+		Boolean scalable = false;         // allow for pipeline scaling on startup?
-+		Constraint stormInvariant = parallelism <= numtasks;  // Storm invariant refined StormPipelineNode?
-+		Constraint maxParallel = parallelism <= maxParallelism;
-+        Constraint maxTasks = numtasks <= maxNumtasks;
-+		assign (userVisible = false) to {
-+			Tuples inputTypes; 
-+			Tuples outputTypes;
-+		}
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			Capacity capacity;
-+			Tasks tasks;
-+			capacity <= capacityHighWatermark; // quality constraint -> trigger adaptation if violated
-+			executors > 1 and supportsTaskReallocation implies capacity >= capacityLowWatermark; // scale down only if we can change something
-+		}
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+            Executors initialExecutors;
-+			Executors executors;
-+		}
-+	}
-+	
-+	compound Source refines PipelineNode {
-+		setOf(refTo(Flow)) output;
-+		refTo(DataSource) source;
-+		eval { // TODO enable eval, get rid of inputTypesAssigned/outputTypesAssigned
-+			inputTypes = source.input; 
-+		}
-+		setOf(refTo(Parameter)) permissibleParameters;
-+		Constraint permissibleParametersFamilyCheck = isDefined(permissibleParameters) implies collectParameters(permissibleParameters).intersection(collectParameters(source.parameters)) == collectParameters(permissibleParameters);
-+ 		Constraint sourceTypeCheck = typeCheck(self, self.output);
-+//		Constraint outputCheck = isDefined(output); //allow to configure one source along with the pipeline
-+		Constraint sourceCheck = isDefined(source);
-+//		Constraint reverseProp = if isDefined(outputTypes) and isDefined(inputTypes) then outputTypes.overlaps(inputTypes) else outputTypes == output->apply(f; Tuples r12 = {} | r12 = r12.union(f.destination.inputTypes)) endif;
-+//		Constraint reverseProp = if isDefined(outputTypes) and isDefined(inputTypes) then collectFieldNames(outputTypes).overlaps(collectFieldNames(inputTypes)) and collectFieldTypes(outputTypes).overlaps(collectFieldTypes(inputTypes)) else outputTypes == output->apply(f; Tuples r12 = {} | r12 = r12.union(f.destination.inputTypes)) endif;
-+		Constraint reverseProp = if isDefined(outputTypes) and isDefined(inputTypes) then fieldOverlapCheck(outputTypes, inputTypes) else outputTypes == inputTypes endif;
-+
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			setOf(refTo(DataSource)) available;
-+			refTo(DataSource) actual;
-+			Constraint actualSourceCheck = available.includes(actual);
-+			Latency latency;
-+			Throughput_Items throughputItems;
-+			Throughput_Volume throughputVolume;
-+			Velocity velocity;
-+			Volume volume;
-+			Volatility volatility;
-+			Accuracy_Confidence accuracyConfidence;
-+			Completeness completeness;
-+			
-+			Items items;
-+		}
-+		Constraint flowTypeCheck = flowTypeCheck(self);
-+	} 
-+
-+	compound Sink refines PipelineNode {
-+		refTo(DataSink) sink;
-+		eval { // TODO enable eval, get rid of inputTypesAssigned/outputTypesAssigned
-+			outputTypes = sink.output;
-+			inputTypes = outputTypes;
-+		}
-+		setOf(refTo(Parameter)) permissibleParameters;
-+		//if isDefined(outputTypes) and isDefined(inputTypes) then outputTypes.overlaps(inputTypes) else outputTypes == inputTypes endif;
-+		Constraint sinkCheck = isDefined(sink);
-+		Constraint permissibleParametersSinkCheck = isDefined(permissibleParameters) implies collectParameters(permissibleParameters).intersection(collectParameters(sink.parameters)) == collectParameters(permissibleParameters);
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			setOf(refTo(DataSink)) available;
-+			refTo(DataSink) actual;
-+			Constraint actualSinkCheck = available.includes(actual);
-+			Latency latency;
-+			Throughput_Items throughputItems;
-+			Throughput_Volume throughputVolume;
-+			Velocity velocity;
-+			Volume volume;
-+			Accuracy_Confidence accuracyConfidence;
-+			//MPVolatility mpVolatility;
-+			Items items;
-+			Items predecessorItems;
-+			Items predictedItemsThreshold;
-+		} 
-+	} 
-+
-+	compound ReplayInfo {
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			Boolean active = false;
-+			Integer ticket;
-+			String start;
-+			String end;
-+			Real speed;
-+			String query;
-+		}
-+	}
-+	
-+	compound ReplaySink refines Sink {
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			ReplayInfo replay;
-+		}
-+	}
-+
-+	// inner node that processes something
-+	compound ProcessingElement refines PipelineNode {
-+		setOf(refTo(Flow)) output;
-+		// eval { // TODO enable eval, get rid of inputTypesAssigned/outputTypesAssigned (Constraint variables are not permitted in evals)
-+		Constraint peTypeCheck = typeCheck(self, self.output);
-+		// }
-+		//Constraint outputCheck = isDefined(output) and output.size() > 0; //@Roman, seems to affect also the source
-+	}
-+	   
-+	compound FamilyElement refines ProcessingElement {
-+		refTo(Family) family;
-+		refTo(Algorithm) defaultAlgorithm = family.members.asSequence().first();//seems this value is null
-+		setOf(refTo(Parameter)) permissibleParameters;
-+		Integer switchQueueSize = 1000;
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			// TODO available/actual shall be runtimeEnact -> Reasoner :(
-+			setOf(refTo(Algorithm)) available; 
-+			// TODO actual is not evaluated by reasoner -> RepositoryHelper
-+			refTo(Algorithm) actual;
-+			Constraint actualAlgorithmCheck = available.includes(actual);
-+			// force initialization, but only in STATIC MODE
-+			//not(isDefined(actual)) implies if isDefined(defaultAlgorithm) then actual == defaultAlgorithm else actual == available.asSequence().first() endif;
-+		
-+			// derived			
-+			Latency latency;
-+			Throughput_Items throughputItems;
-+			Throughput_Volume throughputVolume;
-+			Used_Memory usedMemory;
-+			Accuracy_Confidence accuracyConfidence;
-+			Accuracy_Error_Rate accuracyErrorRate;
-+			Believability believability;
-+			Relevancy relevancy;
-+			Completeness completeness;
-+			Volume volume;
-+			Velocity velocity;
-+			Variety variety;
-+			
-+			Items items;
-+			Items predecessorItems;
-+			Items predictedItemsThreshold;
-+		}
-+		Constraint familyCheck = isDefined(family);
-+		Constraint tuplesInputTypeCheck = typeCheckTuplesInput(self, self.family);
-+		Constraint tuplesOutputTypeCheck = typeCheckTuplesOutput(self, self.family);
-+		Constraint permissibleParametersFamilyCheck = isDefined(permissibleParameters) implies collectParameters(permissibleParameters).intersection(collectParameters(family.parameters)) == collectParameters(permissibleParameters);
-+		
-+		Constraint flowTypeCheck = flowTypeCheck(self);
-+		//Constraint defaultCheck = family.members.includes(default);
-+	} 
-+	
-+	
-+	compound DataManagementElement refines ProcessingElement {
-+		refTo(PersistentDataElement) dataManagement; 
-+		inputTypes == outputTypes;
-+		Constraint dataManagementCheck = isDefined(dataManagement);
-+		//Constraint flowTypeCheck = flowTypeCheck(self);
-+	}
-+
-+	abstract compound StreamOperationElement refines ProcessingElement {
-+		// needs to define inputTypes <-> outputTypes
-+	}
-+
-+/*	
-+	compound Artifact {
-+		NonEmptyString groupId;
-+		NonEmptyString artifactId;
-+		NonEmptyString versionNum;
-+	}
-+*/	
-+	compound SubPipelineAlgorithm refines Algorithm {
-+		refTo(SubPipeline) subPipeline;
-+	}
-+	
-+	compound Pipeline {
-+		NonEmptyString name;
-+		Description description;
-+		setOf(refTo(Source)) sources;
-+		PositiveInteger numworkers;
-+		PositiveInteger timeout = 100;
-+		ArtifactString artifact;
-+		Boolean debug = false;
-+		Boolean fastSerialization = false;
-+		Scaling scaling = Scaling.doNotScale;
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			Latency latency;
-+			Throughput_Items throughputItems;
-+			Throughput_Volume throughputVolume;
-+			Accuracy_Confidence accuracyConfidence;
-+			Accuracy_Error_Rate accuracyErrorRate;
-+			Capacity capacity;
-+			Executors executors;
-+			Tasks tasks;
-+			Hosts hosts;
-+			PositiveInteger monitoringFrequency = 1000;
-+			
-+			Boolean isValid = true;
-+			capacity <= capacityPipelineSheddingWatermark; // overall quality constraint -> trigger adaptation if violated
-+		}
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			Boolean cloudExecution;
-+		}
-+		Boolean isSubpipeline = false;
-+		setOf(Constraint) constraints = {}; // user constraints
-+		Constraint sourcesCount = if isSubpipeline == false then sources.size() > 0 else true endif;//TODO: shall not be restricted for sub-pipeline
-+		Constraint sourcesCheck = isDefined(sources);
-+		
-+	}	
-+	
-+	compound SubPipeline refines Pipeline {
-+		setOf(refTo(FamilyElement)) connectors;
-+		refTo(Family) subPipelineFamily;
-+		Constraint connectorTrueCheck = isDefined(connectors) and connectors.size() > 0;	
-+		isSubpipeline = true;
-+	}
-+	
-+	sequenceOf(refTo(Pipeline)) pipelines;
-+	Constraint pipelineNamesUnique = not(pipelines->collect(p|p.name).hasDuplicates());
-+
-+	// check the input / output types and assign the default values - used to force evaluation
-+	// none for DataManagementElement, handled through default case to enable propagation in typeCheck
-+	// replace by eval in compounds!
-+
-+	  def setOf(NonEmptyString) collectParameters(Parameters parameters) =
-+		  parameters->collect(p | p.name).asSet();
-+	  def setOf(NonEmptyString) collectParameters(setOf(refTo(Parameter)) parameters) =
-+		  parameters->collect(p | p.name);
-+
-+//	def Boolean inputTypesAssigned(PipelineNode node) = 
-+//		isDefined(node.inputTypes);
-+//
-+//	def Boolean inputTypesAssigned(Source node) = 
-+//		if isDefined(node.inputTypes) then true else node.inputTypes = node.source.input endif;
-+//
-+//	def Boolean inputTypesAssigned(Sink node) = 
-+//		if isDefined(node.inputTypes) then true else node.inputTypes = node.sink.output endif;  // only one field in sink
-+//
-+//	def Boolean inputTypesAssigned(FamilyElement node) = 
-+//		if isDefined(node.inputTypes) then true else node.inputTypes = node.family.input endif;
-+//
-+//	def Boolean outputTypesAssigned(PipelineNode node) = 
-+//		isDefined(node.outputTypes);
-+//
-+//	def Boolean outputTypesAssigned(Source node) = 
-+//		if isDefined(node.outputTypes) then true else node.outputTypes = node.source.input endif; // only one field in source
-+//
-+//	def Boolean putputTypesAssigned(Sink node) = 
-+//		if isDefined(node.outputTypes) then true else node.outputTypes = node.sink.output endif;
-+//
-+//	def Boolean outputTypesAssigned(FamilyElement node) = 
-+//		if isDefined(node.outputTypes) then true else node.outputTypes = node.family.output endif;
-+	
-+	// check types for a node and it's connected nodes
-+	
-+	def static Boolean typeCheck(PipelineNode src, setOf(refTo(Flow)) output) =
-+		output->forAll(f|typeCheck(src, f.destination));
-+		
-+	def static Boolean typeCheck(PipelineNode src, PipelineNode dst) = 
-+		if isDefined(dst) and isDefined(src) then fieldOverlapCheck(src.outputTypes, dst.inputTypes) else dst.inputTypes == src.outputTypes endif;
-+
-+	def static Boolean typeCheckTuplesInput(FamilyElement elt, Family family) =
-+		if isDefined(elt.inputTypes) and isDefined(family.input) then fieldOverlapCheck(elt.inputTypes, family.input) else elt.inputTypes == family.input endif;
-+
-+	def static Boolean typeCheckTuplesOutput(FamilyElement elt, Family family) =
-+		if isDefined(elt.outputTypes) and isDefined(family.output) then fieldOverlapCheck(elt.outputTypes, family.output) else elt.outputTypes == family.output endif;
-+		
-+	/*
-+	 * Validation of Flow.tupleType, checks match for:
-+	 *  - FamilyElement.outputTypes
-+	 *  - DataManagementElement.outputTypes (currently, disabled in DME as it is not working for some reason)
-+	 *  - Source.output
-+	 */ 
-+	def static Boolean flowTypeCheck(FamilyElement fe) =
-+	  if isDefined(fe.outputTypes)
-+	    then flowTypeCheck(fe.outputTypes, fe.output)
-+	    else false
-+	  endif;
-+	
-+	def static Boolean flowTypeCheck(DataManagementElement dme) =
-+    if isDefined(dme.outputTypes)
-+      then flowTypeCheck(dme.outputTypes, dme.output)
-+      else false
-+    endif;
-+    
-+  def static Boolean flowTypeCheck(Source src) =
-+    if isDefined(src.outputTypes)
-+      then flowTypeCheck(src.outputTypes, src.output)
-+      else false
-+    endif;
-+	
-+	// Generic parts of Flow.tupleType check  
-+	def static Boolean flowTypeCheck(Tuples allowedTupleTypes, setOf(refTo(Flow)) outgoingFlows) =
-+	  outgoingFlows->forAll(refTo(Flow) flow | flowTypeCheck(allowedTupleTypes, flow.tupleType));
-+	
-+  def static Boolean flowTypeCheck(sequenceOf(Tuple) allowedTupleTypes, Tuple tupleTypeOfFlow) =
-+    allowedTupleTypes->exists(Tuple type| type.name == tupleTypeOfFlow.name);
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.text
-new file mode 100644
-index 0000000..aee30c5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/Pipelines.text
-@@ -0,0 +1,108 @@
-+Pipelines::PipelineElement::name = name|The logical name of the pipeline element (must be given and be unique within a pipeline).
-+Pipelines::PipelineElement::constraints = constraints|Runtime constraints to be considered during adaptation.
-+Pipelines::PipelineNode::capacity = used computational capacity (runtime)|the element's capacity in terms of percents (0-1)
-+Pipelines::PipelineNode::executors = used number of executors (runtime)|the used number of executors for the entire pipeline
-+Pipelines::PipelineNode::inputTypes = input item types|the actual input types accepted by the element
-+Pipelines::PipelineNode::outputTypes = output item types|the actual output types provided by the element
-+Pipelines::PipelineNode::parallelism = intended parallelism|The intended parallelism of this node in terms of (Storm) executors (at least 1 must be given).
-+Pipelines::PipelineNode::numtasks = intended tasks|The number of (potentially sequential or parallel Storm) tasks of this node (same as parallelism if not given).
-+Pipelines::PipelineNode::maxParallelism = maximum parallelism|The maximum parallelism of this node in terms of (Storm) executors.
-+Pipelines::PipelineNode::maxNumtasks = maximum tasks|The maximum number of (potentially sequential or parallel Storm) tasks.
-+Pipelines::PipelineNode::scalable = scalable|Shall this node be subject to pipeline scaling at pipeline startup?
-+Pipelines::PipelineNode::stormInvariant = The intended parallelism must not exceed the number of tasks.
-+Pipelines::PipelineNode::maxParallel = Intended parallelism is larger than maximum parallelism.
-+Pipelines::PipelineNode::maxTasks = Intended number of tasks is larger than maximum tasks.
-+Pipelines::Flow::destination = flow end|The end of a data flow in terms of a pipeline node.
-+Pipelines::Flow::grouping = grouping|The grouping operation defining the (Storm) data distribution policy.
-+Pipelines::Flow::destinationCheck = destination must be configured. 
-+Pipelines::Flow::groupingCheck = grouping must be configured.
-+Pipelines::Flow::destinationConst = Destination should not be source
-+Pipelines::Flow::tupleTypeCheck = tupleType must be configured.
-+Pipelines::Source::output = outgoing flows|The outgoing pipeline flows leading data to other pipeline nodes.
-+Pipelines::Source::source = data source|The actual data source from Data Management.
-+Pipelines::Source::outputCheck = output must be configured.
-+Pipelines::Source::sourceCheck = source must be configured.
-+Pipelines::Source::reverseProp = Source input and output parameters are not configured properly
-+Pipelines::Source::sourceTypeCheck = Input and output types should be the same
-+Pipelines::Source::actual = the actually selected source (runtime)|The actually selected source at runtime.
-+Pipelines::Source::available = the actually available sources (runtime)|The actually available sources at runtime.
-+Pipelines::Source::velocity = velocity of this source (runtime)|Data stream velocity
-+Pipelines::Source::volume = volume of this source (runtime)|Data stream volume
-+Pipelines::Source::volatility = volatility of this source (runtime)|Data stream volatility
-+Pipelines::Source::confidence = accuracy of this source in terms of confidence (runtime)|Data stream accuracy
-+Pipelines::Source::completeness= completeness of this source (runtime)|Data stream completeness
-+Pipelines::Source::permissibleParametersSourceCheck = permissible parameters must be from the parameters of the source.
-+Pipelines::Source::flowTypeCheck = tupleType of an outgoing flow of a Source is not supported by the Source.
-+Pipelines::Source::items = output items (runtime)|output items/s
-+Pipelines::Sink::sink = data sink|The actual data sink from Data Management.
-+Pipelines::Sink::sinkCheck = sink must be configured. 
-+Pipelines::ReplaySink::permissibleParametersSinkCheck = permissible parameters must be from the parameters of the sink.
-+Pipelines::Sink::actual = the actually selected sink (runtime)|The actually selected sink at runtime.
-+Pipelines::Sink::available = the actually available sink (runtime)|The actually available sinks at runtime.
-+Pipelines::Sink::velocity = velocity of this sink (runtime)|Data stream velocity
-+Pipelines::Sink::volume = volume of this sink (runtime)|Data stream volume
-+Pipelines::Sink::confidence = accuracy of this sink in terms of confidence (runtime)|Sink confidence
-+Pipelines::Sink::items = output items (runtime)|output items/s
-+Pipelines::Sink::predecessorItems = input items (runtime)|input items/s
-+Pipelines::Sink::predictedItemsThreshold = predicted output items threshold (runtime)|predicted threshold for output items/s
-+Pipelines::ProcessingElement::output = outgoing flows|The outgoing pipeline flows leading data to other pipeline nodes.
-+Pipelines::ProcessingElement::outputCheck = output must be configured.
-+Pipelines::ProcessingElement::peTypeCheck = Input and output types should be the same
-+Pipelines::FamilyElement::family = algorithm family|The actual algorithm family defining the potential algorithms.
-+Pipelines::FamilyElement::familyCheck = family must be configured.
-+Pipelines::FamilyElement::permissibleParametersFamilyCheck = permissible parameters must be from the parameters of its belonging family.
-+Pipelines::FamilyElement::defaultAlgorithm = default algorithm|The algorithm (from the set of members of the family) that shall be used when starting up a pipeline.
-+Pipelines::FamilyElement::tuplesInputTypeCheck = Tuples input must match 
-+Pipelines::FamilyElement::tuplesOutputTypeCheck = Tuples output must match
-+Pipelines::FamilyElement::actualAlgorithmCheck = Actual algorithm must be part of the Family
-+Pipelines::FamilyElement::accuracyConfidence = algorithm accuracy in terms of confidence
-+Pipelines::FamilyElement::actual = the actually selected algorithm (runtime)|The actually selected algorithm at runtime.
-+Pipelines::FamilyElement::available = the actually available algorithms (runtime)|The actually available algorithms at runtime.
-+Pipelines::FamilyElement::latency = latency of the actual algorithm (runtime)|processing latency of the actual algorithm in milliseconds
-+Pipelines::FamilyElement::throughputItem = item throughput of the actual algorithm (runtime)|throughput of the actual algorithm in terms of items
-+Pipelines::FamilyElement::throughputVolume = volume throughput of the actual algorithm(runtime)|throughput of the actual algorithm in terms of bytes
-+Pipelines::FamilyElement::usedMemory = memory use of the actual algorithm (runtime)|memory use of the actual algorithm
-+Pipelines::FamilyElement::accuracyErrorRate = accuracy of the actual algorithm in terms of errors (runtime)|accuracy
-+Pipelines::FamilyElement::believability = believability of the actual algorithm (runtime)|believability
-+Pipelines::FamilyElement::relevancy = relevancy of the actual algorithm (runtime)|relevancy
-+Pipelines::FamilyElement::completeness = completeness of the actual algorithm (runtime)|completeness
-+Pipelines::FamilyElement::volume = volume of the actual algorithm (runtime)|processed data stream volume in bytes
-+Pipelines::FamilyElement::velocity = velocity of the actual algorithm (runtime)|processed stream velocity in items per second
-+Pipelines::FamilyElement::variety = variety of the actual algorithm (runtime)|processed stream variety
-+Pipelines::FamilyElement::defaultCheck = The default algorithm is not member of the set of algorithms of the families.
-+Pipelines::FamilyElement::flowTypeCheck = tupleType of an outgoing flow of an FamilyElement is not supported by the family.
-+Pipelines::FamilyElement::items = output items (runtime)|output items/s
-+Pipelines::FamilyElement::predecessorItems = input items (runtime)|input items/s
-+Pipelines::FamilyElement::predictedItemsThreshold = predicted output items threshold (runtime)|predicted threshold for output items/s
-+Pipelines::DataManagementElement::dataManagement = data element|The data management element indicating the actual storage for the data and the storage strategy.
-+Pipelines::DataManagementElement::dataManagementCheck = dataManagement must be configured.
-+Pipelines::DataManagementElement::flowTypeCheck = tupleType of an outgoing flow of a DataManagementElement is not supported by the DataManagementElement.
-+Pipelines::SubPipelineAlgorithm::subPipeline = subPipeline|Experimental - do not use.
-+Pipelines::Pipeline::name = pipeline name|The logical name of the pipeline.
-+Pipelines::Pipeline::sources = data sources|The data sources of this pipeline.
-+Pipelines::Pipeline::sourcesCheck = sources must be configured.
-+Pipelines::SubPipeline::connectorTrueCheck = connector must be configured and at least one connector must be assigned.
-+Pipelines::Pipeline::numworkers = number of workers|The maximum number of workers to allocate.
-+Pipelines::Pipeline::timeout = message timeout|The timeout for disappearing messages.
-+Pipelines::Pipeline::artifact = artifact|The Maven artifact where to deploy the generated pipeline code to.
-+Pipelines::Pipeline::debug = debug mode|Whether additional debugging code shall be generated, such as extensive logging.
-+Pipelines::Pipeline::fastSerialization = fast serialization|Use kryo serializers for the pipeline. For full performance, also the types shall provide serializers.
-+Pipelines::Pipeline::isSubPipeline = isSubPipeline|Experimental - do not use.
-+Pipelines::Pipeline::connectors = connectors|Experimental - do not use.
-+Pipelines::Pipeline::subPipelineFamily = subPipelineFamily|Experimental - do not use.
-+Pipelines::Pipeline::constraints = constraints|Runtime constraints to be considered during adaptation.
-+Pipelines::Pipeline::sourcesCount = At least one source must be assigned
-+Pipelines::Pipeline::latency = pipeline latency (runtime)|the maximum pipeline processing latency in milliseconds
-+Pipelines::Pipeline::throughputItem = pipeline item throughput (runtime)|the overall pipeline throughput in items per second
-+Pipelines::Pipeline::throughputVolume = pipeline volume throughput (runtime)|the overall pipeline throughput in bytes per second
-+Pipelines::Pipeline::accuracyConfidence = pipeline accuracy in terms of confidence (runtime)|the overall pipeline accuracy in terms of confidence
-+Pipelines::Pipeline::accuracyErrorRate = overall pipeline accuracy in terms of errors (runtime)|the overall pipeline accuracy in terms of errors
-+Pipelines::Pipeline::capacity = used computational capacity (runtime)|the overall pipeline capacity in terms of percents (0-1)
-+Pipelines::Pipeline::executors = used number of executors (runtime)|the used number of executors for the entire pipeline
-+Pipelines::Pipeline::tasks = used number of tasks (runtime)|the used number of tasks for the entire pipeline
-+Pipelines::Pipeline::scaling = scaling mode|How shall pipeline be scaled on startup?
-+Pipelines::pipelines = configured pipelines
-+Pipelines::pipelineNamesUnique = All pipeline names must be unique
-+Pipelines::Scaling::doNotScale = do not scale|Do not scale pipeline upon startup at all. If it does not fit, reject start.
-+Pipelines::Scaling::startAsIs = start as configured|If up-scaling is possible but not needed, start as configured.
-+Pipelines::Scaling::useFree = start with all free executor|If up-scaling is possible but not needed, start with all free executors.
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.ivml
-new file mode 100644
-index 0000000..03faf9f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.ivml
-@@ -0,0 +1,42 @@
-+project ReconfigurableHardware {
-+	
-+	import Basics;
-+	import Observables;
-+	
-+	annotate BindingTime bindingTime = BindingTime.compile to ReconfigurableHardware;
-+	
-+	compound HwNode {
-+		NonEmptyString name;
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			Bandwidth bandwidth;
-+		}
-+		assign(bindingTime = BindingTime.runtimeEnact) to {
-+			IsAvailable available;
-+		}
-+	}
-+	
-+	compound MPCCNode refines HwNode{
-+		NonEmptyString host; // possibly needed to direct network stream to
-+		PortInteger monitoringPort;
-+		PortInteger commandSendingPort;
-+		PortInteger commandReceivingPort;
-+		PositiveInteger numCPUs;
-+		PositiveInteger numDFEs;
-+		assign(bindingTime = BindingTime.runtimeMon) to {
-+			Used_Machines usedCPUs;
-+			Used_Machines usedDFEs;
-+			Available_Machines availableCPUs;
-+			Available_Machines availableDFEs;
-+		}
-+	} 
-+	
-+	sequenceOf(refTo(HwNode)) clusters;
-+	Constraint namesUnique = size(clusters->collect(h|h.name)) == size(clusters);
-+
-+	assign(bindingTime = BindingTime.runtimeMon) to {
-+		Used_Machines usedCPUs;
-+		Used_Machines usedDFEs;
-+		Available_Machines availableCPUs;
-+		Available_Machines availableDFEs;
-+	}
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.text
-new file mode 100644
-index 0000000..88965bd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/ReconfigurableHardware.text
-@@ -0,0 +1,14 @@
-+ReconfigurableHardware::HwNode::name = node name|The logical name of the hardware node as used, e.g., in algorithms.
-+ReconfigurableHardware::MPCCNode::host = host node address|The network name or IP address of the hardware node
-+ReconfigurableHardware::MPCCNode::monitoringPort = monitoring port|The IP port used for monitoring the availability of individual hardware units.
-+ReconfigurableHardware::MPCCNode::commandSendingPort = command sending port|The IP port used for sending commands and algorithms to the hardware node.
-+ReconfigurableHardware::MPCCNode::commandReceivingPort = command receiving port|The IP port used for receiving command responses from the hardware node.
-+ReconfigurableHardware::HwNode::bandwidth = network bandwidth (runtime)|The network bandwidth of the hardware node (future use in adaptation).
-+ReconfigurableHardware::MPCCNode::numCPUs = number of CPUs|The number of CPUs of this MPCC hardware node.
-+ReconfigurableHardware::MPCCNode::numDFEs = number of DFEs|The number of DFEs of this MPCC hardware node.
-+ReconfigurableHardware::MPCCNode::usedCPUs = actual used CPUs (unused)
-+ReconfigurableHardware::MPCCNode::usedDFEs = actual used DFEs (runtime)
-+ReconfigurableHardware::MPCCNode::availableCPUs = actual available CPUs (unused)
-+ReconfigurableHardware::MPCCNode::availableDFEs = actual available DFEs (runtime)
-+ReconfigurableHardware::clusters = available hardware machines for hardware execution
-+ReconfigurableHardware::namesUnique = Cluster node names must be unique
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.ivml
-new file mode 100644
-index 0000000..701ef34
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.ivml
-@@ -0,0 +1,29 @@
-+project StrategiesTactics {
-+
-+    import Basics;
-+    import Observables;
-+	import Adaptivity;
-+	 
-+	annotate BindingTime bindingTime = BindingTime.compile to StrategiesTactics;
-+
-+    // relative importance of the quality dimensions as well as the tradeoffs to be considered for cross-pipeline adaptation
-+
-+	assign(bindingTime = BindingTime.runtimeMon) to {
-+		Boolean checkAtStartup = true;
-+        Boolean checkBeforeShutdown = true;
-+        Boolean checkAfterShutdown = true;
-+	    Boolean slaViolation = true;
-+		Boolean dataReplay = true;
-+		Boolean loadShedding = true;
-+
-+        Boolean sourceVolumePrediction = true;
-+        Boolean sourceVolumeCapacityCheck = true;
-+		Boolean cloudAdaptation = true; 
-+		Boolean parameterChange = true;
-+		Boolean parameterChangeExternal = true;
-+		Boolean algorithmChange = true;
-+		Boolean algorithmChangeExternal = true;
-+		Boolean dataReplayExternal = true;
-+	}
-+	
-+}           
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.text b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.text
-new file mode 100644
-index 0000000..f8907ba
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/meta/StrategiesTactics.text
-@@ -0,0 +1,14 @@
-+StrategiesTactics::sourceVolumePrediction = Source volume prediction|Warn the adaptation if volumes of sources will probably increase.
-+StrategiesTactics::sourceVolumeCapacityCheck = Source volume check|Use the source volume prediction to check whether a change in source subscription will probably exceed available resources.
-+StrategiesTactics::cloudAdaptation = Cloud adaptation|Enable dynamic migration of pipelines to a configured cloud (experimental).
-+StrategiesTactics::checkAtStartup = Pipeline startup|Checks and adjusts pipelines at pipeline startup regarding their resource consumption.
-+StrategiesTactics::checkBeforeShutdown = Pipeline shutting down|Checks a pipeline shutdown.
-+StrategiesTactics::checkAfterShutdown = Pipeline shutdown|Adjusts pipelines after pipeline shutdown regarding their resource consumption.
-+StrategiesTactics::slaViolation = Constraint violation|Performs adaptations up violations of configured constraints.
-+StrategiesTactics::dataReplay = Data replay|Enables runtime adaptation of (enabled) data replay at overload.
-+StrategiesTactics::loadShedding = Load shedding|Enables runtime adaptation of load shedding at overload.
-+StrategiesTactics::parameterChange = Parameter change|Enables internal adaptation through parameter changes.
-+StrategiesTactics::parameterChangeExternal = Parameter change (external)|Enables external adaptation through parameter changes.
-+StrategiesTactics::algorithmChange = Algorithm change|Enables internal adaptation through algorithm changes.
-+StrategiesTactics::algorithmChangeExternal = Algorithm change (external)|Enables external adaptation through algorithm changes.
-+StrategiesTactics::dataReplayExternal = Data replay command|Allows external commands controlling the data replay.
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/modelArtifactPom.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/modelArtifactPom.vtl
-new file mode 100644
-index 0000000..6053165
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/modelArtifactPom.vtl
-@@ -0,0 +1,117 @@
-+template modelArtifactPom(Configuration config, FileArtifact target, String modelArtifact) {
-+	def appendPlugins(Text text) {		
-+//	            text.append("        <plugin>
-+//	        <groupId>org.apache.maven.plugins</groupId>
-+//	        <artifactId>maven-compiler-plugin</artifactId>
-+//	        <version>3.0</version>
-+//	        <configuration>
-+//	            <source>1.7</source>
-+//	            <target>1.7</target>
-+//	        </configuration>              
-+//	     </plugin>\n");	
-+	            text.append("         <plugin>
-+                <artifactId>maven-install-plugin</artifactId>
-+                <version>2.3.1</version>
-+                <configuration>
-+                    <createChecksum>true</createChecksum>
-+                </configuration>
-+            </plugin>\n");  
-+            text.append("        <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-assembly-plugin</artifactId>
-+                <version>2.5.3</version>
-+                <dependencies>
-+                    <dependency>
-+                        <groupId>eu.qualimaster</groupId>
-+                        <artifactId>AlgorithmAssemblies</artifactId>
-+                        <version>0.5.0-SNAPSHOT</version>
-+                    </dependency>
-+                </dependencies>
-+		        <executions>
-+		          <execution>
-+                        <id>make-profilingAssembly</id>
-+                        <phase>package</phase>
-+                        <goals>
-+                            <goal>single</goal>
-+                        </goals>
-+                        <configuration>
-+                            <descriptorRefs>
-+                                <descriptorRef>settings</descriptorRef>
-+                            </descriptorRefs>
-+                        </configuration>
-+                    </execution>
-+		        </executions>
-+            </plugin>\n");
-+//	            text.append("        <plugin>
-+//                <groupId>org.apache.maven.plugins</groupId>
-+//                <artifactId>maven-resources-plugin</artifactId>
-+//                <version>2.6</version>              
-+//                <executions>
-+//                    <execution>
-+//                        <id>copy-resources</id>
-+//                        <phase>validate</phase>
-+//                        <goals>
-+//                            <goal>copy-resources</goal>
-+//                        </goals>
-+//					    <configuration>
-+//                        	<outputDirectory>"+"$"+"{basedir}/target</outputDirectory>
-+//                    		<includeEmptyDirs>false</includeEmptyDirs>
-+//                   			<resources>
-+//                        		<resource>
-+//                            		<directory>"+"$"+"{basedir}/adaptation</directory>
-+//									<filtering>false</filtering>
-+//                        		</resource>
-+//								<resource>
-+//                            		<directory>"+"$"+"{basedir}/infrastructure</directory>
-+//									<filtering>false</filtering>
-+//                        		</resource>
-+//								<resource>
-+//                            		<directory>"+"$"+"{basedir}/meta</directory>
-+//								<filtering>false</filtering>
-+//                        		</resource>
-+//                    		</resources>                   
-+//                		</configuration>
-+//                    </execution>
-+//                </executions>
-+//            </plugin>\n");         	
-+		}
-+		
-+	def appendResources(Text text) {
-+		text.append("        <resource>
-+            <directory>"+"$" + "{basedir}"+"</directory>
-+            <filtering>false</filtering>
-+                <includes>
-+                    <include>EASy/**/*.*</include>
-+					<include>settings/**/*.*</include>
-+                </includes>
-+				<excludes>
-+                    <exclude>pom.xml</exclude>
-+                </excludes>
-+        </resource>\n");
-+	}
-+		
-+	def main(Configuration config, FileArtifact target, String modelArtifact) {
-+		Text text = target.getText();
-+		text.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n");		
-+		text.append("  <modelVersion>4.0.0</modelVersion>\n");
-+		sequenceOf(String) artList = modelArtifact.split(":");
-+		if(artList.size() == 3) {
-+		    text.append("  <groupId>${artList[0]}</groupId>\n");
-+			text.append("  <artifactId>${artList[1]}</artifactId>\n");
-+			text.append("  <version>${artList[2]}</version>\n");	
-+		}		
-+		text.append("  <packaging>jar</packaging>\n");
-+		text.append("\n");
-+		text.append("  <build>\n");
-+//		text.append("    <sourceDirectory>"+"$"+"{basedir}/meta</sourceDirectory>\n");
-+		text.append("    <plugins>\n");
-+		appendPlugins(text);
-+		text.append("    </plugins>\n");
-+		text.append("    <resources>\n");
-+		appendResources(text);
-+		text.append("    </resources>\n");
-+		text.append("  </build>\n");
-+		text.append("</project>");
-+		target.rename("pom.xml");
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinePom.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinePom.vtl
-new file mode 100644
-index 0000000..68d94d0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinePom.vtl
-@@ -0,0 +1,583 @@
-+import commonVTLMethods;
-+import commonPomMethods;
-+@advice(QM)
-+template pipelinePom(Configuration config, FileArtifact target, Pipeline pipeline, String repoURL, String interfaceArtifact, Boolean profiling, setOf(String) subPipNames) {
-+    Boolean isSubPipeline = false;
-+    setOf(DecisionVariable) flows = {};//collect the visited flows
-+    setOf(String) artifacts = {}; //mark visited artifacts
-+    def processElement(sequenceOf(DecisionVariable) output, setOf(String) nodes, Text text) {     	
-+        for(Flow v : output) { 
-+        	if(flows.excludes(v)) {
-+        		flows.add(v);
-+        		DecisionVariable elt = v.destination;  
-+				checkForPipelineNode(elt, nodes, text);          
-+	            processElement(elt.byName("output").variables(), nodes, text);
-+        	}
-+        } 
-+    }
-+	def checkForPipelineNode(DecisionVariable elt, setOf(String) nodes, Text text) {
-+		String nodeName = elt.varName();
-+        String nodeClsName = elt.varName().firstToUpperCase() + elt.type();
-+        if(elt.type() == "Source" and !isStringExisted(nodeName, nodes)) {               	
-+	        Source src =elt;
-+	        produceDependencies(src, text);
-+	    }
-+		if(elt.type() == "Sink" or elt.type() == "ReplaySink" and !isStringExisted(nodeName, nodes)) {
-+            Sink snk = elt;
-+            produceDependencies(snk, text);
-+        }
-+        if(elt.type() == "FamilyElement" and !isStringExisted(nodeName, nodes)) {
-+            FamilyElement fe = elt;
-+            produceDependencies(fe, text);
-+        }
-+        nodes.add(nodeName);		
-+	}
-+	def produceDependencies(Source source, Text text) {
-+		DataSource dataSrc = source.source;
-+		if (!dataSrc.profilingSource) {
-+	   	    String artifact = dataSrc.artifact;  
-+	   	    if(!isStringExisted(artifact, artifacts)) {
-+	   	    	artifacts.add(artifact);
-+	   	    	//for source class dependencies
-+	            sequenceOf(String) artList = artifact.split(":");
-+	            if(artList.size() == 3) {                		
-+		       	    text.append("    <dependency>\n      <groupId>${artList[0]}</groupId>\n      <artifactId>${artList[1]}</artifactId>\n");
-+		       	    text.append("      <version>${artList[2]}</version>\n    </dependency>\n");                		
-+	            }
-+	   	    }                       
-+        }
-+	}
-+	
-+	def produceDependencies(FamilyElement familyElt, Text text) {
-+        Family fm = familyElt.family;
-+        //added all algorithm dependencies
-+        for(Algorithm alg : fm.members) {
-+            String artifact;
-+            if(isHardwareAlgorithm(alg)) {
-+            	artifact = "eu.qualimaster:" + formulateString(alg.name) + ":" + GenAlgVersion;
-+            } else if (isGenSubtopology(alg)) {
-+            	SubPipelineAlgorithm subAlg = alg;
-+            	Pipeline subPip = subAlg.subPipeline;
-+            	artifact = subPip.artifact;
-+            } else {
-+            	SoftwareAlgorithm a = alg;
-+            	artifact = a.artifact;
-+            }
-+            if(!isStringExisted(artifact, artifacts)) {
-+	   	    	artifacts.add(artifact);
-+	            sequenceOf(String) artList = artifact.split(":");
-+	            if(artList.size() == 3) {                		
-+		            text.append("    <dependency>\n      <groupId>${artList[0]}</groupId>\n      <artifactId>${artList[1]}</artifactId>\n");
-+		            text.append("      <version>${artList[2]}</version>\n    </dependency>\n");                		
-+	            }
-+            }
-+        }	
-+	}
-+	
-+	def produceDependencies(Sink snk, Text text) {
-+        DataSink dataSnk = snk.sink;
-+        String snkName = dataSnk.name;
-+        String artifact = dataSnk.artifact;
-+        if(!isStringExisted(artifact, artifacts)) {
-+	   	    artifacts.add(artifact);
-+			//for appending sink class dependencies 
-+	        sequenceOf(String) artList = artifact.split(":");
-+	        if(artList.size() == 3) {                		
-+		        text.append("    <dependency>\n      <groupId>${artList[0]}</groupId>\n      <artifactId>${artList[1]}</artifactId>\n");
-+		        text.append("      <version>${artList[2]}</version>\n    </dependency>\n");                		
-+	        }
-+	    }						
-+	}
-+	
-+	def appendPlugins(setOf(String) subPips, Text text) {
-+		if(!isSubPipeline) {
-+			text.append("            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>"+"$"+"{project.artifactId}-"+"$"+"{project.version}-jar-with-dependencies</finalName>
-+            <filters>\n");
-+            for(String a : subPipNames) {
-+            text.append("                <filter>
-+                    <artifact>eu.qualimaster:$a</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>\n");
-+			}
-+            text.append("            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>\n");
-+		} else {
-+		text.append("            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-assembly-plugin</artifactId>
-+				<version>2.6</version>\n");
-+		if(profiling) {
-+			text.append("            	<dependencies>
-+	                    <dependency>
-+	                        <groupId>eu.qualimaster</groupId>
-+	                        <artifactId>AlgorithmAssemblies</artifactId>
-+	                        <version>0.5.0-SNAPSHOT</version>
-+	                    </dependency>
-+	                </dependencies>\n");
-+        }
-+		text.append("					<executions>
-+					<execution>
-+						<id>make-assembly</id>
-+						<phase>package</phase>
-+						<goals>
-+							<goal>single</goal>
-+						</goals>\n");
-+		text.append("					<configuration>
-+					<descriptorRefs>
-+						<descriptorRef>jar-with-dependencies</descriptorRef>
-+					</descriptorRefs>
-+					<dependencySets>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>runtime</scope>
-+						</dependencySet>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>provided</scope>
-+						</dependencySet>
-+					</dependencySets>
-+					<archive>
-+						<manifest>
-+						</manifest>
-+					</archive>
-+				</configuration>\n");
-+		text.append("					</execution>\n");
-+		if(profiling) {
-+			text.append("				<execution>
-+                        <id>make-profilingAssembly</id>
-+                        <phase>package</phase>
-+                        <goals>
-+                            <goal>single</goal>
-+                        </goals>
-+                        <configuration>
-+                            <descriptorRefs>
-+                                <descriptorRef>profiling</descriptorRef>
-+                            </descriptorRefs>
-+                        </configuration>
-+                    </execution>\n");
-+        }
-+            text.append("				</executions>
-+						</plugin>\n");
-+		}
-+			text.append("            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>\n");
-+            text.append("            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>\n");
-+            text.append("            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>\n");
-+            text.append("            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>\n");
-+            text.append("            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>"+"$"+"{storm.topology}"+"</mainClass>
-+		        </configuration>
-+		    </plugin>\n");
-+      text.append("            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>\n");
-+	}   
-+	
-+	def appendResources(Text text) {
-+		text.append("        <resource>
-+            <directory>"+"$"+"{basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>\n");        
-+	}
-+	
-+	//only for generating a fat jar
-+	def appendBasicInfrastructureDependencies(Text text) {
-+		text.append("<dependency>
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+      <version>0.9.3</version>  
-+      <scope>provided</scope> 
-+    </dependency>
-+    <dependency>
-+      <groupId>com.github.ptgoetz</groupId>
-+      <artifactId>storm-hdfs</artifactId>
-+      <version>0.1.2</version>
-+       
-+      <exclusions>
-+        <exclusion>
-+          <groupId>org.slf4j</groupId>
-+          <artifactId>slf4j-log4j12</artifactId>
-+        </exclusion>
-+        <exclusion>
-+          <groupId>log4j</groupId>
-+          <artifactId>log4j</artifactId>
-+        </exclusion>        
-+      </exclusions>          
-+    </dependency>    
-+    <!-- Hadoop Dependencies -->
-+    <dependency>
-+      <groupId>org.apache.hadoop</groupId>
-+      <artifactId>hadoop-client</artifactId>
-+      <version>2.4.0</version>
-+      
-+      <exclusions>
-+        <exclusion>
-+          <groupId>org.slf4j</groupId>
-+          <artifactId>slf4j-log4j12</artifactId>
-+        </exclusion>
-+        <exclusion>
-+          <groupId>log4j</groupId>
-+          <artifactId>log4j</artifactId>
-+        </exclusion>        
-+      </exclusions>
-+    </dependency>
-+    <dependency>
-+      <groupId>org.apache.hadoop</groupId>
-+      <artifactId>hadoop-hdfs</artifactId>
-+      <version>2.4.0</version>
-+      
-+      <exclusions>
-+        <exclusion>
-+          <groupId>org.slf4j</groupId>
-+          <artifactId>slf4j-log4j12</artifactId>
-+        </exclusion>
-+        <exclusion>
-+          <groupId>log4j</groupId>
-+          <artifactId>log4j</artifactId>
-+        </exclusion>        
-+      </exclusions>      
-+    </dependency>
-+    <dependency>
-+      <groupId>org.apache.hadoop</groupId>
-+      <artifactId>hadoop-common</artifactId>
-+      <version>2.4.0</version> 
-+            
-+      <exclusions>
-+        <exclusion>
-+          <groupId>org.slf4j</groupId>
-+          <artifactId>slf4j-log4j12</artifactId>
-+        </exclusion>
-+        <exclusion>
-+          <groupId>log4j</groupId>
-+          <artifactId>log4j</artifactId>
-+        </exclusion>        
-+      </exclusions>               
-+    </dependency>   
-+    <!-- HBase Dependencies -->
-+    <dependency>
-+      <groupId>org.apache.hbase</groupId>
-+      <artifactId>hbase-common</artifactId>
-+      <version>0.98.6-hadoop2</version>
-+      
-+      <exclusions>
-+        <exclusion>
-+          <groupId>org.slf4j</groupId>
-+          <artifactId>slf4j-log4j12</artifactId>
-+        </exclusion>
-+        <exclusion>
-+          <groupId>log4j</groupId>
-+          <artifactId>log4j</artifactId>
-+        </exclusion>        
-+      </exclusions>      
-+    </dependency>
-+    <dependency>
-+      <groupId>org.apache.hbase</groupId>
-+      <artifactId>hbase-protocol</artifactId>
-+      <version>0.98.6-hadoop2</version>
-+      
-+      <exclusions>
-+        <exclusion>
-+          <groupId>org.slf4j</groupId>
-+          <artifactId>slf4j-log4j12</artifactId>
-+        </exclusion>
-+        <exclusion>
-+          <groupId>log4j</groupId>
-+          <artifactId>log4j</artifactId>
-+        </exclusion>        
-+      </exclusions>      
-+    </dependency>
-+    <dependency>
-+      <groupId>org.apache.hbase</groupId>
-+      <artifactId>hbase-client</artifactId>
-+      <version>0.98.6-hadoop2</version>
-+      
-+      <exclusions>
-+        <exclusion>
-+          <groupId>org.slf4j</groupId>
-+          <artifactId>slf4j-log4j12</artifactId>
-+        </exclusion>
-+        <exclusion>
-+          <groupId>log4j</groupId>
-+          <artifactId>log4j</artifactId>
-+        </exclusion>        
-+      </exclusions>      
-+    </dependency>\n ");
-+	}
-+	
-+	def appendQmInfrastructureDependencies(Text text) {
-+		text.append("   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>\n");
-+//   	    text.append("   <dependency>
-+//     <groupId>eu.qualimaster</groupId>
-+//     <artifactId>PriorityPipelineInterfaces</artifactId>
-+//     <version>0.5.0-SNAPSHOT</version>
-+//   </dependency>\n");
-+   		text.append("   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>\n");        
-+   		text.append("   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>\n");
-+	}
-+	
-+	def appendInterfaceDependency(String artifact, Text text) {
-+		text.append("    <dependency>\n");
-+		appendArtifact(artifact, text);
-+		text.append("    </dependency>\n");
-+	}
-+	
-+	def appendAlgorithmAssembiliesDependency(Text text) {
-+		text.append("	<dependency>
-+          <groupId>eu.qualimaster</groupId>
-+          <artifactId>AlgorithmAssemblies</artifactId>
-+          <version>0.5.0-SNAPSHOT</version>
-+      </dependency>\n");
-+	}
-+	 def appendCommonProvidedInfraDependencies(Text text) {
-+    	text.append("    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+   </dependency>\n");
-+    text.append("   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+   </dependency>\n");
-+    }
-+	
-+    def appendCommonDependencies(Text text) {
-+    	text.append("    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>\n");   		
-+   text.append("   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>\n");
-+    text.append("   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>\n");
-+   text.append("   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>\n");
-+    }
-+	
-+	def appendRepositories(Text text, String repoURL) {
-+		text.append("    <repository>\n      <id>qm.eu</id>\n      <name>qm.eu</name>\n      <url>$repoURL</url>\n    </repository>\n");
-+	}
-+	
-+	def appendArtifact(String artifact, Text text) {
-+		sequenceOf(String) artList = artifact.split(":");
-+		if(artList.size() == 3) {
-+		    text.append("  <groupId>${artList[0]}</groupId>\n");
-+			text.append("  <artifactId>${artList[1]}</artifactId>\n");
-+			text.append("  <version>${artList[2]}</version>\n");	
-+		}
-+	}
-+	
-+	def main(Configuration config, FileArtifact target, Pipeline pipeline, String repoURL, String interfaceArtifact, Boolean profiling, setOf(String) subPipNames) {
-+		if(pipeline.type() == "SubPipeline") {
-+			isSubPipeline = true;
-+		}
-+		//createPomTemplate(target);
-+		setOf(String) nodes = {};
-+		Text text = target.getText();		
-+		text.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n");		
-+		text.append("  <modelVersion>4.0.0</modelVersion>\n");
-+		//get the artifact
-+		String artifact = pipeline.artifact;
-+		appendArtifact(artifact, text);		
-+		text.append("  <packaging>jar</packaging>\n");
-+		text.append("\n");
-+		text.append("  <properties>\n");
-+	    text.append("    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n");
-+	    text.append("  </properties>\n");
-+		text.append("  <repositories>\n");
-+		//text.append("    <repository>\n      <id>clojars.org</id>\n      <url>http://clojars.org/repo</url>\n    </repository>\n");
-+		appendRepositories(text, repoURL);
-+		text.append("  </repositories>\n");
-+		text.append("  <build>\n");
-+		text.append("    <sourceDirectory>"+"$"+"{basedir}/topology</sourceDirectory>\n");
-+		//text.append("    <pluginManagement>\n");
-+		text.append("        <plugins>\n");
-+		appendPlugins(subPipNames, text);
-+		text.append("        </plugins>\n");
-+		//text.append("    </pluginManagement>\n");
-+		text.append("    <resources>\n");
-+		appendResources(text);
-+		text.append("    </resources>\n");
-+		text.append("  </build>\n");
-+		text.append("\n");
-+		text.append("\n");
-+		appendDependencyManagement(text);
-+		text.append("  <dependencies>\n");
-+//		appendBasicInfrastructureDependencies(text); //for a fat jar
-+		if(profiling) {
-+			appendAlgorithmAssembiliesDependency(text);
-+		}
-+		appendQmInfrastructureDependencies(text);
-+		appendInterfaceDependency(interfaceArtifact, text);
-+		appendCommonDependencies(text);		
-+		for(DecisionVariable v : pipeline.sources) { 
-+	        checkForPipelineNode(v, nodes, text);
-+	        processElement(v.byName("output").variables(), nodes, text);
-+	    }	
-+	    if(isSubPipeline) {
-+	    	SubPipeline subPip = pipeline;
-+		    for(DecisionVariable v : subPip.connectors) {//considering the connectors from subpipeline
-+				checkForPipelineNode(v, nodes, text);
-+		    	processElement(v.byName("output").variables(), nodes, text);
-+		    }
-+	    }					
-+		text.append("  </dependencies>\n");
-+		text.append("</project>\n");
-+		target.rename("pom.xml");							
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline
-new file mode 100644
-index 0000000..a2b2213
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline
-@@ -0,0 +1,8 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="RandomPip" artifact="eu.qualimaster: RandomPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="src" source="2"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="processor" family="5"/>
-+  <nodes xsi:type="pipeline:Sink" name="snk" sink="1"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::randomSource.input[0]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::randomFamily.output[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline_diagram
-new file mode 100644
-index 0000000..e5be490
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1.pipeline_diagram
-@@ -0,0 +1,44 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_QZxYsMfeEeSCGIvEn-RMYA" type="Pipeline" name="PipelineVar_1.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_SQV4wMfeEeSCGIvEn-RMYA" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_SQb_YMfeEeSCGIvEn-RMYA" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_SQb_YcfeEeSCGIvEn-RMYA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_1.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SQV4wcfeEeSCGIvEn-RMYA" x="105" y="275"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_TU00kMfeEeSCGIvEn-RMYA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_TU00ksfeEeSCGIvEn-RMYA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_TU00k8feEeSCGIvEn-RMYA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_1.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TU00kcfeEeSCGIvEn-RMYA" x="251" y="300"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_VUEIcMfeEeSCGIvEn-RMYA" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_VUEIcsfeEeSCGIvEn-RMYA" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VUEIc8feEeSCGIvEn-RMYA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_1.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VUEIccfeEeSCGIvEn-RMYA" x="433" y="319"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_QZxYscfeEeSCGIvEn-RMYA"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_1.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_WQiXwMfeEeSCGIvEn-RMYA" type="4001" source="_SQV4wMfeEeSCGIvEn-RMYA" target="_TU00kMfeEeSCGIvEn-RMYA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_WQiXw8feEeSCGIvEn-RMYA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_WQoeYMfeEeSCGIvEn-RMYA" x="-11" y="20"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_WQiXwcfeEeSCGIvEn-RMYA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_1.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WQiXwsfeEeSCGIvEn-RMYA" points="[30, 6, -101, 0]$[117, 10, -14, 4]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WRTMwMfeEeSCGIvEn-RMYA" id="(0.23333333333333334,0.5833333333333334)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_XYeQMMfeEeSCGIvEn-RMYA" type="4001" source="_TU00kMfeEeSCGIvEn-RMYA" target="_VUEIcMfeEeSCGIvEn-RMYA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_XYeQM8feEeSCGIvEn-RMYA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_XYeQNMfeEeSCGIvEn-RMYA" x="-5" y="18"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_XYeQMcfeEeSCGIvEn-RMYA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_1.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_XYeQMsfeEeSCGIvEn-RMYA" points="[30, 2, -134, -13]$[152, 13, -12, -2]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_XYkW0MfeEeSCGIvEn-RMYA" id="(0.21818181818181817,0.4727272727272727)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline
-new file mode 100644
-index 0000000..c03f03d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline
-@@ -0,0 +1,35 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="TimeTravelPip" numworkers="18" artifact="eu.qualimaster:TimeTravelPip:0.0.2-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="6">
-+    <permissibleParameters>DataManagementCfg::DataSourceVar_7.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="FinancialCorrelation" family="1">
-+    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="DynamicGraphCompilation" family="21">
-+    <permissibleParameters>FamiliesCfg::FamilyVar_22.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:Sink" name="TimeTravelSink" sink="5"/>
-+  <nodes xsi:type="pipeline:Source" name="queries" source="8">
-+    <permissibleParameters>DataManagementCfg::DataSourceVar_9.parameters[0]</permissibleParameters>
-+    <permissibleParameters>DataManagementCfg::DataSourceVar_9.parameters[1]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphMapper" family="27" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_34"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphIndexer" parallelism="5" family="28" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_35"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphQueryExecutor" family="29" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_36"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[1]"/>
-+  <flows name="f2" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::spring.input[0]"/>
-+  <flows name="f3" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+  <flows name="f4" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
-+  <flows name="f5" source="//@nodes.3" destination="//@nodes.6" tupleType="FamiliesCfg::FamilyVar_22.output[0]"/>
-+  <flows name="f6" source="//@nodes.6" destination="//@nodes.7" grouping="3" tupleType="FamiliesCfg::FamilyVar_26.output[0]"/>
-+  <flows name="f7" source="//@nodes.7" destination="//@nodes.7" grouping="3" tupleType="FamiliesCfg::FamilyVar_27.output[1]"/>
-+  <flows name="f8" source="//@nodes.8" destination="//@nodes.7" grouping="4" tupleType="FamiliesCfg::FamilyVar_28.output[3]"/>
-+  <flows name="f9" source="//@nodes.8" destination="//@nodes.7" grouping="3" tupleType="FamiliesCfg::FamilyVar_28.output[2]"/>
-+  <flows name="f10" source="//@nodes.8" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_28.output[0]"/>
-+  <flows name="f11" source="//@nodes.8" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_28.output[1]"/>
-+  <flows name="f12" source="//@nodes.5" destination="//@nodes.8" tupleType="DataManagementCfg::DataSourceVar_9.input[0]"/>
-+  <flows name="f13" source="//@nodes.5" destination="//@nodes.8" tupleType="DataManagementCfg::DataSourceVar_9.input[1]"/>
-+  <flows name="f14" source="//@nodes.7" destination="//@nodes.8" grouping="3" tupleType="FamiliesCfg::FamilyVar_27.output[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline_diagram
-new file mode 100644
-index 0000000..a1ab8fa
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10.pipeline_diagram
-@@ -0,0 +1,190 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_1Et5gE_lEeaITemOqq_uIw" type="Pipeline" name="PipelineVar_10.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_AloX8E_mEeaITemOqq_uIw" type="2001" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Alo_AE_mEeaITemOqq_uIw" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_AlpmEE_mEeaITemOqq_uIw" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_10.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AloX8U_mEeaITemOqq_uIw" x="106" y="353"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_Hu12UE_mEeaITemOqq_uIw" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Hu12Uk_mEeaITemOqq_uIw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Hu2dYE_mEeaITemOqq_uIw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hu12UU_mEeaITemOqq_uIw" x="252" y="360"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_LhQ_EE_mEeaITemOqq_uIw" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_LhQ_Ek_mEeaITemOqq_uIw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_LhQ_E0_mEeaITemOqq_uIw" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LhQ_EU_mEeaITemOqq_uIw" x="396" y="360"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_cmCusE_mEeaITemOqq_uIw" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_cmCusk_mEeaITemOqq_uIw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_cmDVwE_mEeaITemOqq_uIw" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cmCusU_mEeaITemOqq_uIw" x="576" y="360"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_s_P_gE_rEeaITemOqq_uIw" type="2002" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_s_QmkE_rEeaITemOqq_uIw" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_s_QmkU_rEeaITemOqq_uIw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_10.pipeline#//@nodes.4"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s_P_gU_rEeaITemOqq_uIw" x="575" y="242"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_7V97sFKDEeaEeuw08GCqxA" type="2001" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_7V_J0FKDEeaEeuw08GCqxA" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_7V_J0VKDEeaEeuw08GCqxA" x="80" y="24"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_10.pipeline#//@nodes.5"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7V97sVKDEeaEeuw08GCqxA" x="240" y="84"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_cP2bwLU9Eea39erpTGVtig" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_cP3C0LU9Eea39erpTGVtig" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_cP3C0bU9Eea39erpTGVtig" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.6"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cP2bwbU9Eea39erpTGVtig" x="876" y="360"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_AUjJULVPEeavFZOgGotjVw" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_AUjwYLVPEeavFZOgGotjVw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_AUjwYbVPEeavFZOgGotjVw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.7"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AUjJUbVPEeavFZOgGotjVw" x="874" y="103"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_RP7sYLVPEeavFZOgGotjVw" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_RP7sYrVPEeavFZOgGotjVw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_RP8TcLVPEeavFZOgGotjVw" x="-20" y="-35"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_10.pipeline#//@nodes.8"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RP7sYbVPEeavFZOgGotjVw" x="576" y="96"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_1Et5gU_lEeaITemOqq_uIw"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_10.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_Rra0ME_mEeaITemOqq_uIw" type="4001" source="_AloX8E_mEeaITemOqq_uIw" target="_Hu12UE_mEeaITemOqq_uIw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Rra0M0_mEeaITemOqq_uIw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Rra0NE_mEeaITemOqq_uIw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_Rra0MU_mEeaITemOqq_uIw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Rra0Mk_mEeaITemOqq_uIw" points="[21, -3, -152, 20]$[143, -17, -30, 6]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Rrd3gE_mEeaITemOqq_uIw" id="(0.9833333333333333,0.4666666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_UZ_6UE_mEeaITemOqq_uIw" type="4001" source="_AloX8E_mEeaITemOqq_uIw" target="_LhQ_EE_mEeaITemOqq_uIw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_UZ_6U0_mEeaITemOqq_uIw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_UaAhYE_mEeaITemOqq_uIw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_UZ_6UU_mEeaITemOqq_uIw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UZ_6Uk_mEeaITemOqq_uIw" points="[20, -13, -368, 10]$[178, -113, -210, -90]$[358, -36, -30, -13]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UaC9oE_mEeaITemOqq_uIw" id="(0.9833333333333333,0.3333333333333333)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_Xj2AIE_mEeaITemOqq_uIw" type="4001" source="_Hu12UE_mEeaITemOqq_uIw" target="_LhQ_EE_mEeaITemOqq_uIw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Xj2AI0_mEeaITemOqq_uIw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Xj2AJE_mEeaITemOqq_uIw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_Xj2AIU_mEeaITemOqq_uIw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Xj2AIk_mEeaITemOqq_uIw" points="[60, -9, -169, 0]$[216, -9, -13, 0]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xj5qgE_mEeaITemOqq_uIw" id="(0.0,0.6666666666666666)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xj5qgU_mEeaITemOqq_uIw" id="(0.21666666666666667,0.5166666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_gccYgE_mEeaITemOqq_uIw" type="4001" source="_LhQ_EE_mEeaITemOqq_uIw" target="_cmCusE_mEeaITemOqq_uIw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_gcc_kE_mEeaITemOqq_uIw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_gcc_kU_mEeaITemOqq_uIw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_gccYgU_mEeaITemOqq_uIw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gccYgk_mEeaITemOqq_uIw" points="[19, -4, -253, 45]$[263, -19, -9, 30]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gcfb0E_mEeaITemOqq_uIw" id="(0.9833333333333333,0.4666666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_fmvfELU9Eea39erpTGVtig" type="4001" source="_cmCusE_mEeaITemOqq_uIw" target="_cP2bwLU9Eea39erpTGVtig">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_fmwGILU9Eea39erpTGVtig" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_fmwGIbU9Eea39erpTGVtig" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_fmvfEbU9Eea39erpTGVtig" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.4"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fmvfErU9Eea39erpTGVtig" points="[-34, -45, 182, 254]$[-220, -269, -4, 30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_B3p60LVPEeavFZOgGotjVw" type="4001" source="_cP2bwLU9Eea39erpTGVtig" target="_AUjJULVPEeavFZOgGotjVw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_B3qh4LVPEeavFZOgGotjVw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_B3qh4bVPEeavFZOgGotjVw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_B3p60bVPEeavFZOgGotjVw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.5"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_B3p60rVPEeavFZOgGotjVw" points="[-4, -33, 28, 227]$[-28, -230, 4, 30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_GYzKwLVPEeavFZOgGotjVw" type="4001" source="_AUjJULVPEeavFZOgGotjVw" target="_AUjJULVPEeavFZOgGotjVw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_GYzKw7VPEeavFZOgGotjVw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_GYzKxLVPEeavFZOgGotjVw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_GYzKwbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.6"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GYzKwrVPEeavFZOgGotjVw" points="[24, -6, 12, 20]$[86, -6, 74, 20]$[86, -34, 74, -8]$[24, -34, 12, -8]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_GY0Y4LVPEeavFZOgGotjVw" id="(0.6,0.85)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IHSs4LVPEeavFZOgGotjVw" id="(0.8,0.4166666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_TkH8kLVPEeavFZOgGotjVw" type="4001" source="_RP7sYLVPEeavFZOgGotjVw" target="_AUjJULVPEeavFZOgGotjVw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_TkH8k7VPEeavFZOgGotjVw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_TkH8lLVPEeavFZOgGotjVw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_TkH8kbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.7"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TkH8krVPEeavFZOgGotjVw" points="[0, 0, -247, 78]$[241, -48, -6, 30]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TkJKsLVPEeavFZOgGotjVw" id="(1.0,0.7333333333333333)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_ZWj1QLVPEeavFZOgGotjVw" type="4001" source="_RP7sYLVPEeavFZOgGotjVw" target="_AUjJULVPEeavFZOgGotjVw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ZWj1Q7VPEeavFZOgGotjVw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZWj1RLVPEeavFZOgGotjVw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_ZWj1QbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.8"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZWj1QrVPEeavFZOgGotjVw" points="[30, -14, -268, -21]$[150, -66, -148, -73]$[268, -8, -30, -15]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_e0XhwLVPEeavFZOgGotjVw" type="4001" source="_RP7sYLVPEeavFZOgGotjVw" target="_s_P_gE_rEeaITemOqq_uIw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_e0Xhw7VPEeavFZOgGotjVw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_e0XhxLVPEeavFZOgGotjVw" x="23" y="1"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_e0XhwbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.9"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_e0XhwrVPEeavFZOgGotjVw" points="[11, 30, 15, -113]$[30, 78, 34, -65]$[10, 116, 14, -27]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_jFzhwLVPEeavFZOgGotjVw" type="4001" source="_RP7sYLVPEeavFZOgGotjVw" target="_s_P_gE_rEeaITemOqq_uIw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_jF0I0LVPEeavFZOgGotjVw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jF0I0bVPEeavFZOgGotjVw" x="24" y="-4"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_jFzhwbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.10"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jFzhwrVPEeavFZOgGotjVw" points="[-12, 30, -8, -113]$[-30, 78, -26, -65]$[-15, 116, -11, -27]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_ne6QALVPEeavFZOgGotjVw" type="4001" source="_7V97sFKDEeaEeuw08GCqxA" target="_RP7sYLVPEeavFZOgGotjVw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ne6QA7VPEeavFZOgGotjVw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ne6QBLVPEeavFZOgGotjVw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_ne6QAbVPEeavFZOgGotjVw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.11"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ne6QArVPEeavFZOgGotjVw" points="[0, 5, -306, -3]$[300, -22, -6, -30]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ne7eILVPEeavFZOgGotjVw" id="(1.0,0.5666666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_pq934LVPEeavFZOgGotjVw" type="4001" source="_7V97sFKDEeaEeuw08GCqxA" target="_RP7sYLVPEeavFZOgGotjVw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_pq-e8LVPEeavFZOgGotjVw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_pq-e8bVPEeavFZOgGotjVw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_pq934bVPEeavFZOgGotjVw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.12"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pq934rVPEeavFZOgGotjVw" points="[60, -21, -306, -20]$[192, -67, -174, -66]$[336, -13, -30, -12]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pq_GALVPEeavFZOgGotjVw" id="(0.0,0.7166666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_JJ6RYLVYEea0153D3F85VQ" type="4001" source="_AUjJULVPEeavFZOgGotjVw" target="_RP7sYLVPEeavFZOgGotjVw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_JJ64cLVYEea0153D3F85VQ" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_JJ64cbVYEea0153D3F85VQ" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_JJ6RYbVYEea0153D3F85VQ" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_10.pipeline#//@flows.13"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JJ6RYrVYEea0153D3F85VQ" points="[-1, -30, 297, -23]$[-1, -98, 297, -91]$[-304, -98, -6, -91]$[-304, -37, -6, -30]"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10Cfg.ivml
-new file mode 100644
-index 0000000..387b3c3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_10Cfg.ivml
-@@ -0,0 +1,260 @@
-+project PipelineVar_10Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_10Cfg;
-+	Pipeline PipelineVar_10;
-+	Source PipelineVar_10_Source0;
-+	Flow PipelineVar_10_Flow0;
-+	FamilyElement PipelineVar_10_FamilyElement0;
-+	Flow PipelineVar_10_Flow1;
-+	FamilyElement PipelineVar_10_FamilyElement1;
-+	Flow PipelineVar_10_Flow2;
-+	FamilyElement PipelineVar_10_FamilyElement2;
-+	Flow PipelineVar_10_Flow3;
-+	FamilyElement PipelineVar_10_FamilyElement3;
-+	Flow PipelineVar_10_Flow4;
-+	FamilyElement PipelineVar_10_FamilyElement4;
-+	Flow PipelineVar_10_Flow5;
-+	PipelineVar_10_Flow5 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement4), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_27.output[1]), 
-+		name = "f7", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_10_Flow6;
-+	FamilyElement PipelineVar_10_FamilyElement5;
-+	Flow PipelineVar_10_Flow7;
-+	PipelineVar_10_Flow7 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement4), 
-+		grouping = Grouping.allGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[3]), 
-+		name = "f8", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_10_Flow8;
-+	PipelineVar_10_Flow8 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement4), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[2]), 
-+		name = "f9", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_10_Flow9;
-+	Sink PipelineVar_10_Sink0;
-+	PipelineVar_10_Sink0 = Sink {
-+		sink = refBy(DataSinkVar_5), 
-+		parallelism = 1, 
-+		name = "TimeTravelSink", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Flow9 = Flow {
-+		destination = refBy(PipelineVar_10_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[0]), 
-+		name = "f10", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_10_Flow10;
-+	PipelineVar_10_Flow10 = Flow {
-+		destination = refBy(PipelineVar_10_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[1]), 
-+		name = "f11", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_FamilyElement5 = FamilyElement {
-+		family = refBy(FamilyVar_28), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_36), 
-+		output = {
-+			refBy(PipelineVar_10_Flow7), refBy(PipelineVar_10_Flow8), refBy(PipelineVar_10_Flow9), refBy(PipelineVar_10_Flow10)
-+		}, 
-+		parallelism = 1, 
-+		name = "TimeGraphQueryExecutor", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Flow6 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement5), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_27.output[0]), 
-+		name = "f14", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_FamilyElement4 = FamilyElement {
-+		family = refBy(FamilyVar_27), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_35), 
-+		output = {
-+			refBy(PipelineVar_10_Flow5), refBy(PipelineVar_10_Flow6)
-+		}, 
-+		parallelism = 5, 
-+		name = "TimeGraphIndexer", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Flow4 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement4), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_26.output[0]), 
-+		name = "f6", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_FamilyElement3 = FamilyElement {
-+		family = refBy(FamilyVar_26), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_34), 
-+		output = {
-+			refBy(PipelineVar_10_Flow4)
-+		}, 
-+		parallelism = 1, 
-+		name = "TimeGraphMapper", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Flow3 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement3), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_22.output[0]), 
-+		name = "f5", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_FamilyElement2 = FamilyElement {
-+		family = refBy(FamilyVar_22), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::FamilyVar_22.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_10_Flow3)
-+		}, 
-+		parallelism = 1, 
-+		name = "DynamicGraphCompilation", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Flow2 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement2), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
-+		name = "f4", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_FamilyElement1 = FamilyElement {
-+		family = refBy(fCorrelationFinancial), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_10_Flow2)
-+		}, 
-+		parallelism = 1, 
-+		name = "FinancialCorrelation", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Flow1 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_FamilyElement0 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		output = {
-+			refBy(PipelineVar_10_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "Preprocessor", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Flow0 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[1]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_10_Flow11;
-+	PipelineVar_10_Flow11 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_10_Flow0), refBy(PipelineVar_10_Flow11)
-+		}, 
-+		source = refBy(DataSourceVar_7), 
-+		permissibleParameters = {
-+			refBy(DataManagementCfg::DataSourceVar_7.parameters[0])
-+		}, 
-+		parallelism = 1, 
-+		name = "FinancialDataSource", 
-+		constraints = {}
-+	};
-+	Source PipelineVar_10_Source1;
-+	Flow PipelineVar_10_Flow12;
-+	PipelineVar_10_Flow12 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement5), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_9.input[0]), 
-+		name = "f12", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_10_Flow13;
-+	PipelineVar_10_Flow13 = Flow {
-+		destination = refBy(PipelineVar_10_FamilyElement5), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_9.input[1]), 
-+		name = "f13", 
-+		constraints = {}
-+	};
-+	PipelineVar_10_Source1 = Source {
-+		output = {
-+			refBy(PipelineVar_10_Flow12), refBy(PipelineVar_10_Flow13)
-+		}, 
-+		source = refBy(DataSourceVar_9), 
-+		permissibleParameters = {
-+			refBy(DataManagementCfg::DataSourceVar_9.parameters[0]), refBy(DataManagementCfg::DataSourceVar_9.parameters[1])
-+		}, 
-+		parallelism = 1, 
-+		name = "queries", 
-+		constraints = {}
-+	};
-+	PipelineVar_10 = Pipeline {
-+		name = "TimeTravelPip", 
-+		sources = {
-+			refBy(PipelineVar_10_Source0), refBy(PipelineVar_10_Source1)
-+		}, 
-+		numworkers = 18, 
-+		artifact = "eu.qualimaster:TimeTravelPip:0.0.2-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_10;
-+		PipelineVar_10_Source0;
-+		PipelineVar_10_Flow0;
-+		PipelineVar_10_FamilyElement0;
-+		PipelineVar_10_Flow1;
-+		PipelineVar_10_FamilyElement1;
-+		PipelineVar_10_Flow2;
-+		PipelineVar_10_FamilyElement2;
-+		PipelineVar_10_Flow3;
-+		PipelineVar_10_FamilyElement3;
-+		PipelineVar_10_Flow4;
-+		PipelineVar_10_FamilyElement4;
-+		PipelineVar_10_Flow5;
-+		PipelineVar_10_Flow6;
-+		PipelineVar_10_FamilyElement5;
-+		PipelineVar_10_Flow7;
-+		PipelineVar_10_Flow8;
-+		PipelineVar_10_Flow9;
-+		PipelineVar_10_Sink0;
-+		PipelineVar_10_Flow10;
-+		PipelineVar_10_Flow11;
-+		PipelineVar_10_Source1;
-+		PipelineVar_10_Flow12;
-+		PipelineVar_10_Flow13;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline
-new file mode 100644
-index 0000000..e7946c3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline
-@@ -0,0 +1,6 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="ReplayTestPip" artifact="eu.qualimaster:ReplayTestPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="RandomSource" source="2"/>
-+  <nodes xsi:type="pipeline:ReplaySink" name="ReplaySink" sink="1"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::randomSource.input[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline_diagram
-new file mode 100644
-index 0000000..498ff80
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12.pipeline_diagram
-@@ -0,0 +1,29 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_baKK4HqaEeadgttKLyIo0A" type="Pipeline" name="PipelineVar_12.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_dmCzoHqaEeadgttKLyIo0A" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_dmGeAHqaEeadgttKLyIo0A" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_dmHFEHqaEeadgttKLyIo0A" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_12.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dmCzoXqaEeadgttKLyIo0A" x="168" y="314"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_wYSxsHqaEeadgttKLyIo0A" type="2007" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_wYTYwHqaEeadgttKLyIo0A" type="5007">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_wYT_0HqaEeadgttKLyIo0A" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:ReplaySink" href="PipelineVar_12.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wYSxsXqaEeadgttKLyIo0A" x="360" y="315"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_baKK4XqaEeadgttKLyIo0A"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_12.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_yPPFMHqaEeadgttKLyIo0A" type="4001" source="_dmCzoHqaEeadgttKLyIo0A" target="_wYSxsHqaEeadgttKLyIo0A">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_yPQTUHqaEeadgttKLyIo0A" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_yPQ6YHqaEeadgttKLyIo0A" x="-2" y="11"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_yPPFMXqaEeadgttKLyIo0A" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_12.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yPPFMnqaEeadgttKLyIo0A" points="[8, -2, -138, 0]$[140, -2, -6, 0]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yQDkkHqaEeadgttKLyIo0A" id="(0.8666666666666667,0.5333333333333333)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yQDkkXqaEeadgttKLyIo0A" id="(0.10909090909090909,0.5272727272727272)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12Cfg.ivml
-new file mode 100644
-index 0000000..ea4f91f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_12Cfg.ivml
-@@ -0,0 +1,51 @@
-+project PipelineVar_12Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_12Cfg;
-+	Pipeline PipelineVar_12;
-+	Source PipelineVar_12_Source0;
-+	Flow PipelineVar_12_Flow0;
-+	ReplaySink PipelineVar_12_ReplaySink0;
-+	PipelineVar_12_ReplaySink0 = ReplaySink {
-+		sink = refBy(randomSink), 
-+		parallelism = 1, 
-+		name = "ReplaySink", 
-+		constraints = {}
-+	};
-+	PipelineVar_12_Flow0 = Flow {
-+		destination = refBy(PipelineVar_12_ReplaySink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::randomSource.input[0]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	PipelineVar_12_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_12_Flow0)
-+		}, 
-+		source = refBy(randomSource), 
-+		parallelism = 1, 
-+		name = "RandomSource", 
-+		constraints = {}
-+	};
-+	PipelineVar_12 = Pipeline {
-+		name = "ReplayTestPip", 
-+		sources = {
-+			refBy(PipelineVar_12_Source0)
-+		}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster:ReplayTestPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_12;
-+		PipelineVar_12_Source0;
-+		PipelineVar_12_Flow0;
-+		PipelineVar_12_ReplaySink0;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline
-new file mode 100644
-index 0000000..ba59a73
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline
-@@ -0,0 +1,19 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="TransferPip" numworkers="5" artifact="eu.qualimaster:TransferPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="SpringDataSource" source="5">
-+    <permissibleParameters>DataManagementCfg::DataSourceVar_6.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0" defaultAlgorithm="AlgorithmsCfg::swPreprocessor"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="TransferEntropyCalculation" family="23" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_33">
-+    <permissibleParameters>FamiliesCfg::FamilyVar_24.parameters[2]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::FamilyVar_24.parameters[0]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::FamilyVar_24.parameters[1]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
-+  <nodes xsi:type="pipeline:ReplaySink" name="ReplaySink" sink="0"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[1]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_24.output[0]"/>
-+  <flows name="f4" source="//@nodes.2" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_24.output[0]"/>
-+  <flows name="f5" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::spring.input[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline_diagram
-new file mode 100644
-index 0000000..805a6c4
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13.pipeline_diagram
-@@ -0,0 +1,83 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_rF-zsIZEEeaF_r1Kj4lT8Q" type="Pipeline" name="PipelineVar_13.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_P-DHoIZFEeaF_r1Kj4lT8Q" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_P-E80IZFEeaF_r1Kj4lT8Q" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_P-E80YZFEeaF_r1Kj4lT8Q" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_13.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_P-DHoYZFEeaF_r1Kj4lT8Q" x="140" y="296"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_cVBEUIZFEeaF_r1Kj4lT8Q" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_cVBrYIZFEeaF_r1Kj4lT8Q" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_cVBrYYZFEeaF_r1Kj4lT8Q" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_13.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cVBEUYZFEeaF_r1Kj4lT8Q" x="270" y="300"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_lQrXwIZFEeaF_r1Kj4lT8Q" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_lQr-0IZFEeaF_r1Kj4lT8Q" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_lQsl4IZFEeaF_r1Kj4lT8Q" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_13.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lQrXwYZFEeaF_r1Kj4lT8Q" x="435" y="300"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_tnPaEIZFEeaF_r1Kj4lT8Q" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_tnQBIIZFEeaF_r1Kj4lT8Q" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_tnQBIYZFEeaF_r1Kj4lT8Q" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_13.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tnPaEYZFEeaF_r1Kj4lT8Q" x="585" y="255"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_yyev4IZFEeaF_r1Kj4lT8Q" type="2007" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_yyf-AIZFEeaF_r1Kj4lT8Q" type="5007">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_yyf-AYZFEeaF_r1Kj4lT8Q" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:ReplaySink" href="PipelineVar_13.pipeline#//@nodes.4"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yyev4YZFEeaF_r1Kj4lT8Q" x="600" y="405"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_rF-zsYZEEeaF_r1Kj4lT8Q"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_13.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_2ivVcIZFEeaF_r1Kj4lT8Q" type="4001" source="_P-DHoIZFEeaF_r1Kj4lT8Q" target="_cVBEUIZFEeaF_r1Kj4lT8Q">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_2ixKoIZFEeaF_r1Kj4lT8Q" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_2ixKoYZFEeaF_r1Kj4lT8Q" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_2iv8gIZFEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2iv8gYZFEeaF_r1Kj4lT8Q" points="[30, 1, -82, 0]$[100, -1, -12, -2]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2i4fYIZFEeaF_r1Kj4lT8Q" id="(0.2,0.45)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_3jdyoIZFEeaF_r1Kj4lT8Q" type="4001" source="_cVBEUIZFEeaF_r1Kj4lT8Q" target="_lQrXwIZFEeaF_r1Kj4lT8Q">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_3jeZsIZFEeaF_r1Kj4lT8Q" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3jeZsYZFEeaF_r1Kj4lT8Q" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_3jdyoYZFEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3jdyooZFEeaF_r1Kj4lT8Q" points="[30, 8, -119, 0]$[135, 15, -14, 7]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3jlHYIZFEeaF_r1Kj4lT8Q" id="(0.23333333333333334,0.6333333333333333)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_4hUiAIZFEeaF_r1Kj4lT8Q" type="4001" source="_lQrXwIZFEeaF_r1Kj4lT8Q" target="_tnPaEIZFEeaF_r1Kj4lT8Q">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_4hVJEIZFEeaF_r1Kj4lT8Q" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_4hVwIIZFEeaF_r1Kj4lT8Q" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_4hUiAYZFEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4hUiAoZFEeaF_r1Kj4lT8Q" points="[30, -10, -117, 38]$[120, -44, -27, 4]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_5Z4hsIZFEeaF_r1Kj4lT8Q" type="4001" source="_lQrXwIZFEeaF_r1Kj4lT8Q" target="_yyev4IZFEeaF_r1Kj4lT8Q">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_5Z5v0IZFEeaF_r1Kj4lT8Q" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_5Z5v0YZFEeaF_r1Kj4lT8Q" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_5Z4hsYZFEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5Z4hsoZFEeaF_r1Kj4lT8Q" points="[30, 20, -120, -83]$[142, 98, -8, -5]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5aBEkIZFEeaF_r1Kj4lT8Q" id="(0.14545454545454545,0.3090909090909091)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_Al8fwIZGEeaF_r1Kj4lT8Q" type="4001" source="_P-DHoIZFEeaF_r1Kj4lT8Q" target="_lQrXwIZFEeaF_r1Kj4lT8Q">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Al9G0IZGEeaF_r1Kj4lT8Q" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Al9t4IZGEeaF_r1Kj4lT8Q" x="-32" y="-14"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_Al8fwYZGEeaF_r1Kj4lT8Q" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_13.pipeline#//@flows.4"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Al8fwoZGEeaF_r1Kj4lT8Q" points="[30, -17, -265, -21]$[130, -71, -165, -75]$[265, -10, -30, -14]"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13Cfg.ivml
-new file mode 100644
-index 0000000..51cd6fa
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_13Cfg.ivml
-@@ -0,0 +1,126 @@
-+project PipelineVar_13Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_13Cfg;
-+	Pipeline PipelineVar_13;
-+	Source PipelineVar_13_Source0;
-+	Flow PipelineVar_13_Flow0;
-+	FamilyElement PipelineVar_13_FamilyElement0;
-+	Flow PipelineVar_13_Flow1;
-+	FamilyElement PipelineVar_13_FamilyElement1;
-+	Flow PipelineVar_13_Flow2;
-+	Sink PipelineVar_13_Sink0;
-+	PipelineVar_13_Sink0 = Sink {
-+		sink = refBy(DataSinkVar_6), 
-+		parallelism = 1, 
-+		name = "Sink", 
-+		constraints = {}
-+	};
-+	PipelineVar_13_Flow2 = Flow {
-+		destination = refBy(PipelineVar_13_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_24.output[0]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_13_Flow3;
-+	ReplaySink PipelineVar_13_ReplaySink1;
-+	PipelineVar_13_ReplaySink1 = ReplaySink {
-+		sink = refBy(DataSinkVar_6), 
-+		parallelism = 1, 
-+		name = "ReplaySink", 
-+		constraints = {}
-+	};
-+	PipelineVar_13_Flow3 = Flow {
-+		destination = refBy(PipelineVar_13_ReplaySink1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_24.output[0]), 
-+		name = "f4", 
-+		constraints = {}
-+	};
-+	PipelineVar_13_FamilyElement1 = FamilyElement {
-+		family = refBy(FamilyVar_24), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_33), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::FamilyVar_24.parameters[2]), refBy(FamiliesCfg::FamilyVar_24.parameters[0]), refBy(FamiliesCfg::FamilyVar_24.parameters[1])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_13_Flow2), refBy(PipelineVar_13_Flow3)
-+		}, 
-+		parallelism = 1, 
-+		name = "TransferEntropyCalculation", 
-+		constraints = {}
-+	};
-+	PipelineVar_13_Flow1 = Flow {
-+		destination = refBy(PipelineVar_13_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_13_FamilyElement0 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::swPreprocessor), 
-+		output = {
-+			refBy(PipelineVar_13_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "Preprocessor", 
-+		constraints = {}
-+	};
-+	PipelineVar_13_Flow0 = Flow {
-+		destination = refBy(PipelineVar_13_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[1]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_13_Flow4;
-+	PipelineVar_13_Flow4 = Flow {
-+		destination = refBy(PipelineVar_13_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[0]), 
-+		name = "f5", 
-+		constraints = {}
-+	};
-+	PipelineVar_13_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_13_Flow0), refBy(PipelineVar_13_Flow4)
-+		}, 
-+		source = refBy(DataSourceVar_6), 
-+		permissibleParameters = {
-+			refBy(DataManagementCfg::DataSourceVar_6.parameters[0])
-+		}, 
-+		parallelism = 1, 
-+		name = "SpringDataSource", 
-+		constraints = {}
-+	};
-+	PipelineVar_13 = Pipeline {
-+		name = "TransferPip", 
-+		sources = {
-+			refBy(PipelineVar_13_Source0)
-+		}, 
-+		numworkers = 5, 
-+		artifact = "eu.qualimaster:TransferPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	
-+	freeze {
-+		PipelineVar_13;
-+		PipelineVar_13_Source0;
-+		PipelineVar_13_Flow0;
-+		PipelineVar_13_FamilyElement0;
-+		PipelineVar_13_Flow1;
-+		PipelineVar_13_FamilyElement1;
-+		PipelineVar_13_Flow2;
-+		PipelineVar_13_Sink0;
-+		PipelineVar_13_Flow3;
-+		PipelineVar_13_ReplaySink1;
-+		PipelineVar_13_Flow4;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline
-new file mode 100644
-index 0000000..8233db8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline
-@@ -0,0 +1,14 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="ReflectiveRandomPip" artifact="eu.qualimaster:ReflectiveRandomPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="src" source="2">
-+    <permissibleParameters>DataManagementCfg::randomSource.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="processor" family="5">
-+    <permissibleParameters>FamiliesCfg::randomFamily.parameters[2]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::randomFamily.parameters[1]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::randomFamily.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:Sink" name="snk" sink="1"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::randomSource.input[0]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::randomFamily.output[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline_diagram
-new file mode 100644
-index 0000000..c6a6784
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14.pipeline_diagram
-@@ -0,0 +1,44 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_AhJ8QKpqEeaEJ_xOc6LqFA" type="Pipeline" name="PipelineVar_14.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_CAPwcKpqEeaEJ_xOc6LqFA" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_CARloKpqEeaEJ_xOc6LqFA" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_CARloapqEeaEJ_xOc6LqFA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_14.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CAPwcapqEeaEJ_xOc6LqFA" x="44" y="269"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_Dr4L0KpqEeaEJ_xOc6LqFA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Dr5Z8KpqEeaEJ_xOc6LqFA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Dr5Z8apqEeaEJ_xOc6LqFA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_14.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Dr4L0apqEeaEJ_xOc6LqFA" x="195" y="270"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_QnNZ0KpqEeaEJ_xOc6LqFA" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_QnOA4KpqEeaEJ_xOc6LqFA" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_QnOn8KpqEeaEJ_xOc6LqFA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_14.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QnNZ0apqEeaEJ_xOc6LqFA" x="375" y="270"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_AhJ8QapqEeaEJ_xOc6LqFA"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_14.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_FxgbkKpqEeaEJ_xOc6LqFA" type="4001" source="_CAPwcKpqEeaEJ_xOc6LqFA" target="_Dr4L0KpqEeaEJ_xOc6LqFA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_FxhpsKpqEeaEJ_xOc6LqFA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_FxhpsapqEeaEJ_xOc6LqFA" x="-8" y="10"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_FxgbkapqEeaEJ_xOc6LqFA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_14.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FxgbkqpqEeaEJ_xOc6LqFA" points="[13, 2, -121, -2]$[104, 2, -30, -2]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FxplgKpqEeaEJ_xOc6LqFA" id="(0.7833333333333333,0.45)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_RwPecKpqEeaEJ_xOc6LqFA" type="4001" source="_Dr4L0KpqEeaEJ_xOc6LqFA" target="_QnNZ0KpqEeaEJ_xOc6LqFA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_RwQFgKpqEeaEJ_xOc6LqFA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_RwQskKpqEeaEJ_xOc6LqFA" x="7" y="9"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_RwPecapqEeaEJ_xOc6LqFA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_14.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_RwPecqpqEeaEJ_xOc6LqFA" points="[30, 1, -121, 0]$[150, 1, -1, 0]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RwWMIKpqEeaEJ_xOc6LqFA" id="(0.01818181818181818,0.5636363636363636)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14Cfg.ivml
-new file mode 100644
-index 0000000..f1cc352
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_14Cfg.ivml
-@@ -0,0 +1,77 @@
-+project PipelineVar_14Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_14Cfg;
-+	Pipeline PipelineVar_14;
-+	Source PipelineVar_14_Source0;
-+	Flow PipelineVar_14_Flow0;
-+	FamilyElement PipelineVar_14_FamilyElement0;
-+	Flow PipelineVar_14_Flow1;
-+	Sink PipelineVar_14_Sink0;
-+	PipelineVar_14_Sink0 = Sink {
-+		sink = refBy(randomSink), 
-+		parallelism = 1, 
-+		name = "snk", 
-+		constraints = {}
-+	};
-+	PipelineVar_14_Flow1 = Flow {
-+		destination = refBy(PipelineVar_14_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::randomFamily.output[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_14_FamilyElement0 = FamilyElement {
-+		family = refBy(randomFamily), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::randomFamily.parameters[2]), refBy(FamiliesCfg::randomFamily.parameters[1]), refBy(FamiliesCfg::randomFamily.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_14_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "processor", 
-+		constraints = {}
-+	};
-+	PipelineVar_14_Flow0 = Flow {
-+		destination = refBy(PipelineVar_14_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::randomSource.input[0]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	PipelineVar_14_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_14_Flow0)
-+		}, 
-+		source = refBy(randomSource), 
-+		permissibleParameters = {
-+			refBy(DataManagementCfg::randomSource.parameters[0])
-+		}, 
-+		parallelism = 1, 
-+		name = "src", 
-+		constraints = {}
-+	};
-+	PipelineVar_14 = Pipeline {
-+		name = "ReflectiveRandomPip", 
-+		sources = {
-+			refBy(PipelineVar_14_Source0)
-+		}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster:ReflectiveRandomPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_14;
-+		PipelineVar_14_Source0;
-+		PipelineVar_14_Flow0;
-+		PipelineVar_14_FamilyElement0;
-+		PipelineVar_14_Flow1;
-+		PipelineVar_14_Sink0;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline
-new file mode 100644
-index 0000000..1b7ff31
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline
-@@ -0,0 +1,15 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="PriorityFinancialPip" artifact="eu.qualimaster:PriorityFinancialPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="6">
-+    <permissibleParameters>DataManagementCfg::DataSourceVar_7.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="FinancialCorrelation" family="1">
-+    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::DataSourceVar_7.input[1]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
-+  <flows name="f4" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::DataSourceVar_7.input[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline_diagram
-new file mode 100644
-index 0000000..fc5bcfa
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16.pipeline_diagram
-@@ -0,0 +1,68 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_UrElUOLoEeaIoJk6L2fGOA" type="Pipeline" name="PipelineVar_16.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_dwqQ0OLoEeaIoJk6L2fGOA" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_dwqQ0uLoEeaIoJk6L2fGOA" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_dwqQ0-LoEeaIoJk6L2fGOA" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_16.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dwqQ0eLoEeaIoJk6L2fGOA" x="99" y="238"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_yW6jIOLoEeaIoJk6L2fGOA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_yW6jIuLoEeaIoJk6L2fGOA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_yW6jI-LoEeaIoJk6L2fGOA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_16.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yW6jIeLoEeaIoJk6L2fGOA" x="285" y="240"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_7cfnkOLoEeaIoJk6L2fGOA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_7cgOoOLoEeaIoJk6L2fGOA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_7cgOoeLoEeaIoJk6L2fGOA" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_16.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7cfnkeLoEeaIoJk6L2fGOA" x="480" y="240"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_DNfesOLpEeaIoJk6L2fGOA" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_DNfesuLpEeaIoJk6L2fGOA" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_DNfes-LpEeaIoJk6L2fGOA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_16.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DNfeseLpEeaIoJk6L2fGOA" x="703" y="256"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_UrElUeLoEeaIoJk6L2fGOA"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_16.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_GN-NIOLpEeaIoJk6L2fGOA" type="4001" source="_dwqQ0OLoEeaIoJk6L2fGOA" target="_yW6jIOLoEeaIoJk6L2fGOA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_GN-NI-LpEeaIoJk6L2fGOA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_GN-NJOLpEeaIoJk6L2fGOA" x="-5" y="25"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_GN-NIeLpEeaIoJk6L2fGOA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_16.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GN-NIuLpEeaIoJk6L2fGOA" points="[30, 0, -156, -2]$[156, 0, -30, -2]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_IpZGsOLpEeaIoJk6L2fGOA" type="4001" source="_yW6jIOLoEeaIoJk6L2fGOA" target="_7cfnkOLoEeaIoJk6L2fGOA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_IpZGs-LpEeaIoJk6L2fGOA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_IpZGtOLpEeaIoJk6L2fGOA" x="-1" y="26"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_IpZGseLpEeaIoJk6L2fGOA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_16.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IpZGsuLpEeaIoJk6L2fGOA" points="[30, -1, -146, 0]$[165, -2, -11, -1]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IpiQoOLpEeaIoJk6L2fGOA" id="(0.18333333333333332,0.48333333333333334)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_MXBPAOLpEeaIoJk6L2fGOA" type="4001" source="_7cfnkOLoEeaIoJk6L2fGOA" target="_DNfesOLpEeaIoJk6L2fGOA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_MXBPA-LpEeaIoJk6L2fGOA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_MXBPBOLpEeaIoJk6L2fGOA" y="24"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_MXBPAeLpEeaIoJk6L2fGOA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_16.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MXBPAuLpEeaIoJk6L2fGOA" points="[30, 1, -174, -9]$[193, 7, -11, -3]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MXRGoOLpEeaIoJk6L2fGOA" id="(0.2,0.43636363636363634)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_T2BXMOLpEeaIoJk6L2fGOA" type="4001" source="_dwqQ0OLoEeaIoJk6L2fGOA" target="_7cfnkOLoEeaIoJk6L2fGOA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_T2B-QOLpEeaIoJk6L2fGOA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_T2B-QeLpEeaIoJk6L2fGOA" x="-2" y="-6"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_T2BXMeLpEeaIoJk6L2fGOA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_16.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_T2BXMuLpEeaIoJk6L2fGOA" points="[35, -8, -351, -29]$[191, -39, -195, -60]$[356, 11, -30, -10]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_T2JTAOLpEeaIoJk6L2fGOA" id="(0.4166666666666667,0.18333333333333332)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16Cfg.ivml
-new file mode 100644
-index 0000000..c763412
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_16Cfg.ivml
-@@ -0,0 +1,107 @@
-+project PipelineVar_16Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_16Cfg;
-+	Pipeline PipelineVar_16;
-+	Source PipelineVar_16_Source0;
-+	Flow PipelineVar_16_Flow0;
-+	FamilyElement PipelineVar_16_FamilyElement0;
-+	Flow PipelineVar_16_Flow1;
-+	FamilyElement PipelineVar_16_FamilyElement1;
-+	Flow PipelineVar_16_Flow2;
-+	Sink PipelineVar_16_Sink0;
-+	PipelineVar_16_Sink0 = Sink {
-+		sink = refBy(priorSnk), 
-+		parallelism = 1, 
-+		name = "Sink", 
-+		constraints = {}
-+	};
-+	PipelineVar_16_Flow2 = Flow {
-+		destination = refBy(PipelineVar_16_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	PipelineVar_16_FamilyElement1 = FamilyElement {
-+		family = refBy(fCorrelationFinancial), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_16_Flow2)
-+		}, 
-+		parallelism = 1, 
-+		name = "FinancialCorrelation", 
-+		constraints = {}
-+	};
-+	PipelineVar_16_Flow1 = Flow {
-+		destination = refBy(PipelineVar_16_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_16_FamilyElement0 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		output = {
-+			refBy(PipelineVar_16_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "Preprocessor", 
-+		constraints = {}
-+	};
-+	PipelineVar_16_Flow0 = Flow {
-+		destination = refBy(PipelineVar_16_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_7.input[1]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_16_Flow3;
-+	PipelineVar_16_Flow3 = Flow {
-+		destination = refBy(PipelineVar_16_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_7.input[0]), 
-+		name = "f4", 
-+		constraints = {}
-+	};
-+	PipelineVar_16_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_16_Flow0), refBy(PipelineVar_16_Flow3)
-+		}, 
-+		source = refBy(DataSourceVar_7), 
-+		permissibleParameters = {
-+			refBy(DataManagementCfg::DataSourceVar_7.parameters[0])
-+		}, 
-+		parallelism = 1, 
-+		name = "FinancialDataSource",
-+		loadShedding = true, 
-+		constraints = {}
-+	};
-+	PipelineVar_16 = Pipeline {
-+		name = "PriorityFinancialPip", 
-+		sources = {
-+			refBy(PipelineVar_16_Source0)
-+		}, 
-+		numworkers = 16, 
-+		artifact = "eu.qualimaster:PriorityFinancialPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_16;
-+		PipelineVar_16_Source0;
-+		PipelineVar_16_Flow0;
-+		PipelineVar_16_FamilyElement0;
-+		PipelineVar_16_Flow1;
-+		PipelineVar_16_FamilyElement1;
-+		PipelineVar_16_Flow2;
-+		PipelineVar_16_Sink0;
-+		PipelineVar_16_Flow3;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline
-new file mode 100644
-index 0000000..d699944
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline
-@@ -0,0 +1,13 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="PrioritySimulatePip" numworkers="5" artifact="eu.qualimaster:PrioritySimulatePip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="FinancialSource" source="9"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="CorrelationComputation" family="1">
-+    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::DataSourceVar_10.input[1]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+  <flows name="f3" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::DataSourceVar_10.input[0]"/>
-+  <flows name="f4" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline_diagram
-new file mode 100644
-index 0000000..cc2ef08
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17.pipeline_diagram
-@@ -0,0 +1,67 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_ioxtQO3TEea63e3VPGt0Ow" type="Pipeline" name="PipelineVar_17.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_kr1KIO3TEea63e3VPGt0Ow" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_kr1KIu3TEea63e3VPGt0Ow" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_kr1KI-3TEea63e3VPGt0Ow" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_17.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kr1KIe3TEea63e3VPGt0Ow" x="178" y="262"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_nWGYAO3TEea63e3VPGt0Ow" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_nWGYAu3TEea63e3VPGt0Ow" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_nWGYA-3TEea63e3VPGt0Ow" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_17.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nWGYAe3TEea63e3VPGt0Ow" x="360" y="255"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_pRWjwO3TEea63e3VPGt0Ow" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_pRWjwu3TEea63e3VPGt0Ow" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_pRWjw-3TEea63e3VPGt0Ow" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_17.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pRWjwe3TEea63e3VPGt0Ow" x="525" y="255"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_kwREoO-IEea5f8BRD1AxIg" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_kwS50O-IEea5f8BRD1AxIg" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_kwTg4O-IEea5f8BRD1AxIg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_17.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kwREoe-IEea5f8BRD1AxIg" x="705" y="255"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_ioxtQe3TEea63e3VPGt0Ow"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_17.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_tuWTgO3TEea63e3VPGt0Ow" type="4001" source="_kr1KIO3TEea63e3VPGt0Ow" target="_nWGYAO3TEea63e3VPGt0Ow">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_tuWTg-3TEea63e3VPGt0Ow" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_tuWThO3TEea63e3VPGt0Ow" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_tuWTge3TEea63e3VPGt0Ow" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_17.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tuWTgu3TEea63e3VPGt0Ow" points="[30, 1, -131, 0]$[152, 4, -9, 3]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tuWThe3TEea63e3VPGt0Ow" id="(0.15,0.6333333333333333)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_uh0-4O3TEea63e3VPGt0Ow" type="4001" source="_nWGYAO3TEea63e3VPGt0Ow" target="_pRWjwO3TEea63e3VPGt0Ow">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_uh2NAO3TEea63e3VPGt0Ow" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_uh2NAe3TEea63e3VPGt0Ow" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_uh0-4e3TEea63e3VPGt0Ow" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_17.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uh0-4u3TEea63e3VPGt0Ow" points="[30, 0, -135, 0]$[135, 0, -30, 0]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_vX32EO3TEea63e3VPGt0Ow" type="4001" source="_kr1KIO3TEea63e3VPGt0Ow" target="_pRWjwO3TEea63e3VPGt0Ow">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_vX32E-3TEea63e3VPGt0Ow" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_vX32FO3TEea63e3VPGt0Ow" x="-10" y="-57"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_vX32Ee3TEea63e3VPGt0Ow" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_17.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vX32Eu3TEea63e3VPGt0Ow" points="[30, -16, -307, 11]$[182, -97, -155, -70]$[317, -37, -20, -10]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vYBnEO3TEea63e3VPGt0Ow" id="(0.3333333333333333,0.16666666666666666)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_m0zvQO-IEea5f8BRD1AxIg" type="4001" source="_pRWjwO3TEea63e3VPGt0Ow" target="_kwREoO-IEea5f8BRD1AxIg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_m009YO-IEea5f8BRD1AxIg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_m009Ye-IEea5f8BRD1AxIg" x="7" y="28"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_m0zvQe-IEea5f8BRD1AxIg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_17.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_m0zvQu-IEea5f8BRD1AxIg" points="[30, -4, -147, -1]$[150, -4, -27, -1]"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17Cfg.ivml
-new file mode 100644
-index 0000000..e23e83d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_17Cfg.ivml
-@@ -0,0 +1,103 @@
-+project PipelineVar_17Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_17Cfg;
-+	Pipeline PipelineVar_17;
-+	Source PipelineVar_17_Source0;
-+	Flow PipelineVar_17_Flow0;
-+	FamilyElement PipelineVar_17_FamilyElement0;
-+	Flow PipelineVar_17_Flow1;
-+	FamilyElement PipelineVar_17_FamilyElement1;
-+	Flow PipelineVar_17_Flow2;
-+	Sink PipelineVar_17_Sink0;
-+	PipelineVar_17_Sink0 = Sink {
-+		sink = refBy(priorSnk), 
-+		parallelism = 1, 
-+		name = "Sink", 
-+		constraints = {}
-+	};
-+	PipelineVar_17_Flow2 = Flow {
-+		destination = refBy(PipelineVar_17_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
-+		name = "f4", 
-+		constraints = {}
-+	};
-+	PipelineVar_17_FamilyElement1 = FamilyElement {
-+		family = refBy(fCorrelationFinancial), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_17_Flow2)
-+		}, 
-+		parallelism = 1, 
-+		name = "CorrelationComputation", 
-+		constraints = {}
-+	};
-+	PipelineVar_17_Flow1 = Flow {
-+		destination = refBy(PipelineVar_17_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_17_FamilyElement0 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		output = {
-+			refBy(PipelineVar_17_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "Preprocessor", 
-+		constraints = {}
-+	};
-+	PipelineVar_17_Flow0 = Flow {
-+		destination = refBy(PipelineVar_17_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_10.input[1]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_17_Flow3;
-+	PipelineVar_17_Flow3 = Flow {
-+		destination = refBy(PipelineVar_17_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_10.input[0]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	PipelineVar_17_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_17_Flow0), refBy(PipelineVar_17_Flow3)
-+		}, 
-+		source = refBy(DataSourceVar_10), 
-+		parallelism = 1, 
-+		name = "FinancialSource", 
-+		constraints = {}
-+	};
-+	PipelineVar_17 = Pipeline {
-+		name = "PrioritySimulatePip", 
-+		sources = {
-+			refBy(PipelineVar_17_Source0)
-+		}, 
-+		numworkers = 5, 
-+		artifact = "eu.qualimaster:PrioritySimulatePip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_17;
-+		PipelineVar_17_Source0;
-+		PipelineVar_17_Flow0;
-+		PipelineVar_17_FamilyElement0;
-+		PipelineVar_17_Flow1;
-+		PipelineVar_17_FamilyElement1;
-+		PipelineVar_17_Flow2;
-+		PipelineVar_17_Sink0;
-+		PipelineVar_17_Flow3;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline
-new file mode 100644
-index 0000000..29a1f90
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline
-@@ -0,0 +1,22 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="TimeTravelSimPip" numworkers="18" artifact="eu.qualimaster:TimeTravelSimPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="GraphDataSource" source="10"/>
-+  <nodes xsi:type="pipeline:Source" name="queries" source="8">
-+    <permissibleParameters>DataManagementCfg::DataSourceVar_9.parameters[1]</permissibleParameters>
-+    <permissibleParameters>DataManagementCfg::DataSourceVar_9.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphQueryExecutor" family="29" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_36"/>
-+  <nodes xsi:type="pipeline:Sink" name="TimeTravelSink" sink="5"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphIndexer" family="28" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_35"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="TimeGraphMapper" family="27" defaultAlgorithm="AlgorithmsCfg::SoftwareAlgorithmVar_34"/>
-+  <flows name="f0" source="//@nodes.0" destination="//@nodes.5" tupleType="DataManagementCfg::DataSourceVar_11.input[0]"/>
-+  <flows name="f1" source="//@nodes.5" destination="//@nodes.4" grouping="3" tupleType="FamiliesCfg::FamilyVar_26.output[0]"/>
-+  <flows name="f2" source="//@nodes.4" destination="//@nodes.4" grouping="3" tupleType="FamiliesCfg::FamilyVar_27.output[1]"/>
-+  <flows name="f4" source="//@nodes.2" destination="//@nodes.4" grouping="3" tupleType="FamiliesCfg::FamilyVar_28.output[2]"/>
-+  <flows name="f5" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_28.output[0]"/>
-+  <flows name="f6" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_28.output[1]"/>
-+  <flows name="f7" source="//@nodes.1" destination="//@nodes.2" tupleType="DataManagementCfg::DataSourceVar_9.input[0]"/>
-+  <flows name="f8" source="//@nodes.1" destination="//@nodes.2" tupleType="DataManagementCfg::DataSourceVar_9.input[1]"/>
-+  <flows name="f9" source="//@nodes.4" destination="//@nodes.2" grouping="3" tupleType="FamiliesCfg::FamilyVar_27.output[0]"/>
-+  <flows name="f3" source="//@nodes.2" destination="//@nodes.4" grouping="4" tupleType="FamiliesCfg::FamilyVar_28.output[3]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline_diagram
-new file mode 100644
-index 0000000..596949c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18.pipeline_diagram
-@@ -0,0 +1,139 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_be-akO43EeaopKNSMVJKHg" type="Pipeline" name="PipelineVar_18.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_mBMcIO43EeaopKNSMVJKHg" type="2001" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_mBMcIu43EeaopKNSMVJKHg" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_mBMcI-43EeaopKNSMVJKHg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_18.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mBMcIe43EeaopKNSMVJKHg" x="876" y="264"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_ro5EcO43EeaopKNSMVJKHg" type="2001" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ro5rgO43EeaopKNSMVJKHg" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ro5rge43EeaopKNSMVJKHg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_18.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ro5Ece43EeaopKNSMVJKHg" x="140" y="117"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_yU3NMO43EeaopKNSMVJKHg" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_yU3NMu43EeaopKNSMVJKHg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_yU3NM-43EeaopKNSMVJKHg" x="-20" y="-35"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_18.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yU3NMe43EeaopKNSMVJKHg" x="420" y="120"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_7lBxAO43EeaopKNSMVJKHg" type="2002" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_7lBxAu43EeaopKNSMVJKHg" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_7lBxA-43EeaopKNSMVJKHg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_18.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7lBxAe43EeaopKNSMVJKHg" x="420" y="264"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_-6AIwO43EeaopKNSMVJKHg" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_-6Av0O43EeaopKNSMVJKHg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_-6Av0e43EeaopKNSMVJKHg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_18.pipeline#//@nodes.4"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-6AIwe43EeaopKNSMVJKHg" x="660" y="122"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_E6BxgO44EeaopKNSMVJKHg" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_E6Bxgu44EeaopKNSMVJKHg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_E6CYkO44EeaopKNSMVJKHg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_18.pipeline#//@nodes.5"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E6Bxge44EeaopKNSMVJKHg" x="660" y="264"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_be-ake43EeaopKNSMVJKHg"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_18.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_QBq0UO44EeaopKNSMVJKHg" type="4001" source="_mBMcIO43EeaopKNSMVJKHg" target="_E6BxgO44EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_QBq0U-44EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_QBq0VO44EeaopKNSMVJKHg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_QBq0Ue44EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QBq0Uu44EeaopKNSMVJKHg" points="[0, 0, -461, 38]$[455, -8, -6, 30]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QBspgO44EeaopKNSMVJKHg" id="(0.8333333333333334,0.55)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_TlpRYO44EeaopKNSMVJKHg" type="4001" source="_E6BxgO44EeaopKNSMVJKHg" target="_-6AIwO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_TlpRY-44EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_TlpRZO44EeaopKNSMVJKHg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_TlpRYe44EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TlpRYu44EeaopKNSMVJKHg" points="[0, 0, -94, 234]$[85, -204, -9, 30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_Yx4FsO44EeaopKNSMVJKHg" type="4001" source="_-6AIwO43EeaopKNSMVJKHg" target="_-6AIwO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Yx4Fs-44EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Yx4FtO44EeaopKNSMVJKHg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_Yx4Fse44EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Yx4Fsu44EeaopKNSMVJKHg" points="[2, 8, 1, -19]$[103, 8, 102, -19]$[103, 27, 102, 0]$[2, 27, 1, 0]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Yx4swO44EeaopKNSMVJKHg" id="(0.9666666666666667,0.25)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ck_yAO44EeaopKNSMVJKHg" id="(0.9833333333333333,0.7)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_pPmcYO44EeaopKNSMVJKHg" type="4001" source="_yU3NMO43EeaopKNSMVJKHg" target="_-6AIwO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_pPmcY-44EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_pPmcZO44EeaopKNSMVJKHg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_pPmcYe44EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pPmcYu44EeaopKNSMVJKHg" points="[0, 0, -210, 8]$[84, -64, -126, -56]$[180, -22, -30, -14]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pPnqgO44EeaopKNSMVJKHg" id="(0.9666666666666667,0.4)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_v6cjwO44EeaopKNSMVJKHg" type="4001" source="_yU3NMO43EeaopKNSMVJKHg" target="_7lBxAO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_v6cjw-44EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_v6cjxO44EeaopKNSMVJKHg" x="11" y="-15"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_v6cjwe44EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.4"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v6cjwu44EeaopKNSMVJKHg" points="[3, 7, 4, -91]$[29, 55, 30, -43]$[3, 91, 4, -7]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v6dK0O44EeaopKNSMVJKHg" id="(0.5166666666666667,0.8833333333333333)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v6dK0e44EeaopKNSMVJKHg" id="(0.5454545454545454,0.12727272727272726)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_0iFdQO44EeaopKNSMVJKHg" type="4001" source="_yU3NMO43EeaopKNSMVJKHg" target="_7lBxAO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_0iFdQ-44EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_0iFdRO44EeaopKNSMVJKHg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_0iFdQe44EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.5"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0iFdQu44EeaopKNSMVJKHg" points="[-4, 5, -5, -111]$[-26, 41, -27, -75]$[-9, 89, -10, -27]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0iGrYO44EeaopKNSMVJKHg" id="(0.43333333333333335,0.9166666666666666)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_6nq7cO44EeaopKNSMVJKHg" type="4001" source="_ro5EcO43EeaopKNSMVJKHg" target="_yU3NMO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_6nrigO44EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_6nrige44EeaopKNSMVJKHg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_6nq7ce44EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.6"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_6nq7cu44EeaopKNSMVJKHg" points="[18, -2, -229, 22]$[238, -23, -9, 1]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6nsJkO44EeaopKNSMVJKHg" id="(0.9666666666666667,0.6333333333333333)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6nsJke44EeaopKNSMVJKHg" id="(0.15,0.55)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_-NE74O44EeaopKNSMVJKHg" type="4001" source="_ro5EcO43EeaopKNSMVJKHg" target="_yU3NMO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_-NE74-44EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_-NE75O44EeaopKNSMVJKHg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_-NE74e44EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.7"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-NE74u44EeaopKNSMVJKHg" points="[60, -27, -250, -17]$[172, -76, -138, -66]$[280, -25, -30, -15]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-NFi8O44EeaopKNSMVJKHg" id="(0.0,0.7166666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_Cg1QEO45EeaopKNSMVJKHg" type="4001" source="_-6AIwO43EeaopKNSMVJKHg" target="_yU3NMO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Cg1QE-45EeaopKNSMVJKHg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Cg1QFO45EeaopKNSMVJKHg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_Cg1QEe45EeaopKNSMVJKHg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.8"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Cg1QEu45EeaopKNSMVJKHg" points="[-6, -2, 234, -28]$[-6, -76, 234, -102]$[-244, -76, -4, -102]$[-244, -4, -4, -30]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Cg2eMO45EeaopKNSMVJKHg" id="(0.5,0.03333333333333333)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_ZXqocO46EeavEu-7RgqM7A" type="4001" source="_yU3NMO43EeaopKNSMVJKHg" target="_-6AIwO43EeaopKNSMVJKHg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ZXrPgO46EeavEu-7RgqM7A" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZXr2kO46EeavEu-7RgqM7A" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_ZXqoce46EeavEu-7RgqM7A" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_18.pipeline#//@flows.9"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZXqocu46EeavEu-7RgqM7A" points="[60, -3, -210, 1]$[240, -3, -30, 1]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZXu54O46EeavEu-7RgqM7A" id="(0.0,0.6)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18Cfg.ivml
-new file mode 100644
-index 0000000..587dc0a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_18Cfg.ivml
-@@ -0,0 +1,182 @@
-+project PipelineVar_18Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_18Cfg;
-+	Pipeline PipelineVar_18;
-+	Source PipelineVar_18_Source0;
-+	Flow PipelineVar_18_Flow0;
-+	FamilyElement PipelineVar_18_FamilyElement0;
-+	Flow PipelineVar_18_Flow1;
-+	FamilyElement PipelineVar_18_FamilyElement1;
-+	Flow PipelineVar_18_Flow2;
-+	PipelineVar_18_Flow2 = Flow {
-+		destination = refBy(PipelineVar_18_FamilyElement1), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_27.output[1]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_18_Flow3;
-+	FamilyElement PipelineVar_18_FamilyElement2;
-+	Flow PipelineVar_18_Flow4;
-+	PipelineVar_18_Flow4 = Flow {
-+		destination = refBy(PipelineVar_18_FamilyElement1), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[2]), 
-+		name = "f4", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_18_Flow5;
-+	Sink PipelineVar_18_Sink0;
-+	PipelineVar_18_Sink0 = Sink {
-+		sink = refBy(DataSinkVar_5), 
-+		parallelism = 1, 
-+		name = "TimeTravelSink", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_Flow5 = Flow {
-+		destination = refBy(PipelineVar_18_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[0]), 
-+		name = "f5", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_18_Flow6;
-+	PipelineVar_18_Flow6 = Flow {
-+		destination = refBy(PipelineVar_18_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[1]), 
-+		name = "f6", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_18_Flow7;
-+	PipelineVar_18_Flow7 = Flow {
-+		destination = refBy(PipelineVar_18_FamilyElement1), 
-+		grouping = Grouping.allGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_28.output[3]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_FamilyElement2 = FamilyElement {
-+		family = refBy(FamilyVar_28), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_36), 
-+		output = {
-+			refBy(PipelineVar_18_Flow4), refBy(PipelineVar_18_Flow5), refBy(PipelineVar_18_Flow6), refBy(PipelineVar_18_Flow7)
-+		}, 
-+		parallelism = 1, 
-+		name = "TimeGraphQueryExecutor", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_Flow3 = Flow {
-+		destination = refBy(PipelineVar_18_FamilyElement2), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_27.output[0]), 
-+		name = "f9", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_FamilyElement1 = FamilyElement {
-+		family = refBy(FamilyVar_27), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_35), 
-+		output = {
-+			refBy(PipelineVar_18_Flow2), refBy(PipelineVar_18_Flow3)
-+		}, 
-+		parallelism = 1, 
-+		name = "TimeGraphIndexer", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_Flow1 = Flow {
-+		destination = refBy(PipelineVar_18_FamilyElement1), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_26.output[0]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_FamilyElement0 = FamilyElement {
-+		family = refBy(FamilyVar_26), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::SoftwareAlgorithmVar_34), 
-+		output = {
-+			refBy(PipelineVar_18_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "TimeGraphMapper", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_Flow0 = Flow {
-+		destination = refBy(PipelineVar_18_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_11.input[0]), 
-+		name = "f0", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_18_Flow0)
-+		}, 
-+		source = refBy(DataSourceVar_11), 
-+		parallelism = 1, 
-+		name = "GraphDataSource", 
-+		constraints = {}
-+	};
-+	Source PipelineVar_18_Source1;
-+	Flow PipelineVar_18_Flow8;
-+	PipelineVar_18_Flow8 = Flow {
-+		destination = refBy(PipelineVar_18_FamilyElement2), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_9.input[0]), 
-+		name = "f7", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_18_Flow9;
-+	PipelineVar_18_Flow9 = Flow {
-+		destination = refBy(PipelineVar_18_FamilyElement2), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_9.input[1]), 
-+		name = "f8", 
-+		constraints = {}
-+	};
-+	PipelineVar_18_Source1 = Source {
-+		output = {
-+			refBy(PipelineVar_18_Flow8), refBy(PipelineVar_18_Flow9)
-+		}, 
-+		source = refBy(DataSourceVar_9), 
-+		permissibleParameters = {
-+			refBy(DataManagementCfg::DataSourceVar_9.parameters[1]), refBy(DataManagementCfg::DataSourceVar_9.parameters[0])
-+		}, 
-+		parallelism = 1, 
-+		name = "queries", 
-+		constraints = {}
-+	};
-+	PipelineVar_18 = Pipeline {
-+		name = "TimeTravelSimPip", 
-+		sources = {
-+			refBy(PipelineVar_18_Source0), refBy(PipelineVar_18_Source1)
-+		}, 
-+		numworkers = 18, 
-+		artifact = "eu.qualimaster:TimeTravelSimPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_18;
-+		PipelineVar_18_Source0;
-+		PipelineVar_18_Flow0;
-+		PipelineVar_18_FamilyElement0;
-+		PipelineVar_18_Flow1;
-+		PipelineVar_18_FamilyElement1;
-+		PipelineVar_18_Flow2;
-+		PipelineVar_18_Flow3;
-+		PipelineVar_18_FamilyElement2;
-+		PipelineVar_18_Flow4;
-+		PipelineVar_18_Flow5;
-+		PipelineVar_18_Sink0;
-+		PipelineVar_18_Flow6;
-+		PipelineVar_18_Flow7;
-+		PipelineVar_18_Source1;
-+		PipelineVar_18_Flow8;
-+		PipelineVar_18_Flow9;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1Cfg.ivml
-new file mode 100644
-index 0000000..d1bac7f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_1Cfg.ivml
-@@ -0,0 +1,66 @@
-+project PipelineVar_1Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_1Cfg;
-+	Pipeline PipelineVar_1;
-+	Source PipelineVar_1_Source0;
-+	Flow PipelineVar_1_Flow0;
-+	FamilyElement PipelineVar_1_FamilyElement0;
-+	Flow PipelineVar_1_Flow1;
-+	Sink PipelineVar_1_Sink0;
-+	PipelineVar_1_Sink0 = Sink {
-+		sink = refBy(randomSink), 
-+		parallelism = 1, 
-+		name = "snk"
-+	};
-+	PipelineVar_1_Flow1 = Flow {
-+		destination = refBy(PipelineVar_1_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::randomFamily.output[0]), 
-+		name = "f2"
-+	};
-+	PipelineVar_1_FamilyElement0 = FamilyElement {
-+		family = refBy(randomFamily), 
-+		output = {
-+			refBy(PipelineVar_1_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "processor"
-+	};
-+	PipelineVar_1_Flow0 = Flow {
-+		destination = refBy(PipelineVar_1_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::randomSource.input[0]), 
-+		name = "f1"
-+	};
-+	PipelineVar_1_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_1_Flow0)
-+		}, 
-+		source = refBy(randomSource), 
-+		parallelism = 1, 
-+		name = "src"
-+	};
-+	PipelineVar_1 = Pipeline {
-+		name = "RandomPip", 
-+		sources = {
-+			refBy(PipelineVar_1_Source0)
-+		}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster:RandomPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false,
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_1;
-+		PipelineVar_1_Source0;
-+		PipelineVar_1_Flow0;
-+		PipelineVar_1_FamilyElement0;
-+		PipelineVar_1_Flow1;
-+		PipelineVar_1_Sink0;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline
-new file mode 100644
-index 0000000..ee634bc
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline
-@@ -0,0 +1,8 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="SwitchPip" artifact="eu.qualimaster.test:SwitchPip:0.0.2-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="src" source="2"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="processor" family="6"/>
-+  <nodes xsi:type="pipeline:Sink" name="snk" sink="1"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::randomSource.input[0]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::randomFamily.output[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline_diagram
-new file mode 100644
-index 0000000..7bca4ce
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2.pipeline_diagram
-@@ -0,0 +1,43 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_DJ1_IBApEeWdifDyhD-nxA" type="Pipeline" name="PipelineVar_2.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_TWtm8BsMEeWh4KdJp1z-Qw" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_TWtm8hsMEeWh4KdJp1z-Qw" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_TWtm8xsMEeWh4KdJp1z-Qw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_2.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TWtm8RsMEeWh4KdJp1z-Qw" x="117" y="320"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_hW0rsBsMEeWh4KdJp1z-Qw" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_hW0rshsMEeWh4KdJp1z-Qw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hW0rsxsMEeWh4KdJp1z-Qw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_2.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hW0rsRsMEeWh4KdJp1z-Qw" x="264" y="312"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_m7UPABsMEeWh4KdJp1z-Qw" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_m7UPAhsMEeWh4KdJp1z-Qw" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_m7UPAxsMEeWh4KdJp1z-Qw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_2.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_m7UPARsMEeWh4KdJp1z-Qw" x="432" y="378"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_DJ1_IRApEeWdifDyhD-nxA"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_2.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_ljYLsBsMEeWh4KdJp1z-Qw" type="4001" source="_TWtm8BsMEeWh4KdJp1z-Qw" target="_hW0rsBsMEeWh4KdJp1z-Qw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ljYLsxsMEeWh4KdJp1z-Qw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ljYLtBsMEeWh4KdJp1z-Qw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_ljYLsRsMEeWh4KdJp1z-Qw" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_2.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ljYLshsMEeWh4KdJp1z-Qw" points="[30, -4, -100, 0]$[117, -1, -13, 3]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ljYLtRsMEeWh4KdJp1z-Qw" id="(0.21666666666666667,0.5666666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_n7mAQBsMEeWh4KdJp1z-Qw" type="4001" source="_hW0rsBsMEeWh4KdJp1z-Qw" target="_m7UPABsMEeWh4KdJp1z-Qw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_n7mAQxsMEeWh4KdJp1z-Qw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_n7mARBsMEeWh4KdJp1z-Qw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_n7mAQRsMEeWh4KdJp1z-Qw" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_2.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n7mAQhsMEeWh4KdJp1z-Qw" points="[30, -5, -123, -2]$[153, -30, 0, -27]"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2Cfg.ivml
-new file mode 100644
-index 0000000..01e1084
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_2Cfg.ivml
-@@ -0,0 +1,71 @@
-+project PipelineVar_2Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_2Cfg;
-+	Pipeline PipelineVar_2;
-+	Source PipelineVar_2_Source0;
-+	Flow PipelineVar_2_Flow0;
-+	FamilyElement PipelineVar_2_FamilyElement0;
-+	Flow PipelineVar_2_Flow1;
-+	Sink PipelineVar_2_Sink0;
-+	PipelineVar_2_Sink0 = Sink {
-+		sink = refBy(randomSink), 
-+		parallelism = 1, 
-+		name = "snk", 
-+		constraints = {}
-+	};
-+	PipelineVar_2_Flow1 = Flow {
-+		destination = refBy(PipelineVar_2_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::switchFamily.output[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_2_FamilyElement0 = FamilyElement {
-+		family = refBy(switchFamily), 
-+		output = {
-+			refBy(PipelineVar_2_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "processor", 
-+		constraints = {}
-+	};
-+	PipelineVar_2_Flow0 = Flow {
-+		destination = refBy(PipelineVar_2_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::randomSource.input[0]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	PipelineVar_2_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_2_Flow0)
-+		}, 
-+		source = refBy(randomSource), 
-+		parallelism = 1, 
-+		name = "src", 
-+		constraints = {}
-+	};
-+	PipelineVar_2 = Pipeline {
-+		name = "SwitchPip", 
-+		sources = {
-+			refBy(PipelineVar_2_Source0)
-+		}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster.test:SwitchPip:0.0.2-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_2;
-+		PipelineVar_2_Source0;
-+		PipelineVar_2_Flow0;
-+		PipelineVar_2_FamilyElement0;
-+		PipelineVar_2_Flow1;
-+		PipelineVar_2_Sink0;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline
-new file mode 100644
-index 0000000..85e36d5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline
-@@ -0,0 +1,10 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="testDMPip" numworkers="3" artifact="eu.qualimaster:testDMPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="src" source="2"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="fm1" family="6"/>
-+  <nodes xsi:type="pipeline:Sink" name="sink" sink="1"/>
-+  <nodes xsi:type="pipeline:DataManagementElement" name="dm" dataManagement="0"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.3"/>
-+  <flows name="f3" source="//@nodes.3" destination="//@nodes.2"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline_diagram
-new file mode 100644
-index 0000000..13e3669
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3.pipeline_diagram
-@@ -0,0 +1,57 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_mDWUYAIiEeW5Iq-O8qo3ZA" type="Pipeline" name="PipelineVar_3.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_nBjpEAIiEeW5Iq-O8qo3ZA" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_nBjpEgIiEeW5Iq-O8qo3ZA" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_nBjpEwIiEeW5Iq-O8qo3ZA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_3.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nBjpEQIiEeW5Iq-O8qo3ZA" x="156" y="336"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_tCnzoAIiEeW5Iq-O8qo3ZA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_tCnzogIiEeW5Iq-O8qo3ZA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_tCnzowIiEeW5Iq-O8qo3ZA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_3.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tCnzoQIiEeW5Iq-O8qo3ZA" x="300" y="336"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_wxYkYAIiEeW5Iq-O8qo3ZA" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_wxYkYgIiEeW5Iq-O8qo3ZA" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_wxYkYwIiEeW5Iq-O8qo3ZA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_3.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wxYkYQIiEeW5Iq-O8qo3ZA" x="588" y="336"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_jv09YBAqEeWdifDyhD-nxA" type="2006" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_jv09YhAqEeWdifDyhD-nxA" type="5006">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_jv09YxAqEeWdifDyhD-nxA" x="24" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:DataManagementElement" href="PipelineVar_3.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jv09YRAqEeWdifDyhD-nxA" x="444" y="336"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_mDWUYQIiEeW5Iq-O8qo3ZA"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_3.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_vi_eoAIiEeW5Iq-O8qo3ZA" type="4001" source="_nBjpEAIiEeW5Iq-O8qo3ZA" target="_tCnzoAIiEeW5Iq-O8qo3ZA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_vi_eowIiEeW5Iq-O8qo3ZA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_vi_epAIiEeW5Iq-O8qo3ZA" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_vi_eoQIiEeW5Iq-O8qo3ZA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_3.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vi_eogIiEeW5Iq-O8qo3ZA" points="[30, 2, -146, -14]$[146, 15, -30, -1]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_yl4A0AIiEeW5Iq-O8qo3ZA" type="4001" source="_tCnzoAIiEeW5Iq-O8qo3ZA" target="_jv09YBAqEeWdifDyhD-nxA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_yl-HcgIiEeW5Iq-O8qo3ZA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_yl-HcwIiEeW5Iq-O8qo3ZA" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_yl-HcAIiEeW5Iq-O8qo3ZA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_3.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yl-HcQIiEeW5Iq-O8qo3ZA" points="[30, 5, -184, -25]$[210, 58, -4, 28]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_X9QNkBAyEeWdifDyhD-nxA" type="4001" source="_jv09YBAqEeWdifDyhD-nxA" target="_wxYkYAIiEeW5Iq-O8qo3ZA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_X9QNkxAyEeWdifDyhD-nxA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_X9QNlBAyEeWdifDyhD-nxA" x="-7" y="28"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_X9QNkRAyEeWdifDyhD-nxA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_3.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_X9QNkhAyEeWdifDyhD-nxA" points="[30, 4, -123, 7]$[146, 25, -7, 28]"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3Cfg.ivml
-new file mode 100644
-index 0000000..2971f5a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_3Cfg.ivml
-@@ -0,0 +1,34 @@
-+project PipelineVar_3Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_3Cfg;
-+	Pipeline PipelineVar_3;
-+	Source PipelineVar_3_Source0;
-+	Flow PipelineVar_3_Flow0;
-+	FamilyElement PipelineVar_3_FamilyElement0;
-+	Flow PipelineVar_3_Flow1;
-+	DataManagementElement PipelineVar_3_DataManagementElement0;
-+	Flow PipelineVar_3_Flow2;
-+	Sink PipelineVar_3_Sink0;
-+	PipelineVar_3_Sink0 = {sink = refBy(randomSink), parallelism = 1, name = "sink"};
-+	PipelineVar_3_Flow2 = {destination = refBy(PipelineVar_3_Sink0), grouping = Grouping.shuffleGrouping, name = "f3"};
-+	PipelineVar_3_DataManagementElement0 = {dataManagement = refBy(hBaseDataManagement), output = {refBy(PipelineVar_3_Flow2)}, parallelism = 1, name = "dm"};
-+	PipelineVar_3_Flow1 = {destination = refBy(PipelineVar_3_DataManagementElement0), grouping = Grouping.shuffleGrouping, name = "f2"};
-+	PipelineVar_3_FamilyElement0 = {family = refBy(switchFamily), output = {refBy(PipelineVar_3_Flow1)}, parallelism = 1, name = "fm1"};
-+	PipelineVar_3_Flow0 = {destination = refBy(PipelineVar_3_FamilyElement0), grouping = Grouping.shuffleGrouping, name = "f1"};
-+	PipelineVar_3_Source0 = {output = {refBy(PipelineVar_3_Flow0)}, source = refBy(randomSource), parallelism = 1, name = "src"};
-+	PipelineVar_3 = {name = "testDMPip", sources = {refBy(PipelineVar_3_Source0)}, numworkers = 3, artifact = "eu.qualimaster:testDMPip:0.0.1-SNAPSHOT", debug = false, fastSerialization = false};
-+	freeze {
-+		PipelineVar_3;
-+		PipelineVar_3_Source0;
-+		PipelineVar_3_Flow0;
-+		PipelineVar_3_FamilyElement0;
-+		PipelineVar_3_Flow1;
-+		PipelineVar_3_DataManagementElement0;
-+		PipelineVar_3_Flow2;
-+		PipelineVar_3_Sink0;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline
-new file mode 100644
-index 0000000..620bdf6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline
-@@ -0,0 +1,4 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="RandomProcessor" artifact="eu.qualimaster:RandomProcessor:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:FamilyElement" name="processor" family="5"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline_diagram
-new file mode 100644
-index 0000000..d52fd0b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4.pipeline_diagram
-@@ -0,0 +1,12 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_0RY4cHf3EeWnJpW8dl25Nw" type="Pipeline" name="PipelineVar_4.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_5GAeAHf3EeWnJpW8dl25Nw" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_5GAeAnf3EeWnJpW8dl25Nw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_5GAeA3f3EeWnJpW8dl25Nw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_4.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5GAeAXf3EeWnJpW8dl25Nw" x="314" y="342"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_0RY4cXf3EeWnJpW8dl25Nw"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_4.pipeline#/"/>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4Cfg.ivml
-new file mode 100644
-index 0000000..c350041
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_4Cfg.ivml
-@@ -0,0 +1,59 @@
-+project PipelineVar_4Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_4Cfg;
-+	SubPipeline PipelineVar_4;
-+	PipelineVar_4 = {name = "RandomProcessor", sources = {}, connectors = {refBy(PipelineVar_4_FamilyElement0)}, subPipelineFamily = refBy(randomFamily),numworkers = 1, artifact = "eu.qualimaster.test:RandomProcessor:0.0.1-SNAPSHOT", debug = false, fastSerialization = false, constraints = {}};
-+	FamilyElement PipelineVar_4_FamilyElement0;
-+	PipelineVar_4_FamilyElement0 = {family = refBy(randomFamily), output = {}, parallelism = 1, name = "processor", constraints = {}};
-+	
-+	SubPipelineAlgorithm randomProcessor = SubPipelineAlgorithm {
-+		name = "RandomProcessor", 
-+		artifact = "eu.qualimaster.test:RandomProcessor:0.0.1-SNAPSHOT", 
-+		//class = "eu.qualimaster.RandomProcessor.topology.SubTopology", 
-+		input = {
-+			Tuple {
-+				name = "randomData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "proccessedData", 
-+				fields = {
-+					Field {
-+						name = "randomInteger", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 0, 
-+				name = "delay"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "flag"
-+			}
-+		}, 
-+		subPipeline = refBy(PipelineVar_4),
-+		//algTopologyClass = "RandomProcessor", 
-+		successor = null, 
-+		inputGivenCheck = false, 
-+		outputGivenCheck = false
-+	};
-+	freeze {
-+		PipelineVar_4;
-+		PipelineVar_4_FamilyElement0;
-+		randomProcessor;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline
-new file mode 100644
-index 0000000..bc73e07
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline
-@@ -0,0 +1,10 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="SimpleEDPipeline" artifact="eu.qualimaster:SimpleEDPipeline:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="source1" source="1"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="stockParser" family="20"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="ed" family="10"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="recom" family="19"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2"/>
-+  <flows name="f3" source="//@nodes.2" destination="//@nodes.3"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline_diagram
-new file mode 100644
-index 0000000..64dc19c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5.pipeline_diagram
-@@ -0,0 +1,57 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_XyV6ML6eEeWt0ezuaR-rMA" type="Pipeline" name="PipelineVar_5.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_iB43YL6eEeWt0ezuaR-rMA" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_iB6skL6eEeWt0ezuaR-rMA" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_iB7ToL6eEeWt0ezuaR-rMA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_5.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iB43Yb6eEeWt0ezuaR-rMA" x="60" y="315"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_ku53QL6eEeWt0ezuaR-rMA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ku6eUL6eEeWt0ezuaR-rMA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ku6eUb6eEeWt0ezuaR-rMA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_5.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ku53Qb6eEeWt0ezuaR-rMA" x="210" y="315"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_nNn8cL6eEeWt0ezuaR-rMA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_nNojgL6eEeWt0ezuaR-rMA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_nNpKkL6eEeWt0ezuaR-rMA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_5.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nNn8cb6eEeWt0ezuaR-rMA" x="330" y="315"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_pP1r0L6eEeWt0ezuaR-rMA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_pP2S4L6eEeWt0ezuaR-rMA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_pP2S4b6eEeWt0ezuaR-rMA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_5.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pP1r0b6eEeWt0ezuaR-rMA" x="450" y="315"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_XyV6Mb6eEeWt0ezuaR-rMA"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_5.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_rqo6UL6eEeWt0ezuaR-rMA" type="4001" source="_iB43YL6eEeWt0ezuaR-rMA" target="_ku53QL6eEeWt0ezuaR-rMA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_rqphYL6eEeWt0ezuaR-rMA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_rqphYb6eEeWt0ezuaR-rMA" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_rqo6Ub6eEeWt0ezuaR-rMA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_5.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rqo6Ur6eEeWt0ezuaR-rMA" points="[30, 1, -120, 1]$[142, 30, -8, 30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_scOvUL6eEeWt0ezuaR-rMA" type="4001" source="_ku53QL6eEeWt0ezuaR-rMA" target="_nNn8cL6eEeWt0ezuaR-rMA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_scPWYL6eEeWt0ezuaR-rMA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_scPWYb6eEeWt0ezuaR-rMA" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_scOvUb6eEeWt0ezuaR-rMA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_5.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_scOvUr6eEeWt0ezuaR-rMA" points="[30, -6, -90, -6]$[112, -30, -8, -30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_tiVbwL6eEeWt0ezuaR-rMA" type="4001" source="_nNn8cL6eEeWt0ezuaR-rMA" target="_pP1r0L6eEeWt0ezuaR-rMA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_tiVbw76eEeWt0ezuaR-rMA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_tiWC0L6eEeWt0ezuaR-rMA" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_tiVbwb6eEeWt0ezuaR-rMA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_5.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tiVbwr6eEeWt0ezuaR-rMA" points="[30, -8, -90, -8]$[119, -30, -1, -30]"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5Cfg.ivml
-new file mode 100644
-index 0000000..ed6e602
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_5Cfg.ivml
-@@ -0,0 +1,34 @@
-+project PipelineVar_5Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_5Cfg;
-+	Pipeline PipelineVar_5;
-+	Source PipelineVar_5_Source0;
-+	Flow PipelineVar_5_Flow0;
-+	FamilyElement PipelineVar_5_FamilyElement0;
-+	Flow PipelineVar_5_Flow1;
-+	FamilyElement PipelineVar_5_FamilyElement1;
-+	Flow PipelineVar_5_Flow2;
-+	FamilyElement PipelineVar_5_FamilyElement2;
-+	PipelineVar_5_FamilyElement2 = {family = refBy(FamilyVar_20), output = {}, parallelism = 1, name = "recom", constraints = {}};
-+	PipelineVar_5_Flow2 = {destination = refBy(PipelineVar_5_FamilyElement2), grouping = Grouping.shuffleGrouping, name = "f3", constraints = {}};
-+	PipelineVar_5_FamilyElement1 = {family = refBy(fTwitterEventDetection), output = {refBy(PipelineVar_5_Flow2)}, parallelism = 1, name = "ed", constraints = {}};
-+	PipelineVar_5_Flow1 = {destination = refBy(PipelineVar_5_FamilyElement1), grouping = Grouping.shuffleGrouping, name = "f2", constraints = {}};
-+	PipelineVar_5_FamilyElement0 = {family = refBy(FamilyVar_21), output = {refBy(PipelineVar_5_Flow1)}, parallelism = 1, name = "stockParser", constraints = {}};
-+	PipelineVar_5_Flow0 = {destination = refBy(PipelineVar_5_FamilyElement0), grouping = Grouping.shuffleGrouping, name = "f1", constraints = {}};
-+	PipelineVar_5_Source0 = {output = {refBy(PipelineVar_5_Flow0)}, source = refBy(twitter), parallelism = 1, name = "source1", constraints = {}};
-+	PipelineVar_5 = {name = "SimpleEDPipeline", sources = {refBy(PipelineVar_5_Source0)}, numworkers = 1, artifact = "eu.qualimaster:SimpleEDPipeline:0.0.1-SNAPSHOT", debug = false, fastSerialization = false, constraints = {}};
-+	freeze {
-+		PipelineVar_5;
-+		PipelineVar_5_Source0;
-+		PipelineVar_5_Flow0;
-+		PipelineVar_5_FamilyElement0;
-+		PipelineVar_5_Flow1;
-+		PipelineVar_5_FamilyElement1;
-+		PipelineVar_5_Flow2;
-+		PipelineVar_5_FamilyElement2;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline
-new file mode 100644
-index 0000000..7e9a46b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline
-@@ -0,0 +1,10 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="CorrelationClusteringPip" artifact="eu.qualimaster:CorrelationClusteringPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="MutualInform" family="23"/>
-+  <nodes xsi:type="pipeline:Sink" name="MIsink" sink="4"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Preproc" family="0"/>
-+  <flows name="f3" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::FamilyVar_24.output[0]"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.3" tupleType="DataManagementCfg::spring.input[1]"/>
-+  <flows name="f2" source="//@nodes.3" destination="//@nodes.1" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline_diagram
-new file mode 100644
-index 0000000..27d0e49
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6.pipeline_diagram
-@@ -0,0 +1,61 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_pq7j8L9wEeWEl-7tYwy4NQ" type="Pipeline" name="PipelineVar_6.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_QNBvwL98EeWXtt_eKSIfyw" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_QNH2YL98EeWXtt_eKSIfyw" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_QNH2Yb98EeWXtt_eKSIfyw" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_6.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QNBvwb98EeWXtt_eKSIfyw" y="204"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_Woon4M_8EeW51LJshkTnLA" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_WorrMM_8EeW51LJshkTnLA" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_WorrMc_8EeW51LJshkTnLA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_6.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Woon4c_8EeW51LJshkTnLA" x="264" y="204"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_hPg6MNCwEeWgXpgiO_fhBA" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_hPiIUNCwEeWgXpgiO_fhBA" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_hPiIUdCwEeWgXpgiO_fhBA" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_6.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hPg6MdCwEeWgXpgiO_fhBA" x="432" y="288"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_qDv_kNcJEeWCRoh1QSFUeg" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_qDxNsNcJEeWCRoh1QSFUeg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_qDxNsdcJEeWCRoh1QSFUeg" x="17" y="-44"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_6.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qDv_kdcJEeWCRoh1QSFUeg" x="144" y="108"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_pq7j8b9wEeWEl-7tYwy4NQ"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_6.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_nropENCwEeWgXpgiO_fhBA" type="4001" source="_Woon4M_8EeW51LJshkTnLA" target="_hPg6MNCwEeWgXpgiO_fhBA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_nrpQINCwEeWgXpgiO_fhBA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_nrp3MNCwEeWgXpgiO_fhBA" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_nropEdCwEeWgXpgiO_fhBA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_6.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nropEtCwEeWgXpgiO_fhBA" points="[0, 0, -140, -25]$[113, 25, -27, 0]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nruvsNCwEeWgXpgiO_fhBA" id="(1.0,0.6)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_swGRENcJEeWCRoh1QSFUeg" type="4001" source="_QNBvwL98EeWXtt_eKSIfyw" target="_qDv_kNcJEeWCRoh1QSFUeg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_swG4INcJEeWCRoh1QSFUeg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_swG4IdcJEeWCRoh1QSFUeg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_swGREdcJEeWCRoh1QSFUeg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_6.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_swGREtcJEeWCRoh1QSFUeg" points="[0, 0, -45, 146]$[36, -148, -9, -2]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_swLJkNcJEeWCRoh1QSFUeg" id="(1.0,0.6833333333333333)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_swLJkdcJEeWCRoh1QSFUeg" id="(0.16666666666666666,0.4666666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_uBavANcJEeWCRoh1QSFUeg" type="4001" source="_qDv_kNcJEeWCRoh1QSFUeg" target="_Woon4M_8EeW51LJshkTnLA">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_uBbWENcJEeWCRoh1QSFUeg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_uBbWEdcJEeWCRoh1QSFUeg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_uBavAdcJEeWCRoh1QSFUeg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_6.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uBavAtcJEeWCRoh1QSFUeg" points="[0, 0, -69, -102]$[64, 72, -5, -30]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uBdLQNcJEeWCRoh1QSFUeg" id="(0.75,1.0)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6Cfg.ivml
-new file mode 100644
-index 0000000..26367ad
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_6Cfg.ivml
-@@ -0,0 +1,84 @@
-+project PipelineVar_6Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_6Cfg;
-+	Pipeline PipelineVar_6;
-+	Source PipelineVar_6_Source0;
-+	Flow PipelineVar_6_Flow0;
-+	FamilyElement PipelineVar_6_FamilyElement0;
-+	Flow PipelineVar_6_Flow1;
-+	FamilyElement PipelineVar_6_FamilyElement1;
-+	Flow PipelineVar_6_Flow2;
-+	Sink PipelineVar_6_Sink0;
-+	PipelineVar_6_Sink0 = Sink {
-+		sink = refBy(DataSinkVar_4), 
-+		parallelism = 1, 
-+		name = "MIsink"
-+	};
-+	PipelineVar_6_Flow2 = Flow {
-+		destination = refBy(PipelineVar_6_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_24.output[0]), 
-+		name = "f3"
-+	};
-+	PipelineVar_6_FamilyElement1 = FamilyElement {
-+		family = refBy(FamilyVar_24), 
-+		output = {
-+			refBy(PipelineVar_6_Flow2)
-+		}, 
-+		parallelism = 1, 
-+		name = "MutualInform"
-+	};
-+	PipelineVar_6_Flow1 = Flow {
-+		destination = refBy(PipelineVar_6_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f2"
-+	};
-+	PipelineVar_6_FamilyElement0 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		output = {
-+			refBy(PipelineVar_6_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "Preproc"
-+	};
-+	PipelineVar_6_Flow0 = Flow {
-+		destination = refBy(PipelineVar_6_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[1]), 
-+		name = "f1"
-+	};
-+	PipelineVar_6_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_6_Flow0)
-+		}, 
-+		source = refBy(spring), 
-+		parallelism = 1, 
-+		name = "FinancialDataSource"
-+	};
-+	PipelineVar_6 = Pipeline {
-+		name = "CorrelationClusteringPip", 
-+		sources = {
-+			refBy(PipelineVar_6_Source0)
-+		}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster:CorrelationClusteringPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_6;
-+		PipelineVar_6_Source0;
-+		PipelineVar_6_Flow0;
-+		PipelineVar_6_FamilyElement0;
-+		PipelineVar_6_Flow1;
-+		PipelineVar_6_FamilyElement1;
-+		PipelineVar_6_Flow2;
-+		PipelineVar_6_Sink0;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline
-new file mode 100644
-index 0000000..db439d6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline
-@@ -0,0 +1,33 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="FocusPip" numworkers="13" artifact="eu.qualimaster:FocusPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="TwitterDataSource" source="1"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="SpamDetection" family="13"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Spam Removal" family="14"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="StockParser" family="20"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="EventDetection" family="10"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="KeywordAnalyzer" family="16"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Recommendations" family="18"/>
-+  <nodes xsi:type="pipeline:Source" name="SpringDataSource" source="5">
-+    <permissibleParameters>DataManagementCfg::DataSourceVar_6.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="preprocessor" family="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="correlation" family="1">
-+    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="DynamicGraphCompilation" family="21">
-+    <permissibleParameters>FamiliesCfg::FamilyVar_22.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:Sink" name="FocusSink" sink="3"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::twitter.input[1]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::FamilyVar_14.output[0]"/>
-+  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_14.output[0]"/>
-+  <flows name="f4" source="//@nodes.3" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_21.output[0]"/>
-+  <flows name="f5" source="//@nodes.4" destination="//@nodes.5" tupleType="FamiliesCfg::fTwitterEventDetection.output[0]"/>
-+  <flows name="f6" source="//@nodes.5" destination="//@nodes.6" tupleType="FamiliesCfg::FamilyVar_17.output[0]"/>
-+  <flows name="f7" source="//@nodes.7" destination="//@nodes.8" tupleType="DataManagementCfg::DataSourceVar_6.input[1]"/>
-+  <flows name="f8" source="//@nodes.8" destination="//@nodes.9" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+  <flows name="f9" source="//@nodes.9" destination="//@nodes.10" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
-+  <flows name="f10" source="//@nodes.10" destination="//@nodes.11" tupleType="FamiliesCfg::FamilyVar_22.output[0]"/>
-+  <flows name="f11" source="//@nodes.6" destination="//@nodes.11" tupleType="FamiliesCfg::FamilyVar_19.output[0]"/>
-+  <flows name="f12" source="//@nodes.7" destination="//@nodes.9" tupleType="DataManagementCfg::DataSourceVar_6.input[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline_diagram
-new file mode 100644
-index 0000000..90a9f59
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7.pipeline_diagram
-@@ -0,0 +1,193 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_zagAkL9wEeWEl-7tYwy4NQ" type="Pipeline" name="PipelineVar_7.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_M3R8kMtcEeWGdqL98b7yTg" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_M3SjoMtcEeWGdqL98b7yTg" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_M3TKsMtcEeWGdqL98b7yTg" x="-42" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_7.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M3R8kctcEeWGdqL98b7yTg" x="30" y="375"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_ViupwMtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_VivQ0MtcEeWGdqL98b7yTg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VivQ0ctcEeWGdqL98b7yTg" x="-20" y="-40"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ViupwctcEeWGdqL98b7yTg" x="165" y="375"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_h0puYMtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_h0qVcMtcEeWGdqL98b7yTg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_h0qVcctcEeWGdqL98b7yTg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_h0puYctcEeWGdqL98b7yTg" x="285" y="375"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_nnOJ8MtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_nnPYEMtcEeWGdqL98b7yTg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_nnPYEctcEeWGdqL98b7yTg" x="4" y="-40"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nnOJ8ctcEeWGdqL98b7yTg" x="405" y="375"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_0L-D8MtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_0L-rAMtcEeWGdqL98b7yTg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_0L_SEMtcEeWGdqL98b7yTg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.4"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0L-D8ctcEeWGdqL98b7yTg" x="510" y="375"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_5tXP8MtcEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_5tX3AMtcEeWGdqL98b7yTg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_5tX3ActcEeWGdqL98b7yTg" x="-20" y="-40"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.5"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5tXP8ctcEeWGdqL98b7yTg" x="615" y="375"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_FqjasMtdEeWGdqL98b7yTg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_FqjasstdEeWGdqL98b7yTg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Fqjas8tdEeWGdqL98b7yTg" x="80" y="15"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.6"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FqjasctdEeWGdqL98b7yTg" x="720" y="375"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_QbX5YM_FEeW8-5XBVQ8Cgw" type="2001" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_QbX5Ys_FEeW8-5XBVQ8Cgw" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_QbX5Y8_FEeW8-5XBVQ8Cgw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_7.pipeline#//@nodes.7"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QbX5Yc_FEeW8-5XBVQ8Cgw" x="88" y="145"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_Vt1RgM_FEeW8-5XBVQ8Cgw" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Vt14kM_FEeW8-5XBVQ8Cgw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Vt14kc_FEeW8-5XBVQ8Cgw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.8"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Vt1Rgc_FEeW8-5XBVQ8Cgw" x="288" y="144"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_bqbLwM_FEeW8-5XBVQ8Cgw" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_bqbLws_FEeW8-5XBVQ8Cgw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_bqbLw8_FEeW8-5XBVQ8Cgw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.9"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bqbLwc_FEeW8-5XBVQ8Cgw" x="528" y="144"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_g8XmgM_FEeW8-5XBVQ8Cgw" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_g8YNkM_FEeW8-5XBVQ8Cgw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_g8YNkc_FEeW8-5XBVQ8Cgw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_7.pipeline#//@nodes.10"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_g8Xmgc_FEeW8-5XBVQ8Cgw" x="696" y="144"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_oUUEcM_FEeW8-5XBVQ8Cgw" type="2002" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_oUUEcs_FEeW8-5XBVQ8Cgw" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_oUUEc8_FEeW8-5XBVQ8Cgw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_7.pipeline#//@nodes.11"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oUUEcc_FEeW8-5XBVQ8Cgw" x="948" y="258"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_zagAkb9wEeWEl-7tYwy4NQ"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_7.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_9yVhQMtcEeWGdqL98b7yTg" type="4001" source="_M3R8kMtcEeWGdqL98b7yTg" target="_ViupwMtcEeWGdqL98b7yTg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_9yWIUMtcEeWGdqL98b7yTg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_9yWIUctcEeWGdqL98b7yTg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_9yVhQctcEeWGdqL98b7yTg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9yVhQstcEeWGdqL98b7yTg" points="[30, -3, -105, -3]$[127, -30, -8, -30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_-gyisMtcEeWGdqL98b7yTg" type="4001" source="_ViupwMtcEeWGdqL98b7yTg" target="_h0puYMtcEeWGdqL98b7yTg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_-gyis8tcEeWGdqL98b7yTg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_-gyitMtcEeWGdqL98b7yTg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_-gyisctcEeWGdqL98b7yTg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-gyisstcEeWGdqL98b7yTg" points="[30, -3, -90, -3]$[120, -30, 0, -30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="__K-IIMtcEeWGdqL98b7yTg" type="4001" source="_h0puYMtcEeWGdqL98b7yTg" target="_nnOJ8MtcEeWGdqL98b7yTg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="__K-vMMtcEeWGdqL98b7yTg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="__K-vMctcEeWGdqL98b7yTg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="__K-IIctcEeWGdqL98b7yTg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__K-IIstcEeWGdqL98b7yTg" points="[30, -3, -90, -3]$[112, -30, -8, -30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="__0tosMtcEeWGdqL98b7yTg" type="4001" source="_nnOJ8MtcEeWGdqL98b7yTg" target="_0L-D8MtcEeWGdqL98b7yTg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="__0tos8tcEeWGdqL98b7yTg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="__0totMtcEeWGdqL98b7yTg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="__0tosctcEeWGdqL98b7yTg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__0tosstcEeWGdqL98b7yTg" points="[30, -3, -75, -3]$[103, -30, -2, -30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_Ai8nsMtdEeWGdqL98b7yTg" type="4001" source="_0L-D8MtcEeWGdqL98b7yTg" target="_5tXP8MtcEeWGdqL98b7yTg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Ai9OwMtdEeWGdqL98b7yTg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ai9OwctdEeWGdqL98b7yTg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_Ai8nsctdEeWGdqL98b7yTg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.4"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Ai8nsstdEeWGdqL98b7yTg" points="[30, -4, -75, -4]$[112, -30, 7, -30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_HtPEIMtdEeWGdqL98b7yTg" type="4001" source="_5tXP8MtcEeWGdqL98b7yTg" target="_FqjasMtdEeWGdqL98b7yTg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_HtPEI8tdEeWGdqL98b7yTg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_HtPEJMtdEeWGdqL98b7yTg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_HtPEIctdEeWGdqL98b7yTg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.5"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HtPEIstdEeWGdqL98b7yTg" points="[30, -4, -75, -4]$[100, -30, -5, -30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_ZAofAM_FEeW8-5XBVQ8Cgw" type="4001" source="_QbX5YM_FEeW8-5XBVQ8Cgw" target="_Vt1RgM_FEeW8-5XBVQ8Cgw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ZApGEM_FEeW8-5XBVQ8Cgw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZApGEc_FEeW8-5XBVQ8Cgw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_ZAofAc_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.6"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZAofAs_FEeW8-5XBVQ8Cgw" points="[18, -2, -157, 10]$[164, -12, -11, 0]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZAriUM_FEeW8-5XBVQ8Cgw" id="(0.9833333333333333,0.5666666666666667)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZAriUc_FEeW8-5XBVQ8Cgw" id="(0.18333333333333332,0.5)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_eX9wEM_FEeW8-5XBVQ8Cgw" type="4001" source="_Vt1RgM_FEeW8-5XBVQ8Cgw" target="_bqbLwM_FEeW8-5XBVQ8Cgw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_eX9wE8_FEeW8-5XBVQ8Cgw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_eX9wFM_FEeW8-5XBVQ8Cgw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_eX9wEc_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.7"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eX9wEs_FEeW8-5XBVQ8Cgw" points="[0, 0, -209, -76]$[204, 46, -5, -30]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eX_lQM_FEeW8-5XBVQ8Cgw" id="(0.9166666666666666,0.5666666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_mgRT8M_FEeW8-5XBVQ8Cgw" type="4001" source="_bqbLwM_FEeW8-5XBVQ8Cgw" target="_g8XmgM_FEeW8-5XBVQ8Cgw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_mgR7AM_FEeW8-5XBVQ8Cgw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_mgR7Ac_FEeW8-5XBVQ8Cgw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_mgRT8c_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.8"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mgRT8s_FEeW8-5XBVQ8Cgw" points="[60, 0, -142, -10]$[172, -12, -30, -22]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mgVlYM_FEeW8-5XBVQ8Cgw" id="(0.8333333333333334,0.5)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_rIjtsM_FEeW8-5XBVQ8Cgw" type="4001" source="_g8XmgM_FEeW8-5XBVQ8Cgw" target="_oUUEcM_FEeW8-5XBVQ8Cgw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_rIkUwM_FEeW8-5XBVQ8Cgw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_rIkUwc_FEeW8-5XBVQ8Cgw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_rIjtsc_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.9"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rIjtss_FEeW8-5XBVQ8Cgw" points="[16, 12, -139, -113]$[145, 114, -10, -11]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rIn_IM_FEeW8-5XBVQ8Cgw" id="(0.9333333333333333,0.4666666666666667)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rIn_Ic_FEeW8-5XBVQ8Cgw" id="(0.23636363636363636,0.2)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_sNmqMM_FEeW8-5XBVQ8Cgw" type="4001" source="_FqjasMtdEeWGdqL98b7yTg" target="_oUUEcM_FEeW8-5XBVQ8Cgw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_sNnRQM_FEeW8-5XBVQ8Cgw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sNnRQc_FEeW8-5XBVQ8Cgw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_sNmqMc_FEeW8-5XBVQ8Cgw" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.10"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sNmqMs_FEeW8-5XBVQ8Cgw" points="[0, 0, -129, 125]$[102, -121, -27, 4]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sNpGcM_FEeW8-5XBVQ8Cgw" id="(0.9666666666666667,0.45)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_Jm5oAM_dEeWO14jNxLAiNg" type="4001" source="_QbX5YM_FEeW8-5XBVQ8Cgw" target="_bqbLwM_FEeW8-5XBVQ8Cgw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Jm5oA8_dEeWO14jNxLAiNg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Jm5oBM_dEeWO14jNxLAiNg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_Jm5oAc_dEeWO14jNxLAiNg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_7.pipeline#//@flows.11"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Jm5oAs_dEeWO14jNxLAiNg" points="[0, 0, -424, -29]$[178, -85, -246, -114]$[394, 15, -30, -14]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jm8rUM_dEeWO14jNxLAiNg" id="(1.0,0.4666666666666667)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7Cfg.ivml
-new file mode 100644
-index 0000000..4c55503
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_7Cfg.ivml
-@@ -0,0 +1,269 @@
-+project PipelineVar_7Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_7Cfg;
-+	Pipeline PipelineVar_7;
-+	Source PipelineVar_7_Source0;
-+	Flow PipelineVar_7_Flow0;
-+	FamilyElement PipelineVar_7_FamilyElement0;
-+	Flow PipelineVar_7_Flow1;
-+	FamilyElement PipelineVar_7_FamilyElement1;
-+	Flow PipelineVar_7_Flow2;
-+	FamilyElement PipelineVar_7_FamilyElement2;
-+	Flow PipelineVar_7_Flow3;
-+	FamilyElement PipelineVar_7_FamilyElement3;
-+	Flow PipelineVar_7_Flow4;
-+	FamilyElement PipelineVar_7_FamilyElement4;
-+	Flow PipelineVar_7_Flow5;
-+	FamilyElement PipelineVar_7_FamilyElement5;
-+	Flow PipelineVar_7_Flow6;
-+	Sink PipelineVar_7_Sink0;
-+	PipelineVar_7_Sink0 = Sink {
-+		sink = refBy(DataSinkVar_3), 
-+		parallelism = 1, 
-+		name = "FocusSink", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow6 = Flow {
-+		destination = refBy(PipelineVar_7_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_19.output[0]), 
-+		name = "f11", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement5 = FamilyElement {
-+		family = refBy(FamilyVar_19), 
-+		output = {
-+			refBy(PipelineVar_7_Flow6)
-+		}, 
-+		parallelism = 1, 
-+		name = "Recommendations", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow5 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement5), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_17.output[0]), 
-+		name = "f6", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement4 = FamilyElement {
-+		family = refBy(FamilyVar_17), 
-+		output = {
-+			refBy(PipelineVar_7_Flow5)
-+		}, 
-+		parallelism = 1, 
-+		name = "KeywordAnalyzer", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow4 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement4), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fTwitterEventDetection.output[0]), 
-+		name = "f5", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement3 = FamilyElement {
-+		family = refBy(fTwitterEventDetection), 
-+		output = {
-+			refBy(PipelineVar_7_Flow4)
-+		}, 
-+		parallelism = 1, 
-+		name = "EventDetection", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow3 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement3), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_21.output[0]), 
-+		name = "f4", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement2 = FamilyElement {
-+		family = refBy(FamilyVar_21), 
-+		output = {
-+			refBy(PipelineVar_7_Flow3)
-+		}, 
-+		parallelism = 1, 
-+		name = "StockParser", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow2 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement2), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_14.output[0]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement1 = FamilyElement {
-+		family = refBy(FamilyVar_15), 
-+		output = {
-+			refBy(PipelineVar_7_Flow2)
-+		}, 
-+		parallelism = 1, 
-+		name = "Spam Removal", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow1 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_14.output[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement0 = FamilyElement {
-+		family = refBy(FamilyVar_14), 
-+		output = {
-+			refBy(PipelineVar_7_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "SpamDetection", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow0 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::twitter.input[1]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_7_Flow0)
-+		}, 
-+		source = refBy(twitter), 
-+		parallelism = 1, 
-+		name = "TwitterDataSource", 
-+		constraints = {}
-+	};
-+	Source PipelineVar_7_Source1;
-+	Flow PipelineVar_7_Flow7;
-+	FamilyElement PipelineVar_7_FamilyElement6;
-+	Flow PipelineVar_7_Flow8;
-+	FamilyElement PipelineVar_7_FamilyElement7;
-+	Flow PipelineVar_7_Flow9;
-+	FamilyElement PipelineVar_7_FamilyElement8;
-+	Flow PipelineVar_7_Flow10;
-+	PipelineVar_7_Flow10 = Flow {
-+		destination = refBy(PipelineVar_7_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_22.output[0]), 
-+		name = "f10", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement8 = FamilyElement {
-+		family = refBy(FamilyVar_22), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::FamilyVar_22.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_7_Flow10)
-+		}, 
-+		parallelism = 1, 
-+		name = "DynamicGraphCompilation", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow9 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement8), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
-+		name = "f9", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement7 = FamilyElement {
-+		family = refBy(fCorrelationFinancial), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_7_Flow9)
-+		}, 
-+		parallelism = 1, 
-+		name = "correlation", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow8 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement7), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f8", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_FamilyElement6 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		output = {
-+			refBy(PipelineVar_7_Flow8)
-+		}, 
-+		parallelism = 1, 
-+		name = "preprocessor", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Flow7 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement6), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_6.input[1]), 
-+		name = "f7", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_7_Flow11;
-+	PipelineVar_7_Flow11 = Flow {
-+		destination = refBy(PipelineVar_7_FamilyElement7), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::DataSourceVar_6.input[0]), 
-+		name = "f12", 
-+		constraints = {}
-+	};
-+	PipelineVar_7_Source1 = Source {
-+		output = {
-+			refBy(PipelineVar_7_Flow7), refBy(PipelineVar_7_Flow11)
-+		}, 
-+		source = refBy(DataSourceVar_6), 
-+		permissibleParameters = {
-+			refBy(DataManagementCfg::DataSourceVar_6.parameters[0])
-+		}, 
-+		parallelism = 1, 
-+		name = "SpringDataSource", 
-+		constraints = {}
-+	};
-+	PipelineVar_7 = Pipeline {
-+		name = "FocusPip", 
-+		sources = {
-+			refBy(PipelineVar_7_Source0), refBy(PipelineVar_7_Source1)
-+		}, 
-+		numworkers = 13, 
-+		artifact = "eu.qualimaster:FocusPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_7;
-+		PipelineVar_7_Source0;
-+		PipelineVar_7_Flow0;
-+		PipelineVar_7_FamilyElement0;
-+		PipelineVar_7_Flow1;
-+		PipelineVar_7_FamilyElement1;
-+		PipelineVar_7_Flow2;
-+		PipelineVar_7_FamilyElement2;
-+		PipelineVar_7_Flow3;
-+		PipelineVar_7_FamilyElement3;
-+		PipelineVar_7_Flow4;
-+		PipelineVar_7_FamilyElement4;
-+		PipelineVar_7_Flow5;
-+		PipelineVar_7_FamilyElement5;
-+		PipelineVar_7_Flow6;
-+		PipelineVar_7_Sink0;
-+		PipelineVar_7_Source1;
-+		PipelineVar_7_Flow7;
-+		PipelineVar_7_FamilyElement6;
-+		PipelineVar_7_Flow8;
-+		PipelineVar_7_FamilyElement7;
-+		PipelineVar_7_Flow9;
-+		PipelineVar_7_FamilyElement8;
-+		PipelineVar_7_Flow10;
-+		PipelineVar_7_Flow11;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline
-new file mode 100644
-index 0000000..b49714a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline
-@@ -0,0 +1,22 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="DynamicGraphPip" numworkers="18" artifact="eu.qualimaster:DynamicGraphPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="CorrelationComputation" family="1">
-+    <permissibleParameters>FamiliesCfg::fCorrelationFinancial.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="DynamicGraphCompilation" family="21">
-+    <permissibleParameters>FamiliesCfg::FamilyVar_22.parameters[0]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:FamilyElement" name="DynamicHubComputation" family="22">
-+    <permissibleParameters>FamiliesCfg::FamilyVar_23.parameters[0]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::FamilyVar_23.parameters[1]</permissibleParameters>
-+  </nodes>
-+  <nodes xsi:type="pipeline:Sink" name="DynamicGraphSink" sink="2"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="preprocessor" family="0"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.5" tupleType="DataManagementCfg::spring.input[1]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
-+  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::FamilyVar_22.output[0]"/>
-+  <flows name="f4" source="//@nodes.3" destination="//@nodes.4" tupleType="FamiliesCfg::FamilyVar_23.output[0]"/>
-+  <flows name="f5" source="//@nodes.5" destination="//@nodes.1" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+  <flows name="f6" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline_diagram
-new file mode 100644
-index 0000000..cc6d413
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8.pipeline_diagram
-@@ -0,0 +1,103 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_PydUoL9xEeWEl-7tYwy4NQ" type="Pipeline" name="PipelineVar_8.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_X6qw4L98EeWXtt_eKSIfyw" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_X6rX8L98EeWXtt_eKSIfyw" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_X6rX8b98EeWXtt_eKSIfyw" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_8.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6qw4b98EeWXtt_eKSIfyw" x="24" y="36"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_ZtyUUL98EeWXtt_eKSIfyw" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ZtyUUr98EeWXtt_eKSIfyw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZtyUU798EeWXtt_eKSIfyw" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_8.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZtyUUb98EeWXtt_eKSIfyw" x="240" y="204"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_yxp5MM8ZEeWf2Z7v9E2CtQ" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_yxqgQM8ZEeWf2Z7v9E2CtQ" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_yxqgQc8ZEeWf2Z7v9E2CtQ" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_8.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yxp5Mc8ZEeWf2Z7v9E2CtQ" x="384" y="216"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_21wAwM8ZEeWf2Z7v9E2CtQ" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_21wn0M8ZEeWf2Z7v9E2CtQ" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_21wn0c8ZEeWf2Z7v9E2CtQ" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_8.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_21wAwc8ZEeWf2Z7v9E2CtQ" x="384" y="372"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_8_EvcM8ZEeWf2Z7v9E2CtQ" type="2002" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_8_Evcs8ZEeWf2Z7v9E2CtQ" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_8_Evc88ZEeWf2Z7v9E2CtQ" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_8.pipeline#//@nodes.4"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8_Evcc8ZEeWf2Z7v9E2CtQ" x="384" y="528"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_N1wOEM_dEeWO14jNxLAiNg" type="2005" fontName="Ubuntu">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_N1w1IM_dEeWO14jNxLAiNg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_N1w1Ic_dEeWO14jNxLAiNg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_8.pipeline#//@nodes.5"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_N1wOEc_dEeWO14jNxLAiNg" x="228" y="36"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_PydUob9xEeWEl-7tYwy4NQ"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_8.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_dSZqkL98EeWXtt_eKSIfyw" type="4001" source="_X6qw4L98EeWXtt_eKSIfyw" target="_N1wOEM_dEeWO14jNxLAiNg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_dSZqk798EeWXtt_eKSIfyw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_dSZqlL98EeWXtt_eKSIfyw" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_dSZqkb98EeWXtt_eKSIfyw" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dSZqkr98EeWXtt_eKSIfyw" points="[30, 5, -162, 0]$[182, 3, -10, -2]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_1_hjYM8ZEeWf2Z7v9E2CtQ" type="4001" source="_ZtyUUL98EeWXtt_eKSIfyw" target="_yxp5MM8ZEeWf2Z7v9E2CtQ">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_1_hjY88ZEeWf2Z7v9E2CtQ" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_1_hjZM8ZEeWf2Z7v9E2CtQ" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_1_hjYc8ZEeWf2Z7v9E2CtQ" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1_hjYs8ZEeWf2Z7v9E2CtQ" points="[0, 0, -326, -32]$[328, 62, 2, 30]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1_j_oM8ZEeWf2Z7v9E2CtQ" id="(1.0,0.6833333333333333)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_5gZCEM8ZEeWf2Z7v9E2CtQ" type="4001" source="_yxp5MM8ZEeWf2Z7v9E2CtQ" target="_21wAwM8ZEeWf2Z7v9E2CtQ">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_5gZCE88ZEeWf2Z7v9E2CtQ" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_5gZCFM8ZEeWf2Z7v9E2CtQ" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_5gZCEc8ZEeWf2Z7v9E2CtQ" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5gZCEs8ZEeWf2Z7v9E2CtQ" points="[4, 16, -41, -164]$[31, 175, -14, -5]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5gehoM8ZEeWf2Z7v9E2CtQ" id="(0.4,0.9666666666666667)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5gehoc8ZEeWf2Z7v9E2CtQ" id="(0.23333333333333334,0.4166666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="__WO0EM8ZEeWf2Z7v9E2CtQ" type="4001" source="_21wAwM8ZEeWf2Z7v9E2CtQ" target="_8_EvcM8ZEeWf2Z7v9E2CtQ">
-+    <children xmi:type="notation:DecorationNode" xmi:id="__WPbIM8ZEeWf2Z7v9E2CtQ" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="__WQCMM8ZEeWf2Z7v9E2CtQ" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="__WO0Ec8ZEeWf2Z7v9E2CtQ" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__WO0Es8ZEeWf2Z7v9E2CtQ" points="[0, 0, 61, -155]$[-59, 144, 2, -11]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__WTFgM8ZEeWf2Z7v9E2CtQ" id="(0.6333333333333333,1.0)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__WTFgc8ZEeWf2Z7v9E2CtQ" id="(0.5636363636363636,0.2)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_PkVPwM_dEeWO14jNxLAiNg" type="4001" source="_N1wOEM_dEeWO14jNxLAiNg" target="_ZtyUUL98EeWXtt_eKSIfyw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_PkVPw8_dEeWO14jNxLAiNg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_PkVPxM_dEeWO14jNxLAiNg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_PkVPwc_dEeWO14jNxLAiNg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.4"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PkVPws_dEeWO14jNxLAiNg" points="[0, 0, 31, -174]$[-34, 165, -3, -9]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PkXE8M_dEeWO14jNxLAiNg" id="(0.6333333333333333,1.0)"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PkXE8c_dEeWO14jNxLAiNg" id="(0.4166666666666667,0.15)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_QuD38M_dEeWO14jNxLAiNg" type="4001" source="_X6qw4L98EeWXtt_eKSIfyw" target="_ZtyUUL98EeWXtt_eKSIfyw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_QuEfAM_dEeWO14jNxLAiNg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_QuEfAc_dEeWO14jNxLAiNg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_QuD38c_dEeWO14jNxLAiNg" fontName="Ubuntu"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_8.pipeline#//@flows.5"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QuD38s_dEeWO14jNxLAiNg" points="[0, 0, -142, -198]$[112, 178, -30, -20]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QuGUMM_dEeWO14jNxLAiNg" id="(0.7333333333333333,1.0)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8Cfg.ivml
-new file mode 100644
-index 0000000..3e6f822
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_8Cfg.ivml
-@@ -0,0 +1,149 @@
-+project PipelineVar_8Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_8Cfg;
-+	Pipeline PipelineVar_8;
-+	Source PipelineVar_8_Source0;
-+	Flow PipelineVar_8_Flow0;
-+	FamilyElement PipelineVar_8_FamilyElement0;
-+	Flow PipelineVar_8_Flow1;
-+	FamilyElement PipelineVar_8_FamilyElement1;
-+	Flow PipelineVar_8_Flow2;
-+	FamilyElement PipelineVar_8_FamilyElement2;
-+	Flow PipelineVar_8_Flow3;
-+	FamilyElement PipelineVar_8_FamilyElement3;
-+	Flow PipelineVar_8_Flow4;
-+	Sink PipelineVar_8_Sink0;
-+	PipelineVar_8_Sink0 = Sink {
-+		sink = refBy(DataSinkVar_2), 
-+		parallelism = 1, 
-+		name = "DynamicGraphSink", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_Flow4 = Flow {
-+		destination = refBy(PipelineVar_8_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_23.output[0]), 
-+		name = "f4", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_FamilyElement3 = FamilyElement {
-+		family = refBy(FamilyVar_23), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::FamilyVar_23.parameters[0]), refBy(FamiliesCfg::FamilyVar_23.parameters[1])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_8_Flow4)
-+		}, 
-+		parallelism = 1, 
-+		name = "DynamicHubComputation", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_Flow3 = Flow {
-+		destination = refBy(PipelineVar_8_FamilyElement3), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::FamilyVar_22.output[0]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_FamilyElement2 = FamilyElement {
-+		family = refBy(FamilyVar_22), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::FamilyVar_22.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_8_Flow3)
-+		}, 
-+		parallelism = 1, 
-+		name = "DynamicGraphCompilation", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_Flow2 = Flow {
-+		destination = refBy(PipelineVar_8_FamilyElement2), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_FamilyElement1 = FamilyElement {
-+		family = refBy(fCorrelationFinancial), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::fCorrelationFinancial.parameters[0])
-+		}, 
-+		output = {
-+			refBy(PipelineVar_8_Flow2)
-+		}, 
-+		parallelism = 1, 
-+		name = "CorrelationComputation", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_Flow1 = Flow {
-+		destination = refBy(PipelineVar_8_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f5", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_FamilyElement0 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		output = {
-+			refBy(PipelineVar_8_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "preprocessor", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_Flow0 = Flow {
-+		destination = refBy(PipelineVar_8_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[1]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_8_Flow5;
-+	PipelineVar_8_Flow5 = Flow {
-+		destination = refBy(PipelineVar_8_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[0]), 
-+		name = "f6", 
-+		constraints = {}
-+	};
-+	PipelineVar_8_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_8_Flow0), refBy(PipelineVar_8_Flow5)
-+		}, 
-+		source = refBy(spring), 
-+		parallelism = 1, 
-+		name = "FinancialDataSource", 
-+		constraints = {}
-+	};
-+	PipelineVar_8 = Pipeline {
-+		name = "DynamicGraphPip", 
-+		sources = {
-+			refBy(PipelineVar_8_Source0)
-+		}, 
-+		numworkers = 18, 
-+		artifact = "eu.qualimaster:DynamicGraphPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_8;
-+		PipelineVar_8_Source0;
-+		PipelineVar_8_Flow0;
-+		PipelineVar_8_FamilyElement0;
-+		PipelineVar_8_Flow1;
-+		PipelineVar_8_FamilyElement1;
-+		PipelineVar_8_Flow2;
-+		PipelineVar_8_FamilyElement2;
-+		PipelineVar_8_Flow3;
-+		PipelineVar_8_FamilyElement3;
-+		PipelineVar_8_Flow4;
-+		PipelineVar_8_Sink0;
-+		PipelineVar_8_Flow5;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline
-new file mode 100644
-index 0000000..b41e771
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline
-@@ -0,0 +1,13 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="ReplayPip" artifact="eu.qualimaster:ReplayPip:0.0.1-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="FinancialCorrelation" family="1"/>
-+  <nodes xsi:type="pipeline:ReplaySink" name="ReplaySink" sink="0"/>
-+  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[1]"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+  <flows name="f3" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
-+  <flows name="f4" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::spring.input[0]"/>
-+  <flows name="f5" source="//@nodes.2" destination="//@nodes.4" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline_diagram
-new file mode 100644
-index 0000000..33bb201
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9.pipeline_diagram
-@@ -0,0 +1,83 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_xoqvcEKqEeaNvMtNd6k-kg" type="Pipeline" name="PipelineVar_9.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_yz8PwEKqEeaNvMtNd6k-kg" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_y0EyoEKqEeaNvMtNd6k-kg" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_y0Gn0EKqEeaNvMtNd6k-kg" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PipelineVar_9.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yz820EKqEeaNvMtNd6k-kg" x="101" y="268"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_3RtbkEKqEeaNvMtNd6k-kg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_3RupsEKqEeaNvMtNd6k-kg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_3RupsUKqEeaNvMtNd6k-kg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_9.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3RtbkUKqEeaNvMtNd6k-kg" x="270" y="270"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_5QsQwEKqEeaNvMtNd6k-kg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_5Qs30EKqEeaNvMtNd6k-kg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_5Qte4EKqEeaNvMtNd6k-kg" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PipelineVar_9.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5QsQwUKqEeaNvMtNd6k-kg" x="432" y="270"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_6vdU0EKqEeaNvMtNd6k-kg" type="2007" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_6vd74EKqEeaNvMtNd6k-kg" type="5007">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_6vei8EKqEeaNvMtNd6k-kg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:ReplaySink" href="PipelineVar_9.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6vdU0UKqEeaNvMtNd6k-kg" x="630" y="324"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_raWBAEgFEea6yohzEVxiGQ" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_raWoEEgFEea6yohzEVxiGQ" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_raWoEUgFEea6yohzEVxiGQ" x="18" y="75"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PipelineVar_9.pipeline#//@nodes.4"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_raWBAUgFEea6yohzEVxiGQ" x="630" y="198"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_xoqvcUKqEeaNvMtNd6k-kg"/>
-+  <element xmi:type="pipeline:Pipeline" href="PipelineVar_9.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_87ypgEKqEeaNvMtNd6k-kg" type="4001" source="_yz8PwEKqEeaNvMtNd6k-kg" target="_3RtbkEKqEeaNvMtNd6k-kg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_87z3oEKqEeaNvMtNd6k-kg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_87z3oUKqEeaNvMtNd6k-kg" x="8" y="18"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_87ypgUKqEeaNvMtNd6k-kg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_87ypgkKqEeaNvMtNd6k-kg" points="[30, 2, -121, 0]$[139, 2, -12, 0]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_88BTAEKqEeaNvMtNd6k-kg" id="(0.2,0.5)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_9r-wUEKqEeaNvMtNd6k-kg" type="4001" source="_3RtbkEKqEeaNvMtNd6k-kg" target="_5QsQwEKqEeaNvMtNd6k-kg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_9r_-cEKqEeaNvMtNd6k-kg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_9r_-cUKqEeaNvMtNd6k-kg" x="5" y="18"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_9r-wUUKqEeaNvMtNd6k-kg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9r-wUkKqEeaNvMtNd6k-kg" points="[30, 4, -132, 4]$[132, 4, -30, 4]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_-ebg8EKqEeaNvMtNd6k-kg" type="4001" source="_5QsQwEKqEeaNvMtNd6k-kg" target="_6vdU0EKqEeaNvMtNd6k-kg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_-ecvEEKqEeaNvMtNd6k-kg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_-ecvEUKqEeaNvMtNd6k-kg" x="-4" y="20"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_-ebg8UKqEeaNvMtNd6k-kg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-ebg8kKqEeaNvMtNd6k-kg" points="[30, -2, -128, 0]$[150, -2, -8, 0]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-ejcwEKqEeaNvMtNd6k-kg" id="(0.14545454545454545,0.509090909090909)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_TTlK4EKrEeaNvMtNd6k-kg" type="4001" source="_yz8PwEKqEeaNvMtNd6k-kg" target="_5QsQwEKqEeaNvMtNd6k-kg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_TTlx8UKrEeaNvMtNd6k-kg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_TTlx8kKrEeaNvMtNd6k-kg" x="17" y="-8"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_TTlK4UKrEeaNvMtNd6k-kg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TTlx8EKrEeaNvMtNd6k-kg" points="[30, -13, -301, -15]$[193, -82, -138, -84]$[301, -17, -30, -19]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_sQrzIEgFEea6yohzEVxiGQ" type="4001" source="_5QsQwEKqEeaNvMtNd6k-kg" target="_raWBAEgFEea6yohzEVxiGQ">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_sQsaMEgFEea6yohzEVxiGQ" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sQsaMUgFEea6yohzEVxiGQ" x="21" y="-14"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_sQrzIUgFEea6yohzEVxiGQ" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PipelineVar_9.pipeline#//@flows.4"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sQrzIkgFEea6yohzEVxiGQ" points="[30, -16, -135, 70]$[153, -84, -12, 2]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sQvdgEgFEea6yohzEVxiGQ" id="(0.21818181818181817,0.5636363636363636)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9Cfg.ivml
-new file mode 100644
-index 0000000..8dee2f8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelineVar_9Cfg.ivml
-@@ -0,0 +1,118 @@
-+project PipelineVar_9Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PipelineVar_9Cfg;
-+	Pipeline PipelineVar_9;
-+	Source PipelineVar_9_Source0;
-+	Flow PipelineVar_9_Flow0;
-+	FamilyElement PipelineVar_9_FamilyElement0;
-+	Flow PipelineVar_9_Flow1;
-+	FamilyElement PipelineVar_9_FamilyElement1;
-+	Flow PipelineVar_9_Flow2;
-+	ReplaySink PipelineVar_9_ReplaySink0;
-+	PipelineVar_9_ReplaySink0 = ReplaySink {
-+		sink = refBy(priorSnk), 
-+		parallelism = 1, 
-+		name = "ReplaySink", 
-+		constraints = {}
-+	};
-+	PipelineVar_9_Flow2 = Flow {
-+		destination = refBy(PipelineVar_9_ReplaySink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_9_Flow3;
-+	Sink PipelineVar_9_Sink1;
-+	PipelineVar_9_Sink1 = Sink {
-+		sink = refBy(priorSnk), 
-+		parallelism = 1, 
-+		name = "Sink", 
-+		constraints = {}
-+	};
-+	PipelineVar_9_Flow3 = Flow {
-+		destination = refBy(PipelineVar_9_Sink1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
-+		name = "f5", 
-+		constraints = {}
-+	};
-+	PipelineVar_9_FamilyElement1 = FamilyElement {
-+		family = refBy(fCorrelationFinancial), 
-+		output = {
-+			refBy(PipelineVar_9_Flow2), refBy(PipelineVar_9_Flow3)
-+		}, 
-+		parallelism = 1, 
-+		name = "FinancialCorrelation", 
-+		permissibleParameters = {refBy(fCorrelationFinancial.parameters[0])},
-+		constraints = {}
-+	};
-+	PipelineVar_9_Flow1 = Flow {
-+		destination = refBy(PipelineVar_9_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	PipelineVar_9_FamilyElement0 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		output = {
-+			refBy(PipelineVar_9_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "Preprocessor", 
-+		constraints = {}
-+	};
-+	PipelineVar_9_Flow0 = Flow {
-+		destination = refBy(PipelineVar_9_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[1]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	Flow PipelineVar_9_Flow4;
-+	PipelineVar_9_Flow4 = Flow {
-+		destination = refBy(PipelineVar_9_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[0]), 
-+		name = "f4", 
-+		constraints = {}
-+	};
-+	PipelineVar_9_Source0 = Source {
-+		output = {
-+			refBy(PipelineVar_9_Flow0), refBy(PipelineVar_9_Flow4)
-+		}, 
-+		source = refBy(spring), 
-+		parallelism = 1, 
-+		name = "FinancialDataSource", 
-+		constraints = {}
-+	};
-+	PipelineVar_9 = Pipeline {
-+		name = "ReplayPip", 
-+		sources = {
-+			refBy(PipelineVar_9_Source0)
-+		}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster:ReplayPip:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		PipelineVar_9;
-+		PipelineVar_9_Source0;
-+		PipelineVar_9_Flow0;
-+		PipelineVar_9_FamilyElement0;
-+		PipelineVar_9_Flow1;
-+		PipelineVar_9_FamilyElement1;
-+		PipelineVar_9_Flow2;
-+		PipelineVar_9_ReplaySink0;
-+		PipelineVar_9_Flow3;
-+		PipelineVar_9_Sink1;
-+		PipelineVar_9_Flow4;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelinesCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelinesCfg.ivml
-new file mode 100644
-index 0000000..933e16b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PipelinesCfg.ivml
-@@ -0,0 +1,30 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+	import SubTopologyCfg;
-+	import PipelineVar_9Cfg;
-+	import PipelineVar_10Cfg;
-+	import SubPipelineVar_11Cfg;
-+	//import PipelineVar_12Cfg;
-+	import PipelineVar_13Cfg;
-+	import PipelineVar_14Cfg;
-+	import SubPipelineVar_15Cfg;
-+	import PipelineVar_16Cfg;
-+	import PipelineVar_17Cfg;
-+	import PipelineVar_18Cfg;
-+	import SubPipelineVar_19Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(SubTopology), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(SubPipelineVar_11)/* , refBy(PipelineVar_12)*/, refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(SubPipelineVar_15), refBy(PipelineVar_16), refBy(PipelineVar_17), refBy(PipelineVar_18), refBy(SubPipelineVar_19)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline
-new file mode 100644
-index 0000000..9ce5b5c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline
-@@ -0,0 +1,17 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="PriorityPip" artifact="eu.qualimaster:PriorityPip:0.0.2-SNAPSHOT">
-+  <nodes xsi:type="pipeline:Source" name="FinancialDataSource" source="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="Preprocessor" family="0"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="FinancialCorrelation" family="1"/>
-+  <nodes xsi:type="pipeline:Sink" name="Sink" sink="0"/>
-+  <nodes xsi:type="pipeline:Source" name="TwitterDataSource" source="1"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="SentimentAnalysis" family="2"/>
-+  <nodes xsi:type="pipeline:DataManagementElement" name="DataManagement" dataManagement="0"/>
-+  <flows name="f2" source="//@nodes.1" destination="//@nodes.2" tupleType="FamiliesCfg::fPreprocessor.output[0]"/>
-+  <flows name="f3" source="//@nodes.0" destination="//@nodes.2" tupleType="DataManagementCfg::spring.input[0]"/>
-+  <flows name="f4" source="//@nodes.2" destination="//@nodes.3" tupleType="FamiliesCfg::fCorrelationFinancial.output[0]"/>
-+  <flows name="f5" source="//@nodes.4" destination="//@nodes.5" tupleType="DataManagementCfg::twitter.input[1]"/>
-+  <flows name="f6" source="//@nodes.5" destination="//@nodes.6" tupleType="FamiliesCfg::fSentimentAnalysis.output[0]"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" tupleType="DataManagementCfg::spring.input[1]"/>
-+  <flows name="f7" source="//@nodes.6" destination="//@nodes.3" tupleType="FamiliesCfg::fSentimentAnalysis.output[0]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline_diagram
-new file mode 100644
-index 0000000..41ba408
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPip.pipeline_diagram
-@@ -0,0 +1,112 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="__WpXAJ7tEeSsKttrnmqngg" type="Pipeline" name="PriorityPip.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_C1FMwJ7uEeSsKttrnmqngg" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_C1LTYJ7uEeSsKttrnmqngg" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_C1LTYZ7uEeSsKttrnmqngg" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PriorityPip.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_C1FMwZ7uEeSsKttrnmqngg" x="60" y="288"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_IYMQAJ7uEeSsKttrnmqngg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_IYSWoJ7uEeSsKttrnmqngg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_IYSWoZ7uEeSsKttrnmqngg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PriorityPip.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IYMQAZ7uEeSsKttrnmqngg" x="240" y="288"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_PUR4YJ7uEeSsKttrnmqngg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_PUR4Yp7uEeSsKttrnmqngg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_PUR4Y57uEeSsKttrnmqngg" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PriorityPip.pipeline#//@nodes.2"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PUR4YZ7uEeSsKttrnmqngg" x="396" y="288"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_YkanAJ7uEeSsKttrnmqngg" type="2002" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_YkanAp7uEeSsKttrnmqngg" type="5002">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_YkanA57uEeSsKttrnmqngg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:Sink" href="PriorityPip.pipeline#//@nodes.3"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YkanAZ7uEeSsKttrnmqngg" x="684" y="432"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_M4visJ7xEeSsKttrnmqngg" type="2001" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_M4visp7xEeSsKttrnmqngg" type="5001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_M4vis57xEeSsKttrnmqngg" x="-65" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:Source" href="PriorityPip.pipeline#//@nodes.4"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M4visZ7xEeSsKttrnmqngg" x="68" y="537"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_Q3qPUJ7xEeSsKttrnmqngg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Q3qPUp7xEeSsKttrnmqngg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Q3qPU57xEeSsKttrnmqngg" x="-64" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="PriorityPip.pipeline#//@nodes.5"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q3qPUZ7xEeSsKttrnmqngg" x="228" y="540"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_Yt-EQJ7xEeSsKttrnmqngg" type="2006" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_Yt-EQp7xEeSsKttrnmqngg" type="5006">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Yt-EQ57xEeSsKttrnmqngg" x="-16" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:DataManagementElement" href="PriorityPip.pipeline#//@nodes.6"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Yt-EQZ7xEeSsKttrnmqngg" x="396" y="540"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="__WpXAZ7tEeSsKttrnmqngg"/>
-+  <element xmi:type="pipeline:Pipeline" href="PriorityPip.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_SR6HIJ7uEeSsKttrnmqngg" type="4001" source="_IYMQAJ7uEeSsKttrnmqngg" target="_PUR4YJ7uEeSsKttrnmqngg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_SR6HI57uEeSsKttrnmqngg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_SR6HJJ7uEeSsKttrnmqngg" x="-7" y="13"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_SR6HIZ7uEeSsKttrnmqngg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SR6HIp7uEeSsKttrnmqngg" points="[30, -1, -126, -1]$[164, -30, 8, -30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_VfEmsJ7uEeSsKttrnmqngg" type="4001" source="_C1FMwJ7uEeSsKttrnmqngg" target="_PUR4YJ7uEeSsKttrnmqngg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_VfEms57uEeSsKttrnmqngg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VfEmtJ7uEeSsKttrnmqngg" x="16" y="-13"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_VfEmsZ7uEeSsKttrnmqngg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VfEmsp7uEeSsKttrnmqngg" points="[30, -12, -306, -12]$[174, -66, -162, -66]$[306, -13, -30, -13]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_ZreVsJ7uEeSsKttrnmqngg" type="4001" source="_PUR4YJ7uEeSsKttrnmqngg" target="_YkanAJ7uEeSsKttrnmqngg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ZreVs57uEeSsKttrnmqngg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ZreVtJ7uEeSsKttrnmqngg" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_ZreVsZ7uEeSsKttrnmqngg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZreVsp7uEeSsKttrnmqngg" points="[30, 21, -182, -125]$[211, 174, -1, 28]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_VUm7wJ7xEeSsKttrnmqngg" type="4001" source="_M4visJ7xEeSsKttrnmqngg" target="_Q3qPUJ7xEeSsKttrnmqngg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_VUm7w57xEeSsKttrnmqngg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VUm7xJ7xEeSsKttrnmqngg" x="-5" y="17"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_VUm7wZ7xEeSsKttrnmqngg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.3"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VUm7wp7xEeSsKttrnmqngg" points="[30, -1, -149, 0]$[190, -4, 11, -3]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VUtCYJ7xEeSsKttrnmqngg" id="(0.8166666666666667,0.43333333333333335)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_dTfd4J7xEeSsKttrnmqngg" type="4001" source="_Q3qPUJ7xEeSsKttrnmqngg" target="_Yt-EQJ7xEeSsKttrnmqngg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_dTfd457xEeSsKttrnmqngg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_dTfd5J7xEeSsKttrnmqngg" x="-1" y="13"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_dTfd4Z7xEeSsKttrnmqngg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.4"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dTfd4p7xEeSsKttrnmqngg" points="[30, -1, -138, -1]$[138, -1, -30, -1]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_FYa5wKYhEeSCau1ctzSuwA" type="4001" source="_C1FMwJ7uEeSsKttrnmqngg" target="_IYMQAJ7uEeSsKttrnmqngg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_FYa5w6YhEeSCau1ctzSuwA" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_FYa5xKYhEeSCau1ctzSuwA" x="5" y="25"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_FYa5waYhEeSCau1ctzSuwA" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.5"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FYa5wqYhEeSCau1ctzSuwA" points="[30, 9, -150, 9]$[176, 30, -4, 30]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_x1yOcLrvEeWX4saP8WSdcQ" type="4001" source="_Yt-EQJ7xEeSsKttrnmqngg" target="_YkanAJ7uEeSsKttrnmqngg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_x10DoLrvEeWX4saP8WSdcQ" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_x10DobrvEeWX4saP8WSdcQ" y="40"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_x1yOcbrvEeWX4saP8WSdcQ" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="PriorityPip.pipeline#//@flows.6"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_x1yOcrrvEeWX4saP8WSdcQ" points="[24, -12, -255, 129]$[252, -118, -27, 23]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x17YYLrvEeWX4saP8WSdcQ" id="(0.7666666666666667,0.5)"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPipCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPipCfg.ivml
-new file mode 100644
-index 0000000..7dd1baf
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/PriorityPipCfg.ivml
-@@ -0,0 +1,149 @@
-+project PriorityPipCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to PriorityPipCfg;
-+	Pipeline PriorityPip;
-+	Source PriorityPip_Source0;
-+	Flow PriorityPip_Flow0;
-+	FamilyElement PriorityPip_FamilyElement0;
-+	Flow PriorityPip_Flow1;
-+	Sink PriorityPip_Sink0;
-+	PriorityPip_Sink0 = Sink {
-+		sink = refBy(priorSnk), 
-+		parallelism = 1, 
-+		name = "Sink"
-+	};
-+	PriorityPip_Flow1 = Flow {
-+		destination = refBy(PriorityPip_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fCorrelationFinancial.output[0]), 
-+		name = "f4"
-+	};
-+	PriorityPip_FamilyElement0 = FamilyElement {
-+		family = refBy(fCorrelationFinancial), 
-+		output = {
-+			refBy(PriorityPip_Flow1)
-+		}, 
-+		parallelism = 1, 
-+		name = "FinancialCorrelation",
-+		permissibleParameters = {refBy(fCorrelationFinancial.parameters[0])}
-+	};
-+	PriorityPip_Flow0 = Flow {
-+		destination = refBy(PriorityPip_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[0]), 
-+		name = "f3"
-+	};
-+	Flow PriorityPip_Flow2;
-+	FamilyElement PriorityPip_FamilyElement1;
-+	Flow PriorityPip_Flow3;
-+	PriorityPip_Flow3 = Flow {
-+		destination = refBy(PriorityPip_FamilyElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fPreprocessor.output[0]), 
-+		name = "f2"
-+	};
-+	PriorityPip_FamilyElement1 = FamilyElement {
-+		family = refBy(fPreprocessor), 
-+		output = {
-+			refBy(PriorityPip_Flow3)
-+		}, 
-+		parallelism = 1, 
-+		name = "Preprocessor"
-+	};
-+	PriorityPip_Flow2 = Flow {
-+		destination = refBy(PriorityPip_FamilyElement1), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::spring.input[1]), 
-+		name = "f1"
-+	};
-+	PriorityPip_Source0 = Source {
-+		output = {
-+			refBy(PriorityPip_Flow0), refBy(PriorityPip_Flow2)
-+		}, 
-+		source = refBy(spring), 
-+		parallelism = 1, 
-+		name = "FinancialDataSource"
-+	};
-+	Source PriorityPip_Source1;
-+	Flow PriorityPip_Flow4;
-+	FamilyElement PriorityPip_FamilyElement2;
-+	Flow PriorityPip_Flow5;
-+	DataManagementElement PriorityPip_DataManagementElement0;
-+	Flow PriorityPip_Flow6;
-+	PriorityPip_Flow6 = Flow {
-+		destination = refBy(PriorityPip_Sink0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fSentimentAnalysis.output[0]), 
-+		name = "f7"
-+	};
-+	PriorityPip_DataManagementElement0 = DataManagementElement {
-+		dataManagement = refBy(hBaseDataManagement), 
-+		output = {
-+			refBy(PriorityPip_Flow6)
-+		}, 
-+		parallelism = 1, 
-+		name = "DataManagement"
-+	};
-+	PriorityPip_Flow5 = Flow {
-+		destination = refBy(PriorityPip_DataManagementElement0), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(FamiliesCfg::fSentimentAnalysis.output[0]), 
-+		name = "f6"
-+	};
-+	PriorityPip_FamilyElement2 = FamilyElement {
-+		family = refBy(fSentimentAnalysis), 
-+		output = {
-+			refBy(PriorityPip_Flow5)
-+		}, 
-+		parallelism = 1, 
-+		name = "SentimentAnalysis",
-+		permissibleParameters = {refBy(fSentimentAnalysis.parameters[2])}
-+	};
-+	PriorityPip_Flow4 = Flow {
-+		destination = refBy(PriorityPip_FamilyElement2), 
-+		grouping = Grouping.shuffleGrouping, 
-+		tupleType = refBy(DataManagementCfg::twitter.input[1]), 
-+		name = "f5"
-+	};
-+	PriorityPip_Source1 = Source {
-+		output = {
-+			refBy(PriorityPip_Flow4)
-+		}, 
-+		source = refBy(twitter), 
-+		parallelism = 1, 
-+		name = "TwitterDataSource"
-+	};
-+	PriorityPip = Pipeline {
-+		name = "PriorityPip", 
-+		sources = {
-+			refBy(PriorityPip_Source0), refBy(PriorityPip_Source1)
-+		}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster:PriorityPip:0.0.2-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		scaling = Scaling.useFree, // keep this for experiments!
-+		constraints = {}
-+	};
-+	freeze {
-+		PriorityPip;
-+		PriorityPip_Source0;
-+		PriorityPip_Flow0;
-+		PriorityPip_FamilyElement0;
-+		PriorityPip_Flow1;
-+		PriorityPip_Sink0;
-+		PriorityPip_Flow2;
-+		PriorityPip_FamilyElement1;
-+		PriorityPip_Flow3;
-+		PriorityPip_Source1;
-+		PriorityPip_Flow4;
-+		PriorityPip_FamilyElement2;
-+		PriorityPip_Flow5;
-+		PriorityPip_DataManagementElement0;
-+		PriorityPip_Flow6;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline
-new file mode 100644
-index 0000000..962cce4
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline
-@@ -0,0 +1,9 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="RandomSubPipeline1" artifact="eu.qualimaster:RandomSubPipeline1:0.0.1-SNAPSHOT" isSubPipeline="true" subPipelineFamily="FamiliesCfg::randomFamily">
-+  <nodes xsi:type="pipeline:FamilyElement" name="dataProcessor" family="6" isConnector="true" defaultAlgorithm="AlgorithmsCfg::switchAlg1">
-+    <permissibleParameters>FamiliesCfg::switchFamily.parameters[1]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::switchFamily.parameters[3]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::switchFamily.parameters[0]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::switchFamily.parameters[2]</permissibleParameters>
-+  </nodes>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline_diagram
-new file mode 100644
-index 0000000..08ceaff
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11.pipeline_diagram
-@@ -0,0 +1,12 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_oB9q0HqYEeaAoPSZz-F4Hg" type="Pipeline" name="SubPipelineVar_11.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_pNMu4HqYEeaAoPSZz-F4Hg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_pNOkEHqYEeaAoPSZz-F4Hg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_pNPLIHqYEeaAoPSZz-F4Hg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="SubPipelineVar_11.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pNMu4XqYEeaAoPSZz-F4Hg" x="229" y="337"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_oB9q0XqYEeaAoPSZz-F4Hg"/>
-+  <element xmi:type="pipeline:Pipeline" href="SubPipelineVar_11.pipeline#/"/>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11Cfg.ivml
-new file mode 100644
-index 0000000..0587199
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_11Cfg.ivml
-@@ -0,0 +1,38 @@
-+project SubPipelineVar_11Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to SubPipelineVar_11Cfg;
-+	SubPipeline SubPipelineVar_11;
-+	FamilyElement SubPipelineVar_11_FamilyElement0;
-+	SubPipelineVar_11_FamilyElement0 = FamilyElement {
-+		family = refBy(switchFamily), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::switchAlg1), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::switchFamily.parameters[1]), refBy(FamiliesCfg::switchFamily.parameters[3]), refBy(FamiliesCfg::switchFamily.parameters[0]), refBy(FamiliesCfg::switchFamily.parameters[2])
-+		}, 
-+		output = {}, 
-+		parallelism = 1, 
-+		name = "dataProcessor", 
-+		constraints = {}
-+	};
-+	SubPipelineVar_11 = SubPipeline {
-+		connectors = {
-+			refBy(SubPipelineVar_11_FamilyElement0)
-+		}, 
-+		subPipelineFamily = refBy(FamiliesCfg::randomFamily), 
-+		name = "RandomSubPipeline1", 
-+		sources = {}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster:RandomSubPipeline1:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		SubPipelineVar_11;
-+		SubPipelineVar_11_FamilyElement0;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline
-new file mode 100644
-index 0000000..ef9cee0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline
-@@ -0,0 +1,9 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="RandomSubPipeline2" artifact="eu.qualimaster:RandomSubPipeline2:0.0.1-SNAPSHOT" isSubPipeline="true" subPipelineFamily="FamiliesCfg::randomFamily">
-+  <nodes xsi:type="pipeline:FamilyElement" name="dataProcessor2" family="6" isConnector="true" defaultAlgorithm="AlgorithmsCfg::switchAlg1">
-+    <permissibleParameters>FamiliesCfg::switchFamily.parameters[1]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::switchFamily.parameters[3]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::switchFamily.parameters[0]</permissibleParameters>
-+    <permissibleParameters>FamiliesCfg::switchFamily.parameters[2]</permissibleParameters>
-+  </nodes>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline_diagram
-new file mode 100644
-index 0000000..bed7ae9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15.pipeline_diagram
-@@ -0,0 +1,12 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_y99foLikEeaEk6TB62Bs9g" type="Pipeline" name="SubPipelineVar_15.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_z6D7gLikEeaEk6TB62Bs9g" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_z6NFcLikEeaEk6TB62Bs9g" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_z6NFcbikEeaEk6TB62Bs9g" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="SubPipelineVar_15.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z6D7gbikEeaEk6TB62Bs9g" x="435" y="282"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_y99fobikEeaEk6TB62Bs9g"/>
-+  <element xmi:type="pipeline:Pipeline" href="SubPipelineVar_15.pipeline#/"/>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15Cfg.ivml
-new file mode 100644
-index 0000000..13838d1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_15Cfg.ivml
-@@ -0,0 +1,38 @@
-+project SubPipelineVar_15Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to SubPipelineVar_15Cfg;
-+	SubPipeline SubPipelineVar_15;
-+	FamilyElement SubPipelineVar_15_FamilyElement0;
-+	SubPipelineVar_15_FamilyElement0 = FamilyElement {
-+		family = refBy(switchFamily), 
-+		defaultAlgorithm = refBy(AlgorithmsCfg::switchAlg1), 
-+		permissibleParameters = {
-+			refBy(FamiliesCfg::switchFamily.parameters[1]), refBy(FamiliesCfg::switchFamily.parameters[3]), refBy(FamiliesCfg::switchFamily.parameters[0]), refBy(FamiliesCfg::switchFamily.parameters[2])
-+		}, 
-+		output = {}, 
-+		parallelism = 1, 
-+		name = "dataProcessor2", 
-+		constraints = {}
-+	};
-+	SubPipelineVar_15 = SubPipeline {
-+		connectors = {
-+			refBy(SubPipelineVar_15_FamilyElement0)
-+		}, 
-+		subPipelineFamily = refBy(FamiliesCfg::randomFamily), 
-+		name = "RandomSubPipeline2", 
-+		sources = {}, 
-+		numworkers = 1, 
-+		artifact = "eu.qualimaster:RandomSubPipeline2:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		SubPipelineVar_15;
-+		SubPipelineVar_15_FamilyElement0;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline
-new file mode 100644
-index 0000000..07c5e38
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline
-@@ -0,0 +1,8 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="CorrelationSWAlternative" artifact="eu.qualimaster:CorrelationSWAlternative:0.0.1-SNAPSHOT" isSubPipeline="true" subPipelineFamily="FamiliesCfg::fCorrelationFinancial">
-+  <nodes xsi:type="pipeline:FamilyElement" name="MP" family="24" isConnector="true"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="HY" family="25"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" grouping="3" tupleType="FamiliesCfg::fMapper.output[0]"/>
-+  <flows name="f2" source="//@nodes.0" destination="//@nodes.1" grouping="3" tupleType="FamiliesCfg::fMapper.output[1]"/>
-+  <flows name="f3" source="//@nodes.0" destination="//@nodes.1" grouping="4" tupleType="FamiliesCfg::fMapper.output[2]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline_diagram
-new file mode 100644
-index 0000000..9b39cd5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19.pipeline_diagram
-@@ -0,0 +1,45 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_GfdH0O-kEeaL1dVO1_Y-Pg" type="Pipeline" name="SubPipelineVar_19.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_JK4MQO-kEeaL1dVO1_Y-Pg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_JK6BcO-kEeaL1dVO1_Y-Pg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_JK6Bce-kEeaL1dVO1_Y-Pg" x="27" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="SubPipelineVar_19.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JK4MQe-kEeaL1dVO1_Y-Pg" x="196" y="267"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_QJzGMO-kEeaL1dVO1_Y-Pg" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_QJztQO-kEeaL1dVO1_Y-Pg" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_QJztQe-kEeaL1dVO1_Y-Pg" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="SubPipelineVar_19.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QJzGMe-kEeaL1dVO1_Y-Pg" x="390" y="270"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_GfdH0e-kEeaL1dVO1_Y-Pg"/>
-+  <element xmi:type="pipeline:Pipeline" href="SubPipelineVar_19.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_VjXy8O-kEeaL1dVO1_Y-Pg" type="4001" source="_JK4MQO-kEeaL1dVO1_Y-Pg" target="_QJzGMO-kEeaL1dVO1_Y-Pg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_VjZBEO-kEeaL1dVO1_Y-Pg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_VjZoIO-kEeaL1dVO1_Y-Pg" x="-7" y="-7"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_VjXy8e-kEeaL1dVO1_Y-Pg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="SubPipelineVar_19.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VjXy8u-kEeaL1dVO1_Y-Pg" points="[15, -9, -164, -29]$[74, -40, -105, -60]$[149, 2, -30, -18]"/>
-+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Vjg84O-kEeaL1dVO1_Y-Pg" id="(0.75,0.21666666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_f17A0O-kEeaL1dVO1_Y-Pg" type="4001" source="_JK4MQO-kEeaL1dVO1_Y-Pg" target="_QJzGMO-kEeaL1dVO1_Y-Pg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_f18O8O-kEeaL1dVO1_Y-Pg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_f18O8e-kEeaL1dVO1_Y-Pg" x="-1" y="12"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_f17A0e-kEeaL1dVO1_Y-Pg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="SubPipelineVar_19.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f17A0u-kEeaL1dVO1_Y-Pg" points="[30, 1, -145, 0]$[164, -1, -11, -2]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f2CVkO-kEeaL1dVO1_Y-Pg" id="(0.18333333333333332,0.4666666666666667)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_kYEWUO-kEeaL1dVO1_Y-Pg" type="4001" source="_JK4MQO-kEeaL1dVO1_Y-Pg" target="_QJzGMO-kEeaL1dVO1_Y-Pg">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_kYE9YO-kEeaL1dVO1_Y-Pg" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_kYFkcO-kEeaL1dVO1_Y-Pg" x="-4" y="12"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_kYEWUe-kEeaL1dVO1_Y-Pg" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="SubPipelineVar_19.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kYEWUu-kEeaL1dVO1_Y-Pg" points="[30, 16, -164, 13]$[89, 48, -105, 45]$[164, 15, -30, 12]"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19Cfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19Cfg.ivml
-new file mode 100644
-index 0000000..32e31e1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubPipelineVar_19Cfg.ivml
-@@ -0,0 +1,72 @@
-+project SubPipelineVar_19Cfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to SubPipelineVar_19Cfg;
-+	SubPipeline SubPipelineVar_19;
-+	FamilyElement SubPipelineVar_19_FamilyElement0;
-+	Flow SubPipelineVar_19_Flow0;
-+	FamilyElement SubPipelineVar_19_FamilyElement1;
-+	SubPipelineVar_19_FamilyElement1 = FamilyElement {
-+		family = refBy(fHayashiYoshida), 
-+		output = {}, 
-+		parallelism = 14, 
-+		name = "HY", 
-+		constraints = {}
-+	};
-+	SubPipelineVar_19_Flow0 = Flow {
-+		destination = refBy(SubPipelineVar_19_FamilyElement1), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::fMapper.output[0]), 
-+		name = "f1", 
-+		constraints = {}
-+	};
-+	Flow SubPipelineVar_19_Flow1;
-+	SubPipelineVar_19_Flow1 = Flow {
-+		destination = refBy(SubPipelineVar_19_FamilyElement1), 
-+		grouping = Grouping.directGrouping, 
-+		tupleType = refBy(FamiliesCfg::fMapper.output[1]), 
-+		name = "f2", 
-+		constraints = {}
-+	};
-+	Flow SubPipelineVar_19_Flow2;
-+	SubPipelineVar_19_Flow2 = Flow {
-+		destination = refBy(SubPipelineVar_19_FamilyElement1), 
-+		grouping = Grouping.allGrouping, 
-+		tupleType = refBy(FamiliesCfg::fMapper.output[2]), 
-+		name = "f3", 
-+		constraints = {}
-+	};
-+	SubPipelineVar_19_FamilyElement0 = FamilyElement {
-+		family = refBy(fMapper), 
-+		output = {
-+			refBy(SubPipelineVar_19_Flow0), refBy(SubPipelineVar_19_Flow1), refBy(SubPipelineVar_19_Flow2)
-+		}, 
-+		parallelism = 1, 
-+		name = "MP", 
-+		constraints = {}
-+	};
-+	SubPipelineVar_19 = SubPipeline {
-+		connectors = {
-+			refBy(SubPipelineVar_19_FamilyElement0)
-+		}, 
-+		subPipelineFamily = refBy(FamiliesCfg::fCorrelationFinancial), 
-+		name = "CorrelationSWAlternative", 
-+		sources = {}, 
-+		numworkers = 4, 
-+		artifact = "eu.qualimaster:CorrelationSWAlternative:0.0.1-SNAPSHOT", 
-+		debug = false, 
-+		fastSerialization = false, 
-+		constraints = {}
-+	};
-+	freeze {
-+		SubPipelineVar_19;
-+		SubPipelineVar_19_FamilyElement0;
-+		SubPipelineVar_19_Flow0;
-+		SubPipelineVar_19_FamilyElement1;
-+		SubPipelineVar_19_Flow1;
-+		SubPipelineVar_19_Flow2;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline
-new file mode 100644
-index 0000000..57e2be2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline
-@@ -0,0 +1,8 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<pipeline:Pipeline xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pipeline="pipeline" name="CorrelationSW" artifact="eu.qualimaster:CorrelationSW:0.0.1-SNAPSHOT" isSubPipeline="true" subPipelineFamily="FamiliesCfg::fCorrelationFinancial">
-+  <nodes xsi:type="pipeline:FamilyElement" name="Mapper" family="24" isConnector="true"/>
-+  <nodes xsi:type="pipeline:FamilyElement" name="HayashiYoshida" family="25"/>
-+  <flows name="f1" source="//@nodes.0" destination="//@nodes.1" grouping="3" tupleType="FamiliesCfg::fMapper.output[0]"/>
-+  <flows name="f2" source="//@nodes.0" destination="//@nodes.1" grouping="3" tupleType="FamiliesCfg::fMapper.output[1]"/>
-+  <flows name="f3" source="//@nodes.0" destination="//@nodes.1" grouping="4" tupleType="FamiliesCfg::fMapper.output[2]"/>
-+</pipeline:Pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline_diagram b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline_diagram
-new file mode 100644
-index 0000000..107cce8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopology.pipeline_diagram
-@@ -0,0 +1,44 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:pipeline="pipeline" xmi:id="_lDeAED6lEeaI656rJtj2kw" type="Pipeline" name="SubTopology.pipeline_diagram" measurementUnit="Pixel">
-+  <children xmi:type="notation:Shape" xmi:id="_ltl7ID6lEeaI656rJtj2kw" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ltnwUD6lEeaI656rJtj2kw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ltnwUT6lEeaI656rJtj2kw" y="5"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="SubTopology.pipeline#//@nodes.0"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ltl7IT6lEeaI656rJtj2kw" x="166" y="259"/>
-+  </children>
-+  <children xmi:type="notation:Shape" xmi:id="_nIfy4D6lEeaI656rJtj2kw" type="2005" fontName="Segoe UI">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_nIfy4j6lEeaI656rJtj2kw" type="5005">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_nIfy4z6lEeaI656rJtj2kw" x="-20" y="80"/>
-+    </children>
-+    <element xmi:type="pipeline:FamilyElement" href="SubTopology.pipeline#//@nodes.1"/>
-+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nIfy4T6lEeaI656rJtj2kw" x="360" y="252"/>
-+  </children>
-+  <styles xmi:type="notation:DiagramStyle" xmi:id="_lDeAET6lEeaI656rJtj2kw"/>
-+  <element xmi:type="pipeline:Pipeline" href="SubTopology.pipeline#/"/>
-+  <edges xmi:type="notation:Connector" xmi:id="_ppH8kD6lEeaI656rJtj2kw" type="4001" source="_ltl7ID6lEeaI656rJtj2kw" target="_nIfy4D6lEeaI656rJtj2kw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_ppJxwD6lEeaI656rJtj2kw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ppJxwT6lEeaI656rJtj2kw" x="5"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_ppH8kT6lEeaI656rJtj2kw" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="SubTopology.pipeline#//@flows.0"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ppH8kj6lEeaI656rJtj2kw" points="[30, -18, -164, -11]$[96, -57, -98, -50]$[164, -23, -30, -16]"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_q-GLcD6lEeaI656rJtj2kw" type="4001" source="_ltl7ID6lEeaI656rJtj2kw" target="_nIfy4D6lEeaI656rJtj2kw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_q-GLcz6lEeaI656rJtj2kw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_q-GygD6lEeaI656rJtj2kw" x="3" y="10"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_q-GLcT6lEeaI656rJtj2kw" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="SubTopology.pipeline#//@flows.1"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_q-GLcj6lEeaI656rJtj2kw" points="[30, 1, -142, 0]$[164, 3, -8, 2]"/>
-+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_q-M5ID6lEeaI656rJtj2kw" id="(0.13333333333333333,0.6333333333333333)"/>
-+  </edges>
-+  <edges xmi:type="notation:Connector" xmi:id="_sbWMkD6lEeaI656rJtj2kw" type="4001" source="_ltl7ID6lEeaI656rJtj2kw" target="_nIfy4D6lEeaI656rJtj2kw">
-+    <children xmi:type="notation:DecorationNode" xmi:id="_sbWzoD6lEeaI656rJtj2kw" type="6001">
-+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sbWzoT6lEeaI656rJtj2kw" x="7" y="10"/>
-+    </children>
-+    <styles xmi:type="notation:FontStyle" xmi:id="_sbWMkT6lEeaI656rJtj2kw" fontName="Segoe UI"/>
-+    <element xmi:type="pipeline:Flow" href="SubTopology.pipeline#//@flows.2"/>
-+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sbWMkj6lEeaI656rJtj2kw" points="[30, 15, -164, 22]$[101, 53, -93, 60]$[164, 12, -30, 19]"/>
-+  </edges>
-+</notation:Diagram>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopologyCfg.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopologyCfg.ivml
-new file mode 100644
-index 0000000..f5e54e2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelines/SubTopologyCfg.ivml
-@@ -0,0 +1,52 @@
-+project SubTopologyCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import FamiliesCfg;
-+	import DataManagementCfg;
-+	annotate BindingTime bindingTime = BindingTime.compile to SubTopologyCfg;
-+	SubPipeline SubTopology;
-+	SubTopology = {name = "CorrelationSW", sources = {/*refBy(SubTopology_Source0), refBy(SubTopology_Source1)*/}, connectors = {refBy(SubTopology_FamilyElement0)}, subPipelineFamily = refBy(fCorrelationFinancial),numworkers = 4, artifact = "eu.qualimaster:CorrelationSW:0.0.1-SNAPSHOT", debug = false, fastSerialization = false, isSubpipeline = true, constraints = {}};
-+	
-+//	Source SubTopology_Source0;//source to mapper
-+//	Source SubTopology_Source1;//source to hayashiyoshida
-+//	Flow SubTopology_Flow4;//source flow to mapper
-+//	Flow SubTopology_Flow5;//source flow to hayashiyoshida
-+	Flow SubTopology_Flow0;
-+	Flow SubTopology_Flow1;
-+	Flow SubTopology_Flow2;
-+//	Flow SubTopology_Flow3; //a flow cycle case
-+	FamilyElement SubTopology_FamilyElement0;
-+	FamilyElement SubTopology_FamilyElement1;
-+//	Sink SubTopology_Sink0;
-+//	Flow SubTopology_Flow6;
-+//	SubTopology_Source0 = {output = {refBy(SubTopology_Flow4)}, source = refBy(randomSource), parallelism = 1, name = "testMaperSource", constraints = {}};
-+//	SubTopology_Source1 = {output = {refBy(SubTopology_Flow5)}, source = refBy(randomSource), parallelism = 1, name = "testHayaSource", constraints = {}};
-+//	SubTopology_Sink0 = {sink = refBy(priorSnk), parallelism = 1, name = "Sink", constraints = {}};
-+	SubTopology_Flow0 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.directGrouping, tupleType = refBy(fMapper.output[0]), name = "f1", constraints = {}};
-+	SubTopology_Flow1 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.directGrouping, tupleType = refBy(fMapper.output[1]), name = "f2", constraints = {}};
-+	SubTopology_Flow2 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.allGrouping, tupleType = refBy(fMapper.output[2]), name = "f3", constraints = {}};
-+//	SubTopology_Flow3 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.allGrouping, tupleType = refBy(fHayashiYoshida.output[1]), name = "f4", constraints = {}};
-+//	SubTopology_Flow4 = {destination = refBy(SubTopology_FamilyElement0), grouping = Grouping.shuffleGrouping, tupleType = refBy(fMapper.input[2]), name = "f4", constraints = {}};
-+//	SubTopology_Flow5 = {destination = refBy(SubTopology_FamilyElement1), grouping = Grouping.shuffleGrouping, tupleType = refBy(fHayashiYoshida.input[3]), name = "f5", constraints = {}};
-+//	SubTopology_Flow6 = {destination = refBy(SubTopology_Sink0), grouping = Grouping.shuffleGrouping, tupleType = refBy(fHayashiYoshida.output[0]), name = "f6", constraints = {}};
-+	SubTopology_FamilyElement0 = {family = refBy(fMapper), output = {refBy(SubTopology_Flow0),refBy(SubTopology_Flow1),refBy(SubTopology_Flow2)}, parallelism = 1, name = "Mapper", constraints = {}, permissibleParameters = {refBy(fMapper.parameters[0])}};
-+	SubTopology_FamilyElement1 = {family = refBy(fHayashiYoshida), output = {/*refBy(SubTopology_Flow6)*/}, parallelism = 14, name = "HayashiYoshida", constraints = {}};
-+	
-+	freeze {
-+		SubTopology;
-+		SubTopology_Flow0;
-+	    SubTopology_Flow1;
-+	    SubTopology_Flow2;
-+//	    SubTopology_Flow3;
-+//        SubTopology_Source0;
-+//	    SubTopology_Flow4;
-+//	    SubTopology_Source1;
-+//	    SubTopology_Flow5;
-+		SubTopology_FamilyElement0;
-+		SubTopology_FamilyElement1;
-+//		SubTopology_Sink0;
-+//		SubTopology_Flow6;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinesXml.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinesXml.vtl
-new file mode 100644
-index 0000000..426c0cf
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/pipelinesXml.vtl
-@@ -0,0 +1,91 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template pipelinesXml(Configuration config, FileArtifact target, sequenceOf(DecisionVariable) pipelines, String interfaceArtifact, String modelArtifact, setOf(HardwareAlgorithm) hardwareAlgorithms) {
-+
-+	def appendBasics(Text text) {
-+		text.append("<project name=\"pipelines\" default=\"deploy\" basedir=\".\">
-+
-+    <property file=\""+"$"+"{user.home}/global-build.properties\"/>
-+    <property file=\""+"$"+"{user.home}/qualimaster-build.properties\"/>
-+    <include file=\""+"$"+"{user.home}/macros.xml\"/>
-+
-+    <!--
-+    <taskdef uri=\"antlib:org.jacoco.ant\" resource=\"org/jacoco/ant/antlib.xml\"/>
-+
-+    <path id=\"easyTaskDef.lib\">
-+      <fileset dir=\""+"$"+"{home.base.dir}/"+"$"+"{projects.standalone.dir}/build/generatedLibs.ex/dist\">
-+        <include name=\"*.jar\"/>
-+      </fileset>
-+    </path>
-+    -->
-+");
-+	}
-+	
-+	def appendPipelinesDeploy(sequenceOf(DecisionVariable) pipelines, Text text) {
-+		for(Pipeline pip : pipelines) {
-+			String pipName = pip.name;
-+			String artifact = pip.artifact;
-+			String pipelineJarFileName = obtainArtifactName(artifact,false);
-+			String pipelineFatJarFileName = obtainArtifactName(artifact,true);
-+			if(pipelineJarFileName.length()>0) {
-+				text.append("      <delete file=\"pipelines/eu/qualimaster/$pipName/target/${pipelineJarFileName}.jar\"/>\n");
-+				text.append("      <rename src=\"pipelines/eu/qualimaster/$pipName/target/${pipelineFatJarFileName}.jar\" dest=\"pipelines/eu/qualimaster/$pipName/target/${pipelineJarFileName}.jar\"/>\n");
-+				text.append("      <mvnDeploy folderName=\"eu/qualimaster/$pipName\" pomFile=\"pipelines/eu/qualimaster/$pipName/pom.xml\" 
-+        jarFolder=\"pipelines/eu/qualimaster/$pipName/target\" jarFile= \"${pipelineJarFileName}.jar\"/>\n");
-+			}			
-+	    }
-+	}
-+	
-+	def appendInterfaceDeploy(String interfaceArtifact, Text text) {
-+		String interfaceJarFileName = obtainArtifactName(interfaceArtifact, false);
-+		if(interfaceJarFileName.length()>0) {
-+		    text.append("      <mvnDeploy folderName=\"if-gen\" pomFile=\"if-gen/pom.xml\" 
-+        jarFolder=\"if-gen/target\" jarFile= \"${interfaceJarFileName}.jar\"/>\n");
-+		}		
-+	}
-+	
-+	def appendModelArtifactDeploy(String modelArtifact, Text text) {
-+		String artifactName = obtainArtifactName(modelArtifact, false);
-+		if(artifactName.length()>0) {			
-+		    text.append("      <mvnDeploy folderName=\"model-gen\" pomFile=\"model-gen/pom.xml\" jarFolder=\"model-gen/target\" jarFile=\"${artifactName}.jar\" />\n");
-+	    }
-+	}
-+	
-+	def appendHardwareAlgorithmDeploy(setOf(HardwareAlgorithm) harwareAlgorithms, Text text) {
-+		for(HardwareAlgorithm alg : hardwareAlgorithms) {
-+			String artifactName = alg.name + "-" + GenAlgVersion;
-+			text.append("      <mvnDeploy folderName=\"hardwareAlgorithms/eu/qualimaster/algorithms/${alg.name}\" pomFile=\"hardwareAlgorithms/eu/qualimaster/algorithms/${alg.name}/pom.xml\" 
-+        jarFolder=\"hardwareAlgorithms/eu/qualimaster/algorithms/${alg.name}/target\" jarFile= \"${artifactName}.jar\"/>\n");
-+		}
-+	}
-+	
-+	def String obtainArtifactName(String artifact, Boolean pipeline) {
-+		String artifactName = null;
-+		sequenceOf(String) artList = artifact.split(":");
-+		if(artList.size() == 3) {
-+			String artifactId = artList[1];
-+		    String versionNum = artList[2];
-+		    if(pipeline) {
-+		    	artifactName = artifactId + "-" + versionNum + "-jar-with-dependencies";
-+		    } else {
-+		    	artifactName = artifactId + "-" + versionNum;
-+		    }		    
-+		}
-+		artifactName;   
-+	}
-+
-+	def main(Configuration config, FileArtifact target, sequenceOf(DecisionVariable) pipelines, String interfaceArtifact, String modelArtifact, setOf(HardwareAlgorithm) hardwareAlgorithms) {
-+		Text text = target.getText();
-+//		text.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
-+		appendBasics(text);
-+		text.append("    <target name=\"deploy\">\n");
-+		appendPipelinesDeploy(pipelines, text);
-+		appendInterfaceDeploy(interfaceArtifact, text);
-+		appendHardwareAlgorithmDeploy(hardwareAlgorithms, text);
-+		appendModelArtifactDeploy(modelArtifact, text);
-+        //text.append("      <clearMavenRepo/>\n");
-+		text.append("    </target>\n");
-+		text.append("</project>\n");
-+		target.rename("pipelines.xml");
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/profileCtl.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/profileCtl.vtl
-new file mode 100644
-index 0000000..308ceee
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/profileCtl.vtl
-@@ -0,0 +1,5 @@
-+template profileCtl(Configuration config, FileArtifact target, String artifact) {
-+	def main(Configuration config, FileArtifact target, String artifact) {
-+		'import $artifact'
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/protoFiles.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/protoFiles.vtl
-new file mode 100644
-index 0000000..9f6df9c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/protoFiles.vtl
-@@ -0,0 +1,67 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template protoFiles(Configuration config, FileArtifact target, DecisionVariable elt, String pkg) {
-+	def produceForTuples(Tuples tuples, Boolean output, String ifName, Integer indent) {
-+	    String type;
-+	    String typeName;
-+    	String tupleName;
-+		Integer count = 1;		
-+    	for (Tuple t : tuples) {
-+    		Boolean flag1 = true;
-+			Boolean flag2 = false;
-+    		tupleName = t.name;
-+    		tupleName = firstToUpperCase(tupleName);
-+	        if (output) {
-+    		    type = "${ifName}${tupleName}Output";
-+    		    typeName = "output";
-+    	    } else {
-+    		    type = "${ifName}${tupleName}Input";
-+    		    typeName = "input";   		
-+    	    }  	    
-+    	   	for (Field f : t.fields) {
-+    	   		FieldType ftype = f.type;
-+    			String fname = toIdentifier("${f.name}");    			
-+    			String ptype = basicTypeForProto(ftype);
-+    			if(ptype != "") {
-+    				if(flag1) {
-+    					'message S$type {' | indent; //only generate once for one tuple
-+    					flag1 = false;
-+    					flag2 = true;
-+    				}
-+	    			"required $ptype $fname = $count;" | indent+4;
-+	    			count = count + 1;		    				
-+    			}  			
-+    		}
-+    		if(flag2) {
-+	    		'}' | indent;
-+	    		flag2 = false;
-+    		}
-+    		''
-+      }
-+    }
-+    
-+	def produceFor(DecisionVariable elt) {
-+		'//unhandled type ${elt.type()}'
-+	}
-+	def produceFor(Family elt) {
-+		produceForTuples(elt.input, false, "I"+formulateString(elt.name), 0);
-+		produceForTuples(elt.output, true, "I"+formulateString(elt.name), 0);
-+	}
-+	
-+	def produceFor(DataSource elt) {
-+		produceForTuples(elt.input, true, formulateString(elt.name), 0);
-+	}
-+	def produceFor(DataSink elt) {
-+		produceForTuples(elt.output, false, formulateString(elt.name), 0);
-+	}
-+	
-+	def main(Configuration config, FileArtifact target, DecisionVariable elt, String pkg) {		
-+		'package $pkg.protobuf;'
-+
-+		'option java_package = "eu.qualimaster.protos";'
-+		'option java_outer_classname = "${formulateString(eltName(elt))}Protos";'
-+		''
-+		produceFor(elt);
-+	}
-+	
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/serializationRegistry.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/serializationRegistry.vtl
-new file mode 100644
-index 0000000..280b0bc
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/serializationRegistry.vtl
-@@ -0,0 +1,61 @@
-+@advice(QM)
-+template serializationRegistry(Configuration config, FileArtifact target, setOf(DecisionVariable) families) {
-+	//TODO: register the specific types.
-+    // needs to be translated into new advice-style of writing
-+
-+    def produceForTuples(DecisionVariable tuples, Boolean output, Boolean implementation, String fName, Integer indent) {
-+	    String type;
-+	    String serializerType;
-+	    String typeName;
-+    	String tupleName;
-+    	String ifName = "I" + fName;
-+    	for (Tuple t : tuples) {
-+    		tupleName = t.name;
-+    		tupleName = firstToUpperCase(tupleName);
-+	        if (output) {
-+    		    type = "${ifName}${tupleName}Output";
-+    		    typeName = "output";
-+    	    } else {
-+    		    type = "${ifName}${tupleName}Input";
-+    		    typeName = "input";   		
-+    	    }
-+    	    serializerType = "${fName}Serializers.${type}Serializer";
-+    	    type = "${fName}.${type}"; // qualify inner classes
-+    	    
-+    	    'conf.registerSerialization(${type}.class, ${serializerType}.class);' | indent;
-+      }
-+    }
-+
-+    def main(Configuration config, FileArtifact target, setOf(DecisionVariable) families) {
-+    	'package eu.qualimaster.families.imp;'
-+    	''
-+    	'import javax.annotation.Generated;'
-+    	'import backtype.storm.Config;'
-+    	''
-+    	'/**'
-+    	' * The registration of the generated serializers (GEN).'
-+    	' */'
-+    	'@Generated(value="EASy-Producer")'
-+    	'public class SerializationRegistry {'
-+    	''
-+    	'/**'
-+    	' * Registers all generated kryo serializers. To be called from a topology.'
-+    	' */'
-+    	'public static final void registerKryoSerializers(Config conf) {' | 4;
-+    	for (Family family : families) {
-+    		String fName = family.name.firstToUpperCase();
-+    	    produceForTuples(family.byName("input"), false, true, fName, 8);
-+    	    produceForTuples(family.byName("output"), true, true, fName, 8);
-+    	}
-+    	'}' |4;
-+        ''    	
-+    	'/**'
-+    	' * Registers all generated hardware serializers. To be called from a topology.'
-+    	' */'
-+    	'public static final void registerHardwareSerializers() {' | 4;
-+    	'}' |4;
-+    	
-+        '}'
-+    }
-+    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/settingsXml.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/settingsXml.vtl
-new file mode 100644
-index 0000000..5afcc52
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/settingsXml.vtl
-@@ -0,0 +1,270 @@
-+@advice(QM)
-+template settingsXml(Configuration config, FileArtifact target, setOf(Sink) sinks, setOf(Parameter) permissibleParameters, mapOf(String, setOf(DecisionVariable)) lastElementMap, String topoName) {
-+	def main(Configuration config, FileArtifact target, setOf(Sink) sinks, setOf(Parameter) permissibleParameters, mapOf(String, setOf(DecisionVariable)) lastElementMap, String topoName) {
-+		Text text = target.getText();
-+		text.append("<pipeline>\n");
-+		text.append("    <name>$topoName</name>\n");
-+		
-+		//append external settings
-+		appendExternalSettings(text);
-+		
-+		//append commands
-+		text.append("    <commands>\n");
-+		//append common commands
-+		appendCommonCommands(text);
-+		
-+		//append replay commands, if existed - agreed with Apostolos to remove as they are not used anymore
-+		/* 
-+		if(hasReplaySink(sinks)) {
-+			appendReplayCommands(text);
-+		}
-+		*/
-+		//append permissible parameter commands
-+		appendPermissibleParameterCommands(permissibleParameters, text);
-+		text.append("    </commands>\n");
-+		
-+		/*
-+		//append sinks 
-+		text.append("    <sinks>\n");
-+		//append general sinks
-+		appendGeneralSinks(sinks, text);
-+		//append replay sinks
-+		appendReplaySinks(sinks, text);
-+		text.append("    </sinks>\n");
-+		
-+		if(permissibleParameters.size() > 0) {
-+			text.append("    <permissibleParameters>\n");
-+			appendPermissibleParameters(permissibleParameters, text);
-+			text.append("    </permissibleParameters>\n");
-+		}
-+		* 
-+		*/
-+		text.append("</pipeline>\n");
-+		target.rename("settings.xml");
-+	}
-+	
-+	def appendPermissibleParameterCommands(setOf(Parameter) parameters, Text text) {
-+		for(Parameter p : parameters) {
-+			text.append("        <!--This is generated based on the configuration of permissible parameters from the pipeline-->\n");
-+			text.append("        <command>									
-+			<name>change${p.name}</name>
-+			<request>
-+				<field sequence=\"0\">change${p.name}</field>
-+				<field sequence=\"1\">%new${firstToUpperCase(p.name)}%</field>
-+			</request>
-+			<response>
-+				<field sequence=\"0\">change${p.name}_response</field>
-+				<field sequence=\"1\">%status%</field>
-+				<field sequence=\"2\">%new${firstToUpperCase(p.name)}%</field>
-+			</response>
-+		</command>\n");
-+		}
-+	}
-+	
-+	def appendReplayCommands(Text text) {
-+		text.append("        <command>
-+			<name>replaySubscribe</name>
-+			<request>
-+				<field sequence=\"0\">replaySubscribe</field>
-+				<field sequence=\"1\">%replayID%</field>
-+				<field sequence=\"2\">%listOfPairs%</field>
-+				<field sequence=\"3\">%StartDateTime%</field>
-+				<field sequence=\"4\">%EndDateTime%</field>
-+				<field sequence=\"5\">%Speed%</field>
-+			</request>
-+			<response>
-+				<field sequence=\"0\">replaySubscribe_response</field>
-+				<field sequence=\"1\">%status%</field>
-+				<field sequence=\"2\">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>replayUnsubscribe</name>
-+			<request>
-+				<field sequence=\"0\">replayUnsubscribe</field>
-+				<field sequence=\"1\">%replayID%</field>
-+			</request>
-+			<response>
-+				<field sequence=\"0\">replayUnsubscribe_response</field>
-+				<field sequence=\"1\">%status%</field>
-+			</response>
-+		</command>\n");
-+	}
-+	
-+	def appendCommonCommands(Text text) {
-+		text.append("        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence=\"0\">login</field>
-+				<field sequence=\"1\">%username%</field>
-+				<field sequence=\"2\">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence=\"0\">login_response</field>
-+				<field sequence=\"1\">%status%</field>
-+				<field sequence=\"2\">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence=\"0\">logout</field>
-+			</request>
-+			<response>
-+				<field sequence=\"0\">logout_response</field>
-+				<field sequence= \"1\">%status%</field>
-+				<field sequence=\"2\">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence=\"0\">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence=\"0\">quoteList_response</field>
-+				<field sequence=\"1\">%status%</field>
-+				<field sequence=\"2\">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence=\"0\">requestHistoricalSentiment</field>
-+				<field sequence=\"1\">%startDate%</field>
-+				<field sequence=\"2\">%endDate%</field>
-+				<field sequence=\"3\">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence=\"0\">historicalSentiment_response</field>
-+				<field sequence=\"1\">%status%</field>
-+				<field sequence=\"2\">%result%</field>
-+			</response>
-+		</command>\n");
-+	}
-+	
-+	def appendExternalSettings(Text text) {
-+		text.append("    <external_service_settings>\n");
-+		//text.append("        <ip>configurableIp</ip>\n");
-+		//text.append("        <port>configurablePort</port>\n");
-+		text.append("        <packet_delimiter>!</packet_delimiter>\n");
-+		text.append("        <main_delimiter>,</main_delimiter>\n");
-+		text.append("        <secondary_delimiter>|</secondary_delimiter>\n");
-+		text.append("        <line_delimiter>\"Lf\"</line_delimiter>\n");
-+		text.append("    </external_service_settings>\n");
-+	}
-+	/**
-+	 * Appends the replay sinks.
-+	 */
-+	def appendReplaySinks(setOf(Sink) sinks, Text text) {
-+		for(Sink snk : sinks) {
-+			if(snk.type() == "ReplaySink") {
-+				ReplaySink reSink = snk;
-+				text.append("        <sink type=\"replaySink\">\n");
-+				text.append("            <name>${snk.name}</name>\n");
-+				text.append("            <data>\n");
-+				
-+				String varName = snk.varName().firstToUpperCase();
-+				setOf(DecisionVariable) lastElt = {};
-+				if(lastElementMap.containsKey(varName)) {
-+					lastElt = lastElementMap.get(varName); //last elements linked to the current element	
-+				}
-+				obtainTupleTypes(lastElt, text); //append only relative tuple types
-+				
-+				text.append("            </data>\n");
-+				text.append("        </sink>\n");
-+			}
-+		}
-+	}
-+	
-+	/**
-+	 * Appends the source, i.e., sink in the pipeline.
-+	 */
-+	def appendGeneralSinks(setOf(Sink) sinks, Text text) {
-+        //produce data tuples
-+        for(Sink snk : sinks) {
-+        	if(snk.type() == "Sink") {//only for general sink
-+        		text.append("    <sink type=\"sink\">\n");
-+				text.append("        <name>${snk.name}</name>\n");
-+        		text.append("        <data>\n");
-+        		String varName = snk.varName().firstToUpperCase();
-+				setOf(DecisionVariable) lastElt = {};
-+				if(lastElementMap.containsKey(varName)) {
-+					lastElt = lastElementMap.get(varName); //last elements linked to the current element	
-+				}
-+				obtainTupleTypes(lastElt, text); //append only relative tuple types
-+				text.append("        </data>\n");
-+    			text.append("    </sink>\n");
-+        	}
-+        }
-+	}
-+	
-+	def obtainTupleTypes(setOf(DecisionVariable) lastElt, Text text) {
-+		for(DecisionVariable e : lastElt) {
-+			Tuples tuples;
-+			if(e.type() == "Source") {
-+				Source src = e;
-+      			DataSource dataSrc = src.source;
-+      			tuples = dataSrc.input;
-+			} else if (e.type() == "FamilyElement") {
-+				FamilyElement fe = e;
-+				Family fm = fe.family;
-+				tuples = fm.output;
-+			} else if (e.type() == "DataManagementElement") {//recursively check the last element
-+				String dmVarName = e.varName().firstToUpperCase();
-+				setOf(DecisionVariable) lastElt = lastElementMap.get(dmVarName);
-+				obtainTupleTypes(lastElt, text);
-+			}
-+			if(tuples != null and tuples.size() > 0) {
-+				appendDataTuples(tuples, text); //only generate the type of tuples emitted from the last element
-+			}
-+		}
-+	}
-+	def appendDataTuples(Tuples tuples, Text text) {
-+		for(Tuple t : tuples) {
-+    		text.append("            <tuple>\n");
-+    		text.append("                <name>${t.name}</name>\n");
-+    		for(Field f : t.fields) {
-+    			text.append("                <field>\n");
-+    			text.append("                    <name>${f.name}</name>\n");
-+    			text.append("                    <type>${f.type.class}</type>\n");
-+    			text.append("                </field>\n");
-+    		}       		
-+    		text.append("            </tuple>\n");
-+    	}
-+	}
-+	
-+	def appendPermissibleParameters(setOf(Parameter) parameters, Text text) {
-+		for(Parameter p : parameters) {
-+			text.append("        <parameter>\n");
-+			text.append("            <name>${p.name}</name>\n");
-+			text.append("            <value/>\n");//consider default value?
-+			text.append("        </parameter>\n");
-+		}
-+	}
-+	
-+	def Boolean hasReplaySink(setOf(Sink) sinks) {
-+		Boolean result = false;
-+		for(Sink snk : sinks) {
-+			if(snk.type() == "ReplaySink") {
-+				result = true;
-+			}
-+		}
-+		result;
-+	}
-+	
-+	def Boolean hasSink(setOf(Sink) sinks) {
-+		Boolean result = false;
-+		for(Sink snk : sinks) {
-+			if(snk.type() == "Sink") {
-+				result = true;
-+			}
-+		}
-+		result;
-+	}
-+		 
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormDataManagementElement.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormDataManagementElement.vtl
-new file mode 100644
-index 0000000..1fcae8a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormDataManagementElement.vtl
-@@ -0,0 +1,158 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormDataManagementElement(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, Tuple)) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap) {
-+	
-+	def produceOutputVariable(setOf(DecisionVariable) lastElts, mapOf(Tuple,String) nameToOutputMap) {
-+		String outputInfName; //output interface name
-+        Integer size = lastElts.size();
-+		Integer count = 1;
-+		for(DecisionVariable lastElt : lastElts) {
-+			FamilyElement fe = lastElt;
-+			Family fm = fe.family;			
-+			Tuples tuples = fm.output;			
-+			String tupleId = "";			
-+			for(Tuple t : tuples) {				
-+				outputInfName = nameToOutputMap.get(t);
-+				if(size > 1){
-+					 tupleId = "$count";
-+				}
-+			    '    transient $outputInfName iTuple${formulateString(t.name)}${tupleId} = null;'
-+			    count = count + 1;
-+			}
-+			
-+		}	
-+	
-+	}
-+	
-+	def produceInputForTuples(mapOf(Tuple,String) nameToOutputMap, setOf(DecisionVariable) lastElts, String prefixStreamId, setOf(String) streamListToDeclare) {
-+		String outputInfName; //output interface name	
-+		Boolean multiStream = false;
-+		Integer indent = 4;
-+		
-+		Integer size = lastElts.size();
-+		Integer count = 1;
-+		for(DecisionVariable lastElt : lastElts) {
-+			FamilyElement fe = lastElt;
-+			Family fm = fe.family;			
-+			Tuples tuples = fm.output;
-+			String tupleId = "";
-+			String tupleName;
-+			for(Tuple t : tuples) {
-+			    if(size > 1){	
-+			    	tupleId = "$count";			
-+				    multiStream = true;
-+				    indent = 8;
-+			    }				
-+				outputInfName = nameToOutputMap.get(t);
-+				tupleName = t.name;
-+				streamListToDeclare.add(tupleName);
-+//				if(multiStream){
-+				    'if(tuple instanceof $outputInfName) {' | indent;
-+//			    }
-+			    'iTuple${formulateString(t.name)}${tupleId} = ($outputInfName)tuple.getValue(0);' | indent+4;
-+			    'streamId = "${prefixStreamId}${tupleName.firstToUpperCase()}";' | indent+4;
-+			   // '_collector.emit(streamId, tuple, new Values(iTuple${tupleId}));' | indent+4;
-+			   '//support.write(iTuple${tupleId});' | indent+4; //--problematic line
-+			   '//_collector.ack(tuple);' | indent+4;			   
-+//			    if(multiStream){
-+			 	    '}' | indent;
-+//			    }
-+				count = count + 1;
-+			}
-+			
-+		}				
-+		
-+	}
-+	
-+    def main(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName,mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, Tuple)) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap) {
-+        setOf(String) streamListToDeclare = {};
-+        String name = elt.varName().firstToUpperCase() + elt.type();
-+        String nontopoStream = "Stream";
-+        String topoStream = "TopoStream";
-+        String dataMgtName = elt.byName("dataManagement").varName();
-+        String ifName = "I" + dataMgtName.firstToUpperCase();
-+      	String ifOutputName = "I" + ifName + "Output";
-+      	
-+		String streamId = elt.varName() + nontopoStream;
-+		String topoStreamId = elt.varName();
-+		
-+		DataManagementElement dataMgtElt = elt;
-+		PersistentDataElement persistentDataElt = dataMgtElt.dataManagement;
-+		
-+		String fmVarName = elt.varName().firstToUpperCase();
-+		setOf(DecisionVariable) lastElts = lastElementMap.get(fmVarName); //last elements linked to the current element
-+		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
-+    	''    	
-+    	'import java.util.*;'
-+    	'import org.apache.log4j.Logger;'
-+    	'import backtype.storm.tuple.*;'
-+    	'import backtype.storm.task.*;'
-+    	'import backtype.storm.topology.*;'
-+    	'import eu.qualimaster.common.signal.*;'
-+    	'import eu.qualimaster.dataManagement.DataManager;'
-+		'import eu.qualimaster.dataManagement.storage.AbstractStorageTable;'
-+		'import eu.qualimaster.dataManagement.storage.support.IStorageSupport;'
-+		'import eu.qualimaster.dataManagement.strategies.*;'
-+		    	produceImportsFromLastElements(lastElts, {}, topoName);
-+    	''
-+    	'/**'
-+    	'* Defines the FamilyElment in the pipeline(GEN).'
-+    	'**/'
-+    	'@SuppressWarnings({ "rawtypes", "serial" })'
-+    	'public class $name extends BaseSignalBolt {'
-+    	''
-+    	'    final static Logger logger = Logger.getLogger($name.class);'
-+    	'    transient OutputCollector _collector;'
-+    	'    private static String streamId;'
-+    	'    private transient IStorageSupport support;'
-+    	produceOutputVariable(lastElts, nameToOutputMap);	    	
-+    	''
-+    	'    public $name(String name, String namespace) {'
-+    	'        super(name, namespace);'
-+    	'    }'
-+    	''   	      
-+		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
-+		'		 super.prepare(map, topologyContext, collector);'
-+		'		 String pipelineName = "$topoName";'
-+		String location = persistentDataElt.storageLocation;
-+		'		 String location = "$location";'
-+		String strategyStr = obtainManagementStrategyInstance(persistentDataElt);
-+		'		 IStorageStrategyDescriptor storageStrategy = $strategyStr;'
-+		'		 AbstractStorageTable table = DataManager.INTERMEDIARY_STORAGE_MANAGER.getTable(pipelineName, location, storageStrategy);'
-+		'         support = table.getStorageSupport();'
-+		'         _collector = collector;'
-+		'initMonitor();' | 8;
-+		'logger.info("The end of the prepare method.");' | 8;
-+		'    }'
-+	    ''
-+	    //override the initial monitor
-+	    produceInitMonitor(true, 4);
-+	    ''
-+		'    public void execute(Tuple tuple) {'
-+        if (genMonitoringProbes) {
-+        '        startMonitoring();'
-+        }
-+		
-+		 //produce input -- output casting statement
-+		 produceInputForTuples(nameToOutputMap, lastElts, streamId, streamListToDeclare);
-+        if (genMonitoringProbes) {      
-+        '        endMonitoring();'
-+        }
-+		'    }'
-+        ''
-+        	
-+	    '    @Override'
-+        '    public void cleanup() {'
-+        '        super.cleanup();'
-+        '    }'
-+        ''       
-+		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'	
-+		for(String s : streamListToDeclare) {
-+		'        declarer.declareStream("${streamId}${s.firstToUpperCase()}", new Fields("$ifOutputName"));'	
-+		}			
-+		
-+		'    }'
-+    	''
-+    	'}'
-+    }	
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBolt.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBolt.vtl
-new file mode 100644
-index 0000000..b372a40
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBolt.vtl
-@@ -0,0 +1,374 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormEndBolt(Configuration config, FileArtifact target, String topoName, String topLevelPip, DecisionVariable fmElt, Algorithm algorithm, String nextNode) {
-+	String algName = algorithm.name.firstToUpperCase().toIdentifier();
-+	String fmVarName = fmElt.varName();
-+	FamilyElement fe = fmElt;
-+	Family fm = fe.family;
-+	String fmName = fm.name.firstToUpperCase().toIdentifier();
-+	Boolean isActive;
-+	def main(Configuration config, FileArtifact target, String topoName, String topLevelPip, DecisionVariable fmElt, Algorithm algorithm, String nextNode) {
-+		isActive = isActiveAlgorithm(fm, algorithm);
-+		setOf(String) types = coreTupleTypes(fmName, algorithm, false); //get the list of output types
-+		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
-+    	'' 
-+    	/****************************/
-+    	/*        Imports           */  
-+    	/****************************/ 
-+    	'import java.util.*;'
-+    	'import java.io.IOException;'
-+    	'import org.apache.log4j.Logger;'
-+    	'import backtype.storm.tuple.*;'
-+    	'import backtype.storm.task.*;'
-+    	'import backtype.storm.topology.*;'
-+    	'import eu.qualimaster.common.signal.*;'
-+    	'import eu.qualimaster.base.algorithm.*;'
-+    	'import eu.qualimaster.families.inf.*;'
-+    	if(looseSub) {
-+    		'import com.esotericsoftware.kryo.io.Output;'
-+    		'import java.util.concurrent.ConcurrentLinkedQueue;'
-+    		'import eu.qualimaster.common.signal.PortManager.*;'
-+			'import eu.qualimaster.common.signal.PortManager;'
-+			'import eu.qualimaster.base.serializer.KryoGeneralTupleSerializer;'
-+			'import eu.qualimaster.common.switching.*;'
-+    	}
-+		if(newSwitchLog) {
-+    		'import java.io.PrintWriter;'
-+			'import eu.qualimaster.common.logging.DataLogger;'
-+			'import java.util.Calendar;'
-+    	}  
-+    	for(String type : types) {
-+			'import eu.qualimaster.families.imp.${fmName}.I$type;'
-+			'import eu.qualimaster.families.inf.I${fmName}.II$type;'
-+		}  	    	    			
-+		/****************************/
-+    	/*        Bolt class        */  
-+    	/****************************/
-+    	''
-+    	'/**'
-+    	'* Defines the end bolt for the algorithm $algName (GEN).'  
-+    	'**/'
-+    	'@SuppressWarnings({ "rawtypes", "serial" })'
-+    	String name = algName + "EndBolt";
-+//    	if(looseSub) {
-+//    		name = topoName + "EndBolt";
-+//    	}
-+    	'public class $name extends BaseSignalBolt {'
-+		    	/****************************/
-+		    	/*     Class variables      */  
-+		    	/****************************/
-+    	''    
-+    	'    final static Logger logger = Logger.getLogger(${name}.class);'
-+    	'    transient OutputCollector _collector;'
-+    	'    private String streamId;'
-+    		'private boolean emit = false;' | 4;
-+    		'private boolean isActive;' | 4;
-+    		if(looseSub) {
-+    			'    private String host = "localhost";'
-+		    	'    private int port;'
-+		    	'    private transient TupleSender sender = null;'
-+		    	'    private transient KryoGeneralTupleSerializer genSer = null;'
-+		    	'private transient Queue<IGeneralTuple> queue = null;' | 4;
-+		    	'private transient SynchronizedQueue<IGeneralTuple> syn = null;' | 4;
-+		    	'private static int QUEUE_SIZE = 100;' | 4;
-+    		}
-+    		if(newSwitchLog) {
-+				'private transient PrintWriter out = null;' | 4;
-+			}
-+		    	/****************************/
-+		    	/*    Class constructor     */  
-+		    	/****************************/
-+    	''
-+    	'    public $name(String name, String namespace, String streamId) {'
-+    	'        super(name, namespace, $genMonitoringProbes);'
-+    			 'this.streamId = streamId;' | 8;
-+    	'    }'  
-+    			/****************************/
-+		    	/*      prepare method      */  
-+		    	/****************************/		
-+		'' 	      
-+		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
-+		'        super.prepare(map, topologyContext, collector);'
-+				 '_collector = collector;' | 8;
-+				 if(newSwitchLog) {
-+				 	'String logDir = (String) map.get("LOG.DIRECTORY");' | 8;
-+				 	'out = DataLogger.getPrintWriter(logDir + "${algName}EndBolt.log");' | 8;
-+				 }
-+				 if(looseSub) {
-+				 	'isActive = "true".equals(map.get(Constants.CONFIG_KEY_INITIAL_SUBPIPELINE));' | 8;
-+				 } else {
-+				 	'isActive = $isActive; //initialized true with the first algorithm in the family' | 8;
-+				 }
-+				 'logger.info("Is this active? " + isActive);' | 8;
-+			 	 if(newSwitchLog) {
-+			 		'out.println("Is this active? " + isActive);' | 8;
-+			 		'out.flush();' | 8;
-+			 	 }
-+				 if(!looseSub) {
-+					 if(isActive) {
-+					 	'emit = true;' | 8;	
-+					 } else {
-+					 	'emit = false;' | 8;	
-+					 }	
-+				 }	 
-+				if(looseSub) {
-+					'genSer = new KryoGeneralTupleSerializer(map); ' | 8;
-+					'queue = new ConcurrentLinkedQueue<IGeneralTuple>();' | 8;
-+	        		'syn = new SynchronizedQueue<IGeneralTuple>(queue, QUEUE_SIZE);' | 8;
-+	        		
-+	        		'PortManager portManager = getPortManager();' | 8;
-+	        			'PortAssignment assignment = null;' | 8;
-+	        			'while(assignment == null && portManager.isConnected()) {' | 8;
-+			        		'try {' | 12;
-+			        			'assignment = portManager.getPortAssignment("$topLevelPip", "$nextNode", 0, null);' | 16; //TODO: change hardcoded!
-+							'} catch (SignalException e) {' | 12;
-+								'e.printStackTrace();' | 16;
-+							'}' | 12;
-+	        			'}' | 8;   
-+	        		'if(assignment != null) {' | 8;    		
-+						'host = assignment.getHost();' | 12;
-+	        			'port = assignment.getPort();' | 12;
-+	        		'}' | 8;
-+	        		if(newSwitchLog) {
-+	        			'logger.info("Connecting to the host : " + host + ", the port: " + port);' | 8;
-+			        	'out.println("Connecting to the host : " + host + ", the port: " + port);' | 8;
-+			        	'out.flush();' | 8;
-+			        }
-+					'sender = new TupleSender(host, port);' | 8;
-+					'Thread sendTupleThread = new Thread(new SendTuple());' | 8;
-+	        		'sendTupleThread.start();' | 8;
-+				}
-+				'initMonitor();' | 8;
-+				'logger.info("The end of the prepare method.");' | 8;
-+			'}' | 4; 
-+	    ''
-+	    //override the initial monitor
-+	    produceInitMonitor(true, 4);
-+	    
-+    			/****************************/
-+		    	/*      execute method      */  
-+		    	/****************************/	
-+		if(looseSub) {
-+			'/**' | 4;
-+			' * A thread executes tuples.' | 4;
-+			'**/' | 4;
-+			'public class SendTuple implements Runnable {' | 4;
-+            ''
-+            'private AbstractMonitor monitor = createThreadMonitor();' | 8;
-+            ''
-+				'@Override' | 8;
-+	    		'public void run() {' | 8;
-+					'while(true) {' | 12;
-+			            if (genMonitoringProbes) {      
-+                        'monitor.startMonitoring();' | 16;
-+                        }
-+                        'IGeneralTuple tuple = syn.consume();' | 16;
-+						'byte[] bytes = genSer.serialize(tuple);' | 16;
-+						'sender.send(bytes);' | 16;
-+                        if (genMonitoringProbes) {
-+                        'monitor.endMonitoring(tuple);' | 16;
-+                        }           
-+					'}' | 12;
-+				'}' | 8;
-+			'}' | 4;  
-+			''  
-+			'    public void execute(Tuple tuple) {'
-+				if(newSwitchLog) {
-+	    			'out.println("Received data and emitting...");' | 8;
-+	    			'out.flush();' | 8;
-+	    		}
-+	    			'if(isActive) {' | 8;
-+				 		'//queue received data' | 12;
-+				 		'syn.produce(new GeneralTuple(tuple.getValues()));' | 12;
-+				 	'}' | 8;
-+				 	'_collector.ack(tuple);' | 8;
-+				 '}' | 4;	 
-+		} else {   
-+		'    public void execute(Tuple tuple) {'
-+				'if(isActive) {' | 8;
-+			 		'activeExecute(tuple);' | 12;
-+			 	'} else {' | 8;
-+			 		'passiveExecute(tuple);' | 12;
-+			 	'}' | 8;
-+			 '}' | 4;
-+		
-+			 ''	
-+			 'public void activeExecute(Tuple tuple) {' | 4;
-+				'if(emit) {' | 8;
-+					castTupleTypes();
-+			 		'//_collector.emit(streamId, new Values(tuple));' | 12;
-+			 		'_collector.ack(tuple);' | 12;
-+			 	'}' | 8;
-+			 '}' | 4;
-+			 ''
-+			 'public void passiveExecute(Tuple tuple) {' | 4;
-+				'if(emit) {' | 8;
-+					castTupleTypes();
-+			 		'//_collector.emit(streamId, new Values(tuple));' | 12;
-+			 	'}' | 8;
-+			 	'_collector.ack(tuple);' | 8;
-+			 '}' | 4;
-+			 }
-+			 ''	
-+    			/********************************/
-+		    	/* notifyParameterChange method */  
-+		    	/********************************/
-+			'@Override' | 4;
-+			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
-+				'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
-+					'ParameterChange para = signal.getChange(i);' | 12;			
-+					'switch (para.getName()) {' | 12;
-+						'case "disable": //active' | 16;
-+							if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter signal disable!");' | 20;
-+				                'out.flush();' | 20;
-+				            }
-+				            if(!looseSub) {
-+								'emit = false;' | 20;
-+							} else {
-+								'isActive = false;' | 20;
-+							}
-+							'try {' | 20;
-+								'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), "${algName}Intermediary", "stopped", true, null);' | 24; //"$topoName"
-+	                    		'sendSignal(paraSignal);' | 24;
-+                    		'} catch (SignalException e) {' | 20;
-+					            'e.printStackTrace();' | 24;
-+					        '}' | 20;
-+                    		if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal stopped to ${algName}Intermediary!");' | 20;
-+				                'out.flush();' | 20;
-+				            }
-+							'break;' | 20;
-+						'case "emit": //passive' | 16;
-+							if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter signal emit!");' | 20;
-+				                'out.flush();' | 20;
-+				            }
-+							'isActive = true;' | 20;
-+							if(!looseSub) {
-+								'emit = true;' | 20;
-+							}
-+							'try {' | 20;
-+								'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), "${algName}Intermediary", "ready", true, null);' | 24;//"$topoName"
-+	                    		'sendSignal(paraSignal);' | 24;
-+                    		'} catch (SignalException e) {' | 20;
-+					            'e.printStackTrace();' | 24;
-+					        '}' | 20;
-+                    		if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal ready to ${algName}Intermediary!");' | 20;
-+				                'out.flush();' | 20;
-+				            }
-+							'break;' | 20;
-+						'case "goToPassive": //passive' | 16;
-+							if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter signal goToPassive!");' | 20;
-+				                'out.flush();' | 20;
-+				            }
-+							'isActive = false;' | 20;
-+							'emit = false;' | 20;
-+							if(isHardwareAlgorithm(algorithm)) {
-+								if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Sending a signal to stop algorithm!");' | 20;
-+				                'out.flush();' | 20;
-+				            	}
-+				            	'try {' | 20;
-+									'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), "$fmVarName", "stopHWAlg", true, null);' | 24;//"$topoName"
-+		                    		'sendSignal(paraSignal);' | 24;
-+	                    		'} catch (SignalException e) {' | 20;
-+						            'e.printStackTrace();' | 24;
-+						        '}' | 20;
-+							}
-+							'break;' | 20;
-+						'case "goToActive": //active' | 16;
-+							if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter signal goToActive!");' | 20;
-+				                'out.flush();' | 20;
-+				            }
-+							'isActive = true;' | 20;
-+							if(!looseSub) {
-+								'emit = true;' | 20;
-+							}
-+							'break;' | 20;
-+					'}' | 12;	
-+				'}' | 8;
-+			'}' | 4;
-+			''		    				 	 
-+				/************************************/
-+				/*   declareOutputFields method     */
-+				/************************************/
-+		''              
-+		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'				
-+		'        declarer.declareStream(streamId, new Fields("endBolt"));'	
-+			 '}' | 4;
-+			 ''
-+			 /********************************* */
-+	    	/*******Prepare shut down signal** */
-+	    	/********************************* */
-+	    	'@Override' | 4;
-+	    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
-+	        	'super.prepareShutdown(signal);' | 8;
-+	        	if(looseSub) {
-+	        	'if(null != sender) {' | 8;
-+        			'sender.stop();' | 12;
-+        		'}' | 8;
-+        		}
-+	    	'}' | 4;
-+	    	''		  	  	    	
-+    	'}'
-+	}
-+	
-+	def castTupleTypes(mapOf(Tuple, Tuple) inputToOutputMapping, mapOf(Tuple,String) nameToOutputMap) {
-+		String ifName = "I" + fmName;
-+   			String ifInputName = "I" + ifName;
-+    		String tupleName;
-+    		String outputInfName;
-+			String inputInfName;
-+			String fImpInputName;
-+    		for(Tuple t : fm.input) {
-+				//get the tuple name
-+				tupleName = t.name;
-+				
-+				//get input interface name
-+				inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
-+				//get input imp name
-+				fImpInputName= 	ifName + "${firstToUpperCase(tupleName)}Input";
-+				//get output interface name	
-+				if(inputToOutputMapping.containsKey(t))	{
-+		  			Tuple output = inputToOutputMapping.get(t);
-+		  			outputInfName = nameToOutputMap.get(output);				
-+				} 
-+				'if(sTuple.getValue(0) instanceof $outputInfName) {' | 12;
-+					'iTuple${firstToUpperCase(tupleName)} = ($outputInfName)sTuple.getValue(0);' | 16;
-+					'input${firstToUpperCase(tupleName)} = new $fmName.$fImpInputName();' | 16;
-+		 			for(Field f : t.fields) {
-+			 			String fname = toIdentifier("${f.name}");
-+			 			String mname = firstToUpperCase(fname);
-+	         			'input${firstToUpperCase(tupleName)}.set${mname}(iTuple${firstToUpperCase(tupleName)}.get${mname}());' | 16;
-+		 			}
-+    				'_collector.emit(streamId, new Values(input${firstToUpperCase(tupleName)}));' | 16;
-+    			'}' | 12;
-+    		}
-+	}
-+	
-+	def castTupleTypes() {
-+		String ifName = "I" + fmName;
-+   		String ifInputName = "I" + ifName;
-+    	String tupleName;
-+    	String outputInfName;
-+		for(Tuple t : fm.output) {
-+			//get the tuple name
-+			tupleName = t.name;
-+			
-+			//get input interface name
-+			outputInfName = ifInputName + "${firstToUpperCase(tupleName)}Output";
-+			'if(tuple.getValue(0) instanceof $outputInfName) {' | 12;
-+				'$outputInfName algOutput = ($outputInfName)tuple.getValue(0);' | 16;
-+				if(newSwitchLog) {
-+	                'out.println(Calendar.getInstance().getTimeInMillis() + "Emitting the tuple.");' | 20;
-+	                'out.flush();' | 20;
-+				}
-+				'_collector.emit(streamId, new Values(algOutput));' | 16;
-+			'}' | 12;
-+		}
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBoltSubPipeline.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBoltSubPipeline.vtl
-new file mode 100644
-index 0000000..6851d23
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormEndBoltSubPipeline.vtl
-@@ -0,0 +1,158 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormEndBoltSubPipeline(Configuration config, FileArtifact target, String topoName, String topLevelPip, String nextNode, Algorithm algorithm) {
-+	def main(Configuration config, FileArtifact target, String topoName, String topLevelPip, String nextNode, Algorithm algorithm) {
-+		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
-+    	'' 
-+    	/****************************/
-+    	/*        Imports           */  
-+    	/****************************/ 
-+    	'import java.util.*;'
-+    	'import java.io.IOException;'
-+    	'import org.apache.log4j.Logger;'
-+    	'import backtype.storm.tuple.*;'
-+    	'import backtype.storm.task.*;'
-+    	'import backtype.storm.topology.*;'
-+    	'import eu.qualimaster.common.signal.*;'
-+    	'import eu.qualimaster.base.algorithm.*;'
-+    	'import eu.qualimaster.families.inf.*;'
-+    	'import eu.qualimaster.common.switching.*;'
-+    	'import eu.qualimaster.base.serializer.*;'
-+    	'import backtype.storm.Config;'
-+    	'import eu.qualimaster.base.pipeline.CollectingTopologyInfo;'
-+    	'import java.util.concurrent.ConcurrentLinkedQueue;'
-+    	'import eu.qualimaster.common.signal.PortManager.*;'
-+		'import eu.qualimaster.common.signal.PortManager;'
-+		if(newSwitchLog) {
-+    		'import java.io.PrintWriter;'
-+			'import eu.qualimaster.common.logging.DataLogger;'
-+			'import java.util.Calendar;'
-+    	}  
-+    	  	    	    			
-+		/****************************/
-+    	/*        Bolt class        */  
-+    	/****************************/
-+    	''
-+    	'/**'
-+    	'* Defines the end bolt for the algorithm $algName (GEN).'  
-+    	'**/'
-+    	'@SuppressWarnings({ "rawtypes", "serial" })'
-+    	String name = formulateString(algorithm.name) + "EndBolt";
-+    	'public class $name extends BaseSignalBolt {'
-+		    	/****************************/
-+		    	/*     Class variables      */  
-+		    	/****************************/
-+    	''    
-+    	'    final static Logger logger = Logger.getLogger($name.class);'
-+    	'    transient OutputCollector _collector;'
-+    	'    private String streamId;'
-+    	'    private String host = "localhost";'
-+    	'    private int port;'
-+    	'    private transient TupleSender sender = null;'
-+    	'    private transient KryoGeneralTupleSerializer genSer = null;'
-+    	'private String nimbus_host = "localhost";' | 4;
-+    	'private int thrift_port = 6027;' | 4;
-+    	'private transient Queue<IGeneralTuple> queue = null;' | 4;
-+    	'private transient SynchronizedQueue<IGeneralTuple> syn = null;' | 4;
-+    	'private static int QUEUE_SIZE = 100;' | 4;
-+    		if(newSwitchLog) {
-+				'private transient PrintWriter out = null;' | 4;
-+			}
-+		    	/****************************/
-+		    	/*    Class constructor     */  
-+		    	/****************************/
-+    	''
-+    	'    public $name(String name, String namespace, String streamId) {'
-+    	'        super(name, namespace, $genMonitoringProbes);'
-+    			 'this.streamId = streamId;' | 8;
-+    	'    }' 
-+    	    	/****************************/
-+		    	/*      prepare method      */  
-+		    	/****************************/		
-+		'' 	      
-+		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
-+		'        super.prepare(map, topologyContext, collector);'
-+				 '_collector = collector;' | 8;	
-+				 'nimbus_host = (String) map.get(Config.NIMBUS_HOST);' | 8;
-+        		 'thrift_port = (int) map.get(Config.NIMBUS_THRIFT_PORT);' | 8;	 
-+				 if(newSwitchLog) {
-+				 	'String logDir = (String) map.get("LOG.DIRECTORY");' | 8;
-+				 	'out = DataLogger.getPrintWriter(logDir + "${topoName}EndBolt.log");' | 8;
-+				 }
-+				'genSer = new KryoGeneralTupleSerializer(map); ' | 8;
-+				'queue = new ConcurrentLinkedQueue<IGeneralTuple>();' | 8;
-+        		'syn = new SynchronizedQueue<IGeneralTuple>(queue, QUEUE_SIZE);' | 8;
-+        		
-+        		'PortManager portManager = getPortManager();' | 8;
-+        			'PortAssignment assignment = null;' | 8;
-+        			'while(assignment == null && portManager.isConnected()) {' | 8;
-+		        		'try {' | 12;
-+		        			'assignment = portManager.getPortAssignment(getPipeline(), "$nextNode", 0, null);' | 16; //TODO: change hardcoded!
-+						'} catch (SignalException e) {' | 12;
-+							'e.printStackTrace();' | 16;
-+						'}' | 12;
-+        			'}' | 8;   
-+        		'if(assignment != null) {' | 8;    		
-+					'host = assignment.getHost();' | 12;
-+        			'port = assignment.getPort();' | 12;
-+        		'}' | 8;
-+        		if(newSwitchLog) {
-+        			'logger.info("Connecting to the host : " + host + ", the port: " + port);' | 8;
-+		        	'out.println("Connecting to the host : " + host + ", the port: " + port);' | 8;
-+		        	'out.flush();' | 8;
-+		        }
-+				'sender = new TupleSender(host, port);' | 8;
-+				'Thread sendTupleThread = new Thread(new SendTuple());' | 8;
-+        		'sendTupleThread.start();' | 8;
-+
-+        		'initMonitor();' | 8;
-+        		'logger.info("The end of the prepare method.");' | 8;
-+			'}' | 4; 
-+    	''
-+    	//override the initial monitor
-+	    produceInitMonitor(true, 4);
-+	    
-+    			/****************************/
-+		    	/*      execute method      */  
-+		    	/****************************/	
-+		'/**' | 4;
-+		' * A thread executes tuples.' | 4;
-+		'**/' | 4;
-+		'public class SendTuple implements Runnable {' | 4;
-+		''
-+		'private AbstractMonitor monitor = createThreadMonitor();' | 8;
-+		''
-+			'@Override' | 8;
-+    		'public void run() {' | 8;
-+				'while(true) {' | 12;
-+		            if (genMonitoringProbes) {      
-+                    'monitor.startMonitoring();' | 16;
-+                    }
-+				    'IGeneralTuple tuple = syn.consume();' | 16;
-+					'byte[] bytes = genSer.serialize(tuple);' | 16;
-+					'sender.send(bytes);' | 16;
-+                    if (genMonitoringProbes) {
-+                    'monitor.endMonitoring(tuple);' | 16;
-+                    }           
-+				'}' | 12;
-+			'}' | 8;
-+		'}' | 4;  
-+		''  	    
-+		'    public void execute(Tuple tuple) {'
-+			if(newSwitchLog) {
-+    			'out.println("Received data and emitting...");' | 8;
-+    			'out.flush();' | 8;
-+    		}
-+			 	'//queue received data' | 8;
-+			 	'syn.produce(new GeneralTuple(tuple.getValues()));' | 8;
-+			 '}' | 4;
-+				/************************************/
-+				/*   declareOutputFields method     */
-+				/************************************/
-+		''              
-+		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'				
-+		'        declarer.declareStream(streamId, new Fields("endBolt"));'	
-+			 '}' | 4;		  	  	    	
-+    	'}'
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormFamilyElement.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormFamilyElement.vtl
-new file mode 100644
-index 0000000..9ef9da8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormFamilyElement.vtl
-@@ -0,0 +1,1545 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormFamilyElement(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap, mapOf(String, Integer) algToPort, Family subPipelineFamily, mapOf(Tuple, Grouping) tupleToGrouping, String subAlgName, Boolean debug, Boolean connector) {//subPipelineFamily is only for the family element in the subpipeline, otherwise null
-+	Boolean forSubPipeline = false;	//indicates whether this is used in the sub-pipeline
-+	Boolean hasSubPipeline = false;	//indicates whether the family has distributed algorithms including manually-implemented and generated sub-topologies		
-+	Boolean lastHasSubPipeline = false; //indicates whether the last elements have sub-pipeline-based algorithm																																																																																																 //subAlgName is for the prefix in the subtopology
-+	Boolean loadShedding = false;//indicates whether it shall enable loadShedding.
-+	mapOf(String, String) impNameToConfName = {}; //<algImpName, algConfName>
-+	Boolean sendSymbolList = false;//indicates whether it shall send symbollist (only for correlation computation component)
-+	
-+	Boolean logOutput = false; //ONLY TEMPORARY, TO BE REMOVED!
-+	def requestHardwareConnections(HardwareAlgorithm hwAlg, Boolean isStatic, Boolean hasDistAlg) {
-+		MPCCNode node = hwAlg.hwNode;
-+		String algName = hwAlg.name;
-+		'try {' | 20;
-+		if(newSwitchLog and hasDistAlg) {
-+		'out.println(Calendar.getInstance().getTimeInMillis() + "Connecting the hardware in order to get the dynamic ports");' | 8;	
-+		'out.flush();' | 8;
-+		}
-+		
-+		if(isStatic) {
-+			'String host = "${node.host}";' | 24;
-+        	'int sendingPort = ${node.commandSendingPort};' | 24;
-+        	'int receivingPort = ${node.commandReceivingPort};' | 24;
-+        	'String url = "hello";//actual algorithm executable information is passed from the parameter signal but not in STATIC mode' | 24;
-+		} else {
-+        	'String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "${node.host}");' | 24;
-+        	'int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, ${node.commandSendingPort});' | 24;
-+        	'int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, ${node.commandReceivingPort});' | 24;
-+			'String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);' | 24;
-+		}
-+		'HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);' | 24;
-+		'ByteString executable = ByteString.copyFromUtf8(url);' | 24;
-+		'UploadMessageOut msg = hardwareConnection.uploadAlgorithm("${algName}", ${hwAlg.receiverParallelism}, executable);' | 24;
-+		
-+        'ParameterChangeSignal signalForBolt= new ParameterChangeSignal("$topoName",
-+                    "${algName}HardwareConnectionBolt", "port", msg.getPortIn(), null);' | 24;
-+        /*     
-+        'ParameterChangeSignal signalForBolt= new ParameterChangeSignal("$topoName",
-+                    "${algName}HardwareConnectionBolt", "port", 2404, null);' | 24;
-+                    * 
-+                    */
-+        'sendSignal(signalForBolt);' | 24;
-+ 
-+		            if(newSwitchLog and hasDistAlg) {
-+					'logger.info(Calendar.getInstance().getTimeInMillis() + "Received the dynamic ports, portIn:  " + msg.getPortIn() + ", portsOut: " + msg + ", signalForBolt: " + signalForBolt.toString());' | 8;
-+		'out.println(Calendar.getInstance().getTimeInMillis() + "Received the dynamic ports, portIn:  " + msg.getPortIn() + ", portsOut: " + msg + ", signalForBolt: " + signalForBolt.toString());' | 8;	
-+		'out.flush();' | 8;
-+		}
-+
-+        'String ports = "";' | 24;
-+ 
-+    		'ports = ports + msg.getPortOut(0);' | 24;
-+		'for (int i=1; i<msg.getPortOutCount(); i++) {' | 24;
-+			'ports = ports + "," + msg.getPortOut(i);' | 28;
-+		'}' | 24;           		
-+		
-+		'ParameterChangeSignal signalForSpout= new ParameterChangeSignal("$topoName",
-+                    "${algName}HardwareConnectionSpout", "port", ports, null);' | 24;           			
-+        'sendSignal(signalForSpout);' | 24;
-+		if(newSwitchLog and hasDistAlg) {
-+		'logger.info(Calendar.getInstance().getTimeInMillis() + "Received the dynamic out ports, portOut:  " + ports + ", signalForSpout: " + signalForSpout.toString());' | 8;
-+		'out.println(Calendar.getInstance().getTimeInMillis() + "Received the dynamic out ports, portOut:  " + ports + ", signalForSpout: " + signalForSpout.toString());' | 8;	
-+		'out.flush();' | 8;
-+		}
-+            
-+		'} catch (IOException e) {' | 20;
-+			'e.printStackTrace();' | 24;						
-+		'} catch (SignalException e) {' | 20;
-+			'e.printStackTrace();' | 24;
-+		'}' | 20;
-+	}
-+	
-+	def createAlgorithmInstance(setOf(String) destinations, String ifName, String cls, Boolean forNotify, Integer indent) {
-+		'try {' | indent;
-+		'Class cls = Class.forName("$cls");' | indent+4;
-+		if(destinations.size() == 0) {
-+			if(forNotify) {
-+				if(newSwitch and hasSubPipeline and !forSubPipeline) {
-+					'if(!algChange) {//initialize the algorithm' | indent+4;
-+					if (ifName=="IFHayashiYoshida") {//for test
-+						'alg = ($ifName) cls.getConstructor(int.class).newInstance(taskId);' | indent+4;
-+					} else {
-+						'alg = ($ifName) cls.newInstance();' | indent+8;
-+					}
-+					'} else {' | indent+4;
-+					if (ifName=="IFHayashiYoshida") {//for test
-+						'algSwitch = ($ifName) cls.getConstructor(int.class).newInstance(taskId);' | indent+4;
-+					} else {
-+						'algSwitch = ($ifName) cls.newInstance();' | indent+8;
-+					}
-+					'}' | indent+4;
-+				} else if (ifName=="IFHayashiYoshida") {//for test
-+					'alg = ($ifName) cls.getConstructor(int.class).newInstance(taskId);' | indent+4;
-+				} else {
-+					'alg = ($ifName) cls.newInstance();' | indent+4;
-+				}								
-+			} else {
-+				if (ifName=="IFHayashiYoshida") {//for test
-+					'alg = ($ifName) cls.getConstructor(int.class).newInstance(taskId);' | indent+4;
-+				} else { // for test
-+					'alg = ($ifName) cls.newInstance();' | indent+4;
-+				}
-+			}
-+		} else {
-+			String args = "";
-+        	String argsClass = "";
-+        	Boolean first = true;
-+        	for(String d : destinations) {
-+                if(first) {
-+                    first = false;
-+                    args = args + "taskId${firstToUpperCase(d)}";
-+                    argsClass = argsClass + "List.class";
-+                } else {
-+                    args = args + ", taskId${firstToUpperCase(d)}";
-+                    argsClass = argsClass + ", List.class";
-+                }
-+        	}
-+        	if(destinations.size() != 0) {
-+        		args = args + ", ${elt.varName()}TaskId";
-+        		argsClass = argsClass + ", int.class";
-+        	}
-+        	
-+        	if(forNotify) {
-+				if(newSwitch and !forSubPipeline) {
-+					'if(!algChange) {//initialize the algorithm' | indent+4;
-+						'alg = ($ifName) cls.getConstructor($argsClass).newInstance($args);' | indent+8;
-+					'} else {' | indent+4;
-+						'algSwitch = ($ifName) cls.getConstructor($argsClass).newInstance($args);' | indent+8;
-+					'}' | indent+4;
-+				} else {
-+					'alg = ($ifName) cls.getConstructor($argsClass).newInstance($args);' | indent+4;
-+				}
-+			} else {
-+				'alg = ($ifName) cls.getConstructor($argsClass).newInstance($args);' | indent+4;
-+			}
-+		}
-+		'} catch (ClassNotFoundException e) {' | indent;
-+		'e.printStackTrace();' | indent+4;
-+		'} catch (InstantiationException e) {' | indent;
-+		'e.printStackTrace();' | indent+4;
-+		'} catch (IllegalAccessException e) {' | indent;
-+		'e.printStackTrace();' | indent+4;
-+		if(destinations.size() > 0) {
-+		'} catch (NoSuchMethodException e) {' | indent;
-+		'e.printStackTrace();' | indent+4;
-+		'} catch (InvocationTargetException e) {' | indent;
-+		'e.printStackTrace();' | indent+4;
-+		}
-+		'}' | indent;
-+	}	
-+	
-+	def produceInputForTuples(mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping, mapOf(Tuple,String) nameToOutputMap, DecisionVariable elt, setOf(DecisionVariable) lastElt) {
-+		FamilyElement fe = elt;
-+		Family fm = fe.family;
-+		String name = fm.name;
-+		String fName = name.firstToUpperCase();	
-+		//String familyName = elt.byName("family").varName().firstToUpperCase();	
-+		String inputInfName; //input interface name
-+		String outputInfName; //output interface name	
-+        String ifName = "I" + fName;
-+        String ifInputName = "I" + ifName;
-+
-+        String fImpName = fName.firstToUpperCase();
-+		String fImpInputName;
-+		
-+		String tupleName;
-+		Boolean multiStream = false;
-+		Integer indent = 4;
-+		sequenceOf(Tuple) tuples = fm.input;
-+		Integer tuplesSize = tuples.size();
-+		for(Tuple t : tuples) {
-+			//get the tuple name
-+			tupleName = t.name;
-+			if(tuplesSize > 1){
-+				multiStream = true;
-+				indent = 8;
-+			}
-+			//get input interface name
-+			inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
-+			//get input imp name
-+			fImpInputName= 	ifName + "${firstToUpperCase(tupleName)}Input";
-+			//get output interface name	
-+			if(inputToOutputMapping.containsKey(t))	{
-+			  sequenceOf(Tuple) outputs = inputToOutputMapping.get(t);
-+			  String number;
-+			  Integer size = outputs.size();
-+			  Integer count = 0;
-+			  for(Tuple tuple : outputs) {
-+			  	  count = count + 1;
-+			  	  outputInfName = nameToOutputMap.get(tuple);
-+			  	  if(size > 1) {
-+				      number = "$count";
-+				  } else {
-+				  	  number = "";
-+				  }
-+			
-+				if(!connector and receiveByField and subAlgName != "") { //direct receiving based on the stream id
-+					produceDirectReceive(lastElt, tuple);
-+				} else {	
-+//				  if(multiStream){
-+					'if(tupleItem instanceof $outputInfName) {' | indent;
-+//				}
-+				'iTuple${firstToUpperCase(tupleName)}$number = ($outputInfName)tupleItem;' | indent+4;
-+				}
-+				
-+				if(genInstance) {
-+					'input${firstToUpperCase(tupleName)} = new $fName.$fImpInputName();' | indent+4;
-+				}				
-+				 for(Field f : t.fields) {
-+					 String fname = toIdentifier("${f.name}");
-+	    			 String mname = firstToUpperCase(fname);
-+	    			 if(!connector and receiveByField and subAlgName != "") {
-+	    			 	'input${firstToUpperCase(tupleName)}.set${mname}(tuple.get${firstToUpperCase(f.type.class)}ByField("${formulateString(mname)}"));' | indent+4;
-+	    			 } else {
-+	    	         'input${firstToUpperCase(tupleName)}.set${mname}(iTuple${firstToUpperCase(tupleName)}$number.get${mname}());' | indent+4;
-+				 	}				 	
-+				 }				 
-+				 
-+				 'try {' | indent+4;
-+				 'if(alg != null) {' | indent+8;
-+				 if(genMultiTupleTypes) {
-+					'alg.calculate(input${firstToUpperCase(tupleName)}${resultTypesString(fm)});'| indent+12;
-+				 } else { //original one tuple type case in the algorithm output
-+				 	'alg.calculate(input${firstToUpperCase(tupleName)}, result);'| indent+12;
-+				 }
-+				 '} else {' | indent+8;
-+				    	'long now = System.currentTimeMillis();' | indent+8;
-+					    'if ((now - record) > 1000) {//print this error log once per second' | indent+8;
-+					    	'logger.error("Algorithm is not assigned!");' | indent+12;
-+							'record = now;' | indent+12;
-+					    '}' | indent+8;
-+					 '}' | indent+8;
-+				'} catch(Throwable e) {' | indent+4;
-+					'long now = System.currentTimeMillis();' | indent+8;
-+				    'if ((now - record) > 1000) {//print this error log once per second' | indent+8;
-+				    	'e.printStackTrace();' | indent+12;
-+						'record = now;' | indent+12;
-+				    '}' | indent+8;
-+				 if(genMultiTupleTypes) {
-+					produceResultDefaultValue(fm, indent);
-+				 } else {//original one tuple type case in the algorithm output
-+					sequenceOf(Tuple) outputTuples = fm.output;
-+					for(Tuple ot : outputTuples) {
-+						for(Field fd : ot.fields) {
-+						String fieldName = toIdentifier("${fd.name}"); 
-+						String upFieldName = firstToUpperCase(fieldName);
-+						FieldType fdType = fd.type;
-+						'result.set${upFieldName}(${obtainDefaultValue(fdType)});' | indent+8;	
-+						}
-+					}
-+				}
-+				'if (e instanceof DefaultModeException) {' | indent+8;
-+					'sendDefaultModeMonitoringEvent((DefaultModeException) e);' | indent+12;
-+				'}' | indent+8;
-+				'}' | indent+4;
-+			    
-+			    if(!looseSub and !newSwitch and hasDistAlgorithm(fm)) {
-+			    	'if(alg instanceof ITopologyCreate) {' | indent+4;
-+				    	if(debug) {
-+					    'logger.info("Emitting data with streamId: "+ streamId + ", data:");'| indent+8;		    
-+					    }
-+					    '_collector.emit(streamId, new Values(input${firstToUpperCase(tupleName)}));'| indent+8;
-+				    '}' | indent+4;
-+			    } 
-+			    
-+			    //loose sub-pipeline algorithm -- excluded for the new switch
-+				if(!newSwitch and looseSub and !forSubPipeline and hasSubPipeline) {
-+					'if(alg instanceof ITopologyCreate) {' | indent+4;
-+						'values.clear();' | indent+8;
-+						'values.add(input${firstToUpperCase(tupleName)});' | indent+8;
-+						'IGeneralTuple genTuple = new GeneralTuple(values);' | indent+8;
-+						'byte[] bytes = genSer.serialize(genTuple);' | indent+8;
-+						'sender.send(bytes);' | indent+8;
-+					'}' | indent+4;
-+				}
-+//			    if(multiStream){
-+					 	'}' | indent;
-+//					 }
-+				 ''
-+				 
-+			  }				
-+			}
-+		} //tu	
-+		
-+		if(newSwitch and hasDistAlgorithm(fm)) {
-+					'if(alg instanceof ITopologyCreate) {' | indent+4;
-+				    	if(debug) {
-+					    'logger.info("Sending data via network to the intermediary Spout: ");'| indent+8;		    
-+					    }
-+					    'if(both) {' | indent+8;
-+					    	'id++;' | indent+12;
-+					    '}' | indent+8;
-+					    'values.clear();' | indent+8;
-+                		'values.add(tupleItem);' | indent+8;
-+					    'switchTuple = new SwitchTuple(id, values);'| indent+8;
-+//					    if(looseSub) {
-+					    	'synQueue.produce(switchTuple);' | indent+8;
-+//					    } else {
-+//					    	'queue.offer(switchTuple);' | indent+8;
-+//					    }
-+					    'if(emit && !both && !queue.isEmpty()) {' | indent+8;
-+//					    if(looseSub) {
-+					    	'byte[] bytes = kryoSer.serialize(synQueue.consume());' | indent+12;
-+//					    } else {
-+//					    	'byte[] bytes = kryoSer.serialize(queue.poll());' | indent+12;
-+//					    }
-+						    for(Algorithm alg : fm.members) {
-+					    		String algClsName = algImplName(alg);	
-+					    		String aName = alg.name.firstToUpperCase().toIdentifier();
-+					    		impNameToConfName.add(algClsName, aName);
-+						    	'if(alg instanceof $algClsName) {' | indent+12;
-+									'sendTo${aName}(bytes);' | indent+16;
-+						    	'}' | indent+12;
-+			        		}
-+					    '}' | indent+8;
-+					    'long current = Calendar.getInstance().getTimeInMillis();' | indent+8;
-+					    'if(both && ((current - startRecord) <= duration) && emit) {' | indent+8;
-+					    	'if(!queue.isEmpty()) {' | indent+12;
-+//					    	if(looseSub) {
-+					    		'item = synQueue.consume();' | indent+12;
-+//					    	} else {
-+//						    	'item = queue.poll();' | indent+16;
-+//						    }
-+						    	'byte[] bytes = kryoSer.serialize(item);' | indent+16;
-+						    	
-+		                		for(Algorithm alg : fm.members) {	
-+						    		String aName = alg.name.firstToUpperCase().toIdentifier();
-+						    		'sendTo${aName}(bytes);' | indent+16;
-+						    		}
-+						    	if(newSwitchLog) { //print the tuple has been sent
-+						    		'out.println(Calendar.getInstance().getTimeInMillis() + ": Sent the item with the id: " + item.getId() + ", with the value:"' | indent+16;
-+//						    		for(Field f : t.fields) {
-+//										 String fname = toIdentifier("${f.name}");
-+//						    			 String mname = firstToUpperCase(fname);
-+//						    	         '+ ", $mname: "+ (($outputInfName)item.getValue(0)).get${mname}()' | indent+16;
-+//									 }
-+									 ');' | indent+16;
-+						    		'out.flush();' | indent+16;
-+						    	}
-+					    	'}' | indent+12;
-+	            		'} else if(both && ((current - startRecord) > duration)){' | indent+8;
-+	            			if(newSwitchLog) {
-+	            			'out.println(Calendar.getInstance().getTimeInMillis() + ": Real Switching!!!!!!!!!!!!!!!!!!!!!!!!!");' | indent+12;
-+	            			'out.flush();' | indent+12;
-+	            			}
-+	            			'emit = false;' | indent+12;
-+	            			'both = false;' | indent+12;
-+	            			'id = 0;' | indent+12;
-+	            			'if(item != null) {' | indent+12;
-+	            			'try {' | indent+12;
-+	            				'String idAndTarget = item.getId() + "," + originalAlg + "," + targetAlg;' | indent+16;
-+	            				String namespace = topoName;
-+	            				for(Algorithm alg : fm.members) {
-+	            					if(looseSub) {
-+	            						if(isGenSubtopology(alg)) {
-+	            							SubPipelineAlgorithm subAlg = alg;
-+	            							namespace = subAlg.subPipeline.name;
-+	            						}
-+	            						if(isHardwareAlgorithm(alg)) {
-+	            							namespace = alg.name;
-+	            						}
-+	            					}
-+	            					String aName = alg.name.firstToUpperCase().toIdentifier();
-+	            					//'ParameterChangeSignal signal${aName} = new ParameterChangeSignal("$namespace",
-+								'ParameterChangeSignal signal${aName} = new ParameterChangeSignal(getNamespace(),
-+	                        "${aName}Intermediary", "passivate", idAndTarget, null);' | indent+16;
-+	                    			'sendSignal(signal${aName});' | indent+16;
-+	                    		}
-+	            			'} catch (SignalException e) {' | indent+12;
-+	                    		'e.printStackTrace();' | indent+16;
-+	                		'}' | indent+12;
-+	                		'alg = algSwitch;' | indent+12;
-+	                		'//sendAlgorithmChangeEvent(algSwitch.getClass().getSimpleName(), null);//inform later when the switch is done' | indent+12;
-+	                		'}' | indent+12;
-+	            		'}' | indent+8;
-+				    '}' | indent+4;
-+				}
-+	}	
-+	
-+	def resultTypesString(Family family) {
-+		String result = "";
-+		String tupleName;
-+		for(Tuple t : family.output) {
-+			tupleName = t.name;
-+			result = result + ", " + t.name + "Result";
-+		}
-+		result;
-+	}
-+	
-+	def produceDirectReceive(setOf(DecisionVariable) lastElt, Tuple tuple) {
-+		String name;
-+		String streamId;
-+		for(DecisionVariable d : lastElt) {
-+			name = d.byName("name");
-+			for(Tuple t : tuples(d)) {
-+				if(t == tuple) {
-+					streamId = formulateString(name) + formulateString(t.name);
-+					'if (sourceStreamId.equals("$streamId")) {'
-+				}
-+			}
-+		}
-+	}
-+	
-+	def sequenceOf(Tuple) tuples(DecisionVariable elt) {
-+		sequenceOf(Tuple) result = {};
-+		result;
-+	}
-+	
-+	def sequenceOf(Tuple) tuples(Source elt) {
-+		DataSource dataSrc = elt.source;
-+		dataSrc.input;
-+	}
-+	
-+	def sequenceOf(Tuple) tuples(FamilyElement elt) {
-+		Family fm = elt.family;
-+		fm.output;
-+	}
-+	
-+	
-+	/*produce the result-related variables (declaration or instance) */
-+	def produceResultVariables(FamilyElement fe, Boolean instance) {
-+		String nameVar = fe.varName();
-+		String name = fe.name;
-+		String streamId;
-+		Family family = fe.family;
-+		setOf(Flow) flows = fe.output;
-+		Boolean isDirect = false;
-+		String fName = family.name;
-+		String ifName = "I" + fName.firstToUpperCase();
-+		String fImpName = fName.firstToUpperCase();
-+		String tupleName;
-+		for(Tuple t : family.output) {
-+			isDirect = isDirectGroupping(flows, t);
-+			tupleName = t.name;
-+			String ifOutputName = "I" + ifName + firstToUpperCase(tupleName)+ "Output";
-+			String fImpOutputName = ifName + firstToUpperCase(tupleName)+ "Output";
-+			
-+			if(subAlgName != "") { //sub-topology
-+				streamId = formulateString(name) + formulateString(tupleName);
-+			} else {
-+				streamId = formulateString(nameVar) + formulateString(tupleName);
-+			}
-+			if(!instance) {
-+    		'    private transient $fImpName.$fImpOutputName ${tupleName}Result = new $fImpName.$fImpOutputName();'
-+    		} else {
-+    			'${tupleName}Result = new $fImpName.$fImpOutputName();' | 8;
-+    			//produce emitter instance, must distinguish between emit and emitDirect
-+	    		'IItemEmitter<$ifOutputName> ${tupleName}Emitter = new IItemEmitter<$ifOutputName>() {' | 8;
-+	    			'@Override' | 12;
-+	    			'public void emitDirect(String streamId, $ifOutputName item) {' | 12;
-+	    			if(isDirect) {
-+	    				'_collector.emitDirect(item.getTaskId(), "$streamId", new Values(item));' | 16;
-+	    			} else {
-+	    				'_collector.emit("$streamId", new Values(item));' | 16;
-+	    			}
-+	    			'}' | 12;
-+	    		'};' | 8;
-+	    		'${tupleName}Result.setEmitter(${tupleName}Emitter);' | 8;
-+	    		''
-+    		}
-+		}
-+	}
-+	
-+	/* produce the default value settings for the result types */
-+	def produceResultDefaultValue(Family family, Integer indent) {
-+		String tupleName;
-+		for(Tuple t : family.output) {
-+			tupleName = t.name;
-+			for(Field fd : t.fields) {
-+				String fieldName = toIdentifier("${fd.name}"); 
-+				String upFieldName = firstToUpperCase(fieldName);
-+				FieldType fdType = fd.type;
-+				'${tupleName}Result.set${upFieldName}(${obtainDefaultValue(fdType)});' | indent+8;	
-+			}
-+		}
-+	}
-+	
-+	/* produce emitting statements based on the output types */
-+	def produceResultEmit(FamilyElement familyElement, Integer indent) {
-+		Family family = familyElement.family;
-+		String fName = family.name;
-+		String ifName = "I" + fName.firstToUpperCase();
-+		String fImpName = fName.firstToUpperCase();
-+		String tupleName;
-+		for(Tuple t : family.output) {
-+			tupleName = t.name;
-+			String streamId;
-+			if(subAlgName == "") {//for the main pipeline, remains as "streamId"
-+				streamId = "streamId";
-+			} else {
-+				streamId = familyElement.varName().firstToUpperCase() + tupleName.firstToUpperCase();
-+			}
-+			'if(${tupleName}Result != null) {' | indent;
-+				'_collector.emit("$streamId", new Values(${tupleName}Result));' | indent+4;
-+			'}' | indent;   					
-+		}
-+	}
-+	
-+	def produceMultipleOutputs(FamilyElement familyElement, mapOf(Tuple, Grouping) tupleToGrouping, Integer indent) {
-+		Family family = familyElement.family;
-+		String fName = family.name;
-+		String ifName = "I" + fName.firstToUpperCase();
-+		String tupleName;
-+		String streamId;
-+		Grouping grouping;
-+		for(Tuple t : family.output) {
-+			if(tupleToGrouping.containsKey(t)) {
-+				grouping = tupleToGrouping.get(t);
-+			}
-+			tupleName = t.name;
-+			String ifOutputName = "I" + ifName + firstToUpperCase(tupleName)+ "Output";
-+			//for the simple java algorithm, the stream id is the elt name plus tuple name.
-+			if(subAlgName != "") {//the subtopology uses the actual configured name
-+				streamId = formulateString(familyElement.name) + formulateString(tupleName);
-+			} else {
-+				streamId = formulateString(familyElement.varName()) + formulateString(tupleName);
-+			}
-+			'eu.qualimaster.base.algorithm.IOutputItemIterator<$ifOutputName> iter${firstToUpperCase(tupleName)} = ${tupleName}Result.iterator();' | indent;
-+			'iter${firstToUpperCase(tupleName)}.reset();' | indent;
-+		    'while (iter${firstToUpperCase(tupleName)}.hasNext()) {' | indent;
-+		    if(logOutput) {
-+		    	'long nowOutput = System.currentTimeMillis();'
-+			    'if ((nowOutput - recordOutput) > 1000) {'
-+				'recordOutput = nowOutput;'
-+				'logger.error("The output rate at the time " + nowOutput + ":" + counter);'
-+				'counter = 0;'
-+			    '} else {'
-+				'counter++;'
-+			    '}'
-+		    }
-+		    	'$ifOutputName out = iter${firstToUpperCase(tupleName)}.next();' | indent+4;
-+		    	String outValues = "";
-+		    	Boolean first = true;
-+		    	String split = "";
-+		    	if(receiveByField) {
-+		    		for(Field f : t.fields) {
-+		    			String fname = f.name;
-+		    			if(first) {
-+		    				split = "";
-+		    				first = false;
-+		    			} else {
-+		    				split = ",";
-+		    			}
-+		    			outValues = outValues + split + "out.get${formulateString(fname)}()";
-+		    		}
-+		    	} else {
-+		    		outValues = "out";
-+		    	}
-+		    	if(isDirectGroupping(familyElement.output, t)) {
-+		    		'_collector.emitDirect(out.getTaskId(), "$streamId", new Values($outValues));' | indent+4;  
-+		    	} 
-+		    	/*
-+		    	else if (isAllGroupping(familyElement.output, t)) {
-+		    		String dest = allGroupingDestName(familyElement.output, t);
-+		    		'for(int i=0; i<taskId${firstToUpperCase(dest)}.size(); i++) {' | indent+4;
-+		    			'_collector.emit("$streamId", new Values($outValues));' | indent+8;   
-+		    		'}' | indent+4;
-+		    	}
-+		    	* */
-+		    	else {
-+            		'_collector.emit("$streamId", new Values($outValues));' | indent+4;   
-+            	} 
-+		    '}' | indent;	
-+		
-+		}		
-+	}
-+	
-+	def produceStreamId(Family family, Boolean variable) {
-+		Boolean first = true;//select the first subtopology algorithm as the initial algorithm to conduct the stream id
-+		String sId;
-+		for(Algorithm alg : family.members) {
-+			if(first) {
-+				if(isDistAlgorithm(alg)) {
-+					first = false;
-+					sId = formulateString(elt.varName()) + formulateString(alg.name);
-+					if(variable) {
-+						'    private String streamId = "$sId";'
-+						} else {
-+						'            streamId = "$sId";'	
-+						}
-+				}
-+			}
-+		}
-+	}
-+	
-+	def produceForJavaAlgorithm() {
-+		
-+	}
-+	
-+	/* print log per tuple */
-+	def produceLogVariable(sequenceOf(Tuple) tuples, Boolean variable, String fName) {
-+		String ifName = "I" + fName;
-+		String ifInputName = "I" + ifName;
-+		String tupleName;
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			String inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
-+			String fImpInputName = 	ifName + "${firstToUpperCase(tupleName)}Input";
-+			if(variable) {
-+				'    private transient PrintStream out${firstToUpperCase(tupleName)} = System.out;'
-+			} else {
-+				'        out${firstToUpperCase(tupleName)} = getPrintStream("gen-${firstToUpperCase(tupleName)}" + "-" + Thread.currentThread().getId() + "-" + topologyContext.getThisTaskId() + ".log");'
-+			}
-+		}
-+	}
-+	
-+	
-+    def main(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName,mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap, mapOf(String, Integer) algToPort, Family subPipelineFamily, mapOf(Tuple, Grouping) tupleToGrouping, String subAlgName, Boolean debug, Boolean connector) {
-+        if(subAlgName != "") {
-+			forSubPipeline = true;
-+		}
-+		
-+        Boolean parameterSetting = true; //use for commenting the parameterSetting
-+        //name for FamilyElement class
-+        String name = elt.varName().firstToUpperCase() + elt.type();
-+        //streamId endings
-+        String nontopoStream = "Stream";
-+        String topoStream = "TopoStream";        
-+        
-+        FamilyElement fe = elt;
-+		Family fm = fe.family;
-+		String fName = fm.name;
-+		
-+		//algorithm specific!!
-+		if(fm.name == "fCorrelationFinancial") {
-+			sendSymbolList = true;
-+		}
-+		
-+		//ONLYTEMPORARY; TOBE REMOVED!!
-+		if(fm.name == "fHayashiYoshida") {
-+			logOutput = true;
-+		}
-+		
-+		loadShedding = fe.loadShedding;
-+		if(hasDistAlgorithm(fm)) {
-+			hasSubPipeline = true;
-+		}
-+		
-+//        String familyName = elt.byName("family").varName();
-+        String ifName = "I" + fName.firstToUpperCase();      	
-+		String fImpName = fName.firstToUpperCase();
-+		String fImpInputName = ifName + "Input";
-+		String fImpOutputName = ifName;
-+		String streamId = elt.varName() + nontopoStream;
-+		String topoStreamId = elt.varName();
-+        String ifOutputName = "I" + ifName;
-+        String tupleName;
-+		
-+		//get family varname
-+		String fmVarName = elt.varName().firstToUpperCase();
-+		setOf(DecisionVariable) lastElt = lastElementMap.get(fmVarName); //last elements linked to the current element
-+		
-+		//determine whether the last elements have sub-pipeline-based algorithm
-+		for(DecisionVariable elt : lastElt) {
-+			if(elt.type() == "FamilyElement") {
-+				FamilyElement familyElt = elt;
-+				Family fm = familyElt.family;
-+				if(looseSub and hasGenAlgorithm(fm)) {
-+					lastHasSubPipeline = true;
-+				}
-+			}
-+		}
-+		
-+		//get family variable
-+		Family eltFamily = elt.byName("family");
-+		String fmNameInCapital = fName.firstToUpperCase();
-+		
-+		//get the inputToOutputMapping of this family element
-+		String eltName = elt.varName().firstToUpperCase();
-+		mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping = {};
-+		if(globalMap.containsKey(eltName)){
-+			inputToOutputMapping = globalMap.get(eltName);
-+		}
-+//		if(!genMultiTupleTypes) {//originally considering only one tuple type in the output of the algorithm
-+			//get the tuple name of the first output tuple to obtain the output interface/class name (assume that there is only one output from the family node)				
-+			Tuples outputTuples = eltFamily.output;
-+			Integer first = 1;
-+			for(Tuple t : outputTuples) {
-+				if(first == 1){
-+					tupleName = t.name;
-+					ifOutputName = ifOutputName + firstToUpperCase(tupleName)+ "Output";
-+					fImpOutputName = fImpOutputName + firstToUpperCase(tupleName)+ "Output";
-+					streamId =  streamId + firstToUpperCase(tupleName);
-+				}
-+				first = first + 1;
-+			}
-+//		}
-+		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
-+    	'' 
-+    	/****************************/
-+    	/*        Imports           */  
-+    	/****************************/ 	
-+    	'import java.util.*;'
-+    	'import java.io.IOException;'
-+    	'import java.lang.NoSuchMethodException;'
-+    	'import java.lang.reflect.InvocationTargetException;'
-+		'import java.io.OutputStream;'
-+		'import java.io.Serializable;'
-+		'import java.net.Socket;'
-+		'import java.io.PrintWriter;'
-+		'import eu.qualimaster.common.logging.DataLogger;'
-+		'import java.net.UnknownHostException;'
-+		'import com.esotericsoftware.kryo.io.Output;'
-+    	'import org.apache.log4j.Logger;'
-+    	'import backtype.storm.tuple.*;'
-+    	'import backtype.storm.task.*;'
-+    	'import backtype.storm.topology.*;'
-+		'import eu.qualimaster.events.EventManager;'
-+		'import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;' 
-+		'import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;'    	
-+    	'import eu.qualimaster.families.inf.*;'
-+    	'import eu.qualimaster.families.inf.$ifName.*;'
-+    	if(genMultiTupleTypes and subAlgName != "") { //import the family interface of the subpipeline family
-+    		String isubfName = "I" + subPipelineFamily.name.firstToUpperCase();
-+    		'import eu.qualimaster.families.inf.$isubfName.*;'
-+    	}
-+    	'import eu.qualimaster.families.imp.*;'
-+    	//'import eu.qualimaster.hardware.imp.*;' --currently no hardware-based algorithm
-+    	'import eu.qualimaster.common.signal.*;'
-+    	'import eu.qualimaster.base.algorithm.*;'
-+    	'import eu.qualimaster.base.algorithm.IFamily.State;'
-+    	'import eu.qualimaster.infrastructure.PipelineOptions;'
-+    	'import eu.qualimaster.pipeline.DefaultModeException;'
-+    	'import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;'
-+    	'import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;'
-+    	'import backtype.storm.Config;'
-+    	'import eu.qualimaster.base.pipeline.CollectingTopologyInfo;'
-+    	'import eu.qualimaster.pipeline.AlgorithmChangeParameter;'
-+    	produceAlgorithmImports(fe.family); 
-+    	produceImportsFromLastElements(lastElt, lastElementMap, topoName);
-+    	if(hasHardwareAlgorithm(fm)) {
-+    		'import eu.qualimaster.common.hardware.*;'
-+    		'import com.google.protobuf.ByteString;'
-+		}
-+    	if(newSwitch) {
-+    		'import com.esotericsoftware.kryo.KryoException;'
-+    		'import java.util.concurrent.ConcurrentLinkedQueue;'
-+    		'import eu.qualimaster.common.switching.*;'
-+			'import java.io.PrintWriter;'
-+			'import eu.qualimaster.common.logging.DataLogger;'
-+			'import java.util.Calendar;'
-+    	}
-+    	if(looseSub and !forSubPipeline and hasSubPipeline) {
-+    		'import com.esotericsoftware.kryo.KryoException;'
-+    		'import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;'
-+			'import eu.qualimaster.base.serializer.KryoGeneralTupleSerializer;'
-+			'import eu.qualimaster.common.signal.PortManager.*;'
-+			'import eu.qualimaster.common.signal.PortManager;'
-+    	}
-+    	'import eu.qualimaster.base.algorithm.IItemEmitter;'
-+    	/****************************/
-+    	/*        Bolt class        */  
-+    	/****************************/
-+    	''
-+    	'/**'
-+    	'* Defines the FamilyElment in the pipeline(GEN).'  
-+    	'**/'
-+    	'@SuppressWarnings({ "rawtypes", "serial" })'
-+    	'public class $name extends BaseSignalBolt {'
-+		    	/****************************/
-+		    	/*     Class variables      */  
-+		    	/****************************/
-+    	''    
-+    	'    final static Logger logger = Logger.getLogger($name.class);'
-+    	'    transient OutputCollector _collector;'
-+    	'    private boolean algChange = false;'
-+    	'    private boolean firstTuple = false;'
-+    	'    private long record = 0;'
-+    	'    private int taskId;'
-+    	
-+    	if(logOutput) {
-+			'int counter = 0;'
-+			'long recordOutput = 0;'
-+    	} 
-+    	
-+    	if(newSwitchLog) {
-+			'private transient PrintWriter out = null;' | 4;
-+		}
-+    	if(!genMultiTupleTypes) {
-+    	'    private String streamId = "$streamId";'
-+    	} else {
-+    		if(hasDistAlgorithm(fm)) {//only generated for subtopology-based algorithm in the new version of the code
-+    			produceStreamId(fm, true);
-+    		}
-+    	}
-+    	if(genMultiTupleTypes) {
-+    		produceResultVariables(fe, false);
-+    	} else {
-+    		'    private transient $ifOutputName result = new $fImpName.$fImpOutputName();'
-+    	}
-+    	'    private transient $ifName alg = null; '
-+    	//define the taskId related variables if there are direct emit in use
-+    	setOf(String) destinations = {};
-+    	directEmitDestination(fe.output, destinations); //collect the direct emit and all grouping related destinations
-+    	for(String dest : destinations) {
-+    		'private transient List<Integer> taskId${firstToUpperCase(dest)};' | 4;
-+    	}
-+    	if(destinations.size() != 0) {
-+    		'private int ${elt.varName()}TaskId;' | 4;
-+    	}
-+    	
-+    	produceOutputVariable(eltFamily.input, inputToOutputMapping, nameToOutputMap, fmNameInCapital);
-+    	produceInputVariable(eltFamily.input, true, fmNameInCapital);    
-+    	
-+    	if(looseSub and !forSubPipeline and hasSubPipeline) {
-+    		for(Algorithm alg : fm.members) {
-+    		    'private String host${toIdentifier(firstToUpperCase(alg.name))} = "localhost";' | 4; //TODO: determine dynamically
-+	    		'private int port${toIdentifier(firstToUpperCase(alg.name))} = 8999;' | 4;//TODO: determine dynamically
-+    		}
-+    		'private transient KryoGeneralTupleSerializer genSer = null;' | 4;
-+    		'private transient KryoSwitchTupleSerializer swiSer = null;' | 4;
-+    		'private transient TupleSender sender = null;' | 4;
-+    	}
-+    	if(newSwitch and !forSubPipeline and hasDistAlgorithm(fm)) {
-+			'private static int QUEUE_SIZE = ${fe.switchQueueSize};' | 4;
-+			'private transient SynchronizedQueue<ISwitchTuple> synQueue = null;' | 4;
-+		}
-+    	
-+    	if(lastHasSubPipeline) {
-+    		'private int port;' | 4;
-+    		'private static int QUEUE_SIZE = 1;' | 4;
-+    		'private transient TupleReceiverServer server = null;' | 4;
-+    		'private transient Queue<IGeneralTuple> queue = new ConcurrentLinkedQueue<IGeneralTuple>();//receiving tuples' | 4;
-+    		'private transient SynchronizedQueue<IGeneralTuple> syn = null;' | 4;
-+    	}
-+    	
-+    	if(newSwitch or looseSub) {
-+    		'private transient List<Object> values = new ArrayList<Object>();' | 4;
-+    		'private String nimbus_host = "localhost";' | 4;
-+    		'private int thrift_port = 6027;' | 4;
-+    	}
-+    	if(newSwitch and hasDistAlgorithm(fm)) {
-+    		'private static final int DEFAULT_WARMUP_DELAY = 30000;' | 4;
-+    		if(hasHardwareAlgorithm(fm)) {
-+    		'private transient HardwareControlConnection hardwareConnection = null;' | 4;
-+    		}
-+    		'private transient $ifName algSwitch = null;' | 4;
-+    		'private boolean both;' | 4;
-+    		'private int duration = DEFAULT_WARMUP_DELAY;' | 4;
-+    		'private long startRecord;' | 4;
-+    		'private boolean emit;' | 4;
-+    		'private long id = 0;' | 4;
-+    		'private transient ISwitchTuple switchTuple = null;' | 4;
-+    		'private transient KryoSwitchTupleSerializer kryoSer = null;' | 4;
-+    		'private transient Queue<ISwitchTuple> queue = null;' | 4;    		
-+    		'transient ISwitchTuple item = null;' | 4;
-+    		'private String originalAlg;' | 4;
-+    		'private String targetAlg;' | 4;
-+    		'private transient HashMap<String, String> impNameToConfName = null;' | 4;
-+
-+    		Integer port;
-+    		for(Algorithm alg : fm.members) {
-+    			if(algToPort.containsKey(alg.name)) {
-+    				port = algToPort.get(alg.name);
-+    			}
-+    			if(!looseSub) {
-+	    			'private String host${toIdentifier(firstToUpperCase(alg.name))} = "localhost";' | 4;
-+	    			'private int port${toIdentifier(firstToUpperCase(alg.name))} = $port;' | 4;
-+	    		}
-+	    		'private transient Output output${toIdentifier(firstToUpperCase(alg.name))} = null;' | 4;
-+    			'private transient Socket socket${toIdentifier(firstToUpperCase(alg.name))} = null;' | 4;
-+    		}
-+    		'private String subTopologySpoutName;' | 4;
-+    	}
-+		    	/****************************/
-+		    	/*    Class constructor     */  
-+		    	/****************************/
-+    	''
-+    	'    public $name(String name, String namespace) {'
-+    	'        super(name, namespace, $genMonitoringProbes);'
-+    	'    }'
-+    	
-+    			/***********************************/
-+		    	/* sendAlgorithmChangeEvent method */  
-+		    	/***********************************/
-+    	''
-+		'    /**'
-+		'     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct' 
-+		'     * testing.'
-+		'     * @param algorithm the new algorithm'
-+		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
-+		'     */'
-+		'    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {'
-+		'        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));'
-+		'    }' 
-+    			/***********************************/
-+		    	/* sendParameterChangeEvent method */  
-+		    	/***********************************/
-+    	''
-+		'    /**'
-+		'     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct' 
-+		'     * testing.'
-+		'     * @param parameter the parameter to be changed'
-+		'     * @param value the new value'
-+		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
-+		'     */'
-+		'    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {'
-+		'        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));'
-+		'    }' 		
-+    			/*****************************************/
-+		    	/* sendDefaultModeMonitoringEvent method */  
-+		    	/*****************************************/
-+    	''
-+		'    /**'
-+		'     * Sends an a default mode monitoring event with a DefaultModeException case.' 
-+		'     * @param exceptionCase the DefaultModeException case'
-+		'     */'
-+		'    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {'
-+		'        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));'
-+		'    }' 		
-+    			/****************************/
-+		    	/*      prepare method      */  
-+		    	/****************************/		
-+		'' 	      
-+		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
-+		'        super.prepare(map, topologyContext, collector);'
-+		'        _collector = collector;'
-+		'        taskId = topologyContext.getThisTaskId();'
-+		'        algChange = false;'
-+		//TOBEREMOVED!
-+		if(logOutput) {
-+			'counter = 0;'
-+		}
-+		
-+		if(newSwitchLog) {
-+				'String logDir = (String) map.get("LOG.DIRECTORY");' | 8;
-+				'out = DataLogger.getPrintWriter(logDir + "${name}.log");' | 8;
-+		}
-+		if(looseSub and hasGenAlgorithm(fm)) {
-+		'//Enable the namespace of underlying sub-pipelines' | 8;
-+		'installNamespaceLifecycleSignalHandler();' | 8;
-+		}
-+				 //get the task id of the destination nodes
-+				 for(String dest : destinations) {
-+				     String compName;
-+				     if (subAlgName != "") {
-+				         compName = "${firstToUpperCase(toIdentifier(subAlgName))}${firstToUpperCase(dest)}"; 
-+				     } else {
-+				         compName = directEmitDestinationEltName(fe.output, dest);
-+				     }
-+				 	'taskId${firstToUpperCase(dest)} = topologyContext.getComponentTasks("${compName}");' | 8;
-+				 	'logger.info("taskIds${firstToUpperCase(dest)} = " + taskId${firstToUpperCase(dest)});' | 8;
-+				 }
-+				 if(destinations.size() != 0) {
-+				 	'${elt.varName()}TaskId = topologyContext.getThisTaskId();' | 8;
-+				 	'logger.info("${elt.varName()}TaskId = " + ${elt.varName()}TaskId);' | 8;
-+				 }
-+				 ''
-+			if(!genInstance) {
-+				produceInputVariable(eltFamily.input, false, fmNameInCapital);
-+			}
-+			if(newSwitch and hasDistAlgorithm(fm)) {
-+				'nimbus_host = (String) map.get(Config.NIMBUS_HOST);' | 8;
-+        		'thrift_port = (int) map.get(Config.NIMBUS_THRIFT_PORT);' | 8;
-+        		'logger.info("The nimubs host is " + nimbus_host + " and the thrift port is " + thrift_port);' | 8;
-+				'id = 0;' | 8;
-+				'both = false;' | 8;
-+				'emit = true;' | 8;
-+				'kryoSer = new KryoSwitchTupleSerializer(map);' | 8;
-+				'queue = new ConcurrentLinkedQueue<ISwitchTuple>();' | 8;
-+				'impNameToConfName = new HashMap<String, String>();' | 8;
-+				'values = new ArrayList<Object>();' | 8;
-+			}
-+			if(genMultiTupleTypes) {
-+				produceResultVariables(fe, true);		    	
-+			} else {
-+				'result = new $fImpName.$fImpOutputName();' | 8;
-+			}
-+				
-+			/** initialize the algorithm based on the default one **/
-+			Algorithm alg;
-+			if(isConfigured(fe.defaultAlgorithm) and fe.defaultAlgorithm != null) {
-+				alg = fe.defaultAlgorithm; //take the configured one
-+			} else {
-+				alg = fm.members.asSequence().first(); //take the first one 
-+			}
-+
-+			String algClsName = algImplName(alg);
-+			String cls = algQualifiedClsName(alg);	
-+			if(newSwitch and hasDistAlgorithm(fm)) {//TODO:auto-generated subtopology has no clas configuration					
-+				String algConfName = alg.name.firstToUpperCase().toIdentifier();
-+				'impNameToConfName.put("$algClsName", "$algConfName");' | 12;
-+			}
-+			'if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {' | 8;
-+			'try {' | 12;
-+			createAlgorithmInstance(destinations, ifName, cls, false, 16);
-+			/* for hardware algorithm to requestion the hardware connections*/
-+			if(isHardwareAlgorithm(alg) and dynamicHWUpload) {
-+				HardwareAlgorithm hwAlg = alg;
-+				requestHardwareConnections(hwAlg, true, hasDistAlgorithm(fm));
-+			}
-+			
-+			
-+				setDefaultParameterValue(alg.parameters, "map", "alg", 16);
-+				'if (alg != null) {' | 16;
-+				'            	alg.switchState(State.ACTIVATE); //activate the current algorithm'
-+				'}' | 16;
-+				if (initByAdaptation) {
-+				'		    	sendAlgorithmChangeEvent("${algImplName(alg)}", null);' //TODO qualified class name instead of class name
-+				}
-+			
-+			if(genMultiTupleTypes) {
-+	    		if(hasDistAlgorithm(fm)) {//only generated for subtopology-based algorithm in the new version of the code
-+	    			produceStreamId(fm, false);
-+	    		}
-+			} else {
-+				if (!isManualSubtopology(alg)) {
-+					'streamId = "$streamId";' | 20;
-+		        } else {
-+		         	topoStreamId = topoStreamId + "1" + topoStream; //.........have to adjust, for now hardcode to initial the first topo streamId			         			        
-+					'streamId = "$topoStreamId";' | 20;
-+	        	}
-+			}
-+				
-+			 String spoutName = alg.name;
-+			 String pipeline;
-+			 if(alg.type() == "SubPipelineAlgorithm") {//for the generated sub-pipeline to use the sub-pipeline name
-+			 	SubPipelineAlgorithm subAlg = alg;
-+			 	spoutName = subAlg.subPipeline.name;
-+			 	pipeline = spoutName;
-+			 }
-+			 if(!looseSub) {
-+			 	pipeline = topoName;
-+			 }
-+		     if(newSwitch and hasDistAlgorithm(fm)) { 
-+		     	 'originalAlg = "$algConfName";' | 16; //initialize with the first algorithm 
-+		     	 'targetAlg = "$algConfName";'	| 16; //initialize with the first algorithm 
-+		         'if(alg instanceof ITopologyCreate) {' | 16;
-+            		'subTopologySpoutName = "${firstToUpperCase(toIdentifier(alg.name))}Intermediary";' | 20;
-+        		'}' | 16;
-+				'host${toIdentifier(firstToUpperCase(alg.name))} = initSubtopologyConnection("$pipeline", subTopologySpoutName); // get the executor host' | 16;
-+			 }
-+			 'algChange = true;' | 16;		
-+			 catchThrowable(12);	 
-+			 '}' | 8;
-+			 if(newSwitch and !forSubPipeline and hasDistAlgorithm(fm)) {
-+				'synQueue = new SynchronizedQueue<ISwitchTuple>(queue, QUEUE_SIZE);' | 8;
-+			}
-+			 if(looseSub and !forSubPipeline and hasSubPipeline) {
-+			 	'genSer = new KryoGeneralTupleSerializer(map); ' | 8;
-+			 	'swiSer = new KryoSwitchTupleSerializer(map); ' | 8;
-+				'values = new ArrayList<Object>();' | 8; 
-+				/*				
-+			 	if(isGenSubtopology(alg)) { //generated software algorithm
-+			 		SubPipelineAlgorithm subAlg = alg;
-+			 		SubPipeline subPip = subAlg.subPipeline;
-+			 		String subPipName = formulateString(subPip.name);
-+			 		'PortManager portManager = getPortManager();' | 8;
-+        			'PortAssignment assignment = null;' | 8;
-+        			'while(assignment == null && portManager.isConnected()) {' | 8;
-+		        		'try {' | 12;
-+		        			'assignment = portManager.getPortAssignment("$subPipName", "${subPipName}Intermediary", 0, null);' | 16;
-+						'} catch (SignalException e) {' | 12;
-+							'e.printStackTrace();' | 16;
-+						'}' | 12;
-+        			'}' | 8;
-+        			'if(assignment != null) {' | 8;
-+			 			'host${toIdentifier(firstToUpperCase(alg.name))} = assignment.getHost();' | 12;
-+			 			'port${toIdentifier(firstToUpperCase(alg.name))} = assignment.getPort();' | 12;
-+			 		'}' | 8;
-+			 	if(newSwitchLog) {
-+			 		'logger.info("Connecting to the host : " + host${toIdentifier(firstToUpperCase(alg.name))} + ", the port: " + port${toIdentifier(firstToUpperCase(alg.name))});' | 8;
-+		        	'out.println("Connecting to the host : " + host${toIdentifier(firstToUpperCase(alg.name))} + ", the port: " + port${toIdentifier(firstToUpperCase(alg.name))});' | 8;
-+		        	'out.flush();' | 8;
-+		        }
-+			 	'sender = new TupleSender(host${toIdentifier(firstToUpperCase(alg.name))} , port${toIdentifier(firstToUpperCase(alg.name))});' | 8;    
-+				}
-+				* 
-+				*/
-+			 }	
-+			 'initMonitor();' | 8;
-+			 ''
-+			 if(lastHasSubPipeline) { //generate for next consuming bolt
-+			 	'queue = new ConcurrentLinkedQueue<IGeneralTuple>();' | 8;
-+			 	'syn = new SynchronizedQueue<IGeneralTuple>(queue, QUEUE_SIZE);' | 8;
-+//			 	'try {' | 8;
-+        			'TupleReceiverHandler handler = new TupleReceiverHandler(genSer, syn);' | 8;
-+        			produceDynamicPortObtainment();
-+            		'server = new TupleReceiverServer(handler, port);' | 12;
-+//        		'} catch (IOException e1) {' | 8;
-+//            		'e1.printStackTrace();' | 12;
-+//        		'}' | 8;
-+        		'server.start();' | 8;
-+        		''
-+        		'Thread exeTupleThread = new Thread(new ExecuteTuple());' | 8;
-+        		'exeTupleThread.start();' | 8;
-+			 }
-+			 'logger.info("The end of the prepare method.");' | 8;		
-+		'    }'
-+	    ''
-+	    //override the initial monitor
-+	    produceInitMonitor(true, 4);
-+    			/****************************/
-+		    	/*      execute method      */  
-+		    	/****************************/	
-+		if(lastHasSubPipeline) {
-+		'/*' | 4;
-+		'* A thread executes tuples.' | 4;
-+		'*/' | 4;
-+		'public class ExecuteTuple implements Runnable {' | 4;
-+			'@Override' | 8;
-+			'public void run() {' | 8;
-+				'while(true) {' | 12;
-+					'forwardTuple(syn.consume().getValue(0));' | 16;
-+				'}' | 12;
-+			'}' | 8;
-+		'}' | 4;
-+		}
-+		''
-+		'public void forwardTuple(Object tupleItem) {' | 4;  
-+		 	if (genMonitoringProbes) {		
-+			'        startMonitoring();'
-+			}
-+			'        // delegate to family "$fName"'
-+			'if (!firstTuple) {//the first tuple arrived' | 8;
-+				'firstTuple = true;' | 12;
-+				'record = System.currentTimeMillis();' | 12;
-+				//TOBEREMOVED!
-+				if(logOutput) {
-+					'recordOutput = System.currentTimeMillis();' 
-+				}
-+			'}' | 8;
-+			if(!connector and receiveByField and subAlgName != "") {
-+				'String sourceStreamId = tuple.getSourceStreamId();' | 8;
-+			}
-+			 //produce input -- output casting statement
-+			produceInputForTuples(inputToOutputMapping, nameToOutputMap, elt, lastElt);		
-+	
-+			'if(!(alg instanceof ITopologyCreate)) {' | 8; //TODO check result!=null ?
-+			if(debug) {
-+			'logger.info("Emitting data with streamId: " + streamId + ", data:" + result);' | 12;		
-+			}
-+	        if (genMultiOutputs) {
-+	        	if(genMultiTupleTypes) {
-+	        		produceMultipleOutputs(elt, tupleToGrouping, 12);
-+	        	} else {
-+		            'eu.qualimaster.base.algorithm.IOutputItemIterator<$ifOutputName> iter = result.iterator();' | 12;
-+				    'iter.reset();' | 12;
-+				    'while (iter.hasNext()) {' | 12;
-+				    '$ifOutputName out = iter.next();' | 16;
-+				    'if(out != null) {' | 16;
-+		            '_collector.emit(streamId, new Values(out));' | 20; 
-+		            '}' | 16;
-+				    '}' | 12;
-+			    }
-+			} else {
-+	           	 '_collector.emit(streamId, new Values(result));' | 12; 
-+			}
-+			'}' | 8;
-+	
-+			'//		 _collector.ack(tuple);'
-+	        if (genMonitoringProbes) {	
-+			'        endMonitoring();'
-+			}
-+		'}' | 4;
-+		''
-+        '    @Override'
-+        if (loadShedding) {
-+        '    protected void doExecute(Tuple tuple) {'
-+		} else {
-+        '    public void execute(Tuple tuple) {'        
-+        }		
-+        	'forwardTuple(tuple.getValue(0));' | 8;
-+        	if(newSwitch and forSubPipeline) {//acknowledge when it's using the switch for a sub-pipeline
-+        		'_collector.ack(tuple);' | 8;
-+        	}
-+		'    }'
-+	    ''
-+    			/********************************/
-+		    	/* notifyParameterChange method */  
-+		    	/********************************/	    
-+		sequenceOf(Parameter) parameters = fm.parameters;	           
-+        if(fm.parameters.isConfigured() and parameters.size()>0 or (newSwitch and hasDistAlgorithm(fm))) {
-+			'@Override' | 4;
-+			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
-+			'try {' | 8;
-+			'for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {' | 8;
-+			'ParameterChange para = signal.getChange(i);' | 12;			
-+			'switch (para.getName()) {' | 12;			
-+			for(Parameter p : parameters) {
-+				String paraName = p.name;
-+				String type = parameterTypeName(p);				
-+				'case "$paraName" :' | 16;
-+				Integer indent = 16;
-+				if(formatException(type)) {
-+					indent = 20;
-+					'try {' | indent;
-+				}
-+				'System.out.println("Received parameter changing signal $paraName");' | indent+4;
-+				'alg.setParameter${paraName.firstToUpperCase()}(para.get${type.firstToUpperCase()}Value()); ' | indent+4;
-+				'sendParameterChangeEvent("$paraName", para.get${type.firstToUpperCase()}Value(), signal.getCauseMessageId());' | indent+4;
-+				if(formatException(type)) {
-+					'} catch (ValueFormatException e) {' | indent;
-+						'e.printStackTrace();' | indent+4;
-+					'}' | indent;
-+				} else {
-+					indent = indent+4;
-+				}
-+				'break;' | indent;
-+				}
-+				//original plain switch code
-+				if(newSwitch and hasDistAlgorithm(fm)) {
-+					'case "synchronized": //for switching' | 16; //fixed signal for switching
-+					if(newSwitchLog) {
-+	                    'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal synchronized: " + queue.size());' | 20;
-+	                	'out.flush();' | 20;
-+	                }
-+	                    'emit = true;' | 20;
-+	                    'sendAlgorithmChangeEvent(alg.getClass().getSimpleName(), null);' | 20;
-+	                    Integer indent = 16;
-+	                    /* 
-+	                    if(!looseSub) {
-+	                    'while(!queue.isEmpty()) {' | 20;
-+	                    'if(emit && !both && !queue.isEmpty()) {' | indent+8;
-+					    	'byte[] bytes = kryoSer.serialize(queue.poll());' | indent+12;
-+						    for(Algorithm alg : fm.members) {
-+					    		String algClsName = algImplName(alg);	
-+					    		String aName = alg.name.firstToUpperCase().toIdentifier();
-+					    		impNameToConfName.add(algClsName, aName);
-+						    	'if(alg instanceof $algClsName) {' | indent+12;
-+									'sendTo${aName}(bytes);' | indent+16;
-+						    	'}' | indent+12;
-+			        		}
-+					    '}' | indent+8;
-+					    '}' | 20;
-+					    'queue.notifyAll();' | 20;
-+					    }
-+					    * 
-+					    */
-+	                    'break;' | 20;
-+	                  'case "stopHWAlg": //stop the hardware algorithm' | 16;
-+	                  	 if(newSwitchLog) {
-+		                    'out.println(Calendar.getInstance().getTimeInMillis() + "Received stopHWAlg signal!!");' | 20;
-+		                	'out.flush();' | 20;
-+		                }
-+		                if(hasHardwareAlgorithm(fm)) {
-+	                    for(Algorithm alg : fm.members) {
-+	                    	if(isHardwareAlgorithm(alg)) {	                    		
-+		    					String algClsName = algImplName(alg);	
-+	                    		'if(alg instanceof $algClsName) {' | 20; 
-+	                    			'if(hardwareConnection != null) {' | 24;
-+	                    				'try {' | 28;
-+	                    				if(newSwitchLog) {
-+						                    'out.println(Calendar.getInstance().getTimeInMillis() + "Stopping the hardware algorithm " + originalAlg);' | 20;
-+						                	'out.flush();' | 20;
-+						                }
-+	                    				'hardwareConnection.stopAlgorithm(originalAlg);' | 32;
-+	                    				'hardwareConnection.stopServer();//to be deleted, just for test' | 32;
-+	                    				'hardwareConnection.close();' | 32;
-+	                    				'} catch (IOException e) {' | 28;
-+	                    					'e.printStackTrace();' | 32;
-+	                    				'}' | 28;
-+	                    			'}' | 24;
-+	                    		'}' | 20;
-+	                    	}
-+	                    }
-+	                    '//if switch back to software algorithm, the hardware connection should be closed.' | 20;
-+	                    }
-+                }
-+			'}' | 12;
-+			'}' | 8;
-+			catchThrowable(8);
-+			'}' |4;		
-+		}
-+
-+				/********************************/
-+				/* notifyAlgorithmChange method */
-+				/********************************/	
-+	Integer algTopoCount = 1;
-+		'@Override' | 4;
-+		'public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {' | 4;
-+		'logger.info("Received algorithm switching signal " + signal.getAlgorithm());' | 8;	
-+		if(newSwitchLog and hasDistAlgorithm(fm)) {
-+		'out.println(Calendar.getInstance().getTimeInMillis() + "Received algorithm switching signal " + signal.getAlgorithm());' | 8;	
-+		'out.flush();' | 8;
-+		}
-+		'try {' | 8;
-+		'switch (signal.getAlgorithm()) {' | 8;	
-+		for(Algorithm alg : fm.members) {
-+			String algClsName = algImplName(alg);
-+			String algName = alg.name;
-+			String cls = algQualifiedClsName(alg);								
-+	     	/* generated for subtopology (distributed) algorithms */    
-+		    if(isDistAlgorithm(alg)) { 
-+		    	topoStreamId = elt.varName();
-+		    	topoStreamId = topoStreamId + "$algTopoCount" + topoStream;
-+		    	if(algClsName != algName) {
-+				'case "$algName":' | 12;
-+				}
-+				'case "$algClsName":' | 12;
-+				if(newSwitchLog and hasDistAlgorithm(fm)) {
-+					'out.println(Calendar.getInstance().getTimeInMillis() + "Is it the first change? " + algChange);' | 16;	
-+					'out.flush();' | 16;
-+				}
-+				'logger.info("Is it the first change? " + algChange);' | 16;
-+				'if(!algChange || !(alg instanceof $algClsName)) {' | 16;
-+				'logger.info("Changing to the algorithm: " + signal.getAlgorithm());' | 20;
-+				if(newSwitchLog and hasDistAlgorithm(fm)) {
-+					'out.println(Calendar.getInstance().getTimeInMillis() + "Changing to the algorithm: " + signal.getAlgorithm());' | 20;	
-+					'out.flush();' | 20;
-+				}
-+				if(!newSwitch) {
-+					'if(alg != null) {' | 20;
-+						'alg.switchState(State.PASSIVATE); //passivate the previous algorithm' | 24;
-+					'}' | 20;
-+				}
-+		        createAlgorithmInstance(destinations, ifName, cls, true, 20);
-+				/*** Hardware algorithm ***/
-+				if(isHardwareAlgorithm(alg) and dynamicHWUpload) {
-+					HardwareAlgorithm hwAlg = alg;
-+					requestHardwareConnections(hwAlg, false, hasDistAlgorithm(fm));
-+				}
-+				
-+				//wait the port assignment
-+				if(looseSub and isGenSubtopology(alg)) { //generated software algorithm				
-+			 		SubPipelineAlgorithm subAlg = alg;
-+			 		SubPipeline subPip = subAlg.subPipeline;
-+			 		String subPipName = formulateString(subPip.name);
-+			 		'PortManager portManager = getPortManager();' | 20;
-+        			'PortAssignment assignment = null;' |20;
-+        			'while(assignment == null && portManager.isConnected()) {' | 20;
-+		        		'try {' | 24;
-+		        			'assignment = portManager.getPortAssignment(getPipeline(), "${alg.name}Intermediary", 0, null);' | 28;
-+						'} catch (SignalException e) {' | 24;
-+							'e.printStackTrace();' | 28;
-+						'}' | 24;
-+        			'}' | 20;
-+        			'if(assignment != null) {' | 20;
-+			 			'host${toIdentifier(firstToUpperCase(alg.name))} = assignment.getHost();' | 24;
-+			 			'port${toIdentifier(firstToUpperCase(alg.name))} = assignment.getPort();' | 24;
-+			 		'}' | 20;
-+			 	if(newSwitchLog) {
-+			 		'logger.info("Connecting to the host : " + host${toIdentifier(firstToUpperCase(alg.name))} + ", the port: " + port${toIdentifier(firstToUpperCase(alg.name))});' | 20;
-+		        	'out.println("Connecting to the host : " + host${toIdentifier(firstToUpperCase(alg.name))} + ", the port: " + port${toIdentifier(firstToUpperCase(alg.name))});' | 20;
-+		        	'out.flush();' | 20;
-+		        }
-+			 	'sender = new TupleSender(host${toIdentifier(firstToUpperCase(alg.name))} , port${toIdentifier(firstToUpperCase(alg.name))});' | 20; 
-+			 	
-+			 	//Algorithm specific -- only for the correlation algorithms!!!
-+			 	if(sendSymbolList) {
-+					'//send the symbolList explicitly only for the correlation algorithms'
-+					'if(iTupleSymbolList != null) {'
-+                    'List<Object> list = new ArrayList<Object>();'
-+                    'list.add(iTupleSymbolList);'
-+                    'ISwitchTuple symbolTuple = new SwitchTuple(id, list);'
-+                    'byte[] bytes = kryoSer.serialize(symbolTuple);'
-+                    'sendTo${toIdentifier(firstToUpperCase(alg.name))}(bytes);'
-+                	'}'
-+				}   
-+				}
-+				
-+				if(newSwitch) {
-+					if(!looseSub) {
-+						'subTopologySpoutName = "${firstToUpperCase(toIdentifier(alg.name))}Intermediary";' | 20;
-+						'host${toIdentifier(firstToUpperCase(alg.name))} = initSubtopologyConnection("$topoName", subTopologySpoutName);' | 20;
-+					}
-+					'startRecord = Calendar.getInstance().getTimeInMillis();' | 20;
-+					'targetAlg = "${firstToUpperCase(toIdentifier(alg.name))}";' | 20;
-+					'if(algChange) { //switch algorithm change' | 20;
-+						'duration = Math.max(500, signal.getIntParameter(AlgorithmChangeParameter.WARMUP_DELAY, DEFAULT_WARMUP_DELAY));' | 24;
-+						'both = true;' | 24;	
-+						'originalAlg = impNameToConfName.get(alg.getClass().getSimpleName());' | 24;
-+					'}' | 20;
-+					
-+				}
-+				if(genMultiTupleTypes) {
-+					String sId = formulateString(elt.varName()) + formulateString(alg.name);
-+					'streamId = "$sId";' | 20;
-+				} else {
-+					'streamId = "$topoStreamId";' | 20;
-+				}
-+				
-+				if(newSwitch) {
-+					'if(!algChange) {//initialize the algorithm' | 20;
-+						setDefaultParameterValue(alg.parameters, "", "alg", 24);
-+					'} else {//switch to the algorithm' | 20;
-+						setDefaultParameterValue(alg.parameters, "", "algSwitch", 24);
-+					'}' | 20;
-+				} else {
-+					setDefaultParameterValue(alg.parameters, "", "alg", 20);
-+				}
-+				Integer indent = 20;
-+				if(newSwitch) {
-+					'if(!algChange) {' | 20;
-+					indent = indent + 4;
-+				}
-+				'sendAlgorithmChangeEvent("$algClsName", signal.getCauseMessageId());' | indent;
-+				if(newSwitch) {
-+					'}' | 20;
-+				}
-+				
-+				if(!newSwitch) {				
-+				'if(alg != null) {' | 20;	
-+					'alg.switchState(State.ACTIVATE); //activate the current algorithm' | 24;
-+				'}' | 20;	
-+				}
-+				'algChange = true;' | 20;
-+				'}' | 16;
-+			    'break;' | 16;
-+	    	    algTopoCount = algTopoCount + 1;
-+		    } else { 
-+			    /* generated for normal Java algorithms */
-+			    'case "$algClsName":' | 12;
-+				'if (!algChange || !(alg instanceof $algClsName)) {' | 16;
-+				'algChange = true;' | 20;
-+				'if(alg != null) {' | 20;
-+					'alg.switchState(State.PASSIVATE); //passivate the previous algorithm' | 24;
-+				'}' | 20;
-+		        createAlgorithmInstance(destinations, ifName, cls, true, 20);
-+				if(!genMultiTupleTypes) {			
-+					'streamId = "$streamId";'  | 20;	
-+				}
-+				setDefaultParameterValue(alg.parameters, "", "alg", 20);
-+				'sendAlgorithmChangeEvent("$algClsName", signal.getCauseMessageId());' | 20;
-+				'if(alg != null) {' | 20;
-+				'alg.switchState(State.ACTIVATE); //activate the current algorithm' | 24;
-+				'}' | 20;
-+				'}' | 16;
-+				'break;' | 16;
-+		    }						
-+		}		
-+		'}' | 8;	
-+		'super.notifyAlgorithmChange(signal);' | 8;
-+		catchThrowable(8);
-+		'}' | 4;
-+			      
-+        ''
-+				/************************************/
-+				/* checkDisconnect method --not used*/
-+				/************************************/    	
-+	   	Boolean hasHW = false;
-+	    if(hasHW){ // only generate when there is hardware algorithm
-+	    '/**' | 4;
-+	    '* Checks if the FamilyElement connects to hardware.' | 4;
-+	    '* @param alg the family algorithm' | 4;
-+	    '**/' | 4;
-+	    '    protected void checkDisconnect($ifName alg) {'
-+	    '        if (alg instanceof HardwareStub) {'
-+		'            ((HardwareStub) alg).disconnect();'
-+		'            }'
-+	    '    }'
-+	    ''	    	
-+	    }
-+				/****************************/
-+				/*     cleanup method       */
-+				/****************************/
-+	    '    @Override'
-+        '    public void cleanup() {'
-+        '        super.cleanup();'
-+        'if(alg != null) {' | 8;
-+        'alg.switchState(State.TERMINATING);' | 12;
-+        '}' | 8;
-+        if(newSwitch and hasHardwareAlgorithm(fm)) {
-+        'if(hardwareConnection != null) {' | 24;
-+				'try {' | 28;
-+				'hardwareConnection.stopServer();' | 32;
-+				'hardwareConnection.close();' | 32;
-+				'} catch (IOException e) {' | 28;
-+					'e.printStackTrace();' | 32;
-+				'}' | 28;
-+			'}' | 24;
-+			}
-+        '    }'
-+        '' 
-+				/************************************/
-+				/*   declareOutputFields method     */
-+				/************************************/              
-+		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'				
-+		if(genMultiTupleTypes) {
-+			produceStreamIdDeclaration(elt, (subAlgName != ""), 8);
-+		} else {
-+			'        declarer.declareStream("$streamId", new Fields("$ifOutputName"));'
-+			Integer algCount = 1;	
-+			for(Algorithm alg : fm.members) {
-+			    //declare all streamId of the topo-based algorithm
-+			    if(isDistAlgorithm(alg)) { 
-+			    	String algStreamId = elt.varName();
-+			    	algStreamId = algStreamId + "$algCount" + topoStream;
-+			    	'        declarer.declareStream("$algStreamId", new Fields("$ifOutputName"));'
-+			    	algCount = algCount + 1;
-+			    }  
-+			}
-+		}	
-+		'    }'
-+    	''
-+    	
-+    	/********************************* */
-+    	/*******Prepare shut down signal** */
-+    	/********************************* */
-+    	'@Override' | 4;
-+    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
-+        	'super.prepareShutdown(signal);' | 8;
-+        	'if(alg != null) {' | 8;
-+        		'alg.switchState(State.TERMINATING);' | 12;
-+        	'}' | 8;
-+    	'}' | 4;
-+		''
-+    	if((looseSub and hasSubPipeline) or (newSwitch and hasDistAlgorithm(fm)) and !forSubPipeline ) {
-+    	'private String initSubtopologyConnection(String pipeline, String executor) {' | 4;
-+        	'String host = new CollectingTopologyInfo(pipeline, executor, nimbus_host, thrift_port).getExecutorHost();' | 8;
-+        	'logger.info("The executor: " + executor + "-- host: " + host); ' | 8;
-+        	'return host;' | 8;
-+     	'}' | 4;
-+    	''
-+    	}
-+    	if((newSwitch and hasDistAlgorithm(fm)) and !forSubPipeline ) {
-+    	for(Algorithm alg : fm.members) {
-+    		String aName = alg.name.firstToUpperCase().toIdentifier();
-+    		if(isDistAlgorithm(alg)) { //generate only when the algorithm is subtopology
-+    	'public boolean connect${aName}() {' | 4;
-+        	'Socket s = null;' | 8;
-+        	'if(null == socket${aName}) {' | 8;
-+            	'try {' | 12;               
-+	                'System.out.println("FM--Creating the socket with the host: " + host${aName} + " and the port: " + port${aName});' | 16;
-+	                's = new Socket(host${aName},port${aName});' | 16; 
-+	                'output${aName} = new Output(s.getOutputStream());' | 16;
-+	                'socket${aName} = s;' | 16;
-+            	'} catch (UnknownHostException e) {' | 12;
-+                	'e.printStackTrace();' | 16;
-+            	'} catch (IOException e) {' | 12;
-+                	'e.printStackTrace();' | 16;
-+            	'}' | 12;
-+        	'}' | 8;
-+        	'return null != socket${aName};' | 8;
-+    	'}' | 4;
-+    	''
-+    	'public void sendTo${aName}(byte[] bytes) {' | 4;
-+    		'if(connect${aName}()) {' | 8;
-+    			'try {' | 12;
-+				'output${aName}.writeInt(bytes.length);' | 16;
-+				'output${aName}.writeBytes(bytes);' | 16;
-+				'output${aName}.flush();' | 16;
-+				'emitted(bytes);' | 16;
-+				'} catch (KryoException e) {' | 12;
-+					'e.printStackTrace();' | 16;
-+				'}' | 12;
-+			'}'| 8;
-+    	'}' | 4;
-+    	}
-+    	}
-+    	}
-+    	'}'
-+    }       
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareAlgorithmSubTopology.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareAlgorithmSubTopology.vtl
-new file mode 100644
-index 0000000..8fbf0e5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareAlgorithmSubTopology.vtl
-@@ -0,0 +1,112 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormHardwareAlgorithmSubTopology(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm, String pipelineName, String algName) {
-+	def main(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm, String pipelineName, String algName) {
-+		String fName = family.name;
-+		String ifName = "I" + fName.firstToUpperCase();
-+		String outputImpName;
-+		String tupleName; 
-+		for(Tuple t : family.output) {
-+			tupleName = t.name; // assume that we only have one type of Tuple in the output of the family
-+			outputImpName = fName + "${firstToUpperCase(tupleName)}Output";
-+		}
-+
-+		HardwareAlgorithm hwAlg = algorithm;
-+		Integer senderParallelism = hwAlg.senderParallelism;
-+		Integer receiverParallelism = hwAlg.receiverParallelism;
-+		'package eu.qualimaster.algorithms.${firstToUpperCase(toIdentifier(algName))};'
-+		''
-+		'import eu.qualimaster.base.algorithm.ITopologyCreate;'
-+		'import eu.qualimaster.base.algorithm.SubTopologyOutput;'
-+		'import eu.qualimaster.families.inf.$ifName;'
-+		'import eu.qualimaster.observables.IObservable;'
-+		'import backtype.storm.topology.TopologyBuilder;'
-+		'import backtype.storm.Config;'
-+		'import eu.qualimaster.infrastructure.PipelineOptions;'
-+		''
-+		'public class ${firstToUpperCase(toIdentifier(algName))}SubTopology implements ITopologyCreate, $ifName {'
-+			'final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(${firstToUpperCase(toIdentifier(algName))}SubTopology.class);' | 4;
-+			'private String pipelineName = "$pipelineName";' | 4;
-+			''
-+			'public SubTopologyOutput createSubTopology(TopologyBuilder topologyBuilder,
-+            Config config, String prefix, String input, String streamId) {' | 4;
-+                'String keyPrefix = prefix + ".${hwAlg.name}.";' | 8;
-+                'String senderKey = keyPrefix + "sender";' | 8;
-+                'String receiverKey = keyPrefix + "receiver";' | 8;
-+                'int senderParallelism = PipelineOptions.getExecutorParallelism(config, senderKey, ${hwAlg.senderParallelism});' | 8;
-+                'int senderTasks = PipelineOptions.getTaskParallelism(config, senderKey, ${defaults(hwAlg.senderNumTasks, hwAlg.senderParallelism)});' | 8;
-+                'int receiverParallelism = PipelineOptions.getExecutorParallelism(config, receiverKey, ${hwAlg.receiverParallelism});' | 8;
-+                'int receiverTasks = PipelineOptions.getTaskParallelism(config, receiverKey, ${defaults(hwAlg.receiverNumTasks, hwAlg.receiverParallelism)});' | 8;
-+                'int totalParallelism = Math.max(senderParallelism, receiverParallelism);' | 8;
-+            	'topologyBuilder.setSpout(prefix + "HardwareConnectionSpout", new HardwareConnectionSpout(prefix + "HardwareConnectionSpout",
-+                        pipelineName, streamId), receiverParallelism).setNumTasks(receiverTasks);' | 8;
-+        		'topologyBuilder.setBolt(prefix + "HardwareConnectionBolt", new HardwareConnectionBolt(prefix + "HardwareConnectionBolt",
-+                        pipelineName), senderParallelism).setNumTasks(senderTasks).shuffleGrouping(input, streamId);' | 8;
-+        		'return new SubTopologyOutput(prefix + "HardwareConnectionSpout", streamId, 1, totalParallelism);' | 8;
-+    		'}' | 4;
-+    		''
-+    		produceForCalculate(family.input, family.output, ifName);
-+    		for (Parameter p : family.parameters) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+	        	'    /**'
-+	        	'     * Sets the algorithm parameter "${paramName}".'
-+	        	'     *'
-+	        	'     * @param value the new value of the algorithm parameter'
-+	        	'     */'
-+	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
-+	        	'    }'
-+	        	''      	
-+	    	}
-+    		'public Double getMeasurement(IObservable observable) {' | 4;
-+        		'return null; ' | 8;
-+    		'}' | 4;
-+			''
-+    		'@Override' | 4;
-+    		'public void switchState(State state) {' | 4;        
-+    		'}' | 4;
-+			''			    		  		
-+		'}'
-+	}
-+	
-+	def produceForCalculate(Tuples inputTuples, Tuples outputTuples, String ifName) {   	 
-+    	 String inputTupleName;
-+    	 String outputTupleName;
-+  	  
-+    	 for(Tuple t : inputTuples){
-+    	    inputTupleName = t.name;
-+    	    inputTupleName = firstToUpperCase(inputTupleName);        	      	 	
-+    	 	String inTypeName = "I${ifName}${inputTupleName}Input";
-+
-+    	 	for(Tuple p : outputTuples){
-+    	 		outputTupleName = p.name;
-+    	        outputTupleName = firstToUpperCase(outputTupleName);    	 		
-+    	 		String outTypeName = "I${ifName}${outputTupleName}Output";  	 
-+    	
-+    	'    /**'
-+    	'     * Calculates the actual <code>result</code> for <code>input</code>.'
-+    	'     *'
-+    	'     * @param input the algorithm input taken from the input stream'
-+    	'     * @param result the result calculated by the algorithm'
-+    	'     */'
-+    	'    @Override'
-+        '    public void calculate(${inTypeName} input, ${outTypeName} result){'
-+        '    }'
-+        ''
-+           }
-+       }
-+    }
-+
-+    //move to commonVTLMethods?
-+    def Integer defaults(DecisionVariable var, Integer deflt) {
-+        Integer result = deflt;
-+        if (var.isConfigured()) {
-+            Integer val = var.getIntegerValue();
-+            if (val > 0) {
-+                result = val;
-+            }
-+        }
-+        result;
-+    }
-+    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionBolt.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionBolt.vtl
-new file mode 100644
-index 0000000..914212a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionBolt.vtl
-@@ -0,0 +1,449 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormHardwareConnectionBolt(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm) {
-+	sequenceOf(String) letters = {"a", "b", "c", "d", "e"}; 
-+	String algName = algorithm.name;
-+	MPCCNode node = algorithm.hwNode;
-+	def main(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm) {
-+		String fName = family.name.firstToUpperCase();
-+		String ifName = "I" + fName.firstToUpperCase();	
-+		'package eu.qualimaster.algorithms.${firstToUpperCase(toIdentifier(algName))};'
-+		''
-+		'import java.io.IOException;'
-+		'import java.io.ByteArrayOutputStream;'
-+		'import java.util.Map;'
-+		'import backtype.storm.task.OutputCollector;'
-+		'import backtype.storm.task.TopologyContext;'
-+		'import backtype.storm.topology.OutputFieldsDeclarer;'
-+		'import backtype.storm.tuple.Tuple;'
-+		'import eu.qualimaster.common.signal.AbstractMonitor;'
-+		'import eu.qualimaster.common.signal.BaseSignalBolt;'
-+		'import eu.qualimaster.base.algorithm.HardwareTransmitter;'
-+		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
-+		'import eu.qualimaster.base.serializer.Parameters.*;'
-+		'import eu.qualimaster.common.signal.ShutdownSignal;'
-+		'import eu.qualimaster.common.signal.ParameterChangeSignal;'	
-+		'import eu.qualimaster.common.signal.ParameterChange;'	
-+		'import eu.qualimaster.common.signal.ValueFormatException;'
-+		'import eu.qualimaster.observables.ResourceUsage;'
-+		if(hwlog) {
-+			'import java.io.PrintWriter;'
-+			'import eu.qualimaster.common.logging.DataLogger;'
-+			'import java.util.Calendar;'
-+		}
-+		if(ackThread) {
-+			'import java.util.Queue;'
-+			'import java.util.concurrent.ConcurrentLinkedQueue;'
-+			'import eu.qualimaster.common.switching.SynchronizedQueue;'
-+		}
-+		produceImportFromInput(family.input, fName, 0);
-+		''
-+		'public class HardwareConnectionBolt extends BaseSignalBolt {'
-+			'final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionBolt.class);' | 4;
-+			'private transient OutputCollector collector;' | 4;
-+			'private String ip;' | 4;
-+			'private int port = 0;' | 4;
-+			'private boolean ready = false;' | 4;
-+			'private transient Queue<Tuple> queueTuple = new ConcurrentLinkedQueue<Tuple>();' | 4;
-+			'private transient HardwareTransmitter hardwareConnection;' | 4;
-+			'private transient ByteArrayOutputStream output = null;' | 4;
-+			'private transient ByteArrayOutputStream paraOutput = null;' | 4;
-+			'private String separator;' | 4;
-+			produceInputVariable(family.input, ifName, 4);
-+			if(hwlog) {
-+				'private transient PrintWriter out = null;' | 4;
-+				'private transient PrintWriter out1 = null;' | 4;
-+				'private int counter = 0;' | 4;
-+				'private long timestampInS = 0;' | 4;
-+			}
-+			if(ackThread) {
-+				'private int size;' | 4;
-+				'private transient DataAcker dataAcker;' | 4;
-+				'private transient Queue<Tuple> queue = new ConcurrentLinkedQueue<Tuple>();' | 4;	
-+				'private transient SynchronizedQueue<Tuple> syn = null;' | 4;
-+			}
-+			''
-+			/*********************** */
-+			/*******Constructor***** */
-+			/*********************** */
-+			'public HardwareConnectionBolt(String name, String namespace) {' | 4;
-+        		'super(name, namespace, $genMonitoringProbes); ' | 8; 
-+    		'}' | 4;
-+    		''
-+    		/************************* */
-+    		/*******prepare method**** */
-+    		/************************* */
-+    		'@SuppressWarnings("rawtypes")' | 4;
-+    		'public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {' | 4;
-+    			'super.prepare(map, topologyContext, outputCollector);' | 8;
-+    			'collector = outputCollector;' | 8;
-+    			'ip = "${node.host}";' | 8; //replace to the ip configuration
-+    			if(hwlog) {
-+        			'counter = 0;' | 8;
-+        			'timestampInS = System.currentTimeMillis()/1000;' | 8;
-+        			'out = DataLogger.getPrintWriter("/var/nfs/spass/hardwareBolt.csv");' | 8;
-+        			'out1 = DataLogger.getPrintWriter("/var/nfs/spass/hardwareBoltResult.csv");' | 8;
-+        		}
-+    			if(!dynamicHWUpload) { //static port
-+        			'port = 2404; //default' | 8; //replace to the port configuration
-+        			'ready = true;' | 8;
-+        		} else {
-+        			'ready = false;' | 8;
-+        		}
-+        		'queueTuple = new ConcurrentLinkedQueue<Tuple>();' | 8;
-+        		'output = new ByteArrayOutputStream();' | 8;
-+        		'paraOutput = new ByteArrayOutputStream();' | 8;
-+        		produceTypesRegistration(family.input, fName, false, 8);
-+        		if(ackThread) {
-+        			'queue = new ConcurrentLinkedQueue<Tuple>();' | 8;
-+        			'size = 50;' | 8;
-+        			'syn = new SynchronizedQueue<Tuple>(queue, size);' | 8;
-+        			'try {' | 8;
-+      					'dataAcker = new DataAcker();' | 12;
-+    				'} catch (Exception e) {' | 8;
-+      					'logger.error("", e);' | 12;
-+    				'}' | 8;
-+    				'Thread dataAckerThread = new Thread(dataAcker);' | 8;
-+    				'dataAckerThread.start();' | 8;
-+        		}
-+        		/* 
-+        		if(dynamicHWUpload) {
-+        			'while(port==0) {//waiting for the dynamic port' | 8;
-+        			'}' | 8;
-+        			if(hwlog) {
-+        				'logger.info("Port is ready and continuing the processing...");' | 8;
-+        				'out.println("Port is ready and continuing the processing...");' | 8;
-+        				'out.flush();' | 8;
-+	        		}
-+        		}
-+        		* 
-+        		*/
-+        		'initMonitor();' | 8;
-+        		'logger.info("The end of the prepare method.");' | 8;
-+    		'}' | 4;
-+    		''
-+    		//override the initial monitor
-+	    	produceInitMonitor(true, 4);
-+	    
-+    		if(ackThread) {
-+    			'public class DataAcker implements Runnable {' | 4;
-+    				'private boolean cont = false;' | 8;
-+    				''
-+    				'public DataAcker() {' | 8;
-+    					'cont = true;' | 12;
-+    				'}' | 8;
-+    				''
-+    				'@Override' | 8;
-+    				'public void run() {' | 8;
-+    					'while(cont) {' | 12;
-+    						'collector.ack(syn.consume());' | 16;
-+    					'}' | 12;
-+    				'}' | 8;
-+    				''
-+    				'public void stop() {' | 8;
-+    					'cont = false;' | 12;
-+    				'}' | 8;
-+    			'}' | 4;
-+    			''
-+    		}
-+    		''
-+    		/************************** */
-+    		/*******execute method***** */
-+    		/************************** */
-+    		'public void execute(Tuple tuple) {' | 4;
-+    			'queueTuple.offer(tuple);' | 8;
-+    			'if(ready) {' | 8;
-+    				'sendTuple();' | 12;
-+    			'}' | 8;        		
-+        	'}' | 4;
-+        	''
-+        	'protected void sendTuple() {' | 4;
-+        		if (genMonitoringProbes) {
-+		            'AbstractMonitor monitor = createThreadMonitor();' | 8;
-+		        }
-+		        'Tuple tuple = queueTuple.poll();' | 8;
-+        		produceInputForTuples(family.input, ifName, 8);
-+        	'}' | 4;
-+			/**************************** */
-+			/*********connect method***** */
-+			/**************************** */
-+			'private boolean connect() {' | 4;
-+        		'if (null == hardwareConnection) {' | 8;
-+	            	'try {' | 12;
-+	                	'hardwareConnection = new HardwareTransmitter(ip, port);' | 16;
-+	                	'logger.info("Created a transmitter connection.");' | 16;
-+	                	if(hwlog) {
-+	                	'out.println("Created a transmitter connection.");' | 16;
-+	                	'out.flush();' | 16;
-+	                	}
-+	            	'} catch (IOException e) {' | 12;
-+	                	'e.printStackTrace();' | 16;
-+	            	'}' | 12;
-+        		'}' | 8;
-+        		'return null != hardwareConnection;' | 8;
-+    		'}' | 4;
-+    		''
-+    		/********************************/
-+		    /* notifyParameterChange method */  
-+		    /********************************/	    
-+		sequenceOf(Parameter) parameters = family.parameters;
-+		String protocol;	           
-+        if(family.parameters.isConfigured()) {
-+			'@Override' | 4;
-+			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
-+			'logger.info("Received the parameter change signal!");' | 8;
-+			if(hwlog) {
-+				'out.println(Calendar.getInstance().getTimeInMillis() + ", Received the parameter change signal!"); ' | 8;
-+				'out.flush();' | 8;
-+			}
-+			'String paraSeparator = null;' | 8;
-+			'try {' | 8;
-+			'for(int i = 0; i < signal.getChangeCount(); i++) {' | 12;
-+			'ParameterChange para = signal.getChange(i);' | 16;	
-+			'paraOutput.reset();' | 16;		
-+			'switch (para.getName()) {' | 16;			
-+			for(Parameter p : parameters) {
-+				DecisionVariable paraVar = p;
-+				String paraVarType = p.type();
-+				String paraName = p.name;
-+				String type = parameterTypeName(p);	
-+				protocol = parameterHwProtocol(p);
-+				'case "$paraName" :' | 20;
-+					'logger.info("Received parameter changing signal $paraName");' | 24;
-+					'$paraVarType ${paraName}Para = new $paraVarType();' | 24;
-+					'${paraName}Para.setName("$paraName");' | 24;
-+					'${paraName}Para.setValue(para.get${type.firstToUpperCase()}Value());' | 24;
-+					'SerializerRegistry.getSerializerSafe("$paraVarType", $paraVarType.class).serializeTo(${paraName}Para, paraOutput);' | 24;
-+					'paraSeparator = "p${protocol}";'	 | 24;
-+					'if (connect()) {' | 24;
-+        	 			'if(paraOutput != null && paraSeparator != null) {' | 28;
-+        	 				'hardwareConnection.sendSeparator(paraSeparator);' | 32;
-+			 				'hardwareConnection.sendData(paraOutput.toByteArray());' | 32;           
-+            			'}' | 28;
-+        			'}' | 24;
-+					'break;' | 24;
-+				}
-+				'case "port": ' | 20;
-+					'logger.info("Received signal port!"); ' | 24;
-+					'port = para.getIntValue();' | 24;
-+					'ready = true;' | 24;
-+					'logger.info("Received signal port!" + port); ' | 24;
-+					'recordOnce(ResourceUsage.USED_CPUS, 1);' | 24;
-+					'recordOnce(ResourceUsage.USED_DFES, 1);' | 24;
-+					if(hwlog) {
-+					'out.println(Calendar.getInstance().getTimeInMillis() + ", Received signal port!" + port); ' | 24;
-+					'out.flush();' | 24;
-+					}
-+					'break;' | 24;
-+					
-+				'case "omit": ' | 20;
-+					'logger.info("Received signal omit, sending the omit message to hardware!!");' | 24;
-+					if(hwlog) {
-+					'out.println(Calendar.getInstance().getTimeInMillis() + ", Received signal omit, sending the omit message to hardware!!");' | 24;
-+					'out.flush();' | 24;
-+					}
-+					'paraSeparator = "cc";'	 | 24;
-+					'if (connect()) {' | 24;
-+        	 			'hardwareConnection.sendSeparator(paraSeparator);' | 32;
-+        			'}' | 24;
-+        			'break;' | 20;
-+        			
-+        		'case "flush": ' | 20;
-+					'logger.info("Received signal flush, sending the flush message to hardware!!");' | 24;
-+					if(hwlog) {
-+					'out.println(Calendar.getInstance().getTimeInMillis() + ", Received signal flush, sending the flush message to hardware!!");' | 24;
-+					'out.flush();' | 24;
-+					}
-+					'if (connect()) {' | 24;
-+        	 			'hardwareConnection.sendFlushMessage();' | 32;
-+        			'}' | 24;
-+        			'break;' | 20;
-+        				
-+        			'}' | 16;
-+				'}' | 12;
-+				'} catch (ValueFormatException e) {' | 8;
-+				'e.printStackTrace();' | 12;
-+				'} catch (IOException e) {' | 8;
-+				'e.printStackTrace();' | 12;
-+				'}' | 8;
-+			'}' |4;		
-+		}
-+    		''
-+    		/******************************** */
-+    		/****declareOuputFields method*** */
-+    		/******************************** */
-+    		'public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {' | 4;
-+    		'}' | 4;
-+    		''
-+    		
-+    		/********************************* */
-+	    	/*******Prepare shut down signal** */
-+	    	/********************************* */
-+	    	'@Override' | 4;
-+	    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
-+	        	'super.prepareShutdown(signal);' | 8;
-+	        	'dataAcker.stop();' | 8;
-+	        	'try {' | 8;
-+        			'if(hardwareConnection != null) {' | 12;
-+                        'hardwareConnection.sendCloseMessage();' | 16;
-+                        'hardwareConnection.close();' | 16;  
-+                 	'}' | 12;        		
-+            		'if(output != null) {' | 12;
-+            			'output.close();' | 16;
-+            		'}' | 12;
-+            		'if(paraOutput != null) {' | 12;
-+            			'paraOutput.close();' | 16;
-+            		'}' | 12;
-+        		'} catch (IOException e) {' | 8;
-+            		'e.printStackTrace();' | 12;
-+        		'}' | 8;
-+        		'recordOnce(ResourceUsage.USED_CPUS, 0);' | 8;
-+				'recordOnce(ResourceUsage.USED_DFES, 0);' | 8;
-+	    	'}' | 4;
-+	    	''
-+    		'@Override' | 4;
-+    		'public void cleanup() {' | 4;
-+        		'super.cleanup();' | 8;
-+        		'try {' | 8;
-+        			'if(hardwareConnection != null) {' | 12;
-+                        'hardwareConnection.sendCloseMessage();' | 16;
-+                        'hardwareConnection.close();' | 16;  
-+                 	'}' | 12;
-+                 	'if(output != null) {' | 12;
-+            			'output.close();' | 16;
-+            		'}' | 12;
-+            		'if(paraOutput != null) {' | 12;
-+            			'paraOutput.close();' | 16;
-+            		'}' | 12;
-+        		'} catch (IOException e) {' | 8;
-+            		'e.printStackTrace();' | 12;
-+        		'}' | 8;
-+    		'}' | 4;    		   		
-+		'}'
-+	}
-+
-+	def produceInputForTuples(Tuples tuples, String ifName, Integer indent) {	
-+		'if(tuple != null) {' | indent - 4;
-+		String inputInfName; //input interface name	
-+		String inputImpName;		     
-+		
-+		String tupleName;
-+		Boolean multiStream = false;
-+
-+		Integer tuplesSize = tuples.size();
-+		Integer innerIndent = indent;
-+		if(tuplesSize > 1){
-+			multiStream = true;
-+			innerIndent = indent + 4;
-+		}
-+		String letter;
-+		Integer counter = 0;
-+		for(Tuple t : tuples) {
-+			//get the tuple name
-+			tupleName = t.name;			
-+			//get input interface name
-+			inputInfName = "I" + ifName + "${firstToUpperCase(tupleName)}Input";
-+			inputImpName =ifName + "${firstToUpperCase(tupleName)}Input";
-+			letter = letters.get(counter);									
-+			if(multiStream){
-+				'if(tuple.getValue(0) instanceof $inputInfName) {' | indent;
-+			}
-+			'if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {'
-+			'separator = "d${letter}";' | innerIndent;
-+			'input${firstToUpperCase(tupleName)} = ($inputInfName)tuple.getValue(0);' | innerIndent;
-+			/* 
-+			if(hwlog) {
-+				'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending data to hardware: "' | indent;
-+	    		for(Field f : t.fields) {
-+					 String fname = toIdentifier("${f.name}");
-+	    			 String mname = firstToUpperCase(fname);
-+	    	         '+ ", $mname: "+ input${firstToUpperCase(tupleName)}.get${mname}()' | indent;
-+				 }
-+				 ');' | indent;
-+	    		'out.flush();' | indent;
-+	    		'logger.info(Calendar.getInstance().getTimeInMillis() + ", Sending data to hardware: "' | indent;
-+	    		for(Field f : t.fields) {
-+					 String fname = toIdentifier("${f.name}");
-+	    			 String mname = firstToUpperCase(fname);
-+	    	         '+ ", $mname: "+ input${firstToUpperCase(tupleName)}.get${mname}()' | indent;
-+				 }
-+				 ');' | indent;
-+			}
-+			* 
-+			*/
-+			
-+			'try {' | innerIndent;
-+				'output.reset();' | innerIndent + 4;
-+		    	'SerializerRegistry.getSerializerSafe("$inputImpName", $inputInfName.class).serializeTo(input${firstToUpperCase(tupleName)}, output);' | innerIndent + 4;
-+			 '} catch (IOException e) {' | innerIndent;
-+            	'e.printStackTrace();' | innerIndent + 4;
-+        	 '}' | innerIndent;
-+        	 '}'
-+			 if(multiStream){
-+			 	'}' | indent;
-+			 }
-+			 counter = counter +1;
-+			 ''		
-+		}	
-+		if(ackEarlier) {
-+			if(ackThread) {
-+			 		'syn.produce(tuple);' | indent;
-+			 	} else {
-+            		'collector.ack(tuple);' | indent;
-+            	}
-+		}
-+		'if (connect()) {' | indent;
-+        	 'if(output != null && separator != null) {' | indent + 4;
-+        	 	if (genMonitoringProbes) {
-+				  'monitor.startMonitoring();' | indent + 8;
-+		        }
-+		        if(hwlog) {
-+					'long now = System.currentTimeMillis();' | indent+24;
-+                    'if(timestampInS == now/1000) {' | indent+24;
-+                    	'counter++;' | indent+28;
-+                    '} else {' | indent+24;
-+                    	'out1.println(timestampInS + " " + counter);' | indent+28;
-+						'out1.flush();' | indent+28;
-+                    	'timestampInS = now/1000;' | indent+28;
-+                    	'counter = 1;' | indent+28;
-+                    '}'  indent+24;
-+				}
-+        	 	'hardwareConnection.sendSeparator(separator);' | indent + 8;
-+			 	'hardwareConnection.sendData(output.toByteArray());' | indent + 8;  
-+			 	if (genMonitoringProbes) {
-+				  'monitor.endMonitoring(tuple);' | indent + 8;
-+		        }
-+			 	if(!ackEarlier) {
-+				 	if(ackThread) {
-+				 		'syn.produce(tuple);' | indent + 8;
-+				 	} else {
-+	            		'collector.ack(tuple);' | indent + 8;
-+	            	}
-+            	}
-+            '}' | innerIndent + 4;
-+        '}' | innerIndent;	
-+      	'}' | indent - 4;						
-+	}
-+	
-+	def produceInputVariable(Tuples tuples, String ifName, Integer indent) {
-+		String tupleName;
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			String inputInfName = 'I' + ifName + "${firstToUpperCase(tupleName)}Input";
-+			'private transient $inputInfName input${firstToUpperCase(tupleName)} = null;' | indent;
-+		}
-+	}
-+	
-+	def produceImportFromInput(Tuples tuples, String fName, Integer indent) {
-+		String ifName = 'I' + fName;
-+		String tupleName;
-+		'import eu.qualimaster.families.inf.${firstToUpperCase(toIdentifier(ifName))}.*;'
-+		'import eu.qualimaster.families.imp.${firstToUpperCase(toIdentifier(fName))}.*;'
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			String inputInfName = ifName + "${firstToUpperCase(tupleName)}Input";
-+			'import eu.qualimaster.families.inf.${firstToUpperCase(toIdentifier(ifName))}.I$inputInfName;' | indent;
-+			'import eu.qualimaster.families.imp.${firstToUpperCase(toIdentifier(fName))}.$inputInfName;' | indent;
-+		}
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionSpout.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionSpout.vtl
-new file mode 100644
-index 0000000..36af0bb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormHardwareConnectionSpout.vtl
-@@ -0,0 +1,677 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormHardwareConnectionSpout(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm, String topoName) {
-+	Boolean fastThread = false;
-+	String fName = family.name.firstToUpperCase();
-+    String ifName = "I" + fName.firstToUpperCase();
-+	String tupleName;
-+	String outputImpName;
-+	String algName = algorithm.name;
-+	MPCCNode node = algorithm.hwNode;
-+	String algClsName;	
-+	def main(Configuration config, FileArtifact target, Family family, HardwareAlgorithm algorithm, String topoName) {
-+		algClsName = algImplName(algorithm);
-+		'package eu.qualimaster.algorithms.${firstToUpperCase(toIdentifier(algName))};'
-+		''
-+		'import java.io.IOException;'
-+		'import java.io.ByteArrayOutputStream;'
-+		'import java.io.ByteArrayInputStream;'
-+		'import java.util.ArrayList;'
-+		'import java.util.List;'
-+		'import java.util.Map;'
-+		'import java.util.HashMap;'
-+		'import backtype.storm.spout.SpoutOutputCollector;'
-+		'import backtype.storm.task.TopologyContext;'
-+		'import backtype.storm.topology.OutputFieldsDeclarer;'
-+		'import backtype.storm.tuple.Tuple;'
-+		'import backtype.storm.tuple.Fields;'
-+		'import backtype.storm.tuple.Values;'
-+		'import eu.qualimaster.common.signal.BaseSignalSpout;'
-+		'import eu.qualimaster.base.algorithm.HardwareTransmitter;'
-+		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
-+		'import eu.qualimaster.common.signal.ParameterChangeSignal;'
-+		'import eu.qualimaster.common.signal.ShutdownSignal;'	
-+		'import eu.qualimaster.common.signal.ParameterChange;'	
-+		'import eu.qualimaster.common.signal.ValueFormatException;'
-+		'import eu.qualimaster.common.signal.SignalException;'
-+		'import eu.qualimaster.families.inf.${toIdentifier(ifName)}.*;'
-+		if(hwlog) {
-+			'import java.io.PrintWriter;'
-+			'import eu.qualimaster.common.logging.DataLogger;'
-+			'import java.util.Calendar;'
-+		}
-+		if(emitThread) {
-+			'import java.util.Queue;'
-+			'import java.util.concurrent.ConcurrentLinkedQueue;'
-+			'import eu.qualimaster.common.switching.SynchronizedQueue;'
-+		}
-+		
-+		if(multiHWThread) {
-+			'import eu.qualimaster.common.hardware.IHardwareHandlerCreator;'
-+			'import eu.qualimaster.common.hardware.MultiHardwareThreadsExecutor;'
-+		}
-+
-+		produceImportFromOutput(family.output, fName, 0);
-+		''
-+		'public class HardwareConnectionSpout extends BaseSignalSpout {'
-+			'final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionSpout.class);' | 4;
-+			'private transient SpoutOutputCollector collector;' | 4;
-+			'private String streamId;' | 4;
-+			'private int MAXDATASIZE;' | 4;
-+			'private int taskId;' | 4;
-+			'private int taskNum;' | 4;
-+			'private int taskIndex;' | 4;
-+			'private boolean ready = false;' | 4;
-+			if(multiHWThread) {
-+				'private transient Map<String, List<Integer>> servers = null;' | 4;
-+				'private transient MultiHardwareThreadsExecutor multiExecutor;' | 4; 
-+				'private transient List<Integer> ports = new ArrayList<Integer>();' | 4;
-+			} else {
-+				'private String ip;' | 4;
-+				'private int port = 0;' | 4;
-+				'private byte [] msg = null;' | 4;
-+				'private transient HardwareTransmitter hardwareConnection;' | 4;
-+				'private transient ByteArrayInputStream in = null;' | 4;
-+			}	
-+			produceOutputVariable(family.output, ifName, 4, true);
-+			if(hwlog){
-+				'private transient PrintWriter out = null;' | 4;
-+				'private transient PrintWriter out1 = null;' | 4;
-+				'private int counter = 0;' | 4;
-+				
-+				'private long timestampInS = 0;' //record the output in second
-+			}
-+			if(fastThread) {
-+				'private transient HardwareReceiver hardwareReceiver;' | 4;
-+			}
-+			if(emitThread) {
-+				'private int size;' | 4;
-+				'private transient DataEmitter dataEmitter;' | 4;
-+			}
-+			/*********************** */
-+			/*******Constructor***** */
-+			/*********************** */
-+			'public HardwareConnectionSpout(String name, String namespace, String streamId) {' | 4;
-+        		'super(name, namespace, $genMonitoringProbes); ' | 8; 
-+        		'this.streamId = streamId;' | 8;
-+    		'}' | 4;
-+    		''
-+    		/************************* */
-+    		/*******prepare method**** */
-+    		/************************* */
-+    		'@SuppressWarnings("rawtypes")' | 4;
-+    		'public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutputCollector) {' | 4;
-+    			'super.open(map, topologyContext, spoutputCollector);' | 8;
-+    			'collector = spoutputCollector;' | 8;
-+    			'taskId = topologyContext.getThisTaskId();' | 8;
-+    			'taskNum = topologyContext.getThisWorkerTasks().size();' | 8;
-+    			'taskIndex = topologyContext.getThisTaskIndex();' | 8;
-+    			if(hwlog) {
-+        			'counter = 0;' | 8;
-+        			'out = DataLogger.getPrintWriter("/var/nfs/spass/hardwareSpout-" + taskId +".csv");' | 8;
-+					'out1 = DataLogger.getPrintWriter("/var/nfs/spass/hardwareSpoutResult-" + taskId +".csv");' | 8;     			
-+        		}
-+    			produceOutputVariable(family.output, ifName, 8, false);
-+    			if(multiHWThread) {
-+    				'ports = new ArrayList<Integer>();' | 8;
-+    				if(!dynamicHWUpload) {//static ports
-+        			'ports.add(2405); //replace to the port configuration' | 8;
-+        			'ports.add(2406); //replace to the port configuration' | 8;
-+        			} else {
-+        				'while(ports.size()==taskNum) {//waiting for ports' | 8; //TODO:consider to compare with the requested number of threads
-+	        			'}' | 8;
-+        			}
-+        			'servers = new HashMap<String, List<Integer>>();' | 8;
-+        			'servers.put("${node.host}", ports);' | 8;
-+    			} else {
-+	    			'ip = "${node.host}";' | 8; //replace to the ip configuration
-+	    			if(!dynamicHWUpload) { //static port
-+//only for test---TO BE REMOVED!!!
-+ 
-+'List<Integer> ports = new ArrayList<Integer>();' | 8;
-+'ports.add(2405); //replace to the port configuration' | 8;
-+'ports.add(2406); //replace to the port configuration' | 8;	
-+'ports.add(2407); //replace to the port configuration' | 8;	
-+'ports.add(2408); //replace to the port configuration' | 8;	
-+'port=ports.get(taskIndex);' | 8;
-+ 					
-+    				'ready = true;' | 8;
-+	        		'//port = 2405; //default' | 8; //replace to the port configuration
-+	        		} else { 
-+	        			'ready = false;' | 8;
-+	        			/*
-+	        			'while(port==0) {//waiting for ports' | 8;
-+	        			'}' | 8;
-+	        			if(hwlog) {
-+	        				'logger.info("Port is ready and continuing the processing...");' | 8;
-+	        				'out.println("Port is ready and continuing the processing...");' | 8;
-+	        				'out.flush();' | 8;
-+	        			}
-+	        			* 
-+	        			*/
-+	        		}
-+	        		'msg = new byte[MAXDATASIZE];' | 8;
-+        		}
-+        		if(batchData) {
-+        			'MAXDATASIZE = 8192;' | 8;
-+        		} else {
-+        		'MAXDATASIZE = 16384;' | 8;
-+        		}
-+        		produceTypesRegistration(family.output, fName, true,  8);
-+        		
-+        		if(multiHWThread) {
-+        			'multiExecutor = new MultiHardwareThreadsExecutor(servers, new HardwareReceiverHandler(), ports.size());//TODO:change the default thread number' | 8;
-+        			'multiExecutor.createMultiThreads();' | 8;
-+        		} else {
-+	        		if(fastThread) {
-+	        			'try {' | 8;
-+	      					'hardwareReceiver = new HardwareReceiver();' | 12;
-+	    				'} catch (Exception e) {' | 8;
-+	      					'logger.error("", e);' | 12;
-+	    				'}' | 8;
-+	    				'Thread hardwareConnectionThread = new Thread(hardwareReceiver);' | 8;
-+	    				'hardwareConnectionThread.start();' | 8;
-+	        		}
-+        		}
-+        		if(emitThread) {
-+        			'try {' | 8;
-+      					'dataEmitter = new DataEmitter();' | 12;
-+    				'} catch (Exception e) {' | 8;
-+      					'logger.error("", e);' | 12;
-+    				'}' | 8;
-+    				'Thread dataEmitterThread = new Thread(dataEmitter);' | 8;
-+    				'dataEmitterThread.start();' | 8;
-+        		}
-+        		'initMonitor();' | 8;
-+        		'logger.info("The end of the open method.");' | 8;
-+    		'}' | 4;
-+    		''
-+    		//override the initial monitor
-+	    	produceInitMonitor(false, 4);
-+	    
-+    		if(fastThread) { 
-+    			if(multiHWThread) {
-+    			'public class HardwareReceiverHandler implements IHardwareHandlerCreator {' | 4;   	
-+					'@Override' | 8;
-+					'public Runnable createHandler(String host, int port) {' | 8;
-+						'return new HardwareReceiver(host, port);' | 12;
-+					'}' | 8;
-+    			'}' | 4;
-+    			'' 
-+    			} 			
-+    			'public class HardwareReceiver implements Runnable {' | 4;
-+    				if(multiHWThread) {
-+    					'String ip;' | 8;
-+				    	'int port;' | 8;
-+				    	'byte [] msg = null;' | 8;
-+				    	'ByteArrayInputStream in = null;' | 8;
-+				    	'String str = null;' | 8;
-+				    	'HardwareTransmitter hardwareConnection;' | 8;
-+				    	''
-+				    	'public HardwareReceiver(String ip, int port) {' | 8;
-+				    		'this.ip = ip;' | 12;
-+				    		'this.port = port;' | 12;
-+				    		'msg = new byte[MAXDATASIZE];' | 12;
-+				    	'}' | 8;
-+				    	''
-+				    	produceConnectMethod(8);
-+				    	''
-+				    	'public void close() {' | 8;
-+				    		produceCloseStatement(12);
-+				    	'}' | 8;
-+				    	''
-+    				}
-+    				
-+    				'@Override' | 8;
-+    				'public void run() {' | 8;
-+    				if(multiHWThread) {
-+    					'str = null;' | 12;
-+    				} else {
-+    					'String str = null;' | 12;
-+						if(batchData) {
-+							'String str1 = null;' | 12;
-+							'int k = 0;' | 12;
-+						}
-+					}
-+						if(hwlog) {
-+							'timestampInS = System.currentTimeMillis()/1000;' | 12;			
-+						}
-+    					'while(true) {' | 12;
-+    						'if(ready) {' | 16;
-+    							commonPartForFastThread(20);
-+    						'}' | 16;
-+    					'}' | 12;
-+    				'}' | 8;
-+    			'}' | 4;
-+    			''
-+    		} 
-+    		
-+    		if(emitThread) {
-+    			'public class DataEmitter implements Runnable {' | 4;
-+    				'private boolean cont = false;' | 8;
-+    				''
-+    				'public DataEmitter() {' | 8;
-+    					'cont = true;' | 12;
-+    				'}' | 8;
-+    				''
-+    				'@Override' | 8;
-+    				'public void run() {' | 8;
-+    					'while(cont) {' | 12;
-+    					for(Tuple t : family.output) {
-+    						'collector.emit(streamId, new Values(syn${firstToUpperCase(t.name)}.consume()));' | 16;
-+    					}
-+    					'}' | 12;
-+    				'}' | 8;
-+    				''
-+    				'public void stop() {' | 8;
-+    					'cont = false;' | 12;
-+    				'}' | 8;
-+    			'}' | 4;
-+    			''
-+    		}
-+    		/************************** */
-+    		/*******execute method***** */
-+    		/************************** */
-+    		'public void nextTuple() {' | 4;
-+    		if(!fastThread) {
-+    			'if(ready) {' | 8;
-+    				commonPartForFastThread(8);
-+    			'}' | 8;
-+        		}
-+        	'}' | 4;
-+        	''
-+        	/********************************/
-+		    /* notifyParameterChange method */  
-+		    /********************************/	    
-+			'@Override' | 4;
-+			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
-+				'logger.info("Received the parameter change signal!");' | 8;
-+				if(hwlog) {
-+					'out.println(Calendar.getInstance().getTimeInMillis() + ", Received the parameter change signal!"); ' | 8;
-+					'out.flush();' | 8;
-+				}
-+				'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
-+				'ParameterChange para = signal.getChange(i);' | 12;	
-+				'switch (para.getName()) {' | 12;
-+					if(dynamicHWUpload) {		
-+					'case "port": ' | 16;
-+						'String value = para.getStringValue();' | 20;
-+						'logger.info("Received signal port!" + value + ", taskId: " + taskId); ' | 20;
-+						if(hwlog) {
-+						'out.println("Received signal port!" + value + ", taskId: " + taskId); ' | 20;
-+						'out.flush();' | 20;
-+						}
-+						'String[] portList = value.split(",");' | 20;
-+						if(multiHWThread) {
-+							'for(int j=0; j<portList.length; j++) {' | 20;
-+								'ports.add(Integer.parseInt(portList[j]));' | 24;
-+							'}' | 20;
-+						} else {
-+		            	'port = assignPort(portList, taskIndex);' | 20;
-+		            	'ready = true;' | 20;
-+		            	'logger.info("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex);' | 20;
-+		            	if(hwlog) {
-+							'out.println("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex); ' | 20;
-+							'out.flush();' | 20;
-+						}
-+		            	}
-+						
-+						'break;' | 20;
-+						}
-+						'}' | 14;
-+					'}' | 8;
-+			'}' |4;		
-+		''
-+			/**************************** */
-+			/*********connect method***** */
-+			/**************************** */
-+			if(!multiHWThread) {
-+				produceConnectMethod(4);
-+			}
-+    		
-+    		/******************************** */
-+    		/****declareOuputFields method*** */
-+    		/******************************** */
-+    		'public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {' | 4;
-+    			'outputFieldsDeclarer.declareStream(streamId, false, new Fields("hardwareOutput"));' | 8;
-+    		'}' | 4;  
-+    		''
-+    		/****************************/
-+			/*       close method       */
-+			/****************************/             
-+	        '    @Override'
-+	        '    public void close() {' 
-+	        '        super.close();'
-+	        if(multiHWThread) {
-+	        	produceExecutorCloseStatement(8);
-+	        } else {
-+			    produceCloseStatement(8);
-+			}
-+	        '    }'
-+	        ''
-+    		/********************************* */
-+	    	/*******Prepare shut down signal** */
-+	    	/********************************* */
-+	    	'@Override' | 4;
-+	    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
-+	        	'super.prepareShutdown(signal);' | 8;
-+	        	'dataEmitter.stop();' | 8;
-+	        	if(multiHWThread) {
-+	        		produceExecutorCloseStatement(8);
-+		        } else {
-+				    produceCloseStatement(8);
-+				}
-+	    	'}' | 4;
-+	    	'' 	
-+	    	produceAssignPortMethod(4);	   		
-+		'}'
-+	}
-+	
-+	def produceOutputVariable(Tuples tuples, String ifName, Integer indent, Boolean variable) {
-+		String outputInfName;	
-+		String tupleName;	
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			//get output interface name	
-+			outputInfName = 'I' + ifName + "${firstToUpperCase(tupleName)}Output"; //output interface name		
-+			if(variable) {		
-+				'private transient $outputInfName output${firstToUpperCase(tupleName)} = null;' | indent;	
-+				if(emitThread) {
-+					'private transient Queue<$outputInfName> queue${firstToUpperCase(tupleName)} = new ConcurrentLinkedQueue<$outputInfName>();' | indent;
-+					'private transient SynchronizedQueue<$outputInfName> syn${firstToUpperCase(tupleName)} = null;'	| indent;
-+				}
-+			} else {
-+				if(emitThread) {
-+					'queue${firstToUpperCase(tupleName)} = new ConcurrentLinkedQueue<$outputInfName>();' | indent;
-+					'size = 50;' | indent; 
-+					'syn${firstToUpperCase(tupleName)} = new SynchronizedQueue<$outputInfName>(queue${firstToUpperCase(tupleName)}, size);' | indent;	
-+				}
-+			}			
-+	    }
-+	}
-+	
-+	def produceImportFromOutput(Tuples tuples, String fName, Integer indent) {
-+		String ifName = "I" + fName.firstToUpperCase();
-+		String tupleName;
-+		'import eu.qualimaster.families.imp.${firstToUpperCase(toIdentifier(fName))}.*;'
-+		for(Tuple t : tuples) {
-+			tupleName = t.name;
-+			String outputInfName = ifName + "${firstToUpperCase(tupleName)}Output";
-+			'import eu.qualimaster.families.imp.${firstToUpperCase(toIdentifier(fName))}.$outputInfName;' | indent;
-+			'import eu.qualimaster.families.inf.${firstToUpperCase(toIdentifier(ifName))}.I$outputInfName;' | indent;
-+		}
-+	}
-+	
-+	def commonPartForFastThread(Integer indent) {
-+        	'if (connect()) {' | indent;
-+        	'try {' | indent + 4;
-+        		if(batchData) {
-+        			'msg = hardwareConnection.receiveBatchData(msg, MAXDATASIZE);' | indent+8;
-+        		} else {
-+        			'in = null;' | indent+8;
-+        			if(newHWReceive) {
-+        				'msg = hardwareConnection.receiveData();' | indent+8;
-+        			} else {
-+        				'msg = hardwareConnection.receiveData(msg, pointer);' | indent+8;
-+        			}
-+        		}
-+        		for(Tuple t : family.output) {
-+					tupleName = t.name; // assume that we only have one type of Tuple in the output of the family
-+					outputImpName = ifName + "${firstToUpperCase(tupleName)}Output";
-+					if(hwlog) {
-+						'//out1.println("Received data!" + msg);' | indent+8;
-+                		'//out1.flush();' | indent+8;
-+					}
-+					'if(msg != null) {' | indent+8;							
-+        					'if (msg[0] == \'d\') {' | indent+12;
-+        					'in = new ByteArrayInputStream(msg, 1, msg.length-1);' | indent+12;
-+        					'if (in != null) {' | indent+16;
-+        						if (genMonitoringProbes) {
-+					            	'startMonitoring();' | indent+20;
-+					        	}
-+        						'output${firstToUpperCase(tupleName)} = null;' | indent+20;
-+                    			'output${firstToUpperCase(tupleName)} = SerializerRegistry.getSerializerSafe("$outputImpName", I$outputImpName.class).deserializeFrom(in);' | indent+20;
-+                				'if(output${firstToUpperCase(tupleName)} != null) {' | indent+20;
-+                				/* 
-+                				if(hwlog) {
-+                					'long now = System.currentTimeMillis();' | indent+24;
-+                                    'if(timestampInS == now/1000) {' | indent+24;
-+                                    	'counter++;' | indent+28;
-+                                    '} else {' | indent+24;
-+                                    	'out1.println(timestampInS + " " + counter);' | indent+28;
-+                						'out1.flush();' | indent+28;
-+                                    	'timestampInS = now/1000;' | indent+28;
-+                                    	'counter = 1;' | indent+28;
-+                                    '}'  indent+24;
-+                				}
-+                				* 
-+                				*/
-+                				/* 
-+	                			if(hwlog) { // print the log of the data received from hardware
-+									'out.println(Calendar.getInstance().getTimeInMillis() + ", Receiving data to hardware: "' | indent;
-+						    		for(Field f : t.fields) {
-+										 String fname = toIdentifier("${f.name}");
-+						    			 String mname = firstToUpperCase(fname);
-+						    	         '+ ", $mname: "+ output${firstToUpperCase(tupleName)}.get${mname}()' | indent;
-+									 }
-+									 ');' | indent;
-+						    		'out.flush();' | indent;
-+						    		'logger.info(Calendar.getInstance().getTimeInMillis() + ", Receiving data to hardware: "' | indent;
-+						    		for(Field f : t.fields) {
-+										 String fname = toIdentifier("${f.name}");
-+						    			 String mname = firstToUpperCase(fname);
-+						    	         '+ ", $mname: "+ output${firstToUpperCase(tupleName)}.get${mname}()' | indent;
-+									 }
-+									 ');' | indent;
-+								}
-+								* 
-+								*/
-+									if(emitThread) { //queue the received data
-+										'syn${firstToUpperCase(tupleName)}.produce(output${firstToUpperCase(tupleName)});'  | indent+24;
-+									} else {
-+	                					'collector.emit(streamId, new Values(output${firstToUpperCase(tupleName)}));' | indent+24;
-+	                				}
-+	                				if (genMonitoringProbes) {
-+									  'endMonitoring();' | indent+24;
-+							        }
-+                				'}'| indent+20;
-+                			'}' | indent+16;
-+
-+        					'} else if (msg[0] == \'o\') {' | indent+12;
-+                			'/* HERE PUT THE CODE FOR THE FLUSH PROCESS */' | indent+20;
-+                			if(hwlog) {
-+                			'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending the signal emit to the end bolt!");' | indent+16;
-+                			'out.flush();' | indent+16;
-+                			}
-+                			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+				                        "$topoName", "${algName}EndBolt", "emit", true, null);' | indent+16;
-+				                  'try {' | indent+16;
-+				                    'sendSignal(paraSignal);' | indent+20;
-+				                '} catch (SignalException e) {' | indent+16;
-+				                    'e.printStackTrace();' | indent+20;
-+				                '}' | indent+16;
-+				                
-+        					'} else if (msg[0] == \'f\') {' | indent+12;
-+                			'/* HERE PUT THE CODE FOR THE OMIT PROCESS */' | indent+16;
-+                			if(hwlog) {
-+                			'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending the signal disable to the hw end bolt!");' | indent+16;
-+                			'out.flush();' | indent+16;
-+                			}
-+                			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+				                        "$topoName", "${algName}EndBolt", "disable", true, null);' | indent+16;
-+				                  'try {' | indent+16;
-+				                    'sendSignal(paraSignal);' | indent+20;
-+				                '} catch (SignalException e) {' | indent+16;
-+				                    'e.printStackTrace();' | indent+20;
-+				                '}' | indent+16;
-+                		'}' | indent+12;
-+                	'}' | indent+8;			
-+				}
-+        	'} catch (IOException e) {' | indent+4;
-+        		'logger.info("IOException : " + e.getMessage());' | indent+8;
-+        	'}' | indent+4;
-+        '}' | indent;
-+	}
-+	
-+	def produceConnectMethod(Integer indent) {
-+		'private boolean connect() {' | indent;
-+			'if (null == hardwareConnection) {' | indent+4;
-+	        	'try {' | indent+8;
-+	            	'hardwareConnection = new HardwareTransmitter(ip, port);' | indent+12;
-+	            	'logger.info("Created a receiver connection.");' | indent+12;
-+	            	if(hwlog) {
-+	            	'out.println("Created a receiver connection.");' | indent+12;
-+	            	'out.flush();' | indent+12;
-+	            	}
-+	        	'} catch (IOException e) {' | indent+8;
-+	            	'e.printStackTrace();' | indent+12;
-+	        	'}' | indent+8;
-+			'}' | indent+4;
-+			'return null != hardwareConnection;' | indent+4;
-+		'}' | indent;
-+	}
-+	
-+	def produceCloseStatement(Integer indent) {
-+		'try {' | indent;
-+			'if(hardwareConnection != null) {' | indent+4;
-+                'hardwareConnection.sendCloseMessage();' | indent+8;
-+                'hardwareConnection.close();' | indent+8;  
-+         	'}' | indent+4;  
-+         	'if(in != null) {' | indent+4;
-+    			'in.close();' | indent+8;
-+    		'}' | indent+4;
-+		'} catch (IOException e) {' | indent;
-+    		'e.printStackTrace();' | indent+4;
-+		'}' | indent;
-+	}
-+	
-+	def produceExecutorCloseStatement(Integer indent) {
-+		'List<Runnable> threads = multiExecutor.getThreadList();' | indent;
-+        'for(int i=0; i<threads.size(); i++) {' | indent;
-+        	'HardwareReceiver receiver = (HardwareReceiver) threads.get(i);' | indent+4;
-+        	'receiver.close();' | indent+4;
-+        '}' | indent;
-+	}
-+	
-+	def produceAssignPortMethod(Integer indent) {
-+		'protected int assignPort(String[] ports, int index) {' | indent;
-+    	'//int mode = index % ports.length;'  | indent+4;
-+    	'return Integer.parseInt(ports[index]);'  | indent+4;
-+    '}' | indent;
-+	}
-+	
-+	def previousReceiveCode(Integer indent) { //store the previous code 
-+		'if(msg != null) {' | indent+8;
-+			if(batchData) {
-+				'str = new String(msg);' | indent+12;
-+				'if(k > 0) {' | indent+12;
-+					'str = str1.concat(str);' | indent+12;
-+				'}' | indent+12;
-+				'while(true) {' | indent+12;
-+				    'if(str.indexOf(\'\\0\') == -1) {' | indent +16;
-+				     	'break;' | indent+20;
-+				    '}' | indent+16;
-+					'in = null;' | indent+16;
-+					'in = new ByteArrayInputStream(str.getBytes(), 1, str.indexOf(\'\\0\')-1);' | indent+16;
-+			} else {
-+				'in = new ByteArrayInputStream(msg);' | indent+12;
-+				'in.skip(1);' | indent+12;
-+				'str = new String(msg, 0, 1);' | indent+12;
-+			}
-+			if(batchData) {
-+				'if (str.startsWith("d")) {' | indent+12;
-+			} else {
-+				'if (str.equalsIgnoreCase("d")) {' | indent+12;
-+			}
-+				'if (in != null) {' | indent+16;
-+					if (genMonitoringProbes) {
-+		            	'startMonitoring();' | indent+20;
-+		        	}
-+					'output${firstToUpperCase(tupleName)} = null;' | indent+20;
-+        			'output${firstToUpperCase(tupleName)} = SerializerRegistry.getSerializerSafe("$outputImpName", I$outputImpName.class).deserializeFrom(in);' | indent+20;
-+    				'if(output${firstToUpperCase(tupleName)} != null) {' | indent+20;
-+    				if(hwlog) {
-+    					'counter++;' | indent+24;
-+    					'out1.println(Calendar.getInstance().getTimeInMillis() + " , " + counter);' | indent+24;
-+    					'out1.flush();' | indent+24;
-+    				}
-+    				/* 
-+        			if(hwlog) { // print the log of the data received from hardware
-+						'out.println(Calendar.getInstance().getTimeInMillis() + ", Receiving data to hardware: "' | indent;
-+			    		for(Field f : t.fields) {
-+							 String fname = toIdentifier("${f.name}");
-+			    			 String mname = firstToUpperCase(fname);
-+			    	         '+ ", $mname: "+ output${firstToUpperCase(tupleName)}.get${mname}()' | indent;
-+						 }
-+						 ');' | indent;
-+			    		'out.flush();' | indent;
-+			    		'logger.info(Calendar.getInstance().getTimeInMillis() + ", Receiving data to hardware: "' | indent;
-+			    		for(Field f : t.fields) {
-+							 String fname = toIdentifier("${f.name}");
-+			    			 String mname = firstToUpperCase(fname);
-+			    	         '+ ", $mname: "+ output${firstToUpperCase(tupleName)}.get${mname}()' | indent;
-+						 }
-+						 ');' | indent;
-+					}
-+					* 
-+					*/
-+						if(emitThread) { //queue the received data
-+							'syn${firstToUpperCase(tupleName)}.produce(output${firstToUpperCase(tupleName)});'  | indent+24;
-+						} else {
-+        					'collector.emit(streamId, new Values(output${firstToUpperCase(tupleName)}));' | indent+24;
-+        				}
-+        				if (genMonitoringProbes) {
-+						  'endMonitoring();' | indent+24;
-+				        }
-+    				'}'| indent+20;
-+    			'}' | indent+16;
-+    		if(batchData) {
-+				'} else if (str.startsWith("o")) {' | indent+12;
-+			} else {
-+				'} else if (str.equalsIgnoreCase("o")) {' | indent+12;
-+			}
-+    			'/* HERE PUT THE CODE FOR THE FLUSH PROCESS */' | indent+20;
-+    			if(hwlog) {
-+    			'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending the signal emit to the end bolt!");' | indent+16;
-+    			'out.flush();' | indent+16;
-+    			}
-+    			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+	                        "$topoName", "${algName}EndBolt", "emit", true, null);' | indent+16;
-+	                  'try {' | indent+16;
-+	                    'sendSignal(paraSignal);' | indent+20;
-+	                '} catch (SignalException e) {' | indent+16;
-+	                    'e.printStackTrace();' | indent+20;
-+	                '}' | indent+16;
-+	        if(batchData) {
-+				'} else if (str.startsWith("f")) {' | indent+12;
-+			} else {
-+				'} else if (str.equalsIgnoreCase("f")) {' | indent+12;
-+			}
-+    			'/* HERE PUT THE CODE FOR THE OMIT PROCESS */' | indent+16;
-+    			if(hwlog) {
-+    			'out.println(Calendar.getInstance().getTimeInMillis() + ", Sending the signal disable to the hw end bolt!");' | indent+16;
-+    			'out.flush();' | indent+16;
-+    			}
-+    			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+	                        "$topoName", "${algName}EndBolt", "disable", true, null);' | indent+16;
-+	                  'try {' | indent+16;
-+	                    'sendSignal(paraSignal);' | indent+20;
-+	                '} catch (SignalException e) {' | indent+16;
-+	                    'e.printStackTrace();' | indent+20;
-+	                '}' | indent+16;
-+    		'}' | indent+12;
-+    		if(batchData) {
-+    			'str = str.substring(str.indexOf(\'\\0\')+1, str.length());' | indent+12;
-+    		} else if(!newHWReceive) {
-+        		'pointer = 1;' | indent+12;
-+        		'in.read(msg, 0, in.available());' | indent+12;
-+    		}
-+    	'}' | indent+8;	
-+    	if(batchData) {
-+    		'str1 = str;' | indent+8;
-+			'k = str1.length();' | indent+8;
-+			'}' | indent+4;
-+    	}		
-+	}
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpout.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpout.vtl
-new file mode 100644
-index 0000000..78f1f11
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpout.vtl
-@@ -0,0 +1,1368 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormIntermediarySpout(Configuration config, FileArtifact target, String topoName, String topLevelPip, DecisionVariable fmElt, Algorithm algorithm, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap, mapOf(String, setOf(DecisionVariable)) lastElementMap, mapOf(Tuple,String) nameToOutputMap, mapOf(String, Integer) algNameToPort) {
-+	String fmVarName = fmElt.varName();
-+	FamilyElement fe = fmElt;
-+	Family fm = fe.family;
-+	String fmName = fm.name.firstToUpperCase().toIdentifier();
-+	String algClsName;	
-+	Boolean isHwAlg;
-+	Boolean isActive;
-+	Boolean switchInvolvesHW;
-+	def main(Configuration config, FileArtifact target, String topoName, String topLevelPip, DecisionVariable fmElt, Algorithm algorithm, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap, mapOf(String, setOf(DecisionVariable)) lastElementMap, mapOf(Tuple,String) nameToOutputMap, mapOf(String, Integer) algNameToPort) {
-+		isHwAlg = isHardwareAlgorithm(algorithm);
-+		isActive = isActiveAlgorithm(fm, algorithm); //TODO: assume the first algorithm as the active algorithm		
-+		algClsName = algImplName(algorithm);
-+		switchInvolvesHW = hasHardwareAlgorithm(fm);
-+		setOf(String) types = coreTupleTypes(fmName, algorithm, true);
-+		String algName = algorithm.name.firstToUpperCase().toIdentifier();
-+		sequenceOf(Tuple) tuples = fm.input;
-+		
-+		//get the inputToOutputMapping of this family element
-+		mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping = {};
-+		if(globalMap.containsKey(fmVarName)){
-+			inputToOutputMapping = globalMap.get(fmVarName);
-+		}
-+		
-+		setOf(DecisionVariable) lastElt = lastElementMap.get(fmVarName);
-+
-+		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
-+    	''
-+    	/****************************/
-+    	/*        Imports           */  
-+    	/****************************/ 
-+		'import java.io.IOException;'
-+		'import java.io.ObjectInputStream;'
-+		'import java.io.ObjectOutputStream;'
-+		'import java.io.OutputStream;'
-+		'import java.io.InputStream;'
-+		'import java.net.ServerSocket;'
-+		'import java.net.Socket;'
-+		'import java.net.UnknownHostException;'
-+		'import java.util.Calendar;'
-+		'import java.util.Iterator;'
-+		'import java.util.Map;'
-+		'import java.util.HashMap;'
-+		'import java.util.Queue;'
-+		'import java.util.LinkedList;'
-+		'import java.util.concurrent.ConcurrentLinkedQueue;'
-+		'import java.util.concurrent.ConcurrentLinkedDeque;'
-+		'import org.apache.log4j.Logger;'
-+		'import com.esotericsoftware.kryo.Kryo;'
-+		'import com.esotericsoftware.kryo.io.Input;'
-+		'import com.esotericsoftware.kryo.io.Output;'
-+		'import com.esotericsoftware.kryo.KryoException;'
-+
-+		'import backtype.storm.Config;'
-+		'import backtype.storm.spout.SpoutOutputCollector;'
-+		'import backtype.storm.task.TopologyContext;'
-+		'import backtype.storm.topology.OutputFieldsDeclarer;'
-+		'import backtype.storm.tuple.Fields;'
-+		'import backtype.storm.tuple.Values;'
-+		'import eu.qualimaster.base.algorithm.ISwitchTuple;'
-+		'import eu.qualimaster.base.pipeline.CollectingTopologyInfo;'
-+		'import eu.qualimaster.common.signal.BaseSignalSpout;'
-+		'import eu.qualimaster.common.signal.ParameterChange;'
-+		'import eu.qualimaster.common.signal.ParameterChangeSignal;'
-+		'import eu.qualimaster.common.signal.SignalException;'
-+		'import eu.qualimaster.common.signal.ValueFormatException;'
-+		'import eu.qualimaster.common.signal.ShutdownSignal;'
-+		'import eu.qualimaster.common.signal.SignalMechanism;'
-+		'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
-+		'import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;'
-+		'import eu.qualimaster.families.imp.*;'
-+		'import eu.qualimaster.families.inf.*;'
-+		if(looseSub) {
-+			'import java.net.InetAddress;'
-+			'import eu.qualimaster.common.signal.PortManager.*;'
-+			'import eu.qualimaster.common.signal.PortManager;'
-+			'import eu.qualimaster.common.signal.Constants;'
-+		}
-+		if(newSwitchLog) {
-+			'import java.io.PrintWriter;'
-+			'import eu.qualimaster.common.logging.DataLogger;'
-+			'import java.util.Calendar;'
-+		}
-+		produceImportsFromLastElements(lastElt, lastElementMap, topoName);
-+ 
-+		for(String type : types) {
-+			'import eu.qualimaster.families.imp.${fmName}.I$type;'
-+			'import eu.qualimaster.families.inf.I${fmName}.II$type;'
-+		}		
-+		/****************************/
-+    	/*        Spout class        */  
-+    	/****************************/    	
-+    	'/**'
-+    	'* Define the intermediary Spout class.'
-+    	'* @generated'
-+    	'**/'
-+    	'@SuppressWarnings({ "rawtypes", "serial" })'
-+    	String name = algName + "Intermediary";
-+//    	if(looseSub) {
-+//    		name = topoName + "Intermediary";
-+//    	}
-+    	'public class $name extends BaseSignalSpout {'
-+    		'private static final Logger LOGGER = Logger.getLogger($name.class);' | 4;
-+    		'private final static int LOWER_SIZE = 10;' | 4;
-+    		'private static int OVERLOAD_SIZE = 500;' | 4;
-+    		'private transient SpoutOutputCollector _collector;' | 4;
-+    		'private String streamId;' | 4;
-+    		'private String nimbus_host = "localhost";' | 4;
-+    		'private int thrift_port = 6027;' | 4;
-+    		if(looseSub) {
-+    			'private int port;' | 4; 
-+    			'private transient Map<String,String> algToSub = new HashMap<String,String>(); //<subAlgName, subPipName>' | 4;
-+    		} else {
-+	    		if(algNameToPort.containsKey(algName)) {
-+	    			Integer port = algNameToPort.get(algName);
-+	    		'private static int port = $port;' | 4;
-+	    		}
-+	    		'private transient HashMap<String, Integer> algNameToPort = null;' | 4;
-+    		}
-+    		
-+    		'private transient FillInQueueServer server;' | 4;
-+    		'private Object msgId;' | 4;
-+    		'private transient ConcurrentLinkedDeque<ISwitchTuple> outQueue = new ConcurrentLinkedDeque<ISwitchTuple>(); //output queue for checking the acknowledged items' | 4;
-+    		'private transient Queue<ISwitchTuple> inQueue = new ConcurrentLinkedQueue<ISwitchTuple>(); //input queue' | 4;
-+	    	'private transient Queue<ISwitchTuple> tmpQueue = new ConcurrentLinkedQueue<ISwitchTuple>(); //temporary queue' | 4;
-+	    	'private transient Iterator<ISwitchTuple> iterator = null;' | 4;
-+	    	'private ISwitchTuple sTuple = null;' | 4;
-+	    	'private static KryoSwitchTupleSerializer kryoSer = null;' | 4;
-+	    	'private boolean isPassivate = false; //indicating whether the spout shall emit data' | 4;
-+	    	'private long lastProcessedId; //indicating the id of the last acknowledged data item' | 4;
-+	    	'private boolean isActiveSpout; //indicating whether the spout is the original one' | 4;
-+	    	'private long lastFamilyId; //indicating the id of the last data item emitted from the preceding family element' | 4;
-+	    	'private long firstId; // the id of the first data item to be transferred' | 4;
-+	    	'private String originalAlg; //the original algorithm name' | 4;
-+	    	'private String targetAlg; //the target algorithm name' | 4;
-+	    	'private boolean isTransferring; //indicating whether it is transferring data to the target algorithm in case of missing data items' | 4;
-+	    	'private Output outputTarget = null;' | 4;
-+	    	'private Socket socketTarget = null;' | 4;
-+	    	'private boolean omitOnce; //flag control to only omit once' | 4;
-+	    	'private boolean synOnce; //flag control to only send synchronize signal once' | 4;
-+	    	if(switchInvolvesHW) {
-+	    		'private boolean lastIdOnce;' | 4;
-+	    		'private boolean isCompleting; //indicating the switch is completing' | 4;
-+	    	}
-+	    	'private long transferredId = 0; //the id of last transferred data item' | 4;
-+	    	produceOutputVariable(tuples, inputToOutputMapping, nameToOutputMap, fmName);
-+	    	produceInputVariable(tuples, true, fmName);
-+	    	if(newSwitchLog) {
-+				'private transient PrintWriter out = null;' | 4;
-+			}
-+    		''
-+    		/****************************/
-+		    /*    Class constructor     */  
-+		    /****************************/  
-+    		'public $name(String name, String namespace, String streamId) {' | 4;
-+        		'super(name, namespace,$genMonitoringProbes);' | 8; 
-+        		'this.streamId = streamId;' | 8;
-+    		'}' | 4;
-+    		''
-+    		    /****************************/
-+		    	/*     open method          */  
-+		    	/****************************/    	
-+    	'    @Override'
-+        '    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {'
-+        '		 super.open(conf, context, collector);'
-+        '        _collector = collector;' 
-+        		if(newSwitchLog) {
-+        			'String logDir = (String) conf.get("LOG.DIRECTORY");' | 8;
-+        			'out = DataLogger.getPrintWriter(logDir + "${name}.log");' | 8;
-+				}
-+        		'inQueue = new ConcurrentLinkedQueue<ISwitchTuple>();' | 8;
-+	    		'outQueue = new ConcurrentLinkedDeque<ISwitchTuple>();' | 8;
-+	    		if(looseSub) {
-+	    			'algToSub = new HashMap<String, String>();' | 8;
-+	    			for(Algorithm alg : fm.members) {
-+	    				if(isGenSubtopology(alg)) {
-+	    					SubPipelineAlgorithm subAlg = alg;
-+	    					'algToSub.put("${alg.name}", "${subAlg.subPipeline.name}");' | 8;
-+	    					'SignalMechanism.initEnabledSignalNamespaceState("${subAlg.subPipeline.name}");' | 8;
-+	    				}
-+	    				if(isHardwareAlgorithm(alg)) {
-+	    					'algToSub.put("${alg.name}", "${alg.name}");' | 8;
-+	    				}
-+	    			}
-+	    		}
-+	    		'tmpQueue = new ConcurrentLinkedQueue<ISwitchTuple>();' | 8;
-+        		'kryoSer = new KryoSwitchTupleSerializer(conf); ' | 8;
-+        		'nimbus_host = (String) conf.get(Config.NIMBUS_HOST);' | 8;
-+        		'thrift_port = (int) conf.get(Config.NIMBUS_THRIFT_PORT);' | 8;
-+        		'isPassivate = false;' | 8;
-+        		if(looseSub) {
-+        			'isActiveSpout = "true".equals(conf.get(Constants.CONFIG_KEY_INITIAL_SUBPIPELINE));' | 8;
-+        		} else {
-+        			'isActiveSpout = $isActive;' | 8;
-+        			'algNameToPort = new HashMap<String, Integer>();' | 8;
-+        		}
-+        		'LOGGER.info("Is this active? " + isActiveSpout);' | 8;
-+    			if(newSwitchLog) {
-+    				'out.println("Is this active? " + isActiveSpout);' | 8;
-+    				'out.flush();' | 8;
-+    			}
-+        		'isTransferring = false;' | 8;
-+        		'omitOnce = true;' | 8;
-+        		'synOnce = true;' | 8;
-+        		if(switchInvolvesHW) {
-+        			'lastIdOnce = true;' | 8;
-+        			'isCompleting = false;' | 8;
-+        		}
-+        		'firstId = 0;' | 8;
-+        		if(looseSub) {
-+        			'String localhost = "localhost";' | 8;
-+	        		'try {' | 8;
-+						'localhost = InetAddress.getLocalHost().getCanonicalHostName();' | 12;
-+					'} catch (UnknownHostException e1) {' | 8;
-+						'e1.printStackTrace();' | 12;
-+					'}' | 8;
-+	        		'PortAssignmentRequest portRequest = new PortAssignmentRequest(getPipeline(), getName(), 0, localhost, null);' | 8;
-+	        		'PortManager portManager = getPortManager();' | 8;
-+	        		'try {' | 8;
-+						'PortAssignment assignment = portManager.registerPortAssignment(portRequest);' | 12;
-+						'port = assignment.getPort();' | 12;
-+						if(newSwitchLog) {
-+						'LOGGER.info("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
-+						'out.println("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
-+						'out.flush();' | 12;
-+						}
-+						'} catch (SignalException e) {' | 8;
-+							'e.printStackTrace();' | 12;
-+					'}' | 8;
-+        		} else {
-+	        		for(Algorithm alg: fm.members) {
-+	        			String algName = alg.name.firstToUpperCase().toIdentifier();
-+	        			if(algNameToPort.containsKey(algName)) {
-+	        				Integer port = algNameToPort.get(algName);
-+	        				'algNameToPort.put("$algName", $port);' | 8; 
-+	        			}
-+	        		}
-+        		}
-+        		'try {' | 8;
-+            		'server = new FillInQueueServer(conf);' | 12;
-+        		'} catch (IOException e1) {' | 8;
-+            		'e1.printStackTrace();' | 12;
-+        		'}' | 8;
-+        		'server.start();' | 8;
-+				'initMonitor();' | 8;
-+				'LOGGER.info("The end of the open method.");' | 8;
-+        '	 }'
-+        ''
-+        //override the initial monitor
-+	    produceInitMonitor(false, 4);
-+	    '    /**'
-+	    '     * Emits tuple.'
-+	    '     * @param sTuple the tuple to be emitted'
-+	    '     */'
-+        'public void emitTuple(ISwitchTuple sTuple) {' | 4;
-+        	String ifName = "I" + fmName;
-+   			String ifInputName = "I" + ifName;
-+    		String tupleName;
-+    		String outputInfName;
-+			String inputInfName;
-+			String fImpInputName;
-+    		for(Tuple t : tuples) {
-+				//get the tuple name
-+				tupleName = t.name;
-+				
-+				//get input interface name
-+				inputInfName = ifInputName + "${firstToUpperCase(tupleName)}Input";
-+				//get input imp name
-+				fImpInputName= 	ifName + "${firstToUpperCase(tupleName)}Input";
-+				//get output interface name	
-+				if(inputToOutputMapping.containsKey(t))	{
-+		  			sequenceOf(Tuple) outputs = inputToOutputMapping.get(t);
-+		  			String number;
-+			  		Integer size = outputs.size();
-+			  		Integer count = 0;
-+			  		for(Tuple tuple : outputs) {
-+			  	  		count = count + 1;
-+			  	  		outputInfName = nameToOutputMap.get(tuple);
-+					  	if(size > 1) {
-+						    number = "$count";
-+						} else {
-+						  	number = "";
-+						}
-+				  
-+					  'if(sTuple.getValue(0) instanceof $outputInfName) {' | 8;
-+						'iTuple${firstToUpperCase(tupleName)} = ($outputInfName)sTuple.getValue(0);' | 12;
-+						'input${firstToUpperCase(tupleName)} = new $fmName.$fImpInputName();' | 12;
-+			 			for(Field f : t.fields) {
-+				 			String fname = toIdentifier("${f.name}");
-+				 			String mname = firstToUpperCase(fname);
-+		         			'input${firstToUpperCase(tupleName)}.set${mname}(iTuple${firstToUpperCase(tupleName)}.get${mname}());' | 12;
-+			 			}
-+	    				'msgId = sTuple.getId();' | 12;
-+	    				'if(msgId.equals(0L)) {//do not enable the acknowledgement' | 12;
-+            				'_collector.emit(streamId, new Values(input${firstToUpperCase(tupleName)}));' | 16;
-+            			'} else {//pass down a message id for acknowledgement' | 12;
-+	    					'_collector.emit(streamId, new Values(input${firstToUpperCase(tupleName)}), msgId);' | 16;
-+	    				'}' | 12;
-+	    			'}' | 8;
-+    			
-+				  }
-+				} 
-+				
-+    		}
-+        '}' | 4;
-+		    	/****************************/
-+		    	/*     nextTuple method     */  
-+		    	/****************************/        
-+        '    @Override'
-+        '    public void nextTuple() {'
-+        		/* 
-+        		'if(!isActiveSpout) {' | 8;
-+        			'if(outQueue.isEmpty()&&omitOnce && isPassivate) { //clean the outQueue' | 12;
-+		                'omitOnce = false;' | 16;
-+		                if(isHwAlg) {
-+		                	if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--outQueue is empty and sending the omit signal to the hardware bolt.");' | 16;
-+			                'out.flush();' | 16;
-+			                }
-+			                'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+			                        "$topoName", "${algClsName}hardwareConnectionBolt", "omit", true, null);' | 16;
-+			                  'try {' | 16;
-+			                    'sendSignal(paraSignal);' | 20;
-+			                '} catch (SignalException e) {' | 16;
-+			                    'e.printStackTrace();' | 20;
-+			                '}' | 16;
-+		                } else {
-+			                if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--outQueue is empty and sending the emit signal to the original Spout.");' | 16;
-+			                'out.flush();' | 16;
-+			                }
-+			                'ParameterChangeSignal paraSignalId = new ParameterChangeSignal(
-+			                        "$topoName", targetAlg+"EndBolt", "emit", true, null);' | 16;
-+			                  'try {' | 16;
-+			                    'sendSignal(paraSignalId);' | 20;
-+			                '} catch (SignalException e) {' | 16;
-+			                    'e.printStackTrace();' | 20;
-+			                '}' | 16;
-+		                }
-+			        '}' | 12;
-+			        '}' | 8;
-+			        if(isHwAlg) {
-+			        	'else if(outQueue.isEmpty() && lastIdOnce && isPassivate){ //another entrance to send the last processed id if the active alg is hardare algorithm' | 8;
-+			        		'lastProcessedId = lastFamilyId;' | 12;
-+			        		'try {' | 12;
-+								'ParameterChangeSignal paraSignal = new ParameterChangeSignal("$topoName", targetAlg+"Intermediary", "lastProcessedId", lastProcessedId, null);' | 16;
-+		                		'sendSignal(paraSignal);' | 16;
-+		                		'lastIdOnce = false;' | 16;
-+		            		'} catch (SignalException e) {' | 12;
-+					            'e.printStackTrace();' | 16;
-+					        '}' | 12;
-+					        'goToPassive();' | 12;
-+					        if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal lastProcessedId to target intermediary!" + lastProcessedId);' | 12;
-+				                'out.flush();' | 12;
-+				            }
-+			        	'}' | 8;
-+			        }
-+			        * 
-+			        */
-+	        	'if((isTransferring) || (!tmpQueue.isEmpty()) && (!isPassivate)) {' | 8;
-+	                'if(!tmpQueue.isEmpty()) {' | 12;
-+	                'sTuple = consume(tmpQueue);' | 16;
-+	                'emitTuple(sTuple);' | 16;
-+	                if(newSwitchLog) {
-+	                    'out.println(Calendar.getInstance().getTimeInMillis() + "$name--Emitting the tuple from transferred queue:" + sTuple.getId() + ", queue size:" + tmpQueue.size());' | 16;
-+	                    'out.flush();' | 16;
-+	                }
-+	                '}' | 12;
-+		        '} else if(/*(QUEUE_SIZE > outQueue.size()) && */(!inQueue.isEmpty()) && (!isPassivate)) {' | 8; //TODO: Limitation to QUEUE_SIZE creates problem
-+		            'sTuple = consume(inQueue);' | 12;
-+		            'if(sTuple.getId() != 0L) {//queue only during the switch' | 12;
-+		            	'outQueue.offer(sTuple);' | 16;
-+		            '}' | 12;
-+        			'emitTuple(sTuple);' | 12;
-+		            if(newSwitchLog) {
-+		                'out.println(Calendar.getInstance().getTimeInMillis() + "$name--Emitting the tuple:" + sTuple.getId() + ", queue size:" + inQueue.size());' | 12;
-+		                'out.flush();' | 12;
-+		            }
-+		        '}'	 | 8;	        	
-+    	'}' | 4;
-+    	''
-+    	'    /**' 
-+	    '     * Consumes data from the queue.' 
-+	    '     * @param queue the queue to be consumed'
-+	    '     */' 
-+    	'private ISwitchTuple consume(Queue<ISwitchTuple> queue) {' | 4;
-+	        '//wait if queue is empty'	 | 8;
-+	        'while (queue.isEmpty()) {'	 | 8;
-+	            'synchronized (queue) {' | 12;
-+	            if(newSwitchLog) {
-+	                'out.println("Queue is empty " + Thread.currentThread().getName()
-+	                                    + " is waiting , size: " + queue.size());' | 16;
-+	            }
-+	                'try {' | 16;
-+	                    'queue.wait();' | 20;
-+	                '} catch (InterruptedException e) {' | 16;
-+	                    'e.printStackTrace();' | 20;
-+	                '}' | 16;
-+	            '}' | 12;
-+	        '}' | 8;
-+	        '//Otherwise consume element and notify waiting producer' | 8;
-+	        'synchronized (queue) {' | 8;
-+	            'queue.notifyAll();' | 12;
-+	            'return queue.poll();' | 12;
-+	        '}' | 8;
-+    '}' | 4;
-+    		    /****************/
-+		    	/** ack method **/  
-+		    	/****************/
-+		'@Override' | 4;
-+		'public void ack(Object msgId) {' | 4;  
-+			'boolean flag;' | 8;
-+    		'ISwitchTuple ackItem = outQueue.peek();' | 8;
-+    		'if(null != ackItem) {' | 8;
-+    			'if(msgId.equals(ackItem.getId())) {' | 12;
-+	    			'ackItem = outQueue.remove();' | 12;
-+	    			if(newSwitchLog) {
-+	                'out.println(System.currentTimeMillis() + "First: Acked the tuple with the msgId: " + msgId + " removed: " + ackItem.getId());' | 12;
-+	                'out.flush();' | 12;
-+	                }
-+	    		'} else {' | 12;
-+					'iterator = outQueue.descendingIterator();' | 16;
-+		        	'while(iterator.hasNext()) {' | 16;
-+		            	'ackItem = iterator.next();' | 20;
-+		            	'if(msgId.equals(ackItem.getId())) {' | 20;
-+			                'lastProcessedId = ackItem.getId();' | 24;
-+			                'flag = outQueue.remove(ackItem);' | 24;
-+			                if(newSwitchLog) {
-+			                    'out.println(System.currentTimeMillis() + " Acked the tuple with the msgId: " + msgId + " removed: " + flag);' | 24;
-+			                    'out.flush();' | 24;
-+			                }
-+			                'break;' | 24;
-+			            '}' | 20;
-+			        '}' | 16; 
-+		        '}' | 12;
-+	        '}' | 8;
-+	        if(isHwAlg and switchInvolvesHW) {
-+	        	'if(outQueue.isEmpty() && omitOnce && isPassivate) {' | 8;
-+	        		if(newSwitchLog) {
-+	                'out.println(Calendar.getInstance().getTimeInMillis() + ", Ack--outQueue is empty and sending the flush signal to the hardware bolt.");' | 12;
-+	                'out.flush();' | 12;
-+	                }
-+	                'omitOnce = false;' | 12;
-+	                'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+	                        getNamespace(), "${algClsName}hardwareConnectionBolt", "omit", true, null);' | 12; //"$topoName"
-+	                  'try {' | 12;
-+	                    'sendSignal(paraSignal);' | 16;
-+	                '} catch (SignalException e) {' | 12;
-+	                    'e.printStackTrace();' | 16;
-+	                '}' | 12;
-+	        	'}' | 8;
-+	        } else {//TODO: check whether this is still needed
-+	        	/* 
-+	        	'if(outQueue.isEmpty()&&omitOnce && isPassivate) { //clean the outQueue' | 8;
-+			                'omitOnce = false;' | 12;
-+			                if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + ", Ack--outQueue is empty and sending the emit signal to the original Spout.");' | 12;
-+			                'out.flush();' | 12;
-+			                }
-+			                'String targetPip = "$topoName";' | 12;
-+				            if(looseSub) {
-+				            	'if(algToSub.containsKey(targetAlg)) {' | 12;
-+				            		'targetPip = algToSub.get(targetAlg);' | 16;
-+				            	'}' | 12;
-+				            }
-+			                'ParameterChangeSignal paraSignalId = new ParameterChangeSignal(
-+			                        getNamespace(), targetAlg+"EndBolt", "emit", true, null);' | 12; //targetPip
-+			                  'try {' | 12;
-+			                    'sendSignal(paraSignalId);' | 16;
-+			                '} catch (SignalException e) {' | 12;
-+			                    'e.printStackTrace();' | 16;
-+			                '}' | 12;
-+			                'completingSynchronization();' | 12;
-+			        '}' | 8;
-+			        * 
-+			        */
-+	        }             
-+	    '}' | 4;
-+    ''
-+        		/****************/
-+		    	/** fail method **/  
-+		    	/****************/
-+		'@Override' | 4;
-+		'public void fail(Object msgId) {' | 4; 
-+		/* for now, we sacrifice the tuples in the output queue which are waiting for acknowledgement  
-+			if(isHwAlg) {
-+				if(newSwitchLog) {
-+	            'out.println(Calendar.getInstance().getTimeInMillis() + ", Fail--sending again the failed tuple." +msgId);'
-+	            'out.flush();'
-+	            }
-+	            if(fastQueueOperation) {
-+					'iterator = outQueue.descendingIterator();' | 8;
-+				} else {
-+		        	'iterator = outQueue.iterator();' | 8;
-+		        }
-+		        	'while(iterator.hasNext()) {' | 8;
-+		            	'ISwitchTuple ackItem = iterator.next();' | 12;
-+		            	'if(msgId.equals(ackItem.getId())) {' | 12;
-+							'emitTuple(ackItem);' | 12;			                
-+			                'break;' | 16;
-+			            '}' | 12;
-+			        '}' | 8;
-+			}
-+	         '//QUEUE_SIZE = QUEUE_SIZE + 5; //5 more tuples per one failed tuple for the outQueue' | 8;   
-+	         * 
-+	         */    
-+	         if(newSwitchLog) {
-+	            'out.println(Calendar.getInstance().getTimeInMillis() + ", Failing the tuple " + msgId + " push all tuples in the output queue into tmp queue and send again.");' | 8; 
-+	            'out.flush();' | 8; 
-+	            }
-+	         'outQueue.clear();' | 8;    
-+	    '}' | 4;
-+	    ''
-+    if(switchInvolvesHW) {
-+    '/**'   | 4;
-+    '* Returns the minimum id in the outQueue.' | 4;
-+    '*/'	 | 4;
-+    'public long minIdFromOutQueue() {' | 4;
-+    	'long minId = 0;' | 8;
-+		'iterator = outQueue.descendingIterator();' | 8; 
-+		'if(!outQueue.isEmpty()) {' | 8;
-+		'minId = outQueue.peek().getId();' | 12;
-+		'}' | 8;
-+		'while (iterator.hasNext()) {' | 8;
-+			'ISwitchTuple ackItem = iterator.next();' | 12;
-+			'if(ackItem.getId() < minId) {' | 12;
-+				'minId = ackItem.getId();' | 16;
-+			'}' | 12;
-+		'}' | 8;
-+		'return minId;' | 8;
-+	'}' | 4;
-+	}
-+	''
-+	String synPip = topoName;
-+	if(looseSub) {
-+		synPip = topLevelPip;
-+	}
-+	'    /**' 
-+    '     * Sends synchronized signal to the preceding family element.' 
-+    '     */'
-+	'public void sendSynchronizedState() {' | 4;
-+		'try {' | 8;
-+			'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(),
-+					"$fmVarName", "synchronized", true, null);' | 12; //"synPip"
-+			'sendSignal(paraSignal);' | 12;
-+		'} catch (SignalException e) {' | 8;
-+			'e.printStackTrace();' | 12;
-+		'}' | 8;
-+	'}' | 4;
-+	''
-+	'    /**' 
-+    '     * Completing the synchronization phase.'
-+    '     */' 
-+	'public void completingSynchronization() { //used by passive algorithm'  | 4;
-+		if(isHwAlg and switchInvolvesHW) {
-+        	'if(outQueue.isEmpty() && omitOnce && isPassivate) {' | 8;
-+        		if(newSwitchLog) {
-+                'out.println(Calendar.getInstance().getTimeInMillis() + ", lastProcessedId--outQueue is empty and sending the omit signal to the hardware bolt.");' | 12;
-+                'out.flush();' | 12;
-+                }
-+                'omitOnce = false;' | 12;
-+                'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                        getNamespace(), "${algClsName}hardwareConnectionBolt", "omit", true, null);' | 12; //"$topoName"
-+                  'try {' | 12;
-+                    'sendSignal(paraSignal);' | 16;
-+                '} catch (SignalException e) {' | 12;
-+                    'e.printStackTrace();' | 16;
-+                '}' | 12;
-+        	'}' | 8;        	
-+        }  
-+		'//isPassivate = false;' | 8;
-+		if(switchInvolvesHW) {
-+			'isCompleting = true;' | 8;
-+		}
-+		'isTransferring = false;' | 8;
-+		'isActiveSpout = true;' | 8;
-+		'firstId = 0;' | 8;
-+		'omitOnce = true;' | 8;
-+		'synOnce = true;' | 8;
-+		'sendSynchronizedState();'	 | 8;
-+		'if(!isPassivate) {' | 8;
-+			'goToActive();' | 12;
-+		'}' | 8;
-+		
-+	'}' | 4;
-+	''
-+	'    /**' 
-+    '     * Goes to active state, i.e., the target algorithm is activating.' 
-+    '     */' 
-+	'public void goToActive() {' | 4;		
-+		'//isPassivate = false;' | 8;
-+		'isTransferring = false;' | 8;
-+		'isActiveSpout = true;' | 8;
-+		'firstId = 0;' | 8;
-+		'omitOnce = true;' | 8;
-+		'synOnce = true;' | 8;
-+		if(switchInvolvesHW) {
-+			'lastIdOnce = true;' | 8;
-+			'isCompleting = false;' | 8;
-+		}
-+		if(newSwitchLog) {
-+        'out.println(Calendar.getInstance().getTimeInMillis() + ", Go to active and inform the end bolt.");' | 8;
-+        'out.flush();' | 8;
-+        }
-+        'String targetPip = "$topoName";' | 8;
-+        if(looseSub) {
-+        	'if(algToSub.containsKey(targetAlg)) {' | 8;
-+        		'targetPip = algToSub.get(targetAlg);' | 12;
-+        	'}' | 8;
-+        }
-+        'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                getNamespace(), targetAlg+"EndBolt", "goToActive", true, null);' | 8;//targetPip
-+          'try {' | 8;
-+            'sendSignal(paraSignal);' | 12;
-+        '} catch (SignalException e) {' | 8;
-+            'e.printStackTrace();' | 12;
-+        '}' | 8;
-+
-+	'}' | 4;
-+	''
-+	'    /**' 
-+    '     * Goes to passive state, i.e., the original algorithm is disactivating.' 
-+    '     */' 
-+	'public void goToPassive() {' | 4;	
-+		'outQueue.clear();' | 8;	
-+		'isPassivate = false;' | 8;
-+		'isTransferring = false;' | 8;
-+		'isActiveSpout = false;' | 8;
-+		'firstId = 0;' | 8;
-+		'omitOnce = true;' | 8;
-+		'synOnce = true;' | 8;
-+		if(switchInvolvesHW) {
-+			'lastIdOnce = true;' | 8;
-+		}
-+		if(newSwitchLog) {
-+        'out.println(Calendar.getInstance().getTimeInMillis() + ", Go to passive and inform the end bolt.");' | 8;
-+        'out.flush();' | 8;
-+        }
-+        'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                getNamespace(), originalAlg+"EndBolt", "goToPassive", true, null);' | 8;//"$topoName"
-+          'try {' | 8;
-+            'sendSignal(paraSignal);' | 12;
-+        '} catch (SignalException e) {' | 8;
-+            'e.printStackTrace();' | 12;
-+        '}' | 8;
-+	'}' | 4;
-+    			/********************************/
-+		    	/* notifyParameterChange method */  
-+		    	/********************************/	    	           
-+        if(newSwitch and hasDistAlgorithm(fm)) {
-+			'@Override' | 4;
-+			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
-+			'long minId;' | 8;
-+			'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
-+			'ParameterChange para = signal.getChange(i);' | 12;			
-+			'switch (para.getName()) {' | 12;			
-+				'case "passivate"://ACTIVE and PASSIVE' | 16; 
-+	                'isPassivate = true;' | 20;
-+	                'String msg = para.getStringValue();' | 20;
-+	                'String[] parts = msg.split(",");' | 20;
-+	                'lastFamilyId = Integer.parseInt(parts[0]);' | 20;
-+	                'originalAlg = parts[1];' | 20;
-+	                'targetAlg = parts[2];' | 20;
-+	                if(newSwitchLog) {
-+		                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal passivate!" + " Original alg: " + originalAlg + ", Target alg: " + targetAlg + ", LastFamilyId: " + lastFamilyId);' | 20;
-+		                'out.flush();' | 20;
-+		            }
-+	                'if(isActiveSpout) {' | 20;
-+	                if(isHwAlg) {
-+	                    'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+				                        getNamespace(), "${algClsName}hardwareConnectionBolt", "flush", true, null);' | 24;
-+	                  'try {' | 24;
-+		                    'sendSignal(paraSignal);' | 28;
-+		                '} catch (SignalException e) {' | 24;
-+		                    'e.printStackTrace();' | 28;
-+		                '}' | 24;
-+		                if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal flush to ${algClsName}hardwareConnectionBolt!");' | 24;
-+			                'out.flush();' | 24;
-+		            	}
-+	                } else {
-+		                'try {' | 24;
-+							'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), "${algName}EndBolt", "disable", true, null);' | 28;
-+	                		'sendSignal(paraSignal);' | 28;
-+	            		'} catch (SignalException e) {' | 24;
-+				            'e.printStackTrace();' | 28;
-+				        '}' | 24;
-+				        if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal disable to ${algName}EndBolt!");' | 24;
-+			                'out.flush();' | 24;
-+		            	}
-+		            	}
-+			        '}' | 20;
-+	                'break;' | 20;
-+	            'case "stopped"://ACTIVE' | 16; 
-+				if(newSwitchLog) {
-+	                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal stopped!");' | 20;
-+	                'out.flush();' | 20;
-+	            }
-+	            if(switchInvolvesHW) {
-+	            	'if(lastIdOnce && isPassivate) {' | 20;
-+	            	'minId = minIdFromOutQueue();' | 24;
-+	            	'if(minId == 0) {' | 24;
-+	            		'lastProcessedId = lastFamilyId;' | 28;
-+	            		'goToPassive();' | 28;
-+	            	'} else {' | 24;
-+	            		'lastProcessedId = minId - 1;' | 28;
-+	            	'}' | 24;
-+	            }
-+	            	'try {' | 20;
-+	            		'String targetPip = "$topoName";' | 24;
-+				            if(looseSub) {
-+				            	'if(algToSub.containsKey(targetAlg)) {' | 24;
-+				            		'targetPip = algToSub.get(targetAlg);' | 28;
-+				            	'}' | 24;
-+				            }
-+						'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), targetAlg+"Intermediary", "lastProcessedId", lastProcessedId, null);' | 24;//targetPip
-+                		'sendSignal(paraSignal);' | 24;
-+            		'} catch (SignalException e) {' | 20;
-+			            'e.printStackTrace();' | 24;
-+			        '}' | 20;
-+			        if(newSwitchLog) {
-+		                'out.println(Calendar.getInstance().getTimeInMillis() + "Sent parameter signal lastProcessedId to target intermediary!" + lastProcessedId);' | 20;
-+		                'out.flush();' | 20;
-+		            }
-+		            if(switchInvolvesHW) {
-+		            '}' | 20;
-+		            }
-+	                'break;' | 20;
-+	            'case "headId": //ACTIVE' | 16; 
-+	            	'try {' | 20;
-+	            		'long headId = para.getIntValue();' | 24;
-+	            		if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal headId!" + headId);' | 20;
-+			                'out.flush();' | 20;
-+			            }
-+	            		'transferMissingItems(headId);' | 20;
-+	            	'} catch (ValueFormatException e) {' | 20;
-+			            'e.printStackTrace();' | 24;
-+			        '}' | 20;
-+			        'goToPassive();' | 20;
-+	                'break;' | 20;
-+	            'case "transfer": //ACTIVE' | 16; 
-+				if(newSwitchLog) {
-+	                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal transfer!");' | 20;
-+	                'out.flush();' | 20;
-+	            }
-+	            	'isTransferring = true;' | 20;
-+	            	'try {' | 20;
-+	            	'transferAll();' | 24;
-+	            	'} catch (SignalException e) {' | 20;
-+			            'e.printStackTrace();' | 24;
-+			        '}' | 20;
-+			        if(!looseSub) {
-+			        	'goToPassive();' | 20;
-+			        }
-+	                'break;' | 20;
-+	            'case "lastProcessedId"://PASSIVE' | 16; 
-+	            	'try {' | 20;
-+	            		'lastProcessedId = para.getIntValue();' | 24;
-+	            		if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal lastProcessedId!" + lastProcessedId + ", currently the outQueue size: " + outQueue.size());' | 24;
-+			                'out.flush();' | 24;
-+			            }
-+	            	'} catch (ValueFormatException e) {' | 20;
-+			            'e.printStackTrace();' | 24;
-+			        '}' | 20;
-+			        'if(lastProcessedId == lastFamilyId || outQueue.size() > OVERLOAD_SIZE || (lastFamilyId-lastProcessedId) > OVERLOAD_SIZE) {' | 20;
-+			        if(isHwAlg and switchInvolvesHW) {
-+			        	'if(/*outQueue.isEmpty() && */omitOnce && isPassivate) {' | 24;
-+			        		if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + ", lastProcessedId--outQueue is empty and sending the omit signal to the hardware bolt.");' | 24;
-+			                'out.flush();' | 24;
-+			                }
-+			                'omitOnce = false;' | 24;
-+			                'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+			                        getNamespace(), "${algClsName}hardwareConnectionBolt", "omit", true, null);' | 24;//"$topoName"
-+			                  'try {' | 24;
-+			                    'sendSignal(paraSignal);' | 28;
-+			                '} catch (SignalException e) {' | 24;
-+			                    'e.printStackTrace();' | 28;
-+			                '}' | 24;
-+			        	'}' | 20;
-+			        } else {
-+			        	if(newSwitchLog) {
-+		                'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--completing the synchronization.");' | 24;
-+		                'out.flush();' | 24;
-+		                }
-+		                /* for now, we sacrifice the tuples waiting for acknowledgement in the output queue */
-+		                'outQueue.clear();' | 24;
-+		                'isPassivate = false;' | 24;
-+		                if(newSwitchLog) {
-+		                'out.println(Calendar.getInstance().getTimeInMillis() + ", lastProcessedId--sending the emit signal to the target end Bolt.");' | 24;
-+		                'out.flush();' | 24;
-+		                }
-+		                'String targetPip = "$topoName";' | 24;
-+				            if(looseSub) {
-+				            	'if(algToSub.containsKey(targetAlg)) {' | 24;
-+				            		'targetPip = algToSub.get(targetAlg);' | 28;
-+				            	'}' | 24;
-+				            }
-+		                'ParameterChangeSignal paraSignalId = new ParameterChangeSignal(
-+		                        getNamespace(), targetAlg+"EndBolt", "emit", true, null);' | 24; //targetPip
-+		                  'try {' | 24;
-+		                    'sendSignal(paraSignalId);' | 28;
-+		                '} catch (SignalException e) {' | 24;
-+		                    'e.printStackTrace();' | 28;
-+		                '}' | 24;
-+			        }
-+			        	'completingSynchronization();' | 24;
-+			        '} else {' | 20;
-+			        'try {' | 20;
-+			        	'isTransferring = true; //it is in the transferring phase' | 24;
-+			        	'synchronizeItems();' | 24;
-+	                '} catch (SignalException e) {' | 20;
-+			            'e.printStackTrace();' | 24;
-+			        '}' | 20; 
-+			        '}' | 20;
-+			        'break;' | 20; 
-+	            'case "transferred": //PASSIVE' | 16; 
-+	            	'try {' | 20;
-+	            		'long value = para.getIntValue();' | 24;
-+	            		if(newSwitchLog) {
-+			                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal transferred!" + value);' | 20;
-+			                'out.flush();' | 20;
-+			            }
-+	            		'if(value == 0) { //both queues are empty' | 24;
-+	            		/* 
-+                        'isTransferring = false;' | 24;
-+                        'isActiveSpout = true;' | 24;
-+                        'firstId = 0;' | 24;
-+                        * 
-+                        */
-+                        if(newSwitchLog) {
-+                        'out.println(Calendar.getInstance().getTimeInMillis() + ", notifyParameterChange--$name--Sending the synchronized signal from the $fmVarName.");' | 28;
-+                        'out.flush();' | 28;
-+                        }
-+                        'completingSynchronization();' | 28;
-+                        /* 
-+                        'try {' | 20;
-+                        	'ParameterChangeSignal paraSignal = new ParameterChangeSignal("$topoName", "$fmVarName", "synchronized", true);' | 24;
-+                        	'sendSignal(paraSignal);' | 24;
-+                        '} catch (SignalException e) {' | 20;
-+			            'e.printStackTrace();' | 24;
-+			        	'}' | 20;
-+			        	* 
-+			        	*/
-+                    '}' | 24;
-+                    if(switchInvolvesHW) {
-+                    	'else {' | 24;
-+                    		'firstId = transferredId;' | 28;
-+                    	'}' | 24;
-+                    }
-+	            	'} catch (ValueFormatException e) {' | 20;
-+			            'e.printStackTrace();' | 24;
-+			        '}' | 20;
-+			        
-+	                'break;' | 20;
-+	            'case "ready"://PASSIVE' | 16; 
-+				if(newSwitchLog) {
-+	                'out.println(Calendar.getInstance().getTimeInMillis() + "Received parameter changing signal ready!");' | 20;
-+	                'out.flush();' | 20;
-+	            }
-+	            	if(!isHwAlg) {
-+	            	'isPassivate = false;' | 20;
-+	            	'//isTransferring = true;' | 20;
-+	            	}
-+	            	if(isHwAlg and switchInvolvesHW){
-+	            		'isPassivate = false;' | 20;
-+	            		'if(isCompleting) {' | 20;
-+	            		'goToActive();' | 24;
-+	            		'}' | 20;
-+	            	}
-+	                'break;' | 20;
-+			'}' | 12;
-+			'}' | 8;
-+			'}' |4;		
-+		}
-+		''
-+				/************************************/
-+				/*   declareOutputFields method     */
-+				/************************************/     	
-+    	'public void declareOutputFields(OutputFieldsDeclarer declarer) {' | 4;
-+        	'declarer.declareStream(streamId, new Fields("tuple"));' | 8;
-+    	'}' | 4;  	
-+		''
-+				/************************************/
-+				/*   SychronizeItems              */
-+				/************************************/ 
-+				'    /**' 
-+			    '     * Synchronizes the data items.' 
-+			    '     */' 
-+				'public void synchronizeItems() throws SignalException { //called by passive Spout' | 4;
-+				if(newSwitchLog) {
-+			        'out.println(Calendar.getInstance().getTimeInMillis() + ", $name --Sychronizing output, inQueue: " + inQueue.size() + ", outQueue: " + outQueue.size());' | 8;
-+			        'out.flush();' | 8;
-+		        }
-+			        'if(inQueue.isEmpty()) { //request the Spout1 to transfer all tuples' | 8;
-+			            if(newSwitchLog) {
-+				            'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--Sending the transfer signal to Spout1.");' | 12;
-+				            'out.flush();' | 12;
-+			            }
-+			            'firstId = lastFamilyId;' | 12;
-+			            '//isTransferredData = true;' | 12;	
-+			            'String origPip = "$topoName";' | 12;
-+			            if(looseSub) {
-+			            	'if(algToSub.containsKey(originalAlg)) {' | 12;
-+			            		'origPip = algToSub.get(originalAlg);' | 16;
-+			            	'}' | 12;
-+			            }		            
-+			            'ParameterChangeSignal paraSignal = new ParameterChangeSignal(getNamespace(), originalAlg+"Intermediary", "transfer", true, null);' | 12;//origPip
-+			            'try {' | 12;
-+			                'sendSignal(paraSignal);' | 16;
-+			            '} catch (SignalException e) {' | 12;
-+			                'e.printStackTrace();' | 16;
-+			            '}' | 12;
-+			        '} else {' | 8;
-+			            'long id = lastProcessedId;' | 12;
-+			            'if (!inQueue.isEmpty()) {' | 12;
-+			                'id = inQueue.peek().getId();' | 16;
-+			            '}' | 12;
-+			            if(newSwitchLog) {
-+				            'out.println(Calendar.getInstance().getTimeInMillis() + "$name--Synchronizing the last id of the current alg: " + id + " with the last processed id of the previous alg:" + lastProcessedId);' | 12;
-+				            'out.flush();' | 12;
-+			            }
-+			            'if(id > lastProcessedId) { //the current alg is faster than the previous alg, to infrom the previous alg to send the missing items' | 12;
-+			                if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + ", $name--Sending the headId signal to the original Spout with id:" + id);' | 16;
-+				                'out.flush();' | 16;
-+			                }
-+			                'firstId = id-1;' | 16;
-+			                '//isTransferredData = true;' | 16;
-+			                 'String targetPip = "$topoName";' | 16;
-+				            if(looseSub) {
-+				            	'if(algToSub.containsKey(targetAlg)) {' | 16;
-+				            		'targetPip = algToSub.get(targetAlg);' | 20;
-+				            	'}' | 16;
-+				            }
-+			                'ParameterChangeSignal paraSignalId = new ParameterChangeSignal(getNamespace(), targetAlg+"Intermediary", "headId", id, null);' | 16;//targetPip
-+			                'try {' | 16;
-+			                    'sendSignal(paraSignalId);' | 20;
-+			                '} catch (SignalException e) {' | 16;
-+			                    'e.printStackTrace();' | 20;
-+			                '}' | 16;
-+			            '} else {' | 12;
-+			                'while(id < lastProcessedId && !inQueue.isEmpty()) {' | 16;
-+			                    'id = inQueue.poll().getId();' | 20;
-+			                '}' | 16;
-+			                /* 
-+			                'isPassivate = false;'
-+			                * 
-+			                */
-+			                if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + "Skipped tuples until the id:" + id);' | 16;
-+				                'out.flush();' | 16;
-+			                }
-+			                //'isTransferring = false;'
-+			                if(newSwitchLog) {
-+				                'out.println(Calendar.getInstance().getTimeInMillis() + ", synchronizeItems--$name--Sending the synchronized signal from the switch family."); ' | 16;
-+				                'out.flush();' | 16;
-+			                }
-+			                'completingSynchronization();' | 16;
-+			                /* 
-+			                'ParameterChangeSignal paraSignal = new ParameterChangeSignal("$topoName", "$fmVarName", "synchronized", true);'
-+			                'sendSignal(paraSignal);'
-+			                * 
-+			                */
-+			            '}' | 12;
-+			        '}' | 8;
-+    			'}' | 4;
-+    			''
-+    			'    /**' 
-+			    '     * Transfers the missing data items.' 
-+			    '     */'
-+    			'public void transferMissingItems(long endId) { //ACTIVE: transferring tuples from lastProcessedId to endId' | 4;
-+			        'long id;' | 8;
-+			        if(newSwitchLog) {
-+				        'out.println("Transferring missing items with outQueue: " + outQueue.size() + ", inQueue:" + inQueue.size());' | 8;
-+				        'out.flush();' | 8;
-+			        }
-+			        'while (!outQueue.isEmpty()) {' | 8;
-+			            'ISwitchTuple item = outQueue.poll();' | 12;
-+			            'id = item.getId();' | 12;
-+			            
-+			            'if (id > lastProcessedId && id < endId && connectTargetAlg()) {' | 12;
-+			                    if(newSwitchLog) {
-+			                        'out.println(System.currentTimeMillis() + "outQueue--Transferring the missing items "+ id);' | 16;
-+			                        'out.flush();' | 16;
-+			                    }
-+			                    'sendToTarget(item);' | 16; 
-+			            '}' | 12;
-+			            'if(id == endId) break;' | 12;
-+			        '}' | 8;
-+			            'if (!inQueue.isEmpty()) {' | 8;
-+			                'id = inQueue.peek().getId();' | 12;
-+			                'while (id < endId) {' | 12;
-+			                    'ISwitchTuple item = outQueue.poll();' | 16;
-+			                    'if (id > lastProcessedId && connectTargetAlg()) {' | 16;
-+			                            if(newSwitchLog) {
-+			                                'out.println(System.currentTimeMillis() + "inQueue--Transferring the missing items " + id);' | 20;
-+			                                'out.flush();' | 20;
-+			                            }
-+			                            'sendToTarget(item);' | 20;
-+			                    '}' | 16;
-+			                    'id = item.getId();' | 16;
-+			                '}' | 12;
-+			            '}' | 8;
-+			    '}' | 4;
-+			    ''
-+			    '    /**' 
-+			    '     * Transfers all data items.' 
-+			    '     */' 
-+			    'public void transferAll() throws SignalException { //ACTIVE TODO: consider the case that there are some un-acked items' | 4;
-+			        'long topId = 0;' | 8;
-+			        'long tmpId = 0;' | 8;
-+			        'long transferredId = 0;' | 8;
-+			        'if(!outQueue.isEmpty()) {' | 8;
-+			            'topId = outQueue.peek().getId();' | 12;
-+			        '} else if(!inQueue.isEmpty()) {' | 8;
-+			            'topId= inQueue.peek().getId();' | 12;
-+			        '}' | 8;
-+			        if(newSwitchLog) {
-+				        'out.println("Transfer all items to the target Spout. with outQueue size:" + outQueue.size() + ", inQueue size:" + inQueue.size() + " Top id:" + topId);' | 8;
-+				        'out.flush(); ' | 8;
-+			        }
-+			        '//transferring data from the outQueue' | 8;
-+			        'while (!outQueue.isEmpty()) {' | 8;
-+			            'ISwitchTuple item = outQueue.poll();' | 12;
-+			            'tmpId = item.getId();' | 12;
-+			            'if (tmpId > lastProcessedId) {' | 12;
-+			                        if (newSwitchLog) {
-+			                            'out.println(System.currentTimeMillis()
-+			                                    + " Transferring the out queue to the target Spout."
-+			                                    + item.getId());' | 16;
-+			                            'out.flush();' | 16;
-+			                        }
-+			                            'sendToTarget(item);' | 16;
-+			                            'transferredId = tmpId;' | 16;			                        			                   
-+			            '}' | 12;
-+			        '}' | 8;
-+			        '//transferring data from the inQueue' | 8;
-+			        'while (!inQueue.isEmpty()) {' | 8;
-+			            'ISwitchTuple item = inQueue.poll();' | 8;
-+			            'tmpId = item.getId();' | 8;
-+			            'if (tmpId > lastProcessedId) {' | 8;
-+			                        if (newSwitchLog) {
-+			                            'out.println(System.currentTimeMillis()
-+			                                    + " Transferring the in queue to the target Spout."
-+			                                    + item.getId());' | 12;
-+			                            'out.flush();' | 12;
-+			                        }
-+			                        'sendToTarget(item);' | 12;
-+			                        'transferredId = tmpId;' | 12;
-+			                '}' | 8;
-+			        '}' | 8;
-+			        if(!switchInvolvesHW) {
-+			        'if(transferredId == 0) {' | 8;
-+			        }
-+			        if(newSwitchLog) {
-+			            'out.println(Calendar.getInstance().getTimeInMillis() + ", transferAll --$name--Sending transferred signal with the last transferred Id: " + transferredId);' | 12;
-+			            'out.flush();' | 12;
-+			        }
-+			        'String targetPip = "$topoName";' | 12;
-+			            if(looseSub) {
-+			            	'if(algToSub.containsKey(targetAlg)) {' | 12;
-+			            		'targetPip = algToSub.get(targetAlg);' | 16;
-+			            	'}' | 12;
-+			            }
-+			            'ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+			                    getNamespace(), targetAlg+"Intermediary", "transferred", transferredId, null);' | 12;//targetPip
-+			            'sendSignal(paraSignal);' | 12;
-+			        if(!switchInvolvesHW) {
-+			        '}' | 8;
-+			        }
-+			    '}' | 4;
-+			    ''
-+			    '    /**' 
-+			    '     * Connects to the intermediary node of the target algorithm.' 
-+			    '     */' 
-+			    'public boolean connectTargetAlg() { //ACTIVE' | 4;
-+			        'Socket s = null;' | 8;			        
-+			        'int targetPort = 6027;' | 8;
-+			        'if(null == socketTarget) {' | 8;
-+			            'try {' | 12;
-+			            	'String host = "localhost";' | 16;
-+			            	if(looseSub) {//for loose pipeline
-+			            		'PortManager portManager = getPortManager();' | 20;
-+			        			'PortAssignment assignment = null;' |20;
-+			        			'while(assignment == null && portManager.isConnected()) {' | 20;
-+					        		'try {' | 24;
-+					        			'assignment = portManager.getPortAssignment(getPipeline(), targetAlg+"Intermediary", 0, null);' | 28;
-+									'} catch (SignalException e) {' | 24;
-+										'e.printStackTrace();' | 28;
-+									'}' | 24;
-+			        			'}' | 20;
-+			        			'if(assignment != null) {' | 20;
-+						 			'host = assignment.getHost();' | 24;
-+						 			'targetPort = assignment.getPort();' | 24;
-+						 		'}' | 20;
-+							 	if(newSwitchLog) {
-+							 		'LOGGER.info("Connecting to the host : " + host + ", the port: " + targetPort);' | 20;
-+						        	'out.println("Connecting to the host : " + host + ", the port: " + targetPort);' | 20;
-+						        	'out.flush();' | 20;
-+						        }
-+			            	} else {
-+				                'host = new CollectingTopologyInfo("$topoName", targetAlg+"Intermediary", nimbus_host, thrift_port).getExecutorHost();' | 16;
-+				                'if(algNameToPort.containsKey(targetAlg)) {' | 16;
-+				                	'targetPort = algNameToPort.get(targetAlg);' | 20;
-+				                '}' | 16;
-+			                }
-+			                's = new Socket(host,targetPort);' | 16;
-+			                if(newSwitchLog) {
-+			                	'out.println("Connecting to : " + host + ":" + targetPort);' | 16;
-+			                	'out.flush();' | 16;
-+			                }
-+			                'outputTarget = new Output(s.getOutputStream());' | 16;
-+			                'socketTarget = s;' | 16;
-+			            '} catch (UnknownHostException e) {' | 12;
-+			                'e.printStackTrace();' | 16;
-+			            '} catch (IOException e) {' | 12;
-+			                'if (null != s) {' | 16;
-+			                    'try {' | 20;
-+			                        's.close();' | 24;
-+			                    '} catch (IOException e1) {' | 20;
-+			                        'e1.printStackTrace();' | 24;
-+			                    '}' | 20;
-+			                '}' | 16;
-+			                'e.printStackTrace();' | 16;
-+			            '}' | 12;
-+			        '}' | 8;
-+			        'return null != socketTarget;' | 8;
-+			    '}' | 4;
-+			    ''
-+			    '    /**' 
-+			    '     * Sends data items to the target algorithm.' 
-+			    '     */'
-+			    'public void sendToTarget(ISwitchTuple item) {' | 4;
-+			    	'if(connectTargetAlg()) {' | 8;
-+				    	'byte[] bytes = kryoSer.serialize(item);' | 12;
-+						'outputTarget.writeInt(bytes.length);' | 12;
-+			            'outputTarget.writeBytes(bytes);' | 12;
-+			            'outputTarget.flush();' | 12;
-+		            '}' | 8;
-+			    '}' | 4;
-+				/************************************/
-+				/*   FillInQueueServer              */
-+				/************************************/ 	
-+		'    /**' 
-+	    '     * Creates a server receiving data items.' 
-+	    '     */' 
-+		'public class FillInQueueServer implements Runnable {' | 4;
-+        	'private ServerSocket serverSocket;' | 8;
-+        	'private FillInQueueHandler handler;' | 8;
-+        	'private boolean cont = true;' | 8;
-+        	'private Map conf;' | 8;
-+        	''
-+        	'public FillInQueueServer(Map conf) throws IOException {' | 8;
-+        		'this.conf = conf;' | 12;
-+            	'serverSocket = new ServerSocket(port);' | 12; 
-+//            serverSocket.setSoTimeout(10000);
-+				if(newSwitchLog) {
-+					'out.println("Server socket created on " + port);' | 12;
-+					'out.flush();' | 12;
-+				}
-+            	'LOGGER.info("Server socket created on " + port); ' | 12;
-+        	'}' | 8;
-+        	''
-+        	'public void start() {' | 8;
-+            	'new Thread(this).start();' | 12;
-+           		'LOGGER.info("Server thread started " + port);' | 12;
-+        	'}' | 8;
-+        	''
-+        	'public void run() {' | 8;
-+            	'while (cont) {' | 12;
-+                	'try {' | 16;
-+                    	'LOGGER.info("Accepting the socket connection....");' | 20;
-+                    	'Socket socket = serverSocket.accept();' | 20;
-+                    	'LOGGER.info("Socket connection accepted " + port);' | 20;
-+                    	'handler = new FillInQueueHandler(conf, socket);' | 20;
-+                    	'new Thread(handler).start();' | 20;
-+                	'} catch (IOException e) {' | 16;
-+                    	'e.printStackTrace();' | 20;
-+                '}' | 16;
-+            '}' | 12;
-+        '}' | 8;
-+        ''
-+        'public void stop() throws IOException {' | 8;
-+            'LOGGER.info("Stopping server");  ' | 12;
-+            'cont = false;' | 12;
-+            'handler.stop(); ' | 12;          
-+            'serverSocket.close();' | 12;
-+            'LOGGER.info("Stopped server");' | 12;
-+        '}' | 8;
-+        
-+    '}' | 4;
-+    ''
-+    '    /**' 
-+    '     * Creates a handler to receive data items.' 
-+    '     */' 
-+    'private class FillInQueueHandler implements Runnable {' | 4;
-+        'private Socket socket;' | 8;
-+        'private InputStream in; ' | 8;
-+        'Input kryoInput = null;' | 8;
-+        'private boolean cont = true;' | 8;
-+        'KryoSwitchTupleSerializer serializer;' | 8;
-+        ''
-+        'private FillInQueueHandler(Map conf, Socket socket) throws IOException {' | 8;
-+            'this.socket = socket;' | 12;
-+            'in = socket.getInputStream();' | 12;
-+            'kryoInput = new Input(in);' | 12;
-+            'serializer = new KryoSwitchTupleSerializer(conf);' | 12;
-+        '}' | 8;
-+        ''
-+        'public void run() {' | 8;
-+            'while(cont) {' | 12;
-+            'try {' | 16;
-+                'int len = kryoInput.readInt();' | 16;
-+                'byte[] ser = new byte[len];' | 16;
-+                'kryoInput.readBytes(ser);' | 16;
-+                'ISwitchTuple switchTuple = serializer.deserialize(ser); ' | 16; 
-+                'if(switchTuple != null) {' | 16;
-+                if(newSwitchLog) {
-+                    'out.println( Calendar.getInstance().getTimeInMillis() + "$name--FillInQueueHandler -- Received the data with id :" + switchTuple.getId() + ", firstId: " + firstId + "is transferred data? " + (switchTuple.getId() > firstId));' | 20;
-+                    'out.flush();' | 20;
-+                }
-+	                'if(isActiveSpout) {//when the spout is the active one, only need to fill data into inQueue.' | 16;
-+	                	'produce(inQueue, switchTuple);' | 20;
-+	                '} else {//when the spout is the passive one, transferred data to tmpQueue and other data to inQueue' | 16;
-+	                	'if(switchTuple.getId() > firstId || switchTuple.getId() == 0) {' | 20;
-+                            'produce(inQueue, switchTuple);' | 24;
-+                        '} else {' | 20;
-+                        	'produce(tmpQueue, switchTuple);' | 24;
-+                            if(newSwitchLog) {
-+                                'out.println(Calendar.getInstance().getTimeInMillis() + "$name--data id: " + switchTuple.getId() + ", firstId:" + firstId);' | 24;
-+                                'out.flush();' | 24;
-+                            }
-+                            'if(synOnce) {' | 24;
-+                                'synOnce = false;' | 28;
-+                                if(newSwitchLog) {
-+                                    'out.println(Calendar.getInstance().getTimeInMillis() + ", FillInQueueHandler--$name--Sending the synchronized signal from the $fmVarName.");' | 28;
-+                                    'out.flush();' | 28;
-+                                }
-+                                'sendSynchronizedState();' | 28;
-+                            '}' | 24;
-+                            'if(switchTuple.getId() == firstId) {' | 24;
-+                            if(newSwitchLog) {
-+                                'out.println(Calendar.getInstance().getTimeInMillis() + ", reached the last transferred data, firstId:" + firstId);' | 28;
-+                                'out.flush();' | 28;
-+                            }
-+                            'goToActive();' | 28;
-+                            '}' | 24;
-+                        '}' | 20;
-+	                '}' | 16;
-+                '}' | 12;  
-+                '} catch (KryoException e) {' | 12;   
-+                	'e.printStackTrace();' | 16;
-+                '}' | 12;
-+            '}' | 8;
-+        '}' | 4;       
-+        ''
-+        'private void produce(Queue<ISwitchTuple> queue, ISwitchTuple data) {' | 4;
-+            '//wait if queue is full' | 8;
-+            'while (queue.size() == LOWER_SIZE) {' | 8;
-+                'synchronized (queue) {' | 12;
-+                if(newSwitchLog) {
-+                    'out.println("Queue is full " + Thread.currentThread().getName()
-+                                        + " is waiting , size: " + queue.size());' | 16;
-+                }                        
-+                    'try {' | 16;
-+                        'queue.wait();' | 20;
-+                    '} catch (InterruptedException e) {' | 16;
-+                        'e.printStackTrace();' | 20;
-+                    '}' | 16;
-+                '}' | 12;
-+            '}' | 8;
-+            '//producing element and notify consumers' | 8;
-+            'synchronized (queue) {' | 8;
-+                'queue.offer(data);' | 12;
-+                'queue.notifyAll();' | 12;
-+            '}' | 8;
-+        '}' | 4;
-+        ''
-+        'public void stop() throws IOException {' | 8;
-+        	'LOGGER.info("Stopping handler");' | 16;
-+        	'cont = false;' | 16;   
-+            'if (null != socket) {' | 12;
-+                'socket.close();' | 16;
-+                'socket = null;' | 16;
-+            '}' | 12;
-+            'if (null != kryoInput) {' | 12;
-+            	'kryoInput.close();' | 16;
-+                'kryoInput = null;' | 16;
-+            '}' | 12;
-+            'if (null != in) {' | 12;
-+            	'in.close();' | 16;
-+                'in = null;' | 16;
-+            '}' | 12;
-+            'LOGGER.info("Stopped handler");' | 16;
-+        '}' | 8;
-+    	'}' | 4;
-+    	''
-+		/********************************* */
-+    	/*******Prepare shut down signal** */
-+    	/********************************* */
-+    	'@Override' | 4;
-+    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
-+        	'super.prepareShutdown(signal);' | 8;
-+        	'try {' | 8;
-+        		'server.stop();' | 12;
-+        	'} catch(IOException e) {' | 8;
-+        		'e.printStackTrace();' | 12;
-+        	'}' | 8;
-+    	'}' | 4;
-+    	''
-+	'}'
-+		
-+	}
-+	
-+	def setOf(String) coreTupleInputType (String fmName, Algorithm algorithm) {
-+		setOf(String) listTupleTypes = {};
-+		String tupleName = null;
-+		sequenceOf(Tuple) tuples = algorithm.input;
-+		for(Tuple t : tuples) { //TODO: multiple tuples!!
-+			tupleName = t.name;
-+			tupleName = tupleName.firstToUpperCase().toIdentifier();
-+			listTupleTypes.add("${fmName}${tupleName}Input");
-+		}
-+		listTupleTypes;
-+	}
-+	
-+	def setOf(String) lastTupleTypes(DecisionVariable elt, sequenceOf(Tuple) inputTuples, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, Tuple)) globalMap) {
-+	    setOf(String) lastTypes = {};
-+	    //get the inputToOutputMapping of this family element
-+		String eltName = elt.varName().firstToUpperCase();
-+		mapOf(Tuple, Tuple) inputToOutputMapping = {};
-+		if(globalMap.containsKey(eltName)){
-+			inputToOutputMapping = globalMap.get(eltName);
-+		}
-+		String tupleName;
-+		String outputInfName;
-+	    for(Tuple t : inputTuples) {
-+			tupleName = t.name;
-+			//get output interface name	
-+			if(inputToOutputMapping.containsKey(t))	{
-+			  Tuple output = inputToOutputMapping.get(t);
-+			  outputInfName = nameToOutputMap.get(output);
-+			  lastTypes.add(outputInfName);				
-+			} 
-+	    }
-+	    lastTypes;
-+	}
-+	
-+	def String subPipelineName(Family fm, String algorithm) {
-+		String subPipName = null;
-+		for(Algorithm alg : fm.members) {
-+			if(alg.name == algorithm) {
-+				SubPipelineAlgorithm subAlg = alg;
-+				subPipName = subAlg.subPipeline.name;
-+			}
-+			
-+		}
-+		subPipName;
-+	}
-+	
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpoutSubPipeline.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpoutSubPipeline.vtl
-new file mode 100644
-index 0000000..a376141
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormIntermediarySpoutSubPipeline.vtl
-@@ -0,0 +1,192 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormIntermediarySpoutSubPipeline(Configuration config, FileArtifact target, String topoName, Algorithm algorithm) {
-+	def main(Configuration config, FileArtifact target, String topoName, Algorithm algorithm) {
-+
-+		'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
-+    	''
-+    	/****************************/
-+    	/*        Imports           */  
-+    	/****************************/ 
-+		'import java.util.Calendar;'
-+		'import java.util.Map;'
-+		'import java.util.Queue;'
-+		'import java.util.LinkedList;'
-+		'import java.util.concurrent.ConcurrentLinkedQueue;'
-+		'import java.net.InetAddress;'
-+		'import java.net.UnknownHostException;'
-+		'import org.apache.log4j.Logger;'
-+		'import java.io.IOException;'
-+
-+		'import backtype.storm.Config;'
-+		'import backtype.storm.spout.SpoutOutputCollector;'
-+		'import backtype.storm.task.TopologyContext;'
-+		'import backtype.storm.topology.OutputFieldsDeclarer;'
-+		'import backtype.storm.tuple.Fields;'
-+		'import backtype.storm.tuple.Values;'
-+		'import eu.qualimaster.base.algorithm.IGeneralTuple;'
-+		'import eu.qualimaster.base.algorithm.ISwitchTuple;'
-+		'import eu.qualimaster.base.pipeline.CollectingTopologyInfo;'
-+		'import eu.qualimaster.common.signal.BaseSignalSpout;'
-+		'import eu.qualimaster.common.signal.ParameterChange;'
-+		'import eu.qualimaster.common.signal.ParameterChangeSignal;'
-+		'import eu.qualimaster.common.signal.ShutdownSignal;'
-+		'import eu.qualimaster.common.signal.SignalException;'
-+		'import eu.qualimaster.common.signal.ValueFormatException;'
-+		'import eu.qualimaster.common.switching.*;'
-+		'import eu.qualimaster.common.switching.IState.SwitchState;'
-+		'import eu.qualimaster.families.imp.*;'
-+		'import eu.qualimaster.families.inf.*;'
-+		'import eu.qualimaster.common.signal.PortManager.*;'
-+		'import eu.qualimaster.common.signal.PortManager;'
-+		if(newSwitchLog) {
-+			'import java.io.PrintWriter;'
-+			'import eu.qualimaster.common.logging.DataLogger;'
-+			'import java.util.Calendar;'
-+		}
-+ 
-+		/****************************/
-+    	/*        Spout class        */  
-+    	/****************************/    	
-+    	'/**'
-+    	'* Define the intermediary Spout class.'
-+    	'* @generated'
-+    	'**/'
-+    	'@SuppressWarnings({ "rawtypes", "serial" })'
-+    	String name = formulateString(algorithm.name) + "Intermediary";
-+    	'public class $name extends BaseSwitchSpout {'
-+    		'private static final Logger LOGGER = Logger.getLogger($name.class);' | 4;
-+    		'private static int QUEUE_SIZE = 100;' | 4;
-+    		'private transient SpoutOutputCollector _collector;' | 4;
-+    		'private String streamId;' | 4;
-+    		'private String nimbus_host = "localhost";' | 4;
-+    		'private int thrift_port = 6027;' | 4;
-+    		'private int port;' | 4;
-+			'private transient AbstractSwitchMechanism mechanism;' | 4;
-+			'private transient AbstractSwitchStrategy strategy;' | 4;
-+    		'private transient TupleReceiverServer server;' | 4;
-+    		'private Object msgId;' | 4;  
-+    		'private boolean isClosed = false;' | 4;		
-+	    	if(newSwitchLog) {
-+				'private transient PrintWriter out = null;' | 4;
-+			}
-+    		''
-+    		/****************************/
-+		    /*    Class constructor     */  
-+		    /****************************/  
-+    		'public $name(String name, String namespace, String streamId) {' | 4;
-+        		'super(name, namespace,$genMonitoringProbes);' | 8; 
-+        		'this.streamId = streamId;' | 8;
-+    		'}' | 4;
-+    		''
-+    		    /****************************/
-+		    	/*     open method          */  
-+		    	/****************************/    	
-+    	'    @Override'
-+        '    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {'
-+        '		 super.open(conf, context, collector);'
-+        '        _collector = collector;' 
-+        		if(newSwitchLog) {
-+        			'String logDir = (String) conf.get("LOG.DIRECTORY");' | 8;
-+        			'out = DataLogger.getPrintWriter(logDir + "${name}.log");' | 8;
-+				}
-+        		'nimbus_host = (String) conf.get(Config.NIMBUS_HOST);' | 8;
-+        		'thrift_port = (int) conf.get(Config.NIMBUS_THRIFT_PORT);' | 8;        		
-+        		'strategy = new SeparateIntermediaryStrategy(conf, SwitchState.ACTIVE_DEFAULT);' | 8; //TODO:Determine the default state from the configuration
-+        		'mechanism = new ParallelTrackSwitchMechanism(strategy);' | 8;
-+        		'setSwitchMechanism(mechanism);' | 8;
-+        		'String localhost = "localhost";' | 8;
-+        		'try {' | 8;
-+					'localhost = InetAddress.getLocalHost().getCanonicalHostName();' | 12;
-+				'} catch (UnknownHostException e1) {' | 8;
-+					'e1.printStackTrace();' | 12;
-+				'}' | 8;
-+        		'PortAssignmentRequest portRequest = new PortAssignmentRequest(getPipeline(), getName(), 0, localhost, null);' | 8;
-+        		'PortManager portManager = getPortManager();' | 8;
-+        		'try {' | 8;
-+					'PortAssignment assignment = portManager.registerPortAssignment(portRequest);' | 12;
-+					'port = assignment.getPort();' | 12;
-+					if(newSwitchLog) {
-+					'LOGGER.info("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
-+					'out.println("Assigned port: " + port + " for the pipeline: " + portRequest.getPipeline() + ", the element: " + portRequest.getElement() + ", the port request:" + portRequest);' | 12;
-+					'out.flush();' | 12;
-+					}
-+					'} catch (SignalException e) {' | 8;
-+						'e.printStackTrace();' | 12;
-+				'}' | 8;
-+            	'server = new TupleReceiverServer(strategy.getTupleReceiverHandler(), port);' | 8;
-+        		'server.start();' | 8;
-+        		'initMonitor();' | 8;
-+        '	 }'
-+        ''     
-+        //override the initial monitor
-+	    produceInitMonitor(false, 4);
-+	    ''  
-+		    	/****************************/
-+		    	/*     nextTuple method     */  
-+		    	/****************************/        
-+        '    @Override'
-+        '    public void nextTuple() {'
-+        		'IGeneralTuple tuple = mechanism.getNextTuple();' | 8;
-+        		'if(tuple != null) {' | 8;
-+        			'if(tuple.isGeneralTuple()) {' | 12;
-+		        		if(newSwitchLog) {
-+		        			'out.println("Received GENERAL data and emitting...");' | 16;
-+		        			'out.flush();' | 16;
-+		        		}
-+		        			'_collector.emit(streamId, tuple.getValues());' | 16;
-+		        	'} else {' | 12;
-+		        		if(newSwitchLog) {
-+		        			'out.println("Received SWITCH data and emitting...");' | 16;
-+		        			'out.flush();' | 16;
-+		        		}
-+		        			'ISwitchTuple swiTuple = (ISwitchTuple)tuple;' | 16;
-+	            			'Object msgId = swiTuple.getId();' | 16;
-+		        			'_collector.emit(streamId, tuple.getValues(), msgId);' | 16;
-+		        	'}' | 12;
-+        		'}' | 8;
-+    	'}' | 4;
-+    			''
-+				/************************************/
-+				/**********   ack method     ********/
-+				/************************************/         			
-+    			'@Override' | 4;
-+    			'public void ack(Object msgId) {' | 4;
-+        			'LOGGER.info("Acking the processed tuple: " + msgId);' | 8;
-+        			'super.ack(msgId);' | 8;
-+    			'}' | 4;
-+    			''
-+				/************************************/
-+				/*   declareOutputFields method     */
-+				/************************************/     	
-+    	'public void declareOutputFields(OutputFieldsDeclarer declarer) {' | 4;
-+        	'declarer.declareStream(streamId, new Fields("tuple"));' | 8;
-+    	'}' | 4;  	
-+		''  
-+				/************************************/
-+				/*   close method     */
-+				/************************************/ 
-+		'@Override' | 4;
-+    	'public void close() {' | 4;
-+        'super.close();' | 8;
-+        'isClosed = true;' | 8;
-+        'try {' | 8;
-+            'server.stop();' | 12;
-+        '} catch (IOException e) {' | 8;
-+            'e.printStackTrace();' | 12;
-+        '}' | 8;
-+    	'}' | 4;
-+    ''
-+    '@Override' | 4;
-+    'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
-+        'super.close();' | 8;
-+        'isClosed = true;' | 8;
-+        'try {' | 8;
-+            'server.stop();' | 12;
-+        '} catch (IOException e) {' | 8;
-+            'e.printStackTrace();' | 12;
-+        '}' | 8;
-+    '}' | 4;
-+	'}'
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormPipeline.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormPipeline.vtl
-new file mode 100644
-index 0000000..a851036
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormPipeline.vtl
-@@ -0,0 +1,711 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormPipeline(Configuration config, FileArtifact target, Pipeline pipeline, String algName, mapOf(String, setOf(DecisionVariable)) familiesInPipeline, mapOf(String, setOf(DecisionVariable)) lastElementMap) { 
-+	setOf(String) bolts = {}; //collect the generated bolt name
-+	setOf(String) flows = {}; //collect the passed flow name(varname)
-+	setOf(String) produced = {}; //collect the produced element(for only generating the spout/Bolt definition once) 
-+	mapOf(String, Integer) nodeToRepeatNumMap = {};
-+	String pipName = pipeline.name;
-+    // check for endless recursions    
-+    def main(Configuration config, FileArtifact target, Pipeline pip, String algName, mapOf(String, setOf(DecisionVariable)) familiesInPipeline, mapOf(String, setOf(DecisionVariable)) lastElementMap) {    	
-+    	String pipName = pip.name.toIdentifier();
-+    	Integer numworkers=pip.numworkers;
-+    	Boolean fastSerialization=pip.fastSerialization;
-+    	//Integer numworkers=1;
-+    	Integer timeout = pip.timeout;
-+    	//get all families used in this pipeline
-+    	setOf(DecisionVariable) families = {};
-+    	if(familiesInPipeline.containsKey(pipName)) {
-+    		families = familiesInPipeline.get(pipName);
-+    	}
-+    	'package eu.qualimaster.$pipName.topology;'
-+    	''
-+    	'import org.apache.log4j.Logger;'    	
-+    	'import backtype.storm.*;'
-+    	'import backtype.storm.topology.*;'
-+    	'import eu.qualimaster.Configuration;'
-+    	'import eu.qualimaster.base.algorithm.*;'
-+    	'import eu.qualimaster.infrastructure.PipelineOptions;'
-+    	'import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;'
-+    	for(Family fm : families) {
-+    		produceAlgorithmImports(fm);
-+    	}
-+    	
-+    	''
-+    	'/**'
-+    	'* Define the main topology class(GEN).'
-+    	'**/'
-+    	'public class Topology{'
-+    	'    final static Logger logger = Logger.getLogger(Topology.class);'
-+    	'    static final String TOPOLOGY_NAME = "$pipName";'
-+//    	'    private static int numWorkers = 0; //numWorkers to be configured'
-+    	'    private static int maxNumWorkers = 1; //initialized by default value'
-+    	'    private static int maxTaskParallelism = 1; //initialized by default value'
-+    	'    private static PipelineOptions options = null; //initialized by default value'
-+//    	'    private transient Config config = new Config();'
-+//        '    private transient TopologyBuilder builder = new TopologyBuilder();'
-+    	''
-+    	'    /**'
-+    	'     * Define a class for creating the main topology.'
-+    	'     */'
-+    	'    public static class MainTopologyCreator implements IMainTopologyCreate {'
-+    	'        /**'
-+    	'         * Create a main topology.'
-+    	'         * @return a TopologyOutput carring the storm config and TopologyBuilder information'
-+    	'         */'
-+    	'        public TopologyOutput createMainTopology() {'
-+    	'            int numWorkers = $numworkers; //initialized by the pipeline configuration'
-+    	'            Config config = new Config();'
-+    	'            config.setMessageTimeoutSecs($timeout);'
-+    	'            config.setDebug(false);'
-+    	'            config.put("windowSize", 1 * 30);  // Window size (in secs)'
-+        '            config.put("windowAdvance", 1);  // Advance of the window (in secs)'
-+        'if(options.isSubPipeline()) {' | 12;
-+            	'config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());' | 16;
-+            '} else {' | 12;
-+        '            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace'
-+        '}' | 12;
-+        '			//The settings to optimize the storm performance.'
-+        '			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);'
-+		'			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);'
-+		'			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);'
-+		'			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);'
-+//    	''
-+//    	'        if (args != null && args.length > 0) {'
-+    	'            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());'
-+        '            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());'
-+        '            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());'
-+        '			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());'
-+        if(newSwitchLog) {
-+        '			 config.put("LOG.DIRECTORY", "/var/nfs/spass/");'
-+        }
-+//                   TODO switch to Configuration.transferConfiguraitonTo(config);
-+//    	'        }'
-+        if (fastSerialization) {
-+        	'            eu.qualimaster.families.imp.SerializationRegistry.registerKryoSerializers(config);'
-+        }
-+        '            options.toConf(config);' // before first algorithm/sub-topology!!!
-+    	''
-+    	'            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);'
-+    	
-+    	if(pip.type() == "SubPipeline") { //when it is a sub-pipeline
-+    		'builder.setSpout("${algName}Intermediary", new ${algName}Intermediary("${algName}Intermediary", "$pipName", "${algName}IntermediaryStreamId"), 1);' | 12; //the intermediary spout 
-+			String topologyCls = "${formulateString(pipName)}SubTopology";
-+			String snkBolt = pipName.firstToUpperCase() + "SubOutput";
-+			'            SubTopologyOutput $snkBolt = new $topologyCls().createSubTopology(builder,config,"$algName", "${algName}Intermediary", "${algName}IntermediaryStreamId");'
-+			'BoltDeclarer ${algName}EndBolt = builder.setBolt("${algName}EndBolt", new ${algName}EndBolt("${algName}EndBolt", "$pipName", $snkBolt.getStreamId()), 1);' | 12; 
-+			'${algName}EndBolt.shuffleGrouping($snkBolt.getBoltName(), $snkBolt.getStreamId());' | 12;
-+    	} else {
-+	    	for (DecisionVariable r : pip.sources) {
-+	    		if(genMultiTupleTypes) {
-+	    			Tuple t;
-+	    			processElement(r, Grouping.shuffleGrouping, t, r, r, true, false);
-+	    		} else {
-+		    		setOf(String) s1 = {};
-+		    		setOf(String) s2 = {};
-+		    		setOf(String) outputTupleNames = {};
-+		    		processElement(r, Grouping.shuffleGrouping, s1, s2, true, outputTupleNames);
-+	    		}
-+	    	} 
-+    	}
-+    	'            builder.close(TOPOLOGY_NAME, config);'  
-+    	'            return new TopologyOutput(config, builder, numWorkers);'  	
-+    	'        }'
-+    	''
-+    	'    }'
-+    	'    /**'
-+    	'     * Main method.'
-+    	'     */'
-+    	'    public static void main(String[] args) throws Exception {'
-+    	'        //create the main topology.'
-+    	'        options = new PipelineOptions(args);'
-+    	'        MainTopologyCreator topoCreator = new MainTopologyCreator();'
-+ 		'        TopologyOutput topo = topoCreator.createMainTopology();'
-+ 		'        //get the topology information'
-+ 		'        Config config = topo.getConfig();'
-+ 		'        TopologyBuilder builder = topo.getBuilder();'
-+ 		'        int defNumWorkers = topo.getNumWorkers();'
-+        '        int numWorkers = options.getNumberOfWorkers(defNumWorkers);'
-+ 		''
-+ 		//'System.out.println("Calling the main class with" + java.util.Arrays.toString(args));'
-+    	'        //submit the topology in the real cluster' 
-+    	'        if (args != null && args.length > 0) {'
-+    	'if(!options.isInProfilingMode()) {' |12; 
-+    	'if(maxNumWorkers > numWorkers) {' |16;
-+    	'logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");' | 20;
-+    	'}' | 16;
-+    	'}' |12;
-+    	//'System.out.println("Starting pipelines");'
-+    	'            config.setNumWorkers(numWorkers);'
-+        '            StormSubmitter.submitTopology(args[0], config, builder.createTopology());'
-+    	'        }'
-+    	'        else{ //submit the topology locally' 
-+    	'           config.setMaxTaskParallelism(maxTaskParallelism);'
-+    	'           final LocalCluster cluster = new LocalCluster();'
-+		'           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());'		
-+		'        }'
-+    	'    }'
-+    	'}'
-+    }
-+     
-+    def processElement(DecisionVariable elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {
-+		'// unhandled type ${elt.type()}' | 8;
-+    }
-+
-+	def processElement(DataManagementElement elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {
-+        // currently the same as FamilyElement -> infer grouping to fieldsGrouping?
-+    	setOf(String) listName = {};        
-+    	String name = elt.varName();
-+    	Integer outputSize = elt.output.size();
-+    	    	
-+    	setOf(String) outputTupleNames = {};
-+    	outputTupleNames = lastOutputTupleNames;
-+    	
-+    	if(newFlow){
-+     	    produceStatement(elt, grouping, preLastName, lastName, true, isLastElementDM, lastOutputTupleNames);    	
-+		} 
-+		if(isStringExisted(name, produced)){			
-+		}else {
-+    	    listName.add(name);
-+    	    produced.add(name);   		
-+    	}
-+        Boolean nFlow;
-+		for (Flow flow : elt.output) {
-+			String flowName = flow.varName();
-+			if(isStringExisted(flowName, flows)){
-+				nFlow = false;
-+			} else {
-+				nFlow = true;
-+				flows.add(flowName);
-+			}
-+			if(nFlow) {//only when the flow is not visited
-+				processElement(flow.destination, flow.grouping, lastName, listName, nFlow, true, outputTupleNames);
-+			}			
-+		}
-+    }
-+
-+    def processElement(FamilyElement elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {
-+        // currently the same as DataManagementElement -> infer grouping to shuffleGrouping?
-+    	setOf(String) listName = {}; 
-+    	String nameVar = elt.varName();  
-+    	Integer outputSize = elt.output.size();
-+    	Family fm = elt.family;
-+    	//collect the output tuple names from the current element
-+    	setOf(String) outputTupleNames = {};
-+    	for(Tuple t : fm.output) {
-+    		String tupleName = t.name;
-+    		outputTupleNames.add(tupleName);
-+    	}
-+        if(newFlow){
-+    	    produceStatement(elt, grouping, preLastName, lastName, true, isLastElementDM, lastOutputTupleNames);
-+    	}
-+    	if(isStringExisted(nameVar, produced)){
-+    		//do nothing    		
-+    	}
-+    	else{//the current element is not produced    		
-+		    String snkBolt = "";
-+		    String subTopoCreator = "";
-+		    Family fm = elt.family;
-+		    Integer topoCount = 1;		
-+    	    for (Algorithm alg : fm.members) {
-+			    if(isDistAlgorithm(alg)) { //produce the subTopology statement			    	
-+				    snkBolt = nameVar.firstToUpperCase() + "${topoCount}SubOutput";
-+                    subTopoCreator = nameVar.firstToUpperCase() + "${topoCount}SubCreator";
-+				    String algCls = algQualifiedClsName(alg);//qualified class name	
-+					String streamId = nameVar + "${topoCount}TopoStream";	
-+					String topologyCls = algImplName(alg);//implementation name
-+			   		String algName = alg.name.firstToUpperCase().toIdentifier();
-+			   		
-+			    	'            //generate the Storm-based algorithm topology name:$algClsName'
-+			    	if (isManualSubtopology(alg)) {
-+			    		produceConfInitAlgorithm(alg, algName);
-+			    	}
-+			    	if(newSwitch and fm.members.size() > 1) {
-+		    			'builder.setSpout("${algName}Intermediary", new ${algName}Intermediary("${algName}Intermediary", "$pipName", "${algName}IntermediaryStreamId"), 1);' | 12; //set the default spout parallelism 
-+			   			'            builder.startRecording("$algClsName");'
-+			   			'            ITopologyCreate ${subTopoCreator} = new $topologyCls();'
-+			   			'            SubTopologyOutput $snkBolt = ${subTopoCreator}.createSubTopology(builder,config,"$algName", "${algName}Intermediary", "${algName}IntermediaryStreamId");'
-+			   			'            builder.endRecording(${subTopoCreator});'
-+			   			'BoltDeclarer ${algName}EndBolt = builder.setBolt("${algName}EndBolt", new ${algName}EndBolt("${algName}EndBolt", "$pipName", $snkBolt.getStreamId()), 1);' | 12; 
-+			   			'${algName}EndBolt.shuffleGrouping($snkBolt.getBoltName(), $snkBolt.getStreamId());' | 12;
-+			   		} else {
-+			   			'            builder.startRecording("$algClsName");'
-+                        '            ITopologyCreate ${subTopoCreator} = new $topologyCls();'
-+			    		'            SubTopologyOutput $snkBolt = ${subTopoCreator}.createSubTopology(builder,config,"$algName", "$nameVar", "$streamId");'
-+			    		'            builder.endRecording(${subTopoCreator});'
-+			    	}
-+			    	
-+			    	'maxNumWorkers = Math.max(maxNumWorkers, $snkBolt.getNumWorkers());' | 12;
-+			    	'maxTaskParallelism = Math.max(maxTaskParallelism, $snkBolt.getMaxTaskParallelism());' | 12;	
-+			    	listName.add(snkBolt);
-+			    	topoCount = topoCount + 1;		    	    
-+		    	} else { //for non-subTopology algorithm
-+		    		if(isStringExisted(nameVar, listName)){		    			
-+		    		} else {
-+		    			listName.add(nameVar);
-+		    		}		     		
-+		    	}					 
-+    	 	} 
-+    	 	produced.add(nameVar); //added the current element to produced(mark it is produced)       	
-+        }
-+		Boolean nFlow;		   	
-+		for (Flow flow : elt.output) {
-+			String flowName = flow.varName();
-+			if(isStringExisted(flowName, flows)){
-+				nFlow = false;
-+			} else {
-+				nFlow = true;
-+				flows.add(flowName);
-+			}	
-+			if(nFlow) {//only when the flow is not visited					
-+				processElement(flow.destination, flow.grouping, lastName, listName, nFlow, false, outputTupleNames);
-+			}
-+		}
-+    }
-+    
-+    def produceConfInitAlgorithm(Algorithm alg, String algName) {
-+    }
-+
-+    def produceConfInitAlgorithm(SoftwareAlgorithm alg, String algName) {
-+        'if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("$algName"))) {' | 12;
-+        'config.put(PipelineOptions.getExecutorParallelismKey("$algName"), ${alg.parallelism});' | 16;
-+        '}' | 12;
-+        if (alg.numtasks > 0) {
-+        'if (!config.containsKey(PipelineOptions.getTaskParallelismKey("$algName"))) {' | 12;
-+        'config.put(PipelineOptions.getTaskParallelismKey("$algName"), ${alg.numtasks});' | 16;
-+        '}' | 12;
-+        }
-+    }
-+    
-+    /*
-+     * Processes the element along the pipeline topology.
-+     * @param elt the Source variable
-+     * @param grouping the grouping type 
-+     * @param preNameForTopo  
-+     */
-+    def processElement(Source elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, setOf(String) lastOutputTupleNames) {
-+    	setOf(String) listName = {};//collect the name of the current element as the last element that linked to the next element
-+    	String name = elt.varName(); 
-+//    	Integer outputSize = elt.output.size();    	
-+    	//get DataSource variable
-+    	DataSource dataSrc = elt.source;
-+    	//collect the output tuple names from the current element
-+    	setOf(String) outputTupleNames = {};
-+    	for(Tuple t : dataSrc.input) {
-+    		String tupleName = t.name;
-+    		outputTupleNames.add(tupleName);
-+    	}
-+    	
-+    	if(newFlow){ //if the flow has not been passed (the flow is new), in Source it starts with true to produce the spout definition
-+     		produceStatement(elt, grouping, preLastName, lastName, false, false, lastOutputTupleNames);    	
-+		} 
-+		if(isStringExisted(name, produced)){			
-+		}else {//the elt is not produced
-+    	    listName.add(name);
-+    	    produced.add(name);   		
-+    	}
-+	    Boolean nFlow;
-+	    //go through the flow outputs
-+		for (Flow flow : elt.output) {
-+			String flowName = flow.varName();
-+			if(isStringExisted(flowName, flows)){ //check if the flow has been passed
-+				nFlow = false; //the flow is not new
-+			} else {
-+				nFlow = true; //the flow is new
-+				flows.add(flowName); //added the current flow to the set flows
-+			}
-+			if(nFlow) {//only when the flow is not visited
-+				processElement(flow.destination, flow.grouping, lastName, listName, nFlow, false, outputTupleNames);
-+			}
-+		}
-+    }
-+    
-+    def processElement(Sink elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean newFlow, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {   	
-+    	if(newFlow){
-+    	    produceStatement(elt, grouping, preLastName, lastName, true, isLastElementDM, lastOutputTupleNames);	
-+    	}
-+    	
-+    }
-+    
-+    def produceStatement(DecisionVariable elt, Grouping grouping, setOf(String) preLastName, setOf(String) lastName, Boolean bolt, Boolean isLastElementDM, setOf(String) lastOutputTupleNames) {
-+    	//name for Spout/Bolt
-+    	String name = elt.varName();
-+    	//Spout/Bolt class name
-+    	String clsName = className(elt);
-+    	//get the parallelism
-+    	Integer parallelism = elt.byName("parallelism"); 
-+    	//collect the tuple names from the current element input
-+    	setOf(String) inputTupleNames = {};
-+    	//obtain the meaningful display name of the element 
-+    	String eltType = elt.type();
-+    	String displayName;
-+    	if(eltType == "Source") {
-+    		//cast the elt to Source
-+    		Source source = elt;
-+    		//get the display name
-+    		displayName = source.name;
-+    		//no input tuple
-+    	} else if (eltType == "FamilyElement") {
-+    		//cast the elt to FamilyElement
-+    		FamilyElement familyElt = elt;
-+    		//get the display name
-+    		displayName = familyElt.name;
-+    		//collect the tuple names from the current element input
-+    		Family fm = familyElt.family;
-+    		for(Tuple t : fm.input) {
-+    			String tupleName = t.name;
-+    			inputTupleNames.add(tupleName);
-+    		}    		
-+    	} else if(eltType == "Sink") {
-+    		//cast the elt to Sink
-+    		Sink sink = elt;
-+    		//get the display name
-+    		displayName = sink.name;
-+    		//collect the tuple names from the current element input
-+    		DataSink dataSnk = sink.sink;
-+    		for(Tuple t : dataSnk.output) {
-+    			String tupleName = t.name;
-+    			inputTupleNames.add(tupleName);
-+    		}
-+    	} else if(eltType == "DataManagementElement") {
-+    		DataManagementElement dmElt = elt;
-+    		displayName = dmElt.name;
-+    		inputTupleNames = lastOutputTupleNames;
-+    	}    			   	
-+    	
-+        if (bolt) {    	    
-+    	    if(isStringExisted(name, bolts)){ 
-+ 	    	} else {
-+ 	    	  '// Declare a Bolt "$displayName"' | 12;
-+ 	          'BoltDeclarer $name = builder.setBolt("$name", new $clsName("$name", "$pipName"), $parallelism)${produceNumTasks(elt)};' | 12;  
-+    	      bolts.add(name); 
-+ 	    	}
-+ 	    		    	
-+	    	'$name' | 12;   	    	    	    
-+	    	if(isLastElementDM) { //if the last element is a DataManagementElement, then grouping to the element before the DME	        		
-+			    grouping(elt, grouping, preLastName, lastOutputTupleNames, inputTupleNames);
-+			} else {
-+			    grouping(elt, grouping, lastName, lastOutputTupleNames, inputTupleNames);
-+			}		        		               	  	    
-+        } else {
-+        	'// Declare a Spout "$displayName"' | 12;
-+		    'builder.setSpout("$name", new $clsName("$name", "$pipName"), $parallelism)${produceNumTasks(elt)};' | 12;
-+        }
-+    }
-+    
-+    def grouping(DecisionVariable elt, Grouping grouping, setOf(String) lastName, setOf(String) lastOutputTupleNames, setOf(String) inputTupleNames) {  	   	
-+        String sname;
-+        String varName = elt.varName();
-+        mapOf(String, String) nameToAlg = {};  
-+        if(newSwitch) {
-+        	setOf(DecisionVariable) lastElts= {};
-+        	if(lastElementMap.containsKey(varName)) {
-+        		lastElts = lastElementMap.get(varName);
-+        	}
-+        	mappingSubInstanceNameToAlgName(lastElts, nameToAlg); 
-+        }     
-+//    	if (elt.varName().length() > 0) {
-+    		for(String last : lastName) {   						
-+    		    if(containsEnding(last,"SubOutput")) { // for topo
-+    		    	if(newSwitch) {
-+    		    		String algName;
-+    		    		if(nameToAlg.containsKey(last)) {
-+    		    			algName = nameToAlg.get(last);
-+    		    		}
-+    		    		'.$grouping("${algName}EndBolt", $last.getStreamId())' | 16;
-+    		    	} else {
-+    			    	'.$grouping($last.getBoltName(), $last.getStreamId())' | 16; 	
-+    			    }		
-+    		    } else { // for non-topo 	   		    	
-+    		    	for(String input : inputTupleNames) {
-+    		           for(String output : lastOutputTupleNames) {
-+    					  if(input == output) {
-+    				          sname = last + "Stream${firstToUpperCase(input)}";   				    
-+    				          '.$grouping("$last", "$sname")' | 16;
-+    				      }
-+    		           }
-+    	            }   		    		    	
-+    				
-+    		    }     			
-+    		}
-+    		';' | 16; 		  	 
-+//    	}    	   	
-+    }    
-+        
-+    def Boolean containsEnding(String str, String subString) {
-+    	Integer strLen = str.length();
-+    	Integer subStringLen = subString.length();   	
-+    	if(subStringLen > strLen){
-+    		false;
-+    	} else {
-+    		String sub = str.substring(strLen-subStringLen, strLen);
-+    		if(sub == subString) {
-+    			true;
-+    		} else {
-+    			false;
-+    		}
-+    	}   	
-+    }
-+    
-+    def mappingSubInstanceNameToAlgName(setOf(DecisionVariable) lastElts, mapOf(String, String) nameToAlg) {
-+    	Integer counter = 1;
-+        	for(DecisionVariable dv : lastElts) {
-+	        	if(dv.type() == "FamilyElement") {
-+	        		String dVarName = dv.varName();
-+	        		Family fm = dv.byName("family");
-+	        		for(Algorithm alg : fm.members) {
-+	        			String algName = alg.name.firstToUpperCase().toIdentifier();
-+	        			if(isDistAlgorithm(alg)) {
-+	        				String VarSubName = dVarName+counter+"SubOutput";
-+	        				nameToAlg.add(VarSubName, algName);
-+	        				counter = counter + 1;
-+	        			}
-+	        		}
-+	        	}
-+	        	if(dv.type() == "DataManagementElement") {
-+	        		String dVarName = dv.varName();	        		
-+	        		if(lastElementMap.containsKey(dVarName)) {
-+			    		setOf(DecisionVariable) lastElts = lastElementMap.get(dVarName);
-+			    		mappingSubInstanceNameToAlgName(lastElts, nameToAlg);
-+			    	}
-+	        	}
-+        	}
-+    }
-+
-+    /**
-+     *  The following methods are used for integrating the tuple type of the flow to the main pipeline generation.
-+     */   
-+    def processElement(DecisionVariable elt, Grouping grouping, Tuple tupleType, DecisionVariable preElt, DecisionVariable prePreElt, Boolean newFlow, Boolean isLastElementDM) {
-+    	'//unhandled type ${elt.type()}'
-+    }
-+    def processElement(Source elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
-+    	String nameVar = elt.varName(); 
-+    	DataSource dataSrc = elt.source;    	
-+ 		
-+        if(newFlow){
-+    	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, false, false);
-+    	}
-+    	
-+    	if(isStringExisted(nameVar, produced)){			
-+		}else {//the elt is not produced
-+    	    produced.add(nameVar);   		
-+    	}
-+    	
-+		Boolean nFlow;	   	
-+		for (Flow flow : elt.output) {
-+			String flowName = flow.varName();
-+			if(isStringExisted(flowName, flows)){
-+				nFlow = false;
-+			} else {
-+				nFlow = true;
-+				flows.add(flowName);
-+			}
-+			if(nFlow) {//only when the flow is not visited					
-+				processElement(flow.destination, flow.grouping, flow.tupleType, elt, preElt, nFlow, false);
-+			}
-+		}
-+    }
-+    
-+    def processElement(Sink elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
-+        if(newFlow){
-+    	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, true, isLastElementDM);
-+    	}    		
-+    }
-+    
-+    def processElement(ReplaySink elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
-+        if(newFlow){
-+    	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, true, isLastElementDM);
-+    	}    		
-+    }
-+    
-+    def processElement(DataManagementElement elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
-+        // currently the same as FamilyElement -> infer grouping to fieldsGrouping?
-+    	String nameVar = elt.varName();
-+    	
-+    	if(newFlow){
-+     	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, true, isLastElementDM);    	
-+		} 
-+		if(isStringExisted(nameVar, produced)){			
-+		} else {
-+    	    produced.add(nameVar);   		
-+    	}
-+        Boolean nFlow;
-+		for (Flow flow : elt.output) {
-+			String flowName = flow.varName();
-+			if(isStringExisted(flowName, flows)){
-+				nFlow = false;
-+			} else {
-+				nFlow = true;
-+				flows.add(flowName);
-+			}
-+			if(nFlow) {//only when the flow is not visited
-+				processElement(flow.destination, flow.grouping, flow.tupleType, elt, preElt, nFlow, true);
-+			}	
-+		}
-+    }
-+    
-+    def processElement(FamilyElement elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, PipelineNode prePreElt, Boolean newFlow, Boolean isLastElementDM) {
-+    	String nameVar = elt.varName(); 
-+ 		String name = elt.name;
-+ 		
-+        if(newFlow){
-+    	    produceStatement(elt, grouping, tupleType, preElt, prePreElt, true, isLastElementDM);
-+    	}
-+    	if(isStringExisted(nameVar, produced)){
-+    		//do nothing    		
-+    	} else {//the current element is not produced    		
-+		    String snkBolt = "";
-+            String subTopoCreator = "";
-+		    Family fm = elt.family;
-+		    Integer topoCount = 1;		
-+    	    for (Algorithm alg : fm.members) {
-+			    if(isDistAlgorithm(alg) and !looseSub) { //produce the subTopology statement			    	
-+				    snkBolt = nameVar.firstToUpperCase() + "${topoCount}SubOutput";
-+				    subTopoCreator = nameVar.firstToUpperCase() + "${topoCount}SubCreator";
-+				    String algCls = algQualifiedClsName(alg);
-+				    String algClsName = algImplName(alg);
-+					String streamId = formulateString(nameVar) + formulateString(alg.name);	
-+					String topologyCls = algImplName(alg);
-+			   		String algName = formulateString(alg.name);
-+			    	'            //generate the Storm-based algorithm topology name:$algClsName'
-+			    	if (isManualSubtopology(alg)) {
-+			    		produceConfInitAlgorithm(alg, alg.name);
-+			    	}
-+			    	if(newSwitch and fm.members.size() > 1) {
-+		    			'builder.setSpout("${algName}Intermediary", new ${algName}Intermediary("${algName}Intermediary", "$pipName", "${algName}IntermediaryStreamId"), 1);' | 12; //set the default spout parallelism 
-+			   			if(!isGenSubtopology(alg) and !isHardwareAlgorithm(alg)) {
-+				   		'            builder.startRecording("$algClsName");'
-+				   		}
-+				   		'            ITopologyCreate ${subTopoCreator} = new $topologyCls();'
-+			   			'            SubTopologyOutput $snkBolt = ${subTopoCreator}.createSubTopology(builder,config,"$algName", "${algName}Intermediary", "${algName}IntermediaryStreamId");'
-+			   			if(!isGenSubtopology(alg) and !isHardwareAlgorithm(alg)) {
-+				    	'            builder.endRecording(${subTopoCreator});'
-+				    	}
-+			   			'BoltDeclarer ${algName}EndBolt = builder.setBolt("${algName}EndBolt", new ${algName}EndBolt("${algName}EndBolt", "$pipName", $snkBolt.getStreamId()), 1);' | 12; 
-+			   			'${algName}EndBolt.shuffleGrouping($snkBolt.getBoltName(), $snkBolt.getStreamId());' | 12;
-+			   		} else {
-+			   			if(!isGenSubtopology(alg) and !isHardwareAlgorithm(alg)) {
-+				   		'            builder.startRecording("$algClsName");'
-+				   		}
-+				   		'            ITopologyCreate ${subTopoCreator} = new $algClsName();'
-+			    		'            SubTopologyOutput $snkBolt = ${subTopoCreator}.createSubTopology(builder,config,"$algName", "$nameVar", "$streamId");'
-+			    		if(!isGenSubtopology(alg) and !isHardwareAlgorithm(alg)) {
-+				    	'            builder.endRecording(${subTopoCreator});'
-+				    	}
-+			    	}
-+			    	
-+			    	'maxNumWorkers = Math.max(maxNumWorkers, $snkBolt.getNumWorkers());' | 12;
-+			    	'maxTaskParallelism = Math.max(maxTaskParallelism, $snkBolt.getMaxTaskParallelism());' | 12;	
-+			    	topoCount = topoCount + 1;		    	    
-+		    	} else { //for non-subTopology algorithm
-+		    				     		
-+		    	}					 
-+    	 	} 
-+    	 	produced.add(nameVar); //added the current element to produced(mark it is produced)       	
-+        }
-+		Boolean nFlow;	   	
-+		for (Flow flow : elt.output) {
-+			String flowName = flow.varName();
-+			if(isStringExisted(flowName, flows)){
-+				nFlow = false;
-+			} else {
-+				nFlow = true;
-+				flows.add(flowName);
-+			}
-+			if(nFlow) {//only when the flow is not visited
-+				processElement(flow.destination, flow.grouping, flow.tupleType, elt, preElt, nFlow, false);
-+			}	
-+		}
-+    }
-+    
-+    def produceStatement(DecisionVariable elt, Grouping grouping, Tuple tupleType, DecisionVariable preElt, DecisionVariable prePreElt, Boolean bolt, Boolean isLastElementDM) {
-+    	//name for Spout/Bolt
-+    	String name = elt.varName();
-+    	//Spout/Bolt class name
-+    	String clsName = className(elt); 
-+    	//get the parallelism
-+    	Integer parallelism = elt.byName("parallelism"); 
-+    	
-+    	//obtain the meaningful display name of the element 
-+    	String eltType = elt.type();
-+    	String displayName;
-+    	setOf(Flow) flows;
-+    	Parameters parameters;
-+    	if(eltType == "Source") {
-+    		//cast the elt to Source
-+    		Source source = elt;
-+    		//get the display name
-+    		displayName = source.name;
-+    		//get the flows
-+    		flows = source.output;
-+    		parameters = source.source.parameters;
-+    	} else if (eltType == "FamilyElement") {
-+    		//cast the elt to FamilyElement
-+    		FamilyElement familyElt = elt;
-+    		//get the display name
-+    		displayName = familyElt.name;
-+    		//get the flows
-+    		flows = familyElt.output;
-+    		parameters = familyElt.family.parameters;
-+    	} else if (eltType == "Sink" or eltType == "ReplaySink") {
-+    		//cast the elt to Source
-+    		Sink sink = elt;
-+    		//get the display name
-+    		displayName = sink.name;
-+    		//get the parameters
-+    		parameters = sink.sink.parameters;
-+    	} else if(eltType == "DataManagementElement") {
-+    		DataManagementElement dmElt = elt;
-+    		displayName = dmElt.name;
-+    	}			   	
-+    	
-+        if (bolt) {    	    
-+    	    if(isStringExisted(name, bolts)){ //no node to be produced but the grouping statement 
-+ 	    	} else {
-+ 	    	    '// Declare a Bolt "$displayName"' | 12;
-+ 	            'BoltDeclarer ${formulateString(name)}=builder.setBolt("${formulateString(name)}", new $clsName("${formulateString(name)}", "$pipName"), $parallelism)${produceNumTasks(elt)};' | 12;  
-+	    	    bolts.add(name); 
-+	 	    } 	    	
-+        } else {
-+        	'// Declare a Spout "$displayName"' | 12;
-+		    'builder.setSpout("${formulateString(name)}", new $clsName("${formulateString(name)}", "$pipName"), $parallelism)${produceNumTasks(elt)};' | 12;
-+        }
-+        
-+        if(isLastElementDM) { //if the last element is a DataManagementElement, then grouping to the element before the DME	        		
-+			grouping(name, grouping, tupleType, prePreElt);
-+		} else {
-+		    grouping(name, grouping, tupleType, preElt);
-+		}
-+    }
-+
-+    def grouping(String eltName, Grouping grouping, Tuple tupleType, DecisionVariable preElt) {
-+    	String preEltName = preElt.varName(); 
-+		String streamId = formulateString(preEltName) + formulateString(tupleType.name);    	
-+		'$eltName.$grouping("${formulateString(preEltName)}", "$streamId");' | 12;
-+    }   
-+    
-+    def grouping(String eltName, Grouping grouping, Tuple tupleType, FamilyElement preElt) {
-+    	String preEltName = preElt.varName(); 
-+		Family fm = preElt.byName("family");
-+		Integer topoCount = 1;
-+		Boolean once = true;
-+    	for(Algorithm alg : fm.members) {	    			    		
-+    		if(isDistAlgorithm(alg) and !looseSub) {
-+    			String nodeName;
-+    			String endBolt = formulateString(alg.name) + "EndBolt";
-+    			String sub = formulateString(preEltName) + "${topoCount}SubOutput";
-+    			if(newSwitch) {
-+    				nodeName = "\"" + endBolt + "\"";
-+    			} else {
-+    				nodeName = sub + ".getBoltName()";
-+    			}
-+    			'$eltName.$grouping($nodeName, $sub.getStreamId());' | 12;
-+    			topoCount = topoCount + 1;
-+    		} else if(once) {
-+    			once = false;
-+				String streamId = formulateString(preElt.varName()) + formulateString(tupleType.name);    	
-+				'$eltName.$grouping("${formulateString(preEltName)}", "$streamId");' | 12;
-+    		}
-+    	}
-+    }                
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSink.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSink.vtl
-new file mode 100644
-index 0000000..962ba3b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSink.vtl
-@@ -0,0 +1,496 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormSink(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap, Boolean debug) {
-+    Boolean isReplay = false;
-+    Boolean lastHasSubPipeline = false; //indicates whether the last elements have sub-pipeline-based algorithm	
-+	Boolean loadShedding = false;
-+	def produceInputVariable(sequenceOf(Tuple) tuples, Boolean variable, String fName) {
-+		String ifInputName = "I" + fName;
-+		String tupleName;
-+
-+		for(Tuple t : tuples) {
-+			//get the tuple name
-+			tupleName = t.name;
-+			//change the first letter to upper letter
-+			tupleName = firstToUpperCase(tupleName);
-+			String inputInfName = ifInputName + "${tupleName}Input";
-+			String fImpInputName = 	fName + "${tupleName}Input";
-+			if(variable) {
-+				'    transient ${toIdentifier(inputInfName)} input${tupleName} = null;'
-+			} else {
-+				'        input${tupleName} = new ${toIdentifier(fName)}.${toIdentifier(fImpInputName)}();'
-+			}			
-+		}
-+	}
-+	
-+	def registerSerializer(sequenceOf(Tuple) tuples,  String fName) {
-+		String ifInputName = "I" + fName;
-+		String tupleName;
-+
-+		for(Tuple t : tuples) {
-+			//get the tuple name
-+			tupleName = t.name;
-+			//change the first letter to upper letter
-+			tupleName = firstToUpperCase(tupleName);
-+			String inputInfName = ifInputName + "${tupleName}Input";
-+			String fImpInputName = 	fName + "${tupleName}Input";
-+			'        new ${toIdentifier(fName)}.${toIdentifier(fImpInputName)}();'
-+		}
-+	}
-+	
-+	/*
-+	 * Produces the casting statement from tuple value to right tuple type.
-+	 */	
-+    def produceInputForTuples(mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping, mapOf(Tuple,String) nameToOutputMap, DecisionVariable elt) {
-+		String familyName = elt.byName("sink").varName().firstToUpperCase();	
-+		String outputInfName; //output interface name	
-+		String inputInfName; //input interface name		
-+        Sink snk = elt;
-+        DataSink dataSnk = snk.sink;
-+		String snkName =dataSnk.name;
-+		String inputName = snkName.firstToUpperCase();
-+		String ifInputName = "I" + inputName; 
-+		String inputImpName;       
-+
-+		String qualifiedClsName = dataSnk.sinkCls;
-+		JavaPath javaPath = qualifiedClsName;
-+		String impClassName = javaPath.getName(); //the class name of the sink implementation
-+        
-+        String tupleName;		
-+		Boolean multiStream = false;
-+		Integer indent = 4;
-+		sequenceOf(Tuple) tuples = dataSnk.output;
-+		Integer tuplesSize = tuples.size();
-+		for(Tuple t : tuples) {
-+			if(tuplesSize > 1){
-+				multiStream = true;
-+				indent = 8;
-+			}
-+			//get the tuple name
-+			tupleName = t.name;
-+			//change the first letter to upper letter
-+			tupleName = firstToUpperCase(tupleName);
-+			//get input interface name
-+			inputInfName = ifInputName + "${tupleName}Input";
-+			
-+			inputImpName = inputName +"${tupleName}Input";
-+					
-+			//get output interface name	
-+			if(inputToOutputMapping.containsKey(t))	{
-+			  sequenceOf(Tuple) outputs = inputToOutputMapping.get(t);
-+			  String number;
-+			  Integer size = outputs.size();
-+			  Integer count = 0;
-+			  for(Tuple tuple : outputs) {
-+			  	  count = count + 1;
-+			  	  outputInfName = nameToOutputMap.get(tuple);
-+			  	  if(size > 1) {
-+				      number = "$count";
-+				  } else {
-+				  	  number = "";
-+				  }
-+				  
-+				'if(tupleItem instanceof $outputInfName) {' | indent;
-+				'iTuple${tupleName}$number = ($outputInfName)tupleItem;' | indent+4;
-+				if(genInstance) {
-+					'input${tupleName} = new ${toIdentifier(inputName)}.${toIdentifier(inputImpName)}();' | indent+4;
-+				}
-+				 for(Field f : t.fields) {
-+					 String fname = toIdentifier("${f.name}");
-+	    			 String mname = firstToUpperCase(fname);
-+	    	         'input${tupleName}.set${mname}(iTuple${tupleName}$number.get${mname}());' | indent+4;
-+				 }
-+				 if(isReplay) {
-+				 	'store(input${tupleName});' | indent+4;
-+				 } else {
-+				 	'sinkHandler.postData${tupleName}(input${tupleName});' | indent+4;
-+				 }
-+				 if (genMonitoringProbes) {
-+				     'emitted(input${tupleName});' | indent+4;
-+				 }
-+				 '}' | indent;
-+				 ''	
-+			  }			  			
-+
-+			 }						 
-+		}							
-+	}
-+	
-+	/**
-+	 * Returns the base class, for Sink or ReplaySink. 
-+	 */
-+	def String baseClass(DecisionVariable elt) {
-+		if(elt.type() == "ReplaySink") {
-+			'AbstractReplaySink';
-+		} else {
-+			'BaseSignalBolt';
-+		}		
-+	}
-+	
-+	/**
-+	 * Produce emitters per tuple type for replay sink.
-+	 */
-+	def produceEmitters(String snkName, Tuples tuples) {
-+		String ifInputName = "I" + formulateString(snkName);
-+		String inputInfName;
-+		for (Tuple t : tuples) {
-+			inputInfName = ifInputName + formulateString(t.name) + "Input";
-+			'public class ${inputInfName}Emitter<$inputInfName> implements AbstractReplaySink.ITupleEmitter<$inputInfName> {' | 4;
-+	        	'@Override' | 8;
-+        		'public void emit(int ticket, $inputInfName tuple) {' | 8;
-+					'//call from sink implementation' | 12;  
-+					'sinkHandler.emit(ticket, (I${toIdentifier(snkName)}.$inputInfName)tuple);' | 12;         
-+        		'}' | 8;
-+        
-+    		'}' | 4;
-+		}
-+	}
-+	
-+	def produceRegister(DataSink dataSnk) {
-+		String strategyStr = obtainManagementStrategyInstance(dataSnk);
-+		String ifInputName = "I" + formulateString(dataSnk.name);
-+		String inputInfName;
-+		String inputImpName;
-+		'@Override' | 4;
-+    	'protected void registerHandlers(Map conf, TopologyContext context) {' | 4;
-+    		'eu.qualimaster.dataManagement.common.replay.Tuple schema;' | 8;
-+    		for(Tuple t : dataSnk.output) {
-+    			inputInfName = ifInputName + formulateString(t.name) + "Input";
-+    			inputImpName = formulateString(dataSnk.name) + formulateString(t.name) + "Input";
-+    			'schema = new eu.qualimaster.dataManagement.common.replay.Tuple("${t.name}");' | 8;
-+    			for(Field f : t.fields) {
-+    				'schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("${f.name}", ${f.type.class}.class, ${key(f)}, ${f.type.isTimestamp}));' | 8;
-+    			}
-+        		'addTupleHandler(${inputImpName}.class, schema, "${dataSnk.storageLocation}", $strategyStr, new ${inputInfName}Emitter());' | 8;
-+        	}
-+    	'}'
-+    	''
-+	}	
-+	
-+    def main(Configuration config, FileArtifact target, DecisionVariable preElt, DecisionVariable elt, String topoName, mapOf(Tuple,String) nameToOutputMap, mapOf(String, mapOf(Tuple, sequenceOf(Tuple))) globalMap,mapOf(String, setOf(DecisionVariable)) lastElementMap, Boolean debug) {
-+        if(elt.type() == "ReplaySink") {
-+        	isReplay = true;
-+        }
-+        String name = elt.varName().firstToUpperCase() + elt.type();
-+        String preIfName = "I" + preElt.byName("family").varName().firstToUpperCase();
-+		String streamId = elt.varName() + "Stream";
-+		Sink snk = elt;
-+		loadShedding = snk.loadShedding;
-+		DataSink dataSnk = snk.sink;
-+		String qualifiedClsName = dataSnk.sinkCls;
-+		JavaPath javaPath = qualifiedClsName;
-+		String impClassName = javaPath.getName(); //the class name of the sink implementation	
-+			
-+		String fmVarName = elt.varName().firstToUpperCase();
-+		setOf(DecisionVariable) lastElt = {};
-+		if(lastElementMap.containsKey(fmVarName)) {
-+			lastElt = lastElementMap.get(fmVarName); //last elements linked to the current element	
-+		}
-+		
-+		//determine whether the last elements have sub-pipeline-based algorithm
-+		for(DecisionVariable elt : lastElt) {
-+			if(elt.type() == "FamilyElement") {
-+				FamilyElement fe = elt;
-+				Family fm = fe.family;
-+				if(looseSub and hasGenAlgorithm(fm)) {
-+					lastHasSubPipeline = true;
-+				}
-+			}
-+		}
-+		
-+		String snkName =dataSnk.name;
-+		String inputName = snkName.firstToUpperCase();	
-+		
-+		String eltName = elt.varName().firstToUpperCase();
-+		mapOf(Tuple, sequenceOf(Tuple)) inputToOutputMapping = {};
-+		if(globalMap.containsKey(eltName)){
-+			inputToOutputMapping = globalMap.get(eltName);
-+		}		
-+		
-+        'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
-+    	''
-+    	/****************************/
-+    	/*        Imports           */  
-+    	/****************************/     	
-+    	'import java.util.*;'
-+    	'import java.io.IOException;'
-+    	'import java.net.InetAddress;'
-+		'import java.net.UnknownHostException;'
-+    	'import org.apache.log4j.Logger;'
-+    	'import backtype.storm.tuple.*;'
-+    	'import backtype.storm.task.*;'
-+    	'import backtype.storm.topology.*;'
-+    	'import eu.qualimaster.common.signal.*;'
-+    	'import eu.qualimaster.base.algorithm.*;'
-+    	'import eu.qualimaster.dataManagement.strategies.*;'
-+    	'import eu.qualimaster.infrastructure.PipelineOptions;'
-+    	'import eu.qualimaster.events.EventManager;'
-+		'import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;' 
-+    	'import eu.qualimaster.data.inf.I${toIdentifier(snkName)};'
-+    	'import eu.qualimaster.data.inf.I${toIdentifier(snkName)}.*;'
-+    	'import eu.qualimaster.data.imp.${toIdentifier(snkName)};'
-+    	'import eu.qualimaster.data.imp.${toIdentifier(snkName)}.*;'
-+    	//'import $qualifiedClsName;'
-+		'import eu.qualimaster.dataManagement.strategies.*;'
-+		'import eu.qualimaster.dataManagement.DataManager;'
-+    	produceImportsFromLastElements(lastElt, lastElementMap, topoName);
-+    	if(newSwitchLog) {
-+			'import java.io.PrintWriter;'
-+			'import eu.qualimaster.common.logging.DataLogger;'
-+			'import java.util.Calendar;'
-+		}
-+		if(lastHasSubPipeline) {
-+			'import com.esotericsoftware.kryo.KryoException;'
-+    		'import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;'
-+			'import eu.qualimaster.base.serializer.KryoGeneralTupleSerializer;'
-+			'import eu.qualimaster.common.switching.*;'
-+			'import java.util.concurrent.ConcurrentLinkedQueue;'
-+			'import eu.qualimaster.common.signal.PortManager.*;'
-+			'import eu.qualimaster.common.signal.PortManager;'
-+		}
-+    	''
-+    	/****************************/
-+    	/*        Sink class        */  
-+    	/****************************/    	
-+    	'/**'
-+    	'* Defines the Sink class(GEN).'
-+    	'**/'
-+    	'@SuppressWarnings({ "rawtypes", "serial" })'
-+    	'public class $name extends ${baseClass(elt)} {'
-+    	''
-+		    	/****************************/
-+		    	/*     Class variables      */  
-+		    	/****************************/     	
-+    	'    final static Logger logger = Logger.getLogger($name.class);'    	
-+    	'    transient OutputCollector _collector;'
-+    	'    transient I${toIdentifier(snkName)} sinkHandler;'
-+    	'private int counter = 0;'
-+    	produceOutputVariable(dataSnk.output, inputToOutputMapping, nameToOutputMap, inputName);
-+    	produceInputVariable(dataSnk.output, true, inputName);
-+    	if(newSwitchLog){
-+				'private transient PrintWriter out = null;' | 4;
-+		}
-+			
-+		if(lastHasSubPipeline) {
-+			'private int port;' | 4;
-+    		'private static int QUEUE_SIZE = 100;' | 4;
-+    		'private transient TupleReceiverServer server = null;' | 4;
-+    		'private transient Queue<IGeneralTuple> queue = new ConcurrentLinkedQueue<IGeneralTuple>();//receiving tuples' | 4;
-+    		'private transient SynchronizedQueue<IGeneralTuple> syn = null;' | 4;
-+    	}
-+    	''
-+		    	/****************************/
-+		    	/*    Class constructor     */  
-+		    	/****************************/   		  	
-+    	'	public $name(String name, String namespace) {'
-+    	'        super(name, namespace, $genMonitoringProbes);'
-+    	'    }'
-+    	''
-+    	if(isReplay) {
-+    	//generate emitters 
-+    	produceEmitters(snkName, dataSnk.output);
-+    	
-+    	//register tuple handler
-+    	produceRegister(dataSnk);
-+    	}
-+    			/***********************************/
-+		    	/* sendAlgorithmChangeEvent method */  
-+		    	/***********************************/
-+    	''
-+		'    /**'
-+		'     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct' 
-+		'     * testing.'
-+		'     * @param algorithm the new algorithm'
-+		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
-+		'     */'
-+		'    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {'
-+		'        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));'
-+		'    }' 
-+		''   	
-+		    	/****************************/
-+		    	/*     execute method       */  
-+		    	/****************************/     
-+		if(lastHasSubPipeline) {
-+		'/**' | 4;
-+		' * A thread executes tuples.' | 4;
-+		' */' | 4;
-+		'public class ExecuteTuple implements Runnable {' | 4;
-+			'@Override' | 8;
-+    		'public void run() {' | 8;
-+				'while(true) {' | 12;
-+					'forwardTuple(syn.consume().getValue(0));' | 16;
-+				'}' | 12;
-+			'}' | 8;
-+		'}' | 4;
-+		}
-+		''
-+		'public void forwardTuple(Object tupleItem) {' | 4; 
-+			if(newSwitchLog) {
-+				'counter++;'
-+				'out.println(Calendar.getInstance().getTimeInMillis() + " , " + counter);'
-+				'out.flush();'
-+			}
-+	        if (genMonitoringProbes) {		
-+			'        startMonitoring();'
-+			}
-+			'        //for now, sink just emits the tuple that get from last familyelement'		
-+			 //produce input -- output casting statement
-+			produceInputForTuples(inputToOutputMapping, nameToOutputMap, elt);	
-+			if(debug) {	
-+			'        logger.info("Received data in Sink:" + tuple);'
-+			}
-+			if (genMonitoringProbes) {
-+			'        endMonitoring();'
-+			}			
-+		'}' | 4;	
-+		''
-+		'    @Override'
-+        if (loadShedding) {
-+		'    protected void doExecute(Tuple tuple) {'
-+		} else {
-+        '    public void execute(Tuple tuple) {'
-+		}
-+			'forwardTuple(tuple.getValue(0));' | 8;
-+			if(newSwitch) {
-+				'_collector.ack(tuple);' | 8;
-+			}
-+		'    }'
-+	    ''
-+		    	/****************************/
-+		    	/*     prepare method       */  
-+		    	/****************************/ 	    
-+		'    @Override'
-+		'    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {'
-+		'		super.prepare(map, topologyContext, collector);'
-+		'        _collector = collector;'
-+		if(newSwitchLog) {
-+					'String logDir = (String) map.get("LOG.DIRECTORY");' | 8;
-+        			'out = DataLogger.getPrintWriter(logDir + "sink.csv");' | 8;
-+        			'counter = 0;' | 8;
-+        	}
-+		if(!genInstance) {
-+			produceInputVariable(dataSnk.output, false, inputName);
-+		}
-+		registerSerializer(dataSnk.output, inputName);
-+		String ifName = "I${toIdentifier(snkName)}";
-+		'        try {'
-+		'            @SuppressWarnings("unchecked")'
-+		'            Class<? extends $ifName> cls = (Class<? extends $ifName>)Class.forName("$qualifiedClsName");'
-+		String strategyStr = obtainManagementStrategyInstance(dataSnk);		
-+		'			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));'
-+		'			if(autoConnect) {'
-+        '            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, $strategyStr);'
-+		'			} else {'
-+		'            	sinkHandler = cls.newInstance();'
-+		'			}'
-+		setDefaultParameterValue(dataSnk.parameters, "map", "sinkHandler", 12);
-+		'			if (!autoConnect) {'
-+		'		    	sinkHandler.connect();'
-+		'			}'	
-+		if (initByAdaptation) {
-+		'		    sendAlgorithmChangeEvent("$impClassName", null);'	
-+		}
-+		'        } catch (ClassNotFoundException e) {'
-+		'            e.printStackTrace();'
-+		'        } catch (InstantiationException e) {'
-+		'            e.printStackTrace();'
-+		'        } catch (IllegalAccessException e) {'
-+		'            e.printStackTrace();'
-+		'        } catch (ClassCastException e) {'
-+		'            e.printStackTrace();'
-+		'        }'			
-+        		
-+        	if(lastHasSubPipeline) {
-+			 	'queue = new ConcurrentLinkedQueue<IGeneralTuple>();' | 8;
-+			 	'syn = new SynchronizedQueue<IGeneralTuple>(queue, QUEUE_SIZE);' | 8;
-+    			'IGeneralTupleSerializerCreator serCreator = new KryoGeneralTupleSerializerCreator(map);' | 8;
-+    			'ITupleReceiveCreator creator = new TupleReceiverHandlerCreator(serCreator, syn);' | 8;
-+    			produceDynamicPortObtainment();
-+        		'server = new TupleReceiverServer(creator, port);' | 8;
-+        		'server.start();' | 8;
-+        		''
-+        		'Thread exeTupleThread = new Thread(new ExecuteTuple());' | 8;
-+        		'exeTupleThread.start();' | 8;
-+			}
-+			'initMonitor();' | 8;
-+			'logger.info("The end of the prepare method.");' | 8;
-+		'    }'
-+	    ''
-+	    //override the initial monitor
-+	    produceInitMonitor(true, 4);
-+	    ''
-+		    	/****************************/
-+		    	/*     cleanup method       */  
-+		    	/****************************/ 	    
-+	    '    @Override'
-+        '    public void cleanup() {'
-+        '        super.cleanup();'
-+        '		 sinkHandler.disconnect();'
-+        '    }'
-+        ''
-+				/************************************/
-+				/*   declareOutputFields method     */
-+				/************************************/         
-+		'    @Override'
-+		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'
-+		if(genMultiTupleTypes) {
-+			produceStreamIdDeclaration(elt, false, 8);
-+		} else {
-+		'        declarer.declareStream("$streamId", new Fields("sinkData"));'
-+		}
-+		'    }'
-+    	''
-+        '@Override' | 4;
-+        'public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {' | 4;
-+        // don't just ignore this, relevant for figuring out when enactment is completed!
-+        '    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());' | 4;
-+        '    super.notifyAlgorithmChange(signal);' | 4;
-+        '}'    	
-+    	
-+    			/********************************/
-+		    	/* notifyParameterChange method */  
-+		    	/********************************/    	       
-+        if(dataSnk.parameters.isConfigured()) {
-+			'@Override' | 4;
-+			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
-+			'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
-+			'ParameterChange para = signal.getChange(i);' | 12;			
-+			'switch (para.getName()) {' | 12;
-+			sequenceOf(Parameter) parameters = dataSnk.parameters;
-+			for(Parameter p : parameters) {
-+				String paraName = p.name;
-+				String type = parameterTypeName(p);								
-+				'case "$paraName" :' | 16;
-+				Integer indent = 16;
-+				if(formatException(type)) {
-+					indent = 20;
-+					'try {' | indent;
-+				}
-+				'logger.info("Received the parameter $paraName!");' | indent+4;
-+				'sinkHandler.setParameter${paraName.firstToUpperCase()}(para.get${type.firstToUpperCase()}Value()); ' | indent+4;
-+				if(formatException(type)) {
-+					'} catch (ValueFormatException e) {' | indent;
-+						'e.printStackTrace();' | indent+4;
-+					'}' | indent;
-+				} else {
-+					indent = indent+4;
-+				}
-+				'break;' | indent;
-+				}
-+			'}' | 12;
-+			'}' | 8;
-+			'}' |4;		
-+		}
-+		''
-+		/********************************* */
-+    	/*******Prepare shut down signal** */
-+    	/********************************* */
-+    	'@Override' | 4;
-+    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
-+        	'super.prepareShutdown(signal);' | 8;
-+        	'sinkHandler.disconnect();' | 8;
-+    	'}' | 4;
-+    	''
-+    	'}'
-+    }    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSource.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSource.vtl
-new file mode 100644
-index 0000000..db586cd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSource.vtl
-@@ -0,0 +1,481 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormSource(Configuration config, FileArtifact target, DecisionVariable elt, String topoName, Boolean debug) {
-+    Boolean loadShedding = false;
-+	/*
-+	 * Produces the variables of the output tuples.
-+	 */	
-+	def produceInOrOutputVariable(sequenceOf(Tuple) tuples, Boolean output, String srcName) {
-+		String tupleName;
-+		String ending;
-+		if(output) {
-+			ending = "Output";
-+		} else{
-+			ending = "Input";
-+		}
-+		for(Tuple t : tuples) {
-+			//get the tuple name
-+			tupleName = t.name;
-+			//change the first letter to upper letter
-+			tupleName = firstToUpperCase(tupleName);
-+			String srcInfName = "I" + srcName.firstToUpperCase() + "${tupleName}${ending}";
-+			'    transient ${toIdentifier(srcInfName)} dataItem${tupleName} = null;'
-+		}
-+	}
-+	    
-+    def main(Configuration config, FileArtifact target, DecisionVariable elt, String topoName, Boolean debug) {
-+    	//name for the Spout class name
-+        String name = elt.varName().firstToUpperCase() + elt.type();
-+        //ending for the streamId
-+        String nontopoStream = "Stream";
-+        String topoStream = "TopoStream";
-+        //casting the decisionVariable to Source
-+        Source src = elt;  
-+        loadShedding = src.loadShedding; 
-+        DataSource dataSrc = src.source;
-+        String srcName = dataSrc.name;        
-+        String qualifiedClsName = dataSrc.sourceCls; //dataSrc.sourceCls().firstToUpperCase() leads to a problem!! 
-+        JavaPath clsNamePath = qualifiedClsName;
-+        String srcClsName = clsNamePath.getName();
-+        String srcInfName;
-+        String tupleName;
-+ 	
-+        String streamId = elt.varName() + nontopoStream;
-+        String topoStreamId = elt.varName() + topoStream;
-+        String ifacePackageName;
-+		if (dataSrc.profilingSource) {
-+			ifacePackageName = "eu.qualimaster.${toIdentifier(topoName)}.topology";
-+		} else {
-+			ifacePackageName = "eu.qualimaster.data";
-+		}
-+        'package eu.qualimaster.${toIdentifier(topoName)}.topology;'
-+    	''
-+    	/****************************/
-+    	/*        Imports           */  
-+    	/****************************/    	
-+    	'import java.util.*;'
-+    	'import java.io.Serializable;'
-+    	'import org.apache.log4j.Logger;'
-+    	'import backtype.storm.topology.*;'
-+    	'import backtype.storm.task.*;'
-+    	'import backtype.storm.spout.*;'
-+    	'import backtype.storm.tuple.*;'
-+    	'import ${ifacePackageName}.inf.I${toIdentifier(srcName)};'
-+        'import ${ifacePackageName}.inf.I${toIdentifier(srcName)}.*;'
-+        'import ${ifacePackageName}.imp.${toIdentifier(srcName)};'
-+		 if (!dataSrc.profilingSource) { // done through the import above
-+        'import $qualifiedClsName;'
-+        }
-+        'import eu.qualimaster.common.signal.*;'
-+        'import eu.qualimaster.events.EventManager;'
-+    	'import eu.qualimaster.infrastructure.PipelineOptions;'
-+        'import eu.qualimaster.pipeline.DefaultModeException;'
-+    	'import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;'
-+		'import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;'
-+		'import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;'
-+		'import eu.qualimaster.dataManagement.sources.*;'
-+		'import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;'
-+		'import eu.qualimaster.dataManagement.strategies.*;'
-+		'import eu.qualimaster.dataManagement.DataManager;'
-+    	''
-+    	if(logData) {
-+    		'import java.io.BufferedOutputStream;'
-+			'import java.io.File;'
-+			'import java.io.FileNotFoundException;'
-+			'import java.io.FileOutputStream;'
-+			'import java.io.PrintStream;'
-+    	}
-+    	/****************************/
-+    	/*        Spout class        */  
-+    	/****************************/    	
-+    	'/**'
-+    	'* Define the source Spout class(GEN).'
-+    	'**/'
-+    	'@SuppressWarnings({ "rawtypes", "serial" })'
-+    	'public class $name extends BaseSignalSourceSpout implements IDataSourceListener {'
-+    	''
-+		    	/****************************/
-+		    	/*     Class variables      */  
-+		    	/****************************/    	
-+    	'    final static Logger logger = Logger.getLogger($name.class);'
-+    	'    transient SpoutOutputCollector _collector;'
-+    	'    transient I${toIdentifier(srcName)} sourceData;'  
-+    	if(logData) {
-+    		'transient PrintStream out = System.out;'    
-+			'int counter = 0;'
-+			'long record;'
-+    	}  	
-+    	//generates the variables of the output tuples
-+    	if(!genInstance) {
-+    	produceInOrOutputVariable(dataSrc.input, true, srcName);
-+    	}
-+		    	/****************************/
-+		    	/*    Class constructor     */  
-+		    	/****************************/    	
-+	    ''
-+	    '    public $name(String name, String namespace) {'
-+    	'        super(name, namespace, $genMonitoringProbes);'
-+    	'    }'
-+    	''
-+    			/***********************************/
-+		    	/* sendAlgorithmChangeEvent method */  
-+		    	/***********************************/
-+    	''
-+		'    /**'
-+		'     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct' 
-+		'     * testing.'
-+		'     * @param algorithm the new algorithm'
-+		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
-+		'     */'
-+		'    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {'
-+		'        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));'
-+		'    }'  
-+		''  
-+    			/***********************************/
-+		    	/* sendParameterChangeEvent method */  
-+		    	/***********************************/
-+    	''
-+		'    /**'
-+		'     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct' 
-+		'     * testing.'
-+		'     * @param parameter the parameter to be changed'
-+		'     * @param value the new value'
-+		'     * @param causeMsgId the message id of the causing message (may be empty or null)'
-+		'     */'
-+		'    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {'
-+		'        EventManager.send(new ParameterChangedMonitoringEvent("$topoName", "${elt.varName()}", parameter, value, causeMsgId));'
-+		'    }' 
-+        ''
-+        '    /**'
-+        '     * Sends an event for registering the historical data provider of a data source.'
-+        '     * @param source the data source'
-+        '     */'
-+        '    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {'
-+        '        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));'
-+        '    }' 
-+		''
-+		'    protected void configure(SourceMonitor monitor) {'
-+		Integer freq = dataSrc.aggregationFrequency;
-+		'        monitor.setAggregationInterval($freq);'
-+		for(Tuple t : dataSrc.input){
-+		    tupleName = t.name;
-+            tupleName = firstToUpperCase(tupleName);
-+		    srcInfName = toIdentifier("I" + srcName.firstToUpperCase() + "${tupleName}Output");
-+        '        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<$srcInfName>($srcInfName.class) {'
-+        '            @Override'
-+        '            public String getAggregationKey($srcInfName tuple) {'
-+        '                return sourceData.getAggregationKey(tuple);'
-+        '            }'
-+        '        });'		    
-+		}
-+        '    }'		
-+		''	
-+		    	/****************************/
-+		    	/*     open method          */  
-+		    	/****************************/    	
-+    	'    @Override'
-+        '    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {'
-+        '		 super.open(conf, context, collector);'
-+        '        _collector = collector;'
-+        if(logData) {
-+        	'try {'
-+		            'File file = new File("/var/nfs/spass");'
-+		            'if (!file.exists()) {'
-+		                'String userhome = System.getProperty("user.home");'
-+		                'file = new File(userhome);'
-+		            '}'
-+		            'FileOutputStream fos = new FileOutputStream(new File(file, "source.csv"));'
-+		            'BufferedOutputStream bos = new BufferedOutputStream(fos);'
-+		            'out = new PrintStream(bos);'
-+		        '} catch (FileNotFoundException e) {'
-+		            'logger.error(e.getMessage(), e);'
-+		        '}'
-+			'counter = 0;'
-+			'record = System.currentTimeMillis();'
-+        }
-+        String strategyStr = obtainManagementStrategyInstance(dataSrc); 
-+        String ifName = 'I${toIdentifier(srcName)}';
-+        '        try {'
-+        if(safeCast) {
-+        '            @SuppressWarnings("unchecked")'
-+        '            Class<? extends $ifName> cls = (Class<? extends $ifName>) Class.forName("$qualifiedClsName");'
-+        } else {
-+        '            Class cls = Class.forName("$qualifiedClsName");'
-+        }
-+		'			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));'
-+		'			if(autoConnect) {'
-+        '            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, $strategyStr);'
-+        if (dataSrc.profilingSource) {
-+        '               sourceData.forceAutoconnect();'
-+        }
-+        '			} else {'
-+	    	if(safeCast) {
-+		'            	sourceData = cls.newInstance();'
-+			} else {
-+		'            	sourceData = (I${toIdentifier(srcName)}) cls.newInstance();'
-+			}
-+		'			}'
-+		'			sendHistoricalDataProviderRegistrationEvent(sourceData);'
-+		if (initByAdaptation) {
-+		'		    sendAlgorithmChangeEvent("$srcClsName", null);'	
-+		}
-+		setDefaultParameterValue(dataSrc.parameters, "conf", "sourceData", 12);
-+        '			if(!autoConnect) {'
-+		'		    	sourceData.connect();'
-+		'			}'
-+		'        } catch (ClassNotFoundException e) {'
-+		'            e.printStackTrace();'
-+		'        } catch (InstantiationException e) {'
-+		'            e.printStackTrace();'
-+		'        } catch (IllegalAccessException e) {'
-+		'            e.printStackTrace();'
-+		if(safeCast) {
-+		'        } catch (ClassCastException e) {'
-+		'            e.printStackTrace();'
-+		}
-+		'        }'
-+		if(separateSourceThread) {
-+			'Thread emitThread = new Thread(new EmitTuple());'
-+			'emitThread.start();'
-+		}
-+		'initMonitor();' | 8;
-+		'logger.info("The end of the open method.");' | 8;
-+        '    }'
-+        ''
-+        if(separateSourceThread) {
-+        '/**' | 4;
-+		' * A thread emits tuples.' | 4;
-+		' */' | 4;
-+		'public class EmitTuple implements Runnable {' | 4;
-+			'private Boolean cont = true;' | 8;
-+			'public EmitTuple() {'
-+				'cont = true;'
-+			'}'
-+			'@Override' | 8;
-+    		'public void run() {' | 8;
-+				'while(cont) {' | 12;
-+        if (genMonitoringProbes) {
-+            '        startMonitoring();'
-+        }
-+//        '        boolean emitted = false;'
-+        for(Tuple t : dataSrc.input){
-+			//get the tuple name
-+			tupleName = t.name;
-+			//change the first letter to upper letter
-+			tupleName = firstToUpperCase(tupleName);
-+			String srcImpName = toIdentifier(srcName.firstToUpperCase()) + "${tupleName}Output";
-+        	srcInfName = "I" + srcName.firstToUpperCase() + "${tupleName}Output";
-+        '        // Emitting stream "${streamId}${tupleName}".'
-+        if(genInstance) {
-+        '        ${toIdentifier(srcInfName)} dataItem${tupleName} = new ${toIdentifier(srcName.firstToUpperCase())}.$srcImpName();'
-+        } else {
-+        	'        dataItem${tupleName} = new ${toIdentifier(srcName.firstToUpperCase())}.$srcImpName();'
-+        }
-+        '        try {'
-+	    '            dataItem${tupleName} = sourceData.get${tupleName}();'
-+	    '        } catch(DefaultModeException e) {'	
-+	        for(Field f : t.fields) {
-+	        	String fieldName = toIdentifier("${f.name}"); 
-+				String upFieldName = firstToUpperCase(fieldName);
-+				FieldType fdType = f.type;				
-+				'dataItem${tupleName}.set${upFieldName}(${obtainDefaultValue(fdType)});' | 12;	
-+	        }
-+	        'sendDefaultModeMonitoringEvent(e);' | 12;
-+	    '        }'
-+	    String shedCode = "";
-+	    if (loadShedding) {
-+	        shedCode = " && isEnabled(dataItem${tupleName})";
-+	    }
-+	    '        if(dataItem${tupleName}!=null${shedCode}){'	
-+	    if(logData) {
-+	    	'long now = System.currentTimeMillis();'
-+		    'if ((now - record) > 1000) {'
-+			'record = now;'
-+			'out.println(now + ":" + counter);'
-+			'out.flush();'
-+			'counter = 0;'
-+		    '} else {'
-+			'counter++;'
-+		    '}'
-+	    }
-+	        if(debug){   		  
-+		'            logger.info("Get data tuple for data source Spout:" + dataItem${tupleName});'
-+		    }
-+		    if(genMultiTupleTypes) {
-+		    	streamId = formulateString(elt.varName());
-+		    }		
-+		'            _collector.emit("${streamId}${tupleName}", new Values(dataItem${tupleName}));' /*,dataItem${tupleName} */
-+	    '        }'
-+	    ''
-+        }
-+        if (genMonitoringProbes) { // doNextTuple/nextTuple contains endMonitoring
-+		  '        endMonitoring();'
-+        }
-+        '        '					
-+				'}' | 12;
-+			'}' | 8;
-+			''
-+			'public void stop() {'
-+			'cont = false;'
-+			'}'
-+		'}' | 4;
-+		}
-+        //override the initial monitor
-+	    produceInitMonitor(false, 4);
-+	    ''
-+    			/*****************************************/
-+		    	/* sendDefaultModeMonitoringEvent method */  
-+		    	/*****************************************/
-+		'    /**'
-+		'     * Sends an a default mode monitoring event with a DefaultModeException case.' 
-+		'     * @param exceptionCase the DefaultModeException case'
-+		'     */'
-+		'    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {'
-+		'        EventManager.send(new DefaultModeMonitoringEvent("$topoName", "${elt.varName()}", exceptionCase));'
-+		'    }'        
-+		    	/****************************/
-+		    	/*     nextTuple method     */  
-+		    	/****************************/        
-+        '    @Override'
-+        '    public void nextTuple() {'
-+if(!separateSourceThread) {
-+        if (genMonitoringProbes) {
-+            '        startMonitoring();'
-+        }
-+//        '        boolean emitted = false;'
-+        for(Tuple t : dataSrc.input){
-+			//get the tuple name
-+			tupleName = t.name;
-+			//change the first letter to upper letter
-+			tupleName = firstToUpperCase(tupleName);
-+			String srcImpName = toIdentifier(srcName.firstToUpperCase()) + "${tupleName}Output";
-+        	srcInfName = "I" + srcName.firstToUpperCase() + "${tupleName}Output";
-+        '        // Emitting stream "${streamId}${tupleName}".'
-+        if(genInstance) {
-+        '        ${toIdentifier(srcInfName)} dataItem${tupleName} = new ${toIdentifier(srcName.firstToUpperCase())}.$srcImpName();'
-+        } else {
-+        	'        dataItem${tupleName} = new ${toIdentifier(srcName.firstToUpperCase())}.$srcImpName();'
-+        }
-+        '        try {'
-+	    '            dataItem${tupleName} = sourceData.get${tupleName}();'
-+	    '        } catch(DefaultModeException e) {'	
-+	        for(Field f : t.fields) {
-+	        	String fieldName = toIdentifier("${f.name}"); 
-+				String upFieldName = firstToUpperCase(fieldName);
-+				FieldType fdType = f.type;				
-+				'dataItem${tupleName}.set${upFieldName}(${obtainDefaultValue(fdType)});' | 12;	
-+	        }
-+	        'sendDefaultModeMonitoringEvent(e);' | 12;
-+	    '        }'
-+	    String shedCode = "";
-+	    if (loadShedding) {
-+	        shedCode = " && isEnabled(dataItem${tupleName})";
-+	    }
-+	    '        if(dataItem${tupleName}!=null${shedCode}){'	
-+	        if(debug){   		  
-+		'            logger.info("Get data tuple for data source Spout:" + dataItem${tupleName});'
-+		    }
-+		    if(genMultiTupleTypes) {
-+		    	streamId = formulateString(elt.varName());
-+		    }		
-+		'            _collector.emit("${streamId}${tupleName}", new Values(dataItem${tupleName}));' /*,dataItem${tupleName} */
-+	    '        }'
-+	    ''
-+        }
-+        if (genMonitoringProbes) { // doNextTuple/nextTuple contains endMonitoring
-+		  '        endMonitoring();'
-+        }
-+        '        '
-+        }
-+        '    }'
-+        ''
-+        
-+        '@Override' | 4;
-+        'public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {' | 4;
-+        // don't just ignore this, relevant for figuring out when enactment is completed!
-+        '    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());' | 4;
-+        '    super.notifyAlgorithmChange(signal);' | 4;
-+        '}'
-+        
-+    			/********************************/
-+		    	/* notifyParameterChange method */  
-+		    	/********************************/               
-+        if(dataSrc.parameters.isConfigured()) {
-+			'@Override' | 4;
-+			'public void notifyParameterChange(ParameterChangeSignal signal) {' | 4;
-+			'logger.info("Received the parameter change signal!");' | 4;
-+			'for(int i = 0; i < signal.getChangeCount(); i++) {' | 8;
-+			'logger.info("For-loop: Checking each parameter!");' | 8;
-+			'ParameterChange para = signal.getChange(i);' | 12;			
-+			'switch (para.getName()) {' | 12;			
-+			sequenceOf(Parameter) parameters = dataSrc.parameters;
-+			for(Parameter p : parameters) {
-+				String paraName = p.name;
-+				String type = parameterTypeName(p);				
-+				'case "$paraName" :' | 16;
-+				Integer indent = 16;
-+				if(formatException(type)) {
-+					indent = 20;
-+					'try {' | indent;
-+				}
-+				'logger.info("Received the parameter $paraName!");' | indent+4;
-+				'sourceData.setParameter${paraName.firstToUpperCase()}(para.get${type.firstToUpperCase()}Value()); ' | indent + 4;
-+				'sendParameterChangeEvent("$paraName", para.get${type.firstToUpperCase()}Value(), signal.getCauseMessageId());' | indent+4;
-+				if(formatException(type)) {
-+					'} catch (ValueFormatException e) {' | indent;
-+						'e.printStackTrace();' | indent+4;
-+					'}' | indent;
-+				} else {
-+					indent = indent+4;
-+				}
-+				'break;' | indent;
-+				}
-+			'}' | 12;
-+			'}' | 8;
-+			'}' |4;	
-+		}        
-+        ''
-+        '    @Override'
-+        '    public void notifyIdsNamesMapChanged() {'
-+        '        sendHistoricalDataProviderRegistrationEvent(sourceData);'
-+        '    }'
-+        ''
-+				/****************************/
-+				/*       close method       */
-+				/****************************/             
-+        '    @Override'
-+        '    public void close() {'
-+        '        super.close();'
-+        '		 sourceData.disconnect();'
-+        '    }'
-+        ''
-+				/************************************/
-+				/*   declareOutputFields method     */
-+				/************************************/        
-+        '	@Override'
-+		'    public void declareOutputFields(OutputFieldsDeclarer declarer) {'
-+		if(genMultiTupleTypes) {//use the tuple type to conduct the stream id, the stream id is in the form of "EltVarName+TupleName+AlgName"
-+			produceStreamIdDeclaration(elt, false, 8);
-+		} else {
-+			for(Tuple t : dataSrc.input){
-+			//get the tuple name
-+			tupleName = t.name;
-+			//change the first letter to upper letter
-+			tupleName = firstToUpperCase(tupleName);
-+			'        declarer.declareStream("${streamId}${tupleName}", new Fields("datastream${tupleName}"));'        	     				
-+			}
-+		}
-+		'    }'
-+		''
-+		/********************************* */
-+    	/*******Prepare shut down signal** */
-+    	/********************************* */
-+    	'@Override' | 4;
-+    	'protected void prepareShutdown(ShutdownSignal signal) {' | 4;
-+        	'super.prepareShutdown(signal);' | 8;
-+        	'sourceData.disconnect();' | 8;
-+    	'}' | 4;
-+    	''
-+    	'}'
-+    }    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSubPipeline.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSubPipeline.vtl
-new file mode 100644
-index 0000000..56b8ab7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/stormSubPipeline.vtl
-@@ -0,0 +1,237 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template stormSubPipeline(Configuration config, FileArtifact target, SubPipeline pipeline, Family family, String algName) {
-+	setOf(String) bolts = {}; //collect the generated bolt name
-+	setOf(String) flows = {}; //collect the passed flow name(varname)
-+	setOf(String) produced = {}; //collect the produced element(for only generating the spout/Bolt definition once) 
-+	mapOf(String, Integer) nodeToRepeatNumMap = {};
-+	mapOf(String, String) parameterToNode = {};
-+	String pipName = pipeline.name;
-+	String fName = family.name;
-+	String lastFamilyElementTmp;
-+	String lastFamilyElement;
-+	Integer maxParallelism = 0;
-+	
-+	def processElement(Source elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, Boolean newFlow, Boolean connector) {
-+    	String nameVar = elt.varName(); 
-+    	String name = elt.name; 
-+    	DataSource dataSrc = elt.source;    	
-+ 		
-+        if(newFlow){
-+    	    produceStatement(elt, grouping, tupleType, preElt, false, connector);
-+    	}
-+    	
-+		Boolean nFlow;	   	
-+		for (Flow flow : elt.output) {
-+			String flowName = flow.varName();
-+			if(isStringExisted(flowName, flows)){
-+				nFlow = false;
-+			} else {
-+				nFlow = true;
-+				flows.add(flowName);
-+			}					
-+			processElement(flow.destination, flow.grouping, flow.tupleType, elt, nFlow, false);
-+		}
-+    }
-+    
-+    def processElement(Sink elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, Boolean newFlow, Boolean connector) {
-+        if(newFlow){
-+    	    produceStatement(elt, grouping, tupleType, preElt, true, connector);
-+    	}    		
-+    }
-+    
-+    def collectParameters(sequenceOf(Parameter) parameters, String name) {
-+    	for(Parameter p : parameters) {
-+    		parameterToNode.add(p.name, name);
-+    	}
-+    }
-+    
-+    def processElement(FamilyElement elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, Boolean newFlow, Boolean connector) {
-+    	String nameVar = elt.varName(); 
-+    	String name = elt.name; 
-+
-+        lastFamilyElementTmp = name;
-+ 		
-+        if(newFlow){
-+    	    produceStatement(elt, grouping, tupleType, preElt, true, connector);
-+    	}
-+    	
-+		Boolean nFlow;	   	
-+		for (Flow flow : elt.output) {
-+			String flowName = flow.varName();
-+			if(isStringExisted(flowName, flows)){
-+				nFlow = false;
-+			} else {
-+				nFlow = true;
-+				flows.add(flowName);
-+			}					
-+			processElement(flow.destination, flow.grouping, flow.tupleType, elt, nFlow, false);
-+		}
-+    }
-+    
-+    def produceStatement(DecisionVariable elt, Grouping grouping, Tuple tupleType, PipelineNode preElt, Boolean bolt, Boolean connector) {
-+    	//name of the pre-element
-+    	String eltNameVar = preElt.name;
-+    	//name for Spout/Bolt
-+    	String name = elt.varName();
-+    	//Spout/Bolt class name
-+    	String clsName = className(elt); 
-+    	//get the parallelism
-+    	Integer parallelism = elt.byName("parallelism"); 
-+    	//obtain the maximum parallelism
-+    	if(parallelism > maxParallelism) {
-+ 			maxParallelism = parallelism;
-+ 		}
-+    	//obtain the meaningful display name of the element 
-+    	String eltType = elt.type();
-+    	String displayName;
-+    	setOf(Flow) flows;
-+    	Parameters parameters;
-+    	if(eltType == "Source") {
-+    		//cast the elt to Source
-+    		Source source = elt;
-+    		//get the display name
-+    		displayName = source.name;
-+    		//get the flows
-+    		flows = source.output;
-+    		parameters = source.source.parameters;
-+    	} else if (eltType == "FamilyElement") {
-+    		//cast the elt to FamilyElement
-+    		FamilyElement familyElt = elt;
-+    		//get the display name
-+    		displayName = familyElt.name;
-+    		//get the flows
-+    		flows = familyElt.output;
-+    		parameters = familyElt.family.parameters;
-+    	} else if (eltType == "Sink") {
-+    		//cast the elt to Source
-+    		Sink sink = elt;
-+    		//get the display name
-+    		displayName = sink.name;
-+    		//get the parameters
-+    		parameters = sink.sink.parameters;
-+    	}			   	
-+    	
-+        if (bolt) {    	    
-+    	    if(isStringExisted(name, bolts)){ //no node to be produced but the grouping statement 
-+    	    	grouping(name, grouping, tupleType, eltNameVar);
-+ 	    	} else {
-+ 	    	  collectParameters(parameters, displayName);
-+ 	    	  '// Declare a Bolt "$displayName"' | 8;
-+ 	          'BoltDeclarer $name =builder.setBolt(prefix+"${firstToUpperCase(displayName)}", new $clsName(prefix+"${firstToUpperCase(displayName)}", namespace), $parallelism)${produceNumTasks(elt)};' | 8;  
-+    	      if(connector) {
-+ 	    		'$name.$grouping(input, streamId);' | 8;
-+ 	    	  } else {	    	
-+		    	'//$name subscribing streams:' | 8;
-+		    	//special grouping statement for the nodes which are not as connectors 
-+		    	grouping(name, grouping, tupleType, eltNameVar);  	    	    	    	    	
-+			  }
-+    	      bolts.add(name); 
-+ 	    	} 	    	
-+        } else {
-+        	'// Declare a Spout "$displayName"' | 8;
-+		    'builder.setSpout(prefix+"${firstToUpperCase(displayName)}", new $clsName("${firstToUpperCase(displayName)}", namespace), $parallelism)${produceNumTasks(elt)};' | 8;
-+        }
-+    }
-+
-+    def grouping(String eltName, Grouping grouping, Tuple tupleType, String preEltName) { 
-+    	String tName = tupleType.name.firstToUpperCase();
-+    	String streamId = preEltName.firstToUpperCase() + tName;    	
-+		'$eltName.$grouping(prefix+"${firstToUpperCase(preEltName)}", "$streamId");' | 8;		  	 	   	
-+    }
-+       
-+	def createSubPipeline(SubPipeline pipeline) {
-+		Tuple t;
-+		//considering [Source, FamilyElement]
-+		//start from the connectors
-+		for (DecisionVariable r : pipeline.connectors) {
-+    		processElement(r, Grouping.shuffleGrouping, t, r, true, true);
-+    	}
-+    	lastFamilyElement = lastFamilyElementTmp;//save the recorded last family element.
-+ 		//check from the sources
-+		for (DecisionVariable r : pipeline.sources) {
-+    		processElement(r, Grouping.shuffleGrouping, t, r, true, false);
-+    	}
-+
-+	}
-+	def main(Configuration config, FileArtifact target, SubPipeline pipeline, Family family, String algName) {		
-+		Integer numWorkers = pipeline.numworkers;
-+		String pipName = pipeline.name;
-+		algName = algName.toIdentifier();
-+		fName = fName.firstToUpperCase();
-+		'package eu.qualimaster.$algName.topology;'
-+		''
-+		'import org.apache.log4j.Logger;'
-+		'import backtype.storm.Config;'
-+		'import backtype.storm.topology.TopologyBuilder;'
-+		'import eu.qualimaster.base.algorithm.ITopologyCreate;'
-+		'import eu.qualimaster.base.algorithm.SubTopologyOutput;'
-+		'import backtype.storm.topology.BoltDeclarer;'
-+		'import eu.qualimaster.common.signal.ParameterChangeSignal;'
-+		'import eu.qualimaster.common.signal.SignalException;'
-+		'import eu.qualimaster.observables.IObservable;'
-+		'import eu.qualimaster.families.inf.I$fName;'
-+		''
-+		'public class ${firstToUpperCase(toIdentifier(pipName))}SubTopology implements I$fName, ITopologyCreate {'
-+		'    final static Logger logger = Logger.getLogger(${firstToUpperCase(toIdentifier(pipName))}SubTopology.class);'
-+			for (Parameter p : family.parameters) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+    			'private ${parameterTypeName(p)} $paramName;' | 4;
-+	    	}
-+	    	'private transient State state;' | 4;
-+	    	''
-+			'public void switchState(State arg0) {' | 4;
-+				'this.state = arg0;	' | 8;	
-+			'}' | 4;
-+			''
-+			'public Double getMeasurement(IObservable observable) {' | 4;
-+				'return null;' | 8;
-+			'}' | 4;
-+			''
-+			'public SubTopologyOutput createSubTopology(TopologyBuilder builder,
-+			Config config, String prefix, String input, String streamId) {' | 4;
-+				'String namespace = "$pipName";' | 8;
-+				'if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {' | 8;
-+					'namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);' | 12;
-+				'}' | 8;
-+			createSubPipeline(pipeline);
-+			Tuple t = family.output[0];//TODO:consider multiple outputs of the family
-+			String tupleName = t.name;
-+			'return new SubTopologyOutput(prefix+"${firstToUpperCase(lastFamilyElement)}", "${firstToUpperCase(lastFamilyElement)}${firstToUpperCase(tupleName)}", $numWorkers, $maxParallelism); //TODO: consider PipelineOptions to change the parallelisms' | 8;//This is based on the assumption that we only have on algorithm for the family in the subpipeline.
-+			'}' | 4;
-+			''
-+			//produce the calculate statement based on the input-output pairs
-+			produceForCalculate(family, false);
-+			''
-+			if (family.byName("parameters").variables().size()>0) {
-+	        ''
-+	        for (Parameter p : family.parameters) {
-+	        	String paramName = p.name;
-+    			String mname = firstToUpperCase(toIdentifier(paramName));
-+    			String nodeName = parameterToNode.get(paramName);
-+	        	'    /**'
-+	        	'     * Sets the algorithm parameter "${paramName}". Note that the actual parameter change will be dynamically'
-+	        	'     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the'
-+	        	'     * sub-topology.'
-+	        	'     *'
-+	        	'     * @param value the new value of the algorithm parameter'
-+	        	'     */'
-+	        	'    public void setParameter${mname}(${parameterTypeName(p)} value) {'
-+	        	'        this.$paramName = $paramName;'
-+	        	'        try {'
-+                '            logger.info("sending new ${mname} signal " + value + "!");'
-+                '            ParameterChangeSignal signal = new ParameterChangeSignal("${pipeline.name}", '
-+                '                    "${firstToUpperCase(algName)}${firstToUpperCase(nodeName)}", "$paramName", value, null);'
-+      		    '            signal.sendSignal();'
-+    			'        } catch (Exception e) {'
-+      			'            logger.error("Signal not sent!");'
-+     			'            e.printStackTrace();'
-+    			'        }'
-+	        	'    }'
-+	        	''      	
-+	    	}
-+    	}
-+'}'
-+	}
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/tupleSerialization.vtl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/tupleSerialization.vtl
-new file mode 100644
-index 0000000..d92a935
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/EASy/tupleSerialization.vtl
-@@ -0,0 +1,249 @@
-+import commonVTLMethods;
-+@advice(QM)
-+template tupleSerialization(Configuration config, FileArtifact target, DecisionVariable elt, String pkg) {
-+	def String kryoName(DecisionVariable f) {
-+		// arrays would go to "Ints" etc., further Java basic types 
-+		// are currently not defined in Basics and go as wrappers, boxing/unboxing 
-+    	switch(fieldTypeName(f)) {
-+    		"int" : "Int",
-+    		"long" : "Long",
-+    		"String" : "String",
-+    		"boolean" : "Boolean",
-+    		"float" : "Float",
-+    		"double" : "Double",
-+    		default : ""
-+    	}
-+    }
-+	
-+    def produceForTuples(Tuples tuples, Boolean output, Boolean family, String fName, Integer indent) {
-+	    String type;
-+	    String nestType;
-+	    String infType;
-+	    String infNestType;
-+	    String serializerType;
-+	    String typeName;
-+    	String tupleName;
-+    	String ifName;
-+    	if(family) {
-+    		ifName = "I" + fName;
-+    	} else  {
-+    		ifName = fName;
-+    	}
-+    	for (Tuple t : tuples) {
-+    		Boolean flag1 = true;
-+    		Boolean flag2 = false;
-+    		tupleName = t.name;
-+    		tupleName = firstToUpperCase(tupleName);
-+	        if (output) {
-+    		    nestType = "${ifName}${tupleName}Output";
-+    		    infNestType = "I${ifName}${tupleName}Output";
-+    		    typeName = "output";
-+    	    } else {
-+    		    nestType = "${ifName}${tupleName}Input";
-+    		    infNestType = "I${ifName}${tupleName}Input";
-+    		    typeName = "input";   		
-+    	    }
-+    	    serializerType = nestType + "Serializer";
-+    	    type = "${fName}.${nestType}"; // qualify inner classes
-+    	    infType = "${ifName}.${infNestType}";	//qualify inner interfaces	  	    	   		   
-+		    '/**' | indent;
-+            '* Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data ${typeName} for the {@link ${infType}} algorithm.' | indent + 1;
-+		    '*/' | indent + 1;
-+    	    'public static class $serializerType extends Serializer<${type}> implements ISerializer<${infType}> {' | indent;
-+    	    ''
-+    	    '@Override' | indent + 4;
-+    	    'public void serializeTo($infType object, OutputStream out) throws IOException {' | indent + 4;    			
-+	    		for (Field f : t.fields) {	
-+	    			if(isBasicType(f.type)) {
-+						if(flag1){
-+			    			'S$nestType tmp = S$nestType.newBuilder()' | indent + 8; 
-+			    			flag1 = false; //generate once
-+			    			flag2 = true;
-+		    			}   			
-+		    			String fname = toIdentifier("${f.name}");
-+		    			String mname = firstToUpperCase(fname);		    			
-+		    			'.set${mname}(object.get${mname}())' | indent + 12; 	    			
-+	    			}  			   			
-+	    		}
-+	    		if(flag2) {
-+	    			'.build();' | indent + 12;
-+	    			'tmp.writeDelimitedTo(out);' | indent + 8;  
-+	    			flag2 = false; //generate once
-+    			}
-+    			for (Field f : t.fields) {
-+    				String fname = toIdentifier("${f.name}");
-+    				String mname = firstToUpperCase(fname);     				  				
-+    				if(!isBasicType(f.type)) {   					
-+    					if(!isListType(f.type)){
-+	    					'SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).serializeTo(object.get${mname}(), out);' | indent + 8;    					
-+    					} else {
-+    						String innertype = obtainInnerType(f.type.class);
-+    						'SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).serializeTo(object.get${mname}(), out);' | indent + 8;
-+    					}
-+    				}
-+    			} 	    
-+    	    '}' | indent + 4;
-+    	    ''
-+
-+            produceDataInputSerialization(t, infType, indent + 4);
-+    	    /*'@Override' | indent + 4;
-+    	    'public void serializeTo($infType object, IDataOutput out) throws IOException {' | indent + 4;
-+	    		for (Field f : t.fields) {	
-+		    		String fname = toIdentifier("${f.name}");
-+		    		String mname = firstToUpperCase(fname);		    			
-+	    			if(isBasicType(f.type)) {
-+	    				String tname = firstToUpperCase(fieldTypeName(f));
-+		    			'out.write${tname}(object.get${mname}());' | indent + 8;
-+	    			} else {
-+    					if(!isListType(f.type)){
-+	    					'SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).serializeTo(object.get${mname}(), out);' | indent + 8;
-+    					} else {
-+    						String innertype = obtainInnerType(f.type.class);
-+    						'SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).serializeTo(object.get${mname}(), out);' | indent + 8;
-+    					}
-+	    			}
-+	    		}
-+    	    '}' | indent + 4;
-+    	    ''*/
-+    	    
-+    	    '@Override' | indent + 4;
-+    	    'public $infType deserializeFrom(InputStream in) throws IOException {' | indent + 4;
-+    			'$type result = new $type();' | indent + 8;
-+    			flag1 = true;			
-+	    		for (Field f : t.fields) {
-+	    			String fname = toIdentifier("${f.name}");
-+	    			String mname = firstToUpperCase(fname);
-+	    			if(isBasicType(f.type)) {
-+	    				if(flag1) {
-+	    					'S$nestType tmp = S$nestType.parseDelimitedFrom(in);' | indent + 8; 
-+	    					flag1 = false; //only generate once
-+	    				} 
-+	    				'result.set${mname}(tmp.get${mname}());'	| indent + 8;    			
-+	    			} else {	    				
-+    					if(!isListType(f.type)){
-+	    					'result.set${mname}(SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).deserializeFrom(in));' | indent + 8;
-+    					} else {
-+    						String innertype = obtainInnerType(f.type.class);
-+    						'result.set${mname}(SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).deserializeFrom(in));' | indent + 8;
-+    					}
-+	    				
-+	    			}	    			
-+	    		} 
-+    		'return result;' | indent + 8;  	    
-+    	    '}' | indent + 4;
-+    	    ''
-+
-+            produceDataInputDeserialization(t, infType, type, indent + 4);
-+    	    /*'@Override' | indent + 4;
-+    	    'public $infType deserializeFrom(IDataInput in) throws IOException {' | indent + 4;
-+    			'$type result = new $type();' | indent + 8;
-+	    		for (Field f : t.fields) {
-+		    		String fname = toIdentifier("${f.name}");
-+		    		String mname = firstToUpperCase(fname);		    			
-+	    			if(isBasicType(f.type)) {
-+	    				String tname = firstToUpperCase(fieldTypeName(f));
-+		    			'result.set${mname}(in.next${tname}());' | indent + 8; 	    			
-+	    			} else {
-+     					if(!isListType(f.type)){
-+	    					'result.set${mname}(SerializerRegistry.getSerializerSafe("${f.type.name}", ${f.type.class}.class).deserializeFrom(in));' | indent + 8;
-+    					} else {
-+    						String innertype = obtainInnerType(f.type.class);
-+    						'result.set${mname}(SerializerRegistry.getListSerializerSafe("${f.type.name}", $innertype.class).deserializeFrom(in));' | indent + 8;
-+    					}
-+	    			}
-+	    		}
-+    		'return result;' | indent + 8;  	    
-+    	    '}' | indent + 4;
-+    	    ''*/
-+    	    
-+    	    '@Override' | indent + 4;
-+    	    'public void write(Kryo kryo, Output output, $type object) {' | indent + 4;
-+    		for (Field f : t.fields) {
-+    			String fname = toIdentifier("${f.name}");
-+    			String mname = firstToUpperCase(fname);
-+    			String kname = kryoName(f);
-+    			if (kname == "") {
-+    				'kryo.writeObject(output, object.get${mname}());' | indent + 8;
-+    			} else {
-+    			    'output.write${kname}(object.get${mname}());' | indent + 8;
-+    			}
-+    		}
-+    	    
-+    	    '}' | indent + 4;
-+    	    ''
-+    	    '@Override' | indent + 4;
-+    	    'public $type read(Kryo kryo, Input input, Class<$type> type) {' | indent + 4;
-+    	    '$type result = new $type();' | indent + 8;
-+    		for (Field f : t.fields) {
-+    			String fname = toIdentifier("${f.name}");
-+    			String mname = firstToUpperCase(fname);
-+    			String kname = kryoName(f);
-+    			String tname = stripTemplates(fieldTypeName(f));
-+    			if (kname == "") {
-+    				'result.set${mname}(kryo.readObject(input, ${tname}.class));' | indent + 8;
-+    			} else {
-+    			    'result.set${mname}(input.read${kname}());' | indent + 8;
-+    			}
-+    		}
-+    	    'return result;' | indent + 8;
-+    	    '}' | indent + 4;
-+    	   
-+    	'}' | indent;
-+    	''	   		   	       	
-+      }
-+    }
-+	def produceFor(DecisionVariable elt) {
-+		'//unhandled type ${elt.type()}'
-+	}
-+	def produceFor(Family elt) {
-+		produceForTuples(elt.input, false, true, formulateString(elt.name), 0);
-+		produceForTuples(elt.output, true, true, formulateString(elt.name), 0);
-+	}
-+	
-+	def produceFor(DataSource elt) {
-+		produceForTuples(elt.input, true, false, formulateString(elt.name), 0);
-+	}
-+	def produceFor(DataSink elt) {
-+		produceForTuples(elt.output, false, false, formulateString(elt.name), 0);
-+	}
-+	
-+    def main(Configuration config, FileArtifact target, DecisionVariable elt, String pkg) {
-+    	
-+    	'package $pkg.imp;'
-+    	''
-+    	'import java.io.IOException;'
-+    	'import java.io.InputStream;'
-+		'import java.io.OutputStream;'
-+    	'import javax.annotation.Generated;'
-+    	'import com.esotericsoftware.kryo.io.Output;'
-+    	'import com.esotericsoftware.kryo.io.Input;'
-+    	'import com.esotericsoftware.kryo.Serializer;'
-+    	'import com.esotericsoftware.kryo.Kryo;'
-+    	'import eu.qualimaster.dataManagement.serialization.ISerializer;'
-+    	'import eu.qualimaster.dataManagement.serialization.SerializerRegistry;'
-+    	'import eu.qualimaster.dataManagement.serialization.IDataInput;'
-+    	'import eu.qualimaster.dataManagement.serialization.IDataOutput;'
-+    	'import $pkg.imp.${formulateString(eltName(elt))};'
-+    	'import $pkg.inf.*;'
-+    	''
-+    	'import eu.qualimaster.protos.${formulateString(eltName(elt))}Protos.*;'
-+   		String comment;
-+   		if(elt.type() == "Family") {
-+   			comment = "the algorithm family \"I${formulateString(eltName(elt))}\"";
-+   		} else {
-+   			comment = "the data element \"${formulateString(eltName(elt))}\"";
-+   		}
-+    	'/**'
-+    	' * The implementation of the serializers for $comment (GEN).'
-+    	' */'
-+    	'@Generated(value="EASy-Producer")'
-+    	'public class ${formulateString(eltName(elt))}Serializers {'
-+    	''
-+    	produceFor(elt);
-+//    	produceForTuples(family.input, false, true, fName, 4);
-+//    	produceForTuples(family.output, true, true, fName, 4);
-+    		
-+        '}'
-+    }
-+    
-+}
-\ No newline at end of file
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/GenTopoHardwareCorrelationFinancialSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/GenTopoHardwareCorrelationFinancialSubTopology.java
-new file mode 100644
-index 0000000..9bf7b74
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/GenTopoHardwareCorrelationFinancialSubTopology.java
-@@ -0,0 +1,68 @@
-+package eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial;
-+
-+import eu.qualimaster.base.algorithm.ITopologyCreate;
-+import eu.qualimaster.base.algorithm.SubTopologyOutput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial;
-+import eu.qualimaster.observables.IObservable;
-+import backtype.storm.topology.TopologyBuilder;
-+import backtype.storm.Config;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+
-+public class GenTopoHardwareCorrelationFinancialSubTopology implements ITopologyCreate, IFCorrelationFinancial {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(GenTopoHardwareCorrelationFinancialSubTopology.class);
-+    private String pipelineName = "TimeTravelSimPip";
-+
-+    public SubTopologyOutput createSubTopology(TopologyBuilder topologyBuilder,
-+                Config config, String prefix, String input, String streamId) {
-+        String keyPrefix = prefix + ".GenTopoHardwareCorrelationFinancial.";
-+        String senderKey = keyPrefix + "sender";
-+        String receiverKey = keyPrefix + "receiver";
-+        int senderParallelism = PipelineOptions.getExecutorParallelism(config, senderKey, 1);
-+        int senderTasks = PipelineOptions.getTaskParallelism(config, senderKey, 1);
-+        int receiverParallelism = PipelineOptions.getExecutorParallelism(config, receiverKey, 12);
-+        int receiverTasks = PipelineOptions.getTaskParallelism(config, receiverKey, 12);
-+        int totalParallelism = Math.max(senderParallelism, receiverParallelism);
-+        topologyBuilder.setSpout(prefix + "HardwareConnectionSpout", new HardwareConnectionSpout(prefix + "HardwareConnectionSpout",
-+                                pipelineName, streamId), receiverParallelism).setNumTasks(receiverTasks);
-+        topologyBuilder.setBolt(prefix + "HardwareConnectionBolt", new HardwareConnectionBolt(prefix + "HardwareConnectionBolt",
-+                                pipelineName), senderParallelism).setNumTasks(senderTasks).shuffleGrouping(input, streamId);
-+        return new SubTopologyOutput(prefix + "HardwareConnectionSpout", streamId, 1, totalParallelism);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    @Override
-+    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    @Override
-+    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    public Double getMeasurement(IObservable observable) {
-+        return null; 
-+    }
-+
-+    @Override
-+    public void switchState(State state) {
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionBolt.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionBolt.java
-new file mode 100644
-index 0000000..9bd0d82
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionBolt.java
-@@ -0,0 +1,257 @@
-+package eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial;
-+
-+import java.io.IOException;
-+import java.io.ByteArrayOutputStream;
-+import java.util.Map;
-+import backtype.storm.task.OutputCollector;
-+import backtype.storm.task.TopologyContext;
-+import backtype.storm.topology.OutputFieldsDeclarer;
-+import backtype.storm.tuple.Tuple;
-+import eu.qualimaster.common.signal.AbstractMonitor;
-+import eu.qualimaster.common.signal.BaseSignalBolt;
-+import eu.qualimaster.base.algorithm.HardwareTransmitter;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.base.serializer.Parameters.*;
-+import eu.qualimaster.common.signal.ShutdownSignal;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.ParameterChange;
-+import eu.qualimaster.common.signal.ValueFormatException;
-+import eu.qualimaster.observables.ResourceUsage;
-+import java.util.Queue;
-+import java.util.concurrent.ConcurrentLinkedQueue;
-+import eu.qualimaster.common.switching.SynchronizedQueue;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialSymbolListInput;
-+
-+public class HardwareConnectionBolt extends BaseSignalBolt {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionBolt.class);
-+    private transient OutputCollector collector;
-+    private String ip;
-+    private int port = 0;
-+    private boolean ready = false;
-+    private transient Queue<Tuple> queueTuple = new ConcurrentLinkedQueue<Tuple>();
-+    private transient HardwareTransmitter hardwareConnection;
-+    private transient ByteArrayOutputStream output = null;
-+    private transient ByteArrayOutputStream paraOutput = null;
-+    private String separator;
-+    private transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    private transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+    private int size;
-+    private transient DataAcker dataAcker;
-+    private transient Queue<Tuple> queue = new ConcurrentLinkedQueue<Tuple>();
-+    private transient SynchronizedQueue<Tuple> syn = null;
-+
-+    public HardwareConnectionBolt(String name, String namespace) {
-+        super(name, namespace, true); 
-+    }
-+
-+    @SuppressWarnings("rawtypes")
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
-+        super.prepare(map, topologyContext, outputCollector);
-+        collector = outputCollector;
-+        ip = "147.27.39.13";
-+        ready = false;
-+        queueTuple = new ConcurrentLinkedQueue<Tuple>();
-+        output = new ByteArrayOutputStream();
-+        paraOutput = new ByteArrayOutputStream();
-+        new IFCorrelationFinancialPreprocessedStreamInput();
-+        new IFCorrelationFinancialSymbolListInput();
-+        queue = new ConcurrentLinkedQueue<Tuple>();
-+        size = 50;
-+        syn = new SynchronizedQueue<Tuple>(queue, size);
-+        try {
-+            dataAcker = new DataAcker();
-+        } catch (Exception e) {
-+            logger.error("", e);
-+        }
-+        Thread dataAckerThread = new Thread(dataAcker);
-+        dataAckerThread.start();
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+    public class DataAcker implements Runnable {
-+        private boolean cont = false;
-+
-+        public DataAcker() {
-+            cont = true;
-+        }
-+
-+        @Override
-+        public void run() {
-+            while(cont) {
-+                collector.ack(syn.consume());
-+            }
-+        }
-+
-+        public void stop() {
-+            cont = false;
-+        }
-+    }
-+
-+
-+    public void execute(Tuple tuple) {
-+        queueTuple.offer(tuple);
-+        if(ready) {
-+            sendTuple();
-+        }
-+    }
-+
-+    protected void sendTuple() {
-+        AbstractMonitor monitor = createThreadMonitor();
-+        Tuple tuple = queueTuple.poll();
-+    if(tuple != null) {
-+        if(tuple.getValue(0) instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
-+if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
-+            separator = "da";
-+            inputPreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tuple.getValue(0);
-+            try {
-+                output.reset();
-+                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPreprocessedStreamInput", IIFCorrelationFinancialPreprocessedStreamInput.class).serializeTo(inputPreprocessedStream, output);
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+}
-+        }
-+
-+        if(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput) {
-+if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
-+            separator = "db";
-+            inputSymbolList = (IIFCorrelationFinancialSymbolListInput)tuple.getValue(0);
-+            try {
-+                output.reset();
-+                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialSymbolListInput", IIFCorrelationFinancialSymbolListInput.class).serializeTo(inputSymbolList, output);
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+}
-+        }
-+
-+        syn.produce(tuple);
-+        if (connect()) {
-+            if(output != null && separator != null) {
-+                monitor.startMonitoring();
-+                hardwareConnection.sendSeparator(separator);
-+                hardwareConnection.sendData(output.toByteArray());
-+                monitor.endMonitoring(tuple);
-+                }
-+            }
-+    }
-+    }
-+    private boolean connect() {
-+        if (null == hardwareConnection) {
-+            try {
-+                hardwareConnection = new HardwareTransmitter(ip, port);
-+                logger.info("Created a transmitter connection.");
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+        }
-+        return null != hardwareConnection;
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        logger.info("Received the parameter change signal!");
-+        String paraSeparator = null;
-+        try {
-+            for(int i = 0; i < signal.getChangeCount(); i++) {
-+                ParameterChange para = signal.getChange(i);
-+                paraOutput.reset();
-+                switch (para.getName()) {
-+                    case "windowSize" :
-+                        logger.info("Received parameter changing signal windowSize");
-+                        IntegerParameter windowSizePara = new IntegerParameter();
-+                        windowSizePara.setName("windowSize");
-+                        windowSizePara.setValue(para.getIntValue());
-+                        SerializerRegistry.getSerializerSafe("IntegerParameter", IntegerParameter.class).serializeTo(windowSizePara, paraOutput);
-+                        paraSeparator = "pa";
-+                        if (connect()) {
-+                            if(paraOutput != null && paraSeparator != null) {
-+                                hardwareConnection.sendSeparator(paraSeparator);
-+                                hardwareConnection.sendData(paraOutput.toByteArray());
-+                            }
-+                        }
-+                        break;
-+                    case "port": 
-+                        logger.info("Received signal port!"); 
-+                        port = para.getIntValue();
-+                        ready = true;
-+                        logger.info("Received signal port!" + port); 
-+                        recordOnce(ResourceUsage.USED_CPUS, 1);
-+                        recordOnce(ResourceUsage.USED_DFES, 1);
-+                        break;
-+                    case "omit": 
-+                        logger.info("Received signal omit, sending the omit message to hardware!!");
-+                        paraSeparator = "cc";
-+                        if (connect()) {
-+                                hardwareConnection.sendSeparator(paraSeparator);
-+                        }
-+                    break;
-+                    case "flush": 
-+                        logger.info("Received signal flush, sending the flush message to hardware!!");
-+                        if (connect()) {
-+                                hardwareConnection.sendFlushMessage();
-+                        }
-+                    break;
-+                }
-+            }
-+        } catch (ValueFormatException e) {
-+            e.printStackTrace();
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        dataAcker.stop();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(output != null) {
-+                output.close();
-+            }
-+            if(paraOutput != null) {
-+                paraOutput.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+        recordOnce(ResourceUsage.USED_CPUS, 0);
-+        recordOnce(ResourceUsage.USED_DFES, 0);
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(output != null) {
-+                output.close();
-+            }
-+            if(paraOutput != null) {
-+                paraOutput.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionSpout.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionSpout.java
-new file mode 100644
-index 0000000..500a478
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/HardwareConnectionSpout.java
-@@ -0,0 +1,220 @@
-+package eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial;
-+
-+import java.io.IOException;
-+import java.io.ByteArrayOutputStream;
-+import java.io.ByteArrayInputStream;
-+import java.util.ArrayList;
-+import java.util.List;
-+import java.util.Map;
-+import java.util.HashMap;
-+import backtype.storm.spout.SpoutOutputCollector;
-+import backtype.storm.task.TopologyContext;
-+import backtype.storm.topology.OutputFieldsDeclarer;
-+import backtype.storm.tuple.Tuple;
-+import backtype.storm.tuple.Fields;
-+import backtype.storm.tuple.Values;
-+import eu.qualimaster.common.signal.BaseSignalSpout;
-+import eu.qualimaster.base.algorithm.HardwareTransmitter;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.ShutdownSignal;
-+import eu.qualimaster.common.signal.ParameterChange;
-+import eu.qualimaster.common.signal.ValueFormatException;
-+import eu.qualimaster.common.signal.SignalException;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import java.util.Queue;
-+import java.util.concurrent.ConcurrentLinkedQueue;
-+import eu.qualimaster.common.switching.SynchronizedQueue;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput;
-+
-+public class HardwareConnectionSpout extends BaseSignalSpout {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionSpout.class);
-+    private transient SpoutOutputCollector collector;
-+    private String streamId;
-+    private int MAXDATASIZE;
-+    private int taskId;
-+    private int taskNum;
-+    private int taskIndex;
-+    private boolean ready = false;
-+    private String ip;
-+    private int port = 0;
-+    private byte [] msg = null;
-+    private transient HardwareTransmitter hardwareConnection;
-+    private transient ByteArrayInputStream in = null;
-+    private transient IIFCorrelationFinancialPairwiseFinancialOutput outputPairwiseFinancial = null;
-+    private transient Queue<IIFCorrelationFinancialPairwiseFinancialOutput> queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
-+    private transient SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput> synPairwiseFinancial = null;
-+    private int size;
-+    private transient DataEmitter dataEmitter;
-+    public HardwareConnectionSpout(String name, String namespace, String streamId) {
-+        super(name, namespace, true); 
-+        this.streamId = streamId;
-+    }
-+
-+    @SuppressWarnings("rawtypes")
-+    public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutputCollector) {
-+        super.open(map, topologyContext, spoutputCollector);
-+        collector = spoutputCollector;
-+        taskId = topologyContext.getThisTaskId();
-+        taskNum = topologyContext.getThisWorkerTasks().size();
-+        taskIndex = topologyContext.getThisTaskIndex();
-+        queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
-+        size = 50;
-+        synPairwiseFinancial = new SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>(queuePairwiseFinancial, size);
-+        ip = "147.27.39.13";
-+        ready = false;
-+        msg = new byte[MAXDATASIZE];
-+        MAXDATASIZE = 16384;
-+        new IFCorrelationFinancialPairwiseFinancialOutput();
-+        try {
-+            dataEmitter = new DataEmitter();
-+        } catch (Exception e) {
-+            logger.error("", e);
-+        }
-+        Thread dataEmitterThread = new Thread(dataEmitter);
-+        dataEmitterThread.start();
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+    public class DataEmitter implements Runnable {
-+        private boolean cont = false;
-+
-+        public DataEmitter() {
-+            cont = true;
-+        }
-+
-+        @Override
-+        public void run() {
-+            while(cont) {
-+                collector.emit(streamId, new Values(synPairwiseFinancial.consume()));
-+            }
-+        }
-+
-+        public void stop() {
-+            cont = false;
-+        }
-+    }
-+
-+    public void nextTuple() {
-+        if(ready) {
-+        if (connect()) {
-+            try {
-+                in = null;
-+                msg = hardwareConnection.receiveData();
-+                if(msg != null) {
-+                    if (msg[0] == 'd') {
-+                    in = new ByteArrayInputStream(msg, 1, msg.length-1);
-+                        if (in != null) {
-+                            startMonitoring();
-+                            outputPairwiseFinancial = null;
-+                            outputPairwiseFinancial = SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPairwiseFinancialOutput", IIFCorrelationFinancialPairwiseFinancialOutput.class).deserializeFrom(in);
-+                            if(outputPairwiseFinancial != null) {
-+                                synPairwiseFinancial.produce(outputPairwiseFinancial);
-+                                endMonitoring();
-+                            }
-+                        }
-+                    } else if (msg[0] == 'o') {
-+                            /* HERE PUT THE CODE FOR THE FLUSH PROCESS */
-+                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                        				                        "TimeTravelSimPip", "GenTopoHardwareCorrelationFinancialEndBolt", "emit", true, null);
-+                        try {
-+                            sendSignal(paraSignal);
-+                        } catch (SignalException e) {
-+                            e.printStackTrace();
-+                        }
-+                    } else if (msg[0] == 'f') {
-+                        /* HERE PUT THE CODE FOR THE OMIT PROCESS */
-+                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                        				                        "TimeTravelSimPip", "GenTopoHardwareCorrelationFinancialEndBolt", "disable", true, null);
-+                        try {
-+                            sendSignal(paraSignal);
-+                        } catch (SignalException e) {
-+                            e.printStackTrace();
-+                        }
-+                    }
-+                }
-+            } catch (IOException e) {
-+                logger.info("IOException : " + e.getMessage());
-+            }
-+        }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "port": 
-+                    String value = para.getStringValue();
-+                    logger.info("Received signal port!" + value + ", taskId: " + taskId); 
-+                    String[] portList = value.split(",");
-+                    port = assignPort(portList, taskIndex);
-+                    ready = true;
-+                    logger.info("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex);
-+                    break;
-+              }
-+        }
-+    }
-+
-+    private boolean connect() {
-+        if (null == hardwareConnection) {
-+            try {
-+                hardwareConnection = new HardwareTransmitter(ip, port);
-+                logger.info("Created a receiver connection.");
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+        }
-+        return null != hardwareConnection;
-+    }
-+    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
-+        outputFieldsDeclarer.declareStream(streamId, false, new Fields("hardwareOutput"));
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(in != null) {
-+                in.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        dataEmitter.stop();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(in != null) {
-+                in.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    protected int assignPort(String[] ports, int index) {
-+        //int mode = index % ports.length;
-+        return Integer.parseInt(ports[index]);
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/mapping.xml
-new file mode 100644
-index 0000000..28d1bee
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/mapping.xml
-@@ -0,0 +1,11 @@
-+<mapping>
-+  <pipeline name="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
-+      <node name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" type="family">
-+             <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="PriorityPip" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </node>
-+      <node name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" type="source">
-+             <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="PriorityPip" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
-+      </node>
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/pom.xml
-new file mode 100644
-index 0000000..aae4761
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/pom.xml
-@@ -0,0 +1,92 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <build>
-+    <sourceDirectory>${basedir}/</sourceDirectory>
-+    <plugins>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-source-plugin</artifactId>
-+				<version>2.2.1</version>
-+				<executions>
-+					<execution>
-+						<id>attach-sources</id>
-+						<phase>verify</phase>
-+						<goals>
-+							<goal>jar</goal>
-+						</goals>
-+					</execution>
-+				</executions>
-+			</plugin>
-+    </plugins>
-+  </build>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+	     <groupId>org.apache.storm</groupId>
-+	     <artifactId>storm-core</artifactId>
-+	   </dependency>
-+   <dependency>
-+	     <groupId>eu.qualimaster</groupId>
-+	     <artifactId>StormCommons</artifactId>
-+	   </dependency>
-+    <dependency>
-+			<groupId>eu.qualimaster</groupId>
-+			<artifactId>PriorityPipelineInterfaces</artifactId>
-+			<version>0.5.0-SNAPSHOT</version>
-+		</dependency>
-+   <dependency>
-+     	<groupId>eu.qualimaster</groupId>
-+     	<artifactId>QualiMaster.Events</artifactId>
-+   	</dependency>
-+   <dependency>
-+	     <groupId>eu.qualimaster</groupId>
-+	     <artifactId>DataManagementLayer</artifactId>
-+	   </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/profiling/profile.ctl
-new file mode 100644
-index 0000000..2e431ba
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/profiling/profile.ctl
-@@ -0,0 +1 @@
-+import eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionBolt.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionBolt.java
-new file mode 100644
-index 0000000..9dea416
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionBolt.java
-@@ -0,0 +1,257 @@
-+package eu.qualimaster.algorithms.MutualInformationHardware;
-+
-+import java.io.IOException;
-+import java.io.ByteArrayOutputStream;
-+import java.util.Map;
-+import backtype.storm.task.OutputCollector;
-+import backtype.storm.task.TopologyContext;
-+import backtype.storm.topology.OutputFieldsDeclarer;
-+import backtype.storm.tuple.Tuple;
-+import eu.qualimaster.common.signal.AbstractMonitor;
-+import eu.qualimaster.common.signal.BaseSignalBolt;
-+import eu.qualimaster.base.algorithm.HardwareTransmitter;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.base.serializer.Parameters.*;
-+import eu.qualimaster.common.signal.ShutdownSignal;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.ParameterChange;
-+import eu.qualimaster.common.signal.ValueFormatException;
-+import eu.qualimaster.observables.ResourceUsage;
-+import java.util.Queue;
-+import java.util.concurrent.ConcurrentLinkedQueue;
-+import eu.qualimaster.common.switching.SynchronizedQueue;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialSymbolListInput;
-+
-+public class HardwareConnectionBolt extends BaseSignalBolt {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionBolt.class);
-+    private transient OutputCollector collector;
-+    private String ip;
-+    private int port = 0;
-+    private boolean ready = false;
-+    private transient Queue<Tuple> queueTuple = new ConcurrentLinkedQueue<Tuple>();
-+    private transient HardwareTransmitter hardwareConnection;
-+    private transient ByteArrayOutputStream output = null;
-+    private transient ByteArrayOutputStream paraOutput = null;
-+    private String separator;
-+    private transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    private transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+    private int size;
-+    private transient DataAcker dataAcker;
-+    private transient Queue<Tuple> queue = new ConcurrentLinkedQueue<Tuple>();
-+    private transient SynchronizedQueue<Tuple> syn = null;
-+
-+    public HardwareConnectionBolt(String name, String namespace) {
-+        super(name, namespace, true); 
-+    }
-+
-+    @SuppressWarnings("rawtypes")
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
-+        super.prepare(map, topologyContext, outputCollector);
-+        collector = outputCollector;
-+        ip = "147.27.39.12";
-+        ready = false;
-+        queueTuple = new ConcurrentLinkedQueue<Tuple>();
-+        output = new ByteArrayOutputStream();
-+        paraOutput = new ByteArrayOutputStream();
-+        new IFCorrelationFinancialPreprocessedStreamInput();
-+        new IFCorrelationFinancialSymbolListInput();
-+        queue = new ConcurrentLinkedQueue<Tuple>();
-+        size = 50;
-+        syn = new SynchronizedQueue<Tuple>(queue, size);
-+        try {
-+            dataAcker = new DataAcker();
-+        } catch (Exception e) {
-+            logger.error("", e);
-+        }
-+        Thread dataAckerThread = new Thread(dataAcker);
-+        dataAckerThread.start();
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+    public class DataAcker implements Runnable {
-+        private boolean cont = false;
-+
-+        public DataAcker() {
-+            cont = true;
-+        }
-+
-+        @Override
-+        public void run() {
-+            while(cont) {
-+                collector.ack(syn.consume());
-+            }
-+        }
-+
-+        public void stop() {
-+            cont = false;
-+        }
-+    }
-+
-+
-+    public void execute(Tuple tuple) {
-+        queueTuple.offer(tuple);
-+        if(ready) {
-+            sendTuple();
-+        }
-+    }
-+
-+    protected void sendTuple() {
-+        AbstractMonitor monitor = createThreadMonitor();
-+        Tuple tuple = queueTuple.poll();
-+    if(tuple != null) {
-+        if(tuple.getValue(0) instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
-+if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
-+            separator = "da";
-+            inputPreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tuple.getValue(0);
-+            try {
-+                output.reset();
-+                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPreprocessedStreamInput", IIFCorrelationFinancialPreprocessedStreamInput.class).serializeTo(inputPreprocessedStream, output);
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+}
-+        }
-+
-+        if(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput) {
-+if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
-+            separator = "db";
-+            inputSymbolList = (IIFCorrelationFinancialSymbolListInput)tuple.getValue(0);
-+            try {
-+                output.reset();
-+                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialSymbolListInput", IIFCorrelationFinancialSymbolListInput.class).serializeTo(inputSymbolList, output);
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+}
-+        }
-+
-+        syn.produce(tuple);
-+        if (connect()) {
-+            if(output != null && separator != null) {
-+                monitor.startMonitoring();
-+                hardwareConnection.sendSeparator(separator);
-+                hardwareConnection.sendData(output.toByteArray());
-+                monitor.endMonitoring(tuple);
-+                }
-+            }
-+    }
-+    }
-+    private boolean connect() {
-+        if (null == hardwareConnection) {
-+            try {
-+                hardwareConnection = new HardwareTransmitter(ip, port);
-+                logger.info("Created a transmitter connection.");
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+        }
-+        return null != hardwareConnection;
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        logger.info("Received the parameter change signal!");
-+        String paraSeparator = null;
-+        try {
-+            for(int i = 0; i < signal.getChangeCount(); i++) {
-+                ParameterChange para = signal.getChange(i);
-+                paraOutput.reset();
-+                switch (para.getName()) {
-+                    case "windowSize" :
-+                        logger.info("Received parameter changing signal windowSize");
-+                        IntegerParameter windowSizePara = new IntegerParameter();
-+                        windowSizePara.setName("windowSize");
-+                        windowSizePara.setValue(para.getIntValue());
-+                        SerializerRegistry.getSerializerSafe("IntegerParameter", IntegerParameter.class).serializeTo(windowSizePara, paraOutput);
-+                        paraSeparator = "pa";
-+                        if (connect()) {
-+                            if(paraOutput != null && paraSeparator != null) {
-+                                hardwareConnection.sendSeparator(paraSeparator);
-+                                hardwareConnection.sendData(paraOutput.toByteArray());
-+                            }
-+                        }
-+                        break;
-+                    case "port": 
-+                        logger.info("Received signal port!"); 
-+                        port = para.getIntValue();
-+                        ready = true;
-+                        logger.info("Received signal port!" + port); 
-+                        recordOnce(ResourceUsage.USED_CPUS, 1);
-+                        recordOnce(ResourceUsage.USED_DFES, 1);
-+                        break;
-+                    case "omit": 
-+                        logger.info("Received signal omit, sending the omit message to hardware!!");
-+                        paraSeparator = "cc";
-+                        if (connect()) {
-+                                hardwareConnection.sendSeparator(paraSeparator);
-+                        }
-+                    break;
-+                    case "flush": 
-+                        logger.info("Received signal flush, sending the flush message to hardware!!");
-+                        if (connect()) {
-+                                hardwareConnection.sendFlushMessage();
-+                        }
-+                    break;
-+                }
-+            }
-+        } catch (ValueFormatException e) {
-+            e.printStackTrace();
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        dataAcker.stop();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(output != null) {
-+                output.close();
-+            }
-+            if(paraOutput != null) {
-+                paraOutput.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+        recordOnce(ResourceUsage.USED_CPUS, 0);
-+        recordOnce(ResourceUsage.USED_DFES, 0);
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(output != null) {
-+                output.close();
-+            }
-+            if(paraOutput != null) {
-+                paraOutput.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionSpout.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionSpout.java
-new file mode 100644
-index 0000000..631de69
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/HardwareConnectionSpout.java
-@@ -0,0 +1,220 @@
-+package eu.qualimaster.algorithms.MutualInformationHardware;
-+
-+import java.io.IOException;
-+import java.io.ByteArrayOutputStream;
-+import java.io.ByteArrayInputStream;
-+import java.util.ArrayList;
-+import java.util.List;
-+import java.util.Map;
-+import java.util.HashMap;
-+import backtype.storm.spout.SpoutOutputCollector;
-+import backtype.storm.task.TopologyContext;
-+import backtype.storm.topology.OutputFieldsDeclarer;
-+import backtype.storm.tuple.Tuple;
-+import backtype.storm.tuple.Fields;
-+import backtype.storm.tuple.Values;
-+import eu.qualimaster.common.signal.BaseSignalSpout;
-+import eu.qualimaster.base.algorithm.HardwareTransmitter;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.ShutdownSignal;
-+import eu.qualimaster.common.signal.ParameterChange;
-+import eu.qualimaster.common.signal.ValueFormatException;
-+import eu.qualimaster.common.signal.SignalException;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import java.util.Queue;
-+import java.util.concurrent.ConcurrentLinkedQueue;
-+import eu.qualimaster.common.switching.SynchronizedQueue;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput;
-+
-+public class HardwareConnectionSpout extends BaseSignalSpout {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionSpout.class);
-+    private transient SpoutOutputCollector collector;
-+    private String streamId;
-+    private int MAXDATASIZE;
-+    private int taskId;
-+    private int taskNum;
-+    private int taskIndex;
-+    private boolean ready = false;
-+    private String ip;
-+    private int port = 0;
-+    private byte [] msg = null;
-+    private transient HardwareTransmitter hardwareConnection;
-+    private transient ByteArrayInputStream in = null;
-+    private transient IIFCorrelationFinancialPairwiseFinancialOutput outputPairwiseFinancial = null;
-+    private transient Queue<IIFCorrelationFinancialPairwiseFinancialOutput> queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
-+    private transient SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput> synPairwiseFinancial = null;
-+    private int size;
-+    private transient DataEmitter dataEmitter;
-+    public HardwareConnectionSpout(String name, String namespace, String streamId) {
-+        super(name, namespace, true); 
-+        this.streamId = streamId;
-+    }
-+
-+    @SuppressWarnings("rawtypes")
-+    public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutputCollector) {
-+        super.open(map, topologyContext, spoutputCollector);
-+        collector = spoutputCollector;
-+        taskId = topologyContext.getThisTaskId();
-+        taskNum = topologyContext.getThisWorkerTasks().size();
-+        taskIndex = topologyContext.getThisTaskIndex();
-+        queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
-+        size = 50;
-+        synPairwiseFinancial = new SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>(queuePairwiseFinancial, size);
-+        ip = "147.27.39.12";
-+        ready = false;
-+        msg = new byte[MAXDATASIZE];
-+        MAXDATASIZE = 16384;
-+        new IFCorrelationFinancialPairwiseFinancialOutput();
-+        try {
-+            dataEmitter = new DataEmitter();
-+        } catch (Exception e) {
-+            logger.error("", e);
-+        }
-+        Thread dataEmitterThread = new Thread(dataEmitter);
-+        dataEmitterThread.start();
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+    public class DataEmitter implements Runnable {
-+        private boolean cont = false;
-+
-+        public DataEmitter() {
-+            cont = true;
-+        }
-+
-+        @Override
-+        public void run() {
-+            while(cont) {
-+                collector.emit(streamId, new Values(synPairwiseFinancial.consume()));
-+            }
-+        }
-+
-+        public void stop() {
-+            cont = false;
-+        }
-+    }
-+
-+    public void nextTuple() {
-+        if(ready) {
-+        if (connect()) {
-+            try {
-+                in = null;
-+                msg = hardwareConnection.receiveData();
-+                if(msg != null) {
-+                    if (msg[0] == 'd') {
-+                    in = new ByteArrayInputStream(msg, 1, msg.length-1);
-+                        if (in != null) {
-+                            startMonitoring();
-+                            outputPairwiseFinancial = null;
-+                            outputPairwiseFinancial = SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPairwiseFinancialOutput", IIFCorrelationFinancialPairwiseFinancialOutput.class).deserializeFrom(in);
-+                            if(outputPairwiseFinancial != null) {
-+                                synPairwiseFinancial.produce(outputPairwiseFinancial);
-+                                endMonitoring();
-+                            }
-+                        }
-+                    } else if (msg[0] == 'o') {
-+                            /* HERE PUT THE CODE FOR THE FLUSH PROCESS */
-+                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                        				                        "TimeTravelSimPip", "MutualInformationHardwareEndBolt", "emit", true, null);
-+                        try {
-+                            sendSignal(paraSignal);
-+                        } catch (SignalException e) {
-+                            e.printStackTrace();
-+                        }
-+                    } else if (msg[0] == 'f') {
-+                        /* HERE PUT THE CODE FOR THE OMIT PROCESS */
-+                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                        				                        "TimeTravelSimPip", "MutualInformationHardwareEndBolt", "disable", true, null);
-+                        try {
-+                            sendSignal(paraSignal);
-+                        } catch (SignalException e) {
-+                            e.printStackTrace();
-+                        }
-+                    }
-+                }
-+            } catch (IOException e) {
-+                logger.info("IOException : " + e.getMessage());
-+            }
-+        }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "port": 
-+                    String value = para.getStringValue();
-+                    logger.info("Received signal port!" + value + ", taskId: " + taskId); 
-+                    String[] portList = value.split(",");
-+                    port = assignPort(portList, taskIndex);
-+                    ready = true;
-+                    logger.info("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex);
-+                    break;
-+              }
-+        }
-+    }
-+
-+    private boolean connect() {
-+        if (null == hardwareConnection) {
-+            try {
-+                hardwareConnection = new HardwareTransmitter(ip, port);
-+                logger.info("Created a receiver connection.");
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+        }
-+        return null != hardwareConnection;
-+    }
-+    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
-+        outputFieldsDeclarer.declareStream(streamId, false, new Fields("hardwareOutput"));
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(in != null) {
-+                in.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        dataEmitter.stop();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(in != null) {
-+                in.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    protected int assignPort(String[] ports, int index) {
-+        //int mode = index % ports.length;
-+        return Integer.parseInt(ports[index]);
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/MutualInformationHardwareSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/MutualInformationHardwareSubTopology.java
-new file mode 100644
-index 0000000..b6205e8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/MutualInformationHardwareSubTopology.java
-@@ -0,0 +1,68 @@
-+package eu.qualimaster.algorithms.MutualInformationHardware;
-+
-+import eu.qualimaster.base.algorithm.ITopologyCreate;
-+import eu.qualimaster.base.algorithm.SubTopologyOutput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial;
-+import eu.qualimaster.observables.IObservable;
-+import backtype.storm.topology.TopologyBuilder;
-+import backtype.storm.Config;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+
-+public class MutualInformationHardwareSubTopology implements ITopologyCreate, IFCorrelationFinancial {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(MutualInformationHardwareSubTopology.class);
-+    private String pipelineName = "TimeTravelSimPip";
-+
-+    public SubTopologyOutput createSubTopology(TopologyBuilder topologyBuilder,
-+                Config config, String prefix, String input, String streamId) {
-+        String keyPrefix = prefix + ".MutualInformationHardware.";
-+        String senderKey = keyPrefix + "sender";
-+        String receiverKey = keyPrefix + "receiver";
-+        int senderParallelism = PipelineOptions.getExecutorParallelism(config, senderKey, 1);
-+        int senderTasks = PipelineOptions.getTaskParallelism(config, senderKey, 1);
-+        int receiverParallelism = PipelineOptions.getExecutorParallelism(config, receiverKey, 1);
-+        int receiverTasks = PipelineOptions.getTaskParallelism(config, receiverKey, 1);
-+        int totalParallelism = Math.max(senderParallelism, receiverParallelism);
-+        topologyBuilder.setSpout(prefix + "HardwareConnectionSpout", new HardwareConnectionSpout(prefix + "HardwareConnectionSpout",
-+                                pipelineName, streamId), receiverParallelism).setNumTasks(receiverTasks);
-+        topologyBuilder.setBolt(prefix + "HardwareConnectionBolt", new HardwareConnectionBolt(prefix + "HardwareConnectionBolt",
-+                                pipelineName), senderParallelism).setNumTasks(senderTasks).shuffleGrouping(input, streamId);
-+        return new SubTopologyOutput(prefix + "HardwareConnectionSpout", streamId, 1, totalParallelism);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    @Override
-+    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    @Override
-+    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    public Double getMeasurement(IObservable observable) {
-+        return null; 
-+    }
-+
-+    @Override
-+    public void switchState(State state) {
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/mapping.xml
-new file mode 100644
-index 0000000..621dd3a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/mapping.xml
-@@ -0,0 +1,11 @@
-+<mapping>
-+  <pipeline name="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
-+      <node name="MutualInformationHardwareHardwareConnectionBolt" type="family">
-+             <component name="MutualInformationHardwareHardwareConnectionBolt" container="PriorityPip" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </node>
-+      <node name="MutualInformationHardwareHardwareConnectionSpout" type="source">
-+             <component name="MutualInformationHardwareHardwareConnectionSpout" container="PriorityPip" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </node>
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/pom.xml
-new file mode 100644
-index 0000000..ace0142
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/pom.xml
-@@ -0,0 +1,92 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>MutualInformationHardware</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <build>
-+    <sourceDirectory>${basedir}/</sourceDirectory>
-+    <plugins>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-source-plugin</artifactId>
-+				<version>2.2.1</version>
-+				<executions>
-+					<execution>
-+						<id>attach-sources</id>
-+						<phase>verify</phase>
-+						<goals>
-+							<goal>jar</goal>
-+						</goals>
-+					</execution>
-+				</executions>
-+			</plugin>
-+    </plugins>
-+  </build>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+	     <groupId>org.apache.storm</groupId>
-+	     <artifactId>storm-core</artifactId>
-+	   </dependency>
-+   <dependency>
-+	     <groupId>eu.qualimaster</groupId>
-+	     <artifactId>StormCommons</artifactId>
-+	   </dependency>
-+    <dependency>
-+			<groupId>eu.qualimaster</groupId>
-+			<artifactId>PriorityPipelineInterfaces</artifactId>
-+			<version>0.5.0-SNAPSHOT</version>
-+		</dependency>
-+   <dependency>
-+     	<groupId>eu.qualimaster</groupId>
-+     	<artifactId>QualiMaster.Events</artifactId>
-+   	</dependency>
-+   <dependency>
-+	     <groupId>eu.qualimaster</groupId>
-+	     <artifactId>DataManagementLayer</artifactId>
-+	   </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/profiling/profile.ctl
-new file mode 100644
-index 0000000..2e431ba
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/profiling/profile.ctl
-@@ -0,0 +1 @@
-+import eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionBolt.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionBolt.java
-new file mode 100644
-index 0000000..5750b10
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionBolt.java
-@@ -0,0 +1,257 @@
-+package eu.qualimaster.algorithms.TransferEntropyHardware;
-+
-+import java.io.IOException;
-+import java.io.ByteArrayOutputStream;
-+import java.util.Map;
-+import backtype.storm.task.OutputCollector;
-+import backtype.storm.task.TopologyContext;
-+import backtype.storm.topology.OutputFieldsDeclarer;
-+import backtype.storm.tuple.Tuple;
-+import eu.qualimaster.common.signal.AbstractMonitor;
-+import eu.qualimaster.common.signal.BaseSignalBolt;
-+import eu.qualimaster.base.algorithm.HardwareTransmitter;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.base.serializer.Parameters.*;
-+import eu.qualimaster.common.signal.ShutdownSignal;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.ParameterChange;
-+import eu.qualimaster.common.signal.ValueFormatException;
-+import eu.qualimaster.observables.ResourceUsage;
-+import java.util.Queue;
-+import java.util.concurrent.ConcurrentLinkedQueue;
-+import eu.qualimaster.common.switching.SynchronizedQueue;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialSymbolListInput;
-+
-+public class HardwareConnectionBolt extends BaseSignalBolt {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionBolt.class);
-+    private transient OutputCollector collector;
-+    private String ip;
-+    private int port = 0;
-+    private boolean ready = false;
-+    private transient Queue<Tuple> queueTuple = new ConcurrentLinkedQueue<Tuple>();
-+    private transient HardwareTransmitter hardwareConnection;
-+    private transient ByteArrayOutputStream output = null;
-+    private transient ByteArrayOutputStream paraOutput = null;
-+    private String separator;
-+    private transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    private transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+    private int size;
-+    private transient DataAcker dataAcker;
-+    private transient Queue<Tuple> queue = new ConcurrentLinkedQueue<Tuple>();
-+    private transient SynchronizedQueue<Tuple> syn = null;
-+
-+    public HardwareConnectionBolt(String name, String namespace) {
-+        super(name, namespace, true); 
-+    }
-+
-+    @SuppressWarnings("rawtypes")
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
-+        super.prepare(map, topologyContext, outputCollector);
-+        collector = outputCollector;
-+        ip = "147.27.39.12";
-+        ready = false;
-+        queueTuple = new ConcurrentLinkedQueue<Tuple>();
-+        output = new ByteArrayOutputStream();
-+        paraOutput = new ByteArrayOutputStream();
-+        new IFCorrelationFinancialPreprocessedStreamInput();
-+        new IFCorrelationFinancialSymbolListInput();
-+        queue = new ConcurrentLinkedQueue<Tuple>();
-+        size = 50;
-+        syn = new SynchronizedQueue<Tuple>(queue, size);
-+        try {
-+            dataAcker = new DataAcker();
-+        } catch (Exception e) {
-+            logger.error("", e);
-+        }
-+        Thread dataAckerThread = new Thread(dataAcker);
-+        dataAckerThread.start();
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+    public class DataAcker implements Runnable {
-+        private boolean cont = false;
-+
-+        public DataAcker() {
-+            cont = true;
-+        }
-+
-+        @Override
-+        public void run() {
-+            while(cont) {
-+                collector.ack(syn.consume());
-+            }
-+        }
-+
-+        public void stop() {
-+            cont = false;
-+        }
-+    }
-+
-+
-+    public void execute(Tuple tuple) {
-+        queueTuple.offer(tuple);
-+        if(ready) {
-+            sendTuple();
-+        }
-+    }
-+
-+    protected void sendTuple() {
-+        AbstractMonitor monitor = createThreadMonitor();
-+        Tuple tuple = queueTuple.poll();
-+    if(tuple != null) {
-+        if(tuple.getValue(0) instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
-+if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
-+            separator = "da";
-+            inputPreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tuple.getValue(0);
-+            try {
-+                output.reset();
-+                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPreprocessedStreamInput", IIFCorrelationFinancialPreprocessedStreamInput.class).serializeTo(inputPreprocessedStream, output);
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+}
-+        }
-+
-+        if(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput) {
-+if(!(tuple.getValue(0) instanceof IIFCorrelationFinancialSymbolListInput)) {
-+            separator = "db";
-+            inputSymbolList = (IIFCorrelationFinancialSymbolListInput)tuple.getValue(0);
-+            try {
-+                output.reset();
-+                SerializerRegistry.getSerializerSafe("IFCorrelationFinancialSymbolListInput", IIFCorrelationFinancialSymbolListInput.class).serializeTo(inputSymbolList, output);
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+}
-+        }
-+
-+        syn.produce(tuple);
-+        if (connect()) {
-+            if(output != null && separator != null) {
-+                monitor.startMonitoring();
-+                hardwareConnection.sendSeparator(separator);
-+                hardwareConnection.sendData(output.toByteArray());
-+                monitor.endMonitoring(tuple);
-+                }
-+            }
-+    }
-+    }
-+    private boolean connect() {
-+        if (null == hardwareConnection) {
-+            try {
-+                hardwareConnection = new HardwareTransmitter(ip, port);
-+                logger.info("Created a transmitter connection.");
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+        }
-+        return null != hardwareConnection;
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        logger.info("Received the parameter change signal!");
-+        String paraSeparator = null;
-+        try {
-+            for(int i = 0; i < signal.getChangeCount(); i++) {
-+                ParameterChange para = signal.getChange(i);
-+                paraOutput.reset();
-+                switch (para.getName()) {
-+                    case "windowSize" :
-+                        logger.info("Received parameter changing signal windowSize");
-+                        IntegerParameter windowSizePara = new IntegerParameter();
-+                        windowSizePara.setName("windowSize");
-+                        windowSizePara.setValue(para.getIntValue());
-+                        SerializerRegistry.getSerializerSafe("IntegerParameter", IntegerParameter.class).serializeTo(windowSizePara, paraOutput);
-+                        paraSeparator = "pa";
-+                        if (connect()) {
-+                            if(paraOutput != null && paraSeparator != null) {
-+                                hardwareConnection.sendSeparator(paraSeparator);
-+                                hardwareConnection.sendData(paraOutput.toByteArray());
-+                            }
-+                        }
-+                        break;
-+                    case "port": 
-+                        logger.info("Received signal port!"); 
-+                        port = para.getIntValue();
-+                        ready = true;
-+                        logger.info("Received signal port!" + port); 
-+                        recordOnce(ResourceUsage.USED_CPUS, 1);
-+                        recordOnce(ResourceUsage.USED_DFES, 1);
-+                        break;
-+                    case "omit": 
-+                        logger.info("Received signal omit, sending the omit message to hardware!!");
-+                        paraSeparator = "cc";
-+                        if (connect()) {
-+                                hardwareConnection.sendSeparator(paraSeparator);
-+                        }
-+                    break;
-+                    case "flush": 
-+                        logger.info("Received signal flush, sending the flush message to hardware!!");
-+                        if (connect()) {
-+                                hardwareConnection.sendFlushMessage();
-+                        }
-+                    break;
-+                }
-+            }
-+        } catch (ValueFormatException e) {
-+            e.printStackTrace();
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        dataAcker.stop();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(output != null) {
-+                output.close();
-+            }
-+            if(paraOutput != null) {
-+                paraOutput.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+        recordOnce(ResourceUsage.USED_CPUS, 0);
-+        recordOnce(ResourceUsage.USED_DFES, 0);
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(output != null) {
-+                output.close();
-+            }
-+            if(paraOutput != null) {
-+                paraOutput.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionSpout.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionSpout.java
-new file mode 100644
-index 0000000..0f45b56
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/HardwareConnectionSpout.java
-@@ -0,0 +1,220 @@
-+package eu.qualimaster.algorithms.TransferEntropyHardware;
-+
-+import java.io.IOException;
-+import java.io.ByteArrayOutputStream;
-+import java.io.ByteArrayInputStream;
-+import java.util.ArrayList;
-+import java.util.List;
-+import java.util.Map;
-+import java.util.HashMap;
-+import backtype.storm.spout.SpoutOutputCollector;
-+import backtype.storm.task.TopologyContext;
-+import backtype.storm.topology.OutputFieldsDeclarer;
-+import backtype.storm.tuple.Tuple;
-+import backtype.storm.tuple.Fields;
-+import backtype.storm.tuple.Values;
-+import eu.qualimaster.common.signal.BaseSignalSpout;
-+import eu.qualimaster.base.algorithm.HardwareTransmitter;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.ShutdownSignal;
-+import eu.qualimaster.common.signal.ParameterChange;
-+import eu.qualimaster.common.signal.ValueFormatException;
-+import eu.qualimaster.common.signal.SignalException;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import java.util.Queue;
-+import java.util.concurrent.ConcurrentLinkedQueue;
-+import eu.qualimaster.common.switching.SynchronizedQueue;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput;
-+
-+public class HardwareConnectionSpout extends BaseSignalSpout {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(HardwareConnectionSpout.class);
-+    private transient SpoutOutputCollector collector;
-+    private String streamId;
-+    private int MAXDATASIZE;
-+    private int taskId;
-+    private int taskNum;
-+    private int taskIndex;
-+    private boolean ready = false;
-+    private String ip;
-+    private int port = 0;
-+    private byte [] msg = null;
-+    private transient HardwareTransmitter hardwareConnection;
-+    private transient ByteArrayInputStream in = null;
-+    private transient IIFCorrelationFinancialPairwiseFinancialOutput outputPairwiseFinancial = null;
-+    private transient Queue<IIFCorrelationFinancialPairwiseFinancialOutput> queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
-+    private transient SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput> synPairwiseFinancial = null;
-+    private int size;
-+    private transient DataEmitter dataEmitter;
-+    public HardwareConnectionSpout(String name, String namespace, String streamId) {
-+        super(name, namespace, true); 
-+        this.streamId = streamId;
-+    }
-+
-+    @SuppressWarnings("rawtypes")
-+    public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutputCollector) {
-+        super.open(map, topologyContext, spoutputCollector);
-+        collector = spoutputCollector;
-+        taskId = topologyContext.getThisTaskId();
-+        taskNum = topologyContext.getThisWorkerTasks().size();
-+        taskIndex = topologyContext.getThisTaskIndex();
-+        queuePairwiseFinancial = new ConcurrentLinkedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>();
-+        size = 50;
-+        synPairwiseFinancial = new SynchronizedQueue<IIFCorrelationFinancialPairwiseFinancialOutput>(queuePairwiseFinancial, size);
-+        ip = "147.27.39.12";
-+        ready = false;
-+        msg = new byte[MAXDATASIZE];
-+        MAXDATASIZE = 16384;
-+        new IFCorrelationFinancialPairwiseFinancialOutput();
-+        try {
-+            dataEmitter = new DataEmitter();
-+        } catch (Exception e) {
-+            logger.error("", e);
-+        }
-+        Thread dataEmitterThread = new Thread(dataEmitter);
-+        dataEmitterThread.start();
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+    public class DataEmitter implements Runnable {
-+        private boolean cont = false;
-+
-+        public DataEmitter() {
-+            cont = true;
-+        }
-+
-+        @Override
-+        public void run() {
-+            while(cont) {
-+                collector.emit(streamId, new Values(synPairwiseFinancial.consume()));
-+            }
-+        }
-+
-+        public void stop() {
-+            cont = false;
-+        }
-+    }
-+
-+    public void nextTuple() {
-+        if(ready) {
-+        if (connect()) {
-+            try {
-+                in = null;
-+                msg = hardwareConnection.receiveData();
-+                if(msg != null) {
-+                    if (msg[0] == 'd') {
-+                    in = new ByteArrayInputStream(msg, 1, msg.length-1);
-+                        if (in != null) {
-+                            startMonitoring();
-+                            outputPairwiseFinancial = null;
-+                            outputPairwiseFinancial = SerializerRegistry.getSerializerSafe("IFCorrelationFinancialPairwiseFinancialOutput", IIFCorrelationFinancialPairwiseFinancialOutput.class).deserializeFrom(in);
-+                            if(outputPairwiseFinancial != null) {
-+                                synPairwiseFinancial.produce(outputPairwiseFinancial);
-+                                endMonitoring();
-+                            }
-+                        }
-+                    } else if (msg[0] == 'o') {
-+                            /* HERE PUT THE CODE FOR THE FLUSH PROCESS */
-+                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                        				                        "TimeTravelSimPip", "TransferEntropyHardwareEndBolt", "emit", true, null);
-+                        try {
-+                            sendSignal(paraSignal);
-+                        } catch (SignalException e) {
-+                            e.printStackTrace();
-+                        }
-+                    } else if (msg[0] == 'f') {
-+                        /* HERE PUT THE CODE FOR THE OMIT PROCESS */
-+                        ParameterChangeSignal paraSignal = new ParameterChangeSignal(
-+                        				                        "TimeTravelSimPip", "TransferEntropyHardwareEndBolt", "disable", true, null);
-+                        try {
-+                            sendSignal(paraSignal);
-+                        } catch (SignalException e) {
-+                            e.printStackTrace();
-+                        }
-+                    }
-+                }
-+            } catch (IOException e) {
-+                logger.info("IOException : " + e.getMessage());
-+            }
-+        }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "port": 
-+                    String value = para.getStringValue();
-+                    logger.info("Received signal port!" + value + ", taskId: " + taskId); 
-+                    String[] portList = value.split(",");
-+                    port = assignPort(portList, taskIndex);
-+                    ready = true;
-+                    logger.info("Assigned port:" + port + ", taskId:" + taskId + ", taskIndex: " + taskIndex);
-+                    break;
-+              }
-+        }
-+    }
-+
-+    private boolean connect() {
-+        if (null == hardwareConnection) {
-+            try {
-+                hardwareConnection = new HardwareTransmitter(ip, port);
-+                logger.info("Created a receiver connection.");
-+            } catch (IOException e) {
-+                e.printStackTrace();
-+            }
-+        }
-+        return null != hardwareConnection;
-+    }
-+    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
-+        outputFieldsDeclarer.declareStream(streamId, false, new Fields("hardwareOutput"));
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(in != null) {
-+                in.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        dataEmitter.stop();
-+        try {
-+            if(hardwareConnection != null) {
-+                hardwareConnection.sendCloseMessage();
-+                hardwareConnection.close();
-+            }
-+            if(in != null) {
-+                in.close();
-+            }
-+        } catch (IOException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    protected int assignPort(String[] ports, int index) {
-+        //int mode = index % ports.length;
-+        return Integer.parseInt(ports[index]);
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/TransferEntropyHardwareSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/TransferEntropyHardwareSubTopology.java
-new file mode 100644
-index 0000000..eb606fa
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/TransferEntropyHardwareSubTopology.java
-@@ -0,0 +1,68 @@
-+package eu.qualimaster.algorithms.TransferEntropyHardware;
-+
-+import eu.qualimaster.base.algorithm.ITopologyCreate;
-+import eu.qualimaster.base.algorithm.SubTopologyOutput;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial;
-+import eu.qualimaster.observables.IObservable;
-+import backtype.storm.topology.TopologyBuilder;
-+import backtype.storm.Config;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+
-+public class TransferEntropyHardwareSubTopology implements ITopologyCreate, IFCorrelationFinancial {
-+    final static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(TransferEntropyHardwareSubTopology.class);
-+    private String pipelineName = "TimeTravelSimPip";
-+
-+    public SubTopologyOutput createSubTopology(TopologyBuilder topologyBuilder,
-+                Config config, String prefix, String input, String streamId) {
-+        String keyPrefix = prefix + ".TransferEntropyHardware.";
-+        String senderKey = keyPrefix + "sender";
-+        String receiverKey = keyPrefix + "receiver";
-+        int senderParallelism = PipelineOptions.getExecutorParallelism(config, senderKey, 1);
-+        int senderTasks = PipelineOptions.getTaskParallelism(config, senderKey, 1);
-+        int receiverParallelism = PipelineOptions.getExecutorParallelism(config, receiverKey, 1);
-+        int receiverTasks = PipelineOptions.getTaskParallelism(config, receiverKey, 1);
-+        int totalParallelism = Math.max(senderParallelism, receiverParallelism);
-+        topologyBuilder.setSpout(prefix + "HardwareConnectionSpout", new HardwareConnectionSpout(prefix + "HardwareConnectionSpout",
-+                                pipelineName, streamId), receiverParallelism).setNumTasks(receiverTasks);
-+        topologyBuilder.setBolt(prefix + "HardwareConnectionBolt", new HardwareConnectionBolt(prefix + "HardwareConnectionBolt",
-+                                pipelineName), senderParallelism).setNumTasks(senderTasks).shuffleGrouping(input, streamId);
-+        return new SubTopologyOutput(prefix + "HardwareConnectionSpout", streamId, 1, totalParallelism);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    @Override
-+    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    @Override
-+    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput result){
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    public Double getMeasurement(IObservable observable) {
-+        return null; 
-+    }
-+
-+    @Override
-+    public void switchState(State state) {
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/mapping.xml
-new file mode 100644
-index 0000000..02bdb4f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/mapping.xml
-@@ -0,0 +1,11 @@
-+<mapping>
-+  <pipeline name="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
-+      <node name="TransferEntropyHardwareHardwareConnectionBolt" type="family">
-+             <component name="TransferEntropyHardwareHardwareConnectionBolt" container="PriorityPip" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </node>
-+      <node name="TransferEntropyHardwareHardwareConnectionSpout" type="source">
-+             <component name="TransferEntropyHardwareHardwareConnectionSpout" container="PriorityPip" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </node>
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/pom.xml
-new file mode 100644
-index 0000000..393b6ee
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/pom.xml
-@@ -0,0 +1,92 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>TransferEntropyHardware</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <build>
-+    <sourceDirectory>${basedir}/</sourceDirectory>
-+    <plugins>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-source-plugin</artifactId>
-+				<version>2.2.1</version>
-+				<executions>
-+					<execution>
-+						<id>attach-sources</id>
-+						<phase>verify</phase>
-+						<goals>
-+							<goal>jar</goal>
-+						</goals>
-+					</execution>
-+				</executions>
-+			</plugin>
-+    </plugins>
-+  </build>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+	     <groupId>org.apache.storm</groupId>
-+	     <artifactId>storm-core</artifactId>
-+	   </dependency>
-+   <dependency>
-+	     <groupId>eu.qualimaster</groupId>
-+	     <artifactId>StormCommons</artifactId>
-+	   </dependency>
-+    <dependency>
-+			<groupId>eu.qualimaster</groupId>
-+			<artifactId>PriorityPipelineInterfaces</artifactId>
-+			<version>0.5.0-SNAPSHOT</version>
-+		</dependency>
-+   <dependency>
-+     	<groupId>eu.qualimaster</groupId>
-+     	<artifactId>QualiMaster.Events</artifactId>
-+   	</dependency>
-+   <dependency>
-+	     <groupId>eu.qualimaster</groupId>
-+	     <artifactId>DataManagementLayer</artifactId>
-+	   </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/profiling/profile.ctl
-new file mode 100644
-index 0000000..2e431ba
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/profiling/profile.ctl
-@@ -0,0 +1 @@
-+import eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/receiver.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/receiver.cpp
-new file mode 100644
-index 0000000..7714e77
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/receiver.cpp
-@@ -0,0 +1,192 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
-+#include <sys/wait.h>
-+#include <signal.h>
-+#include <string>
-+#include <iostream>
-+#include <google/protobuf/io/coded_stream.h>
-+#include <google/protobuf/generated_message_util.h>
-+#include <google/protobuf/message.h>
-+#include <google/protobuf/extension_set.h>
-+#include <google/protobuf/unknown_field_set.h>
-+#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
-+
-+#include "SerializeServerTemplateCpuCode.h"
-+#include "parameters.pb.h"
-+#include "FCorrelationFinancial.pb.h"
-+#include "stringlist.pb.h"
-+using namespace std;
-+
-+void receiver(parm *arg)
-+{
-+    struct sockaddr_in server_addr;
-+    int receiver_socket;
-+    int true_var=1;
-+    struct sockaddr_in receiver_addr;
-+    socklen_t sin_size;
-+
-+    if ((receiver_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-+    {
-+        perror("Socket");
-+        exit(1);
-+    }
-+
-+    if (setsockopt(receiver_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
-+    {
-+        perror("Setsockopt");
-+        exit(1);
-+    }
-+
-+    server_addr.sin_family = AF_INET;
-+    server_addr.sin_port = htons(2400);
-+    server_addr.sin_addr.s_addr = INADDR_ANY;
-+    bzero(&(server_addr.sin_zero),8);
-+
-+    if (bind(receiver_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
-+    {
-+        perror("Unable to bind");
-+        exit(1);
-+    }
-+
-+    if (listen(receiver_socket, 5) == -1)
-+    {
-+        perror("Listen failed");
-+        exit(1);
-+    }
-+
-+    printf("TCPServer Waiting for client on port 2400\n");
-+
-+    sin_size = (socklen_t)sizeof(receiver_addr);
-+    int receiver_socket_connected = accept(receiver_socket, (struct sockaddr *)&receiver_addr,&sin_size);
-+    printf("Got a connection from (%s , %d)\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port));
-+    printf("Connection with Bolt\n");
-+
-+    eu::qualimaster::families::protobuf::SIFCorrelationFinancialpreprocessedStreamInput preprocessedStreamInput;
-+    eu::qualimaster::base::protos::SStringList stringList;
-+    eu::qualimaster::base::protos::SIntegerParameter IntegerParameter;
-+
-+    google::protobuf::uint32 size;
-+    google::protobuf::io::CodedInputStream::Limit msgLimit;
-+    unsigned char buffer[MAXDATASIZE];
-+    unsigned char temp[10];
-+    int numbytes = 0;
-+    int internal_size = 0;
-+    int pointer = 0;
-+    int j, i;
-+    bzero(buffer,0);
-+
-+    struct message_receiver_processor msg;
-+    while(1)
-+    {
-+        numbytes = 0;
-+        while(pointer < MESSAGE_HEADER)
-+        {
-+            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
-+            if(numbytes > 0)
-+                pointer = pointer + numbytes;
-+        }
-+
-+        google::protobuf::io::CodedInputStream codedIn1(&arrayIn);
-+
-+        codedIn1.ReadRaw(temp, 2); // Read the protocol Message type
-+        codedIn1.ReadVarint32(&size);
-+        if((size & 0x7f800000) > 0)
-+        {
-+            message_size = 4 + (size + 2); //size of size variable in the message + size Bytes + 2 Bytes protocol
-+        }
-+        else if((size & 0x7f8000) > 0)
-+        {
-+            message_size = 3 + (size + 2);
-+        }
-+        else if((size & 0x7f80) > 0)
-+        {
-+            message_size = 2 + (size + 2);
-+        }
-+        else
-+        {
-+            message_size = 1 + (size + 2);
-+        }
-+        //Read the remaining Bytes from the incoming message from TCP buffer
-+        while(pointer < message_size)
-+        {
-+            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
-+            if(numbytes > 0)
-+                pointer = pointer + numbytes;
-+        }
-+        //Deserialize the complete incoming message
-+        google::protobuf::io::CodedInputStream codedIn(buffer, message_size);
-+
-+        // Omit the first two Bytes (Message ID)
-+        codedIn.Skip(2);
-+
-+            if(temp[0] == 'd') { //Data
-+                if(temp[1] == 'a') { //1st Data Type
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    preprocessedStreamInput.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    // Parse the message data
-+                    msg.type = 0;
-+                    msg.data = preprocessedStreamInput.randominteger();
-+
-+                    //Push data into the lockfree structure
-+                    while(!arg->queue_receiver_processor->push(msg))
-+                    {
-+                        ;
-+                    }
-+                }
-+                if(temp[1] == 'b') { //2st Data Type
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    stringList.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    // Parse the message data
-+                    msg.type = 0;
-+                    msg.data = stringList.randominteger();
-+
-+                    //Push data into the lockfree structure
-+                    while(!arg->queue_receiver_processor->push(msg))
-+                    {
-+                        ;
-+                    }
-+                }
-+            }
-+            else if(temp[0] == 'p') { //Parameters
-+                if(temp[1] == 'a')  {//int Parameter
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    IntegerParameter.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    if((size & 0x7f800000) > 0)
-+                    {
-+                        internal_size = internal_size + size + 4;
-+                    }
-+                    else if((size & 0x7f8000) > 0)
-+                    {
-+                        internal_size = internal_size + size + 3;
-+                    }
-+                    else if((size & 0x7f80) > 0)
-+                    {
-+                        internal_size = internal_size + size + 2;
-+                    }
-+                    else
-+                    {
-+                        internal_size = internal_size + size + 1;
-+                    }
-+                }
-+            }
-+            else if(temp[0] == 'c')
-+            {
-+                printf("Connection closed\n");
-+                return;
-+            }
-+
-+    }
-+    close(receiver_socket_connected);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/sender.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/sender.cpp
-new file mode 100644
-index 0000000..f1364be
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/GenTopoHardwareCorrelationFinancial/sender.cpp
-@@ -0,0 +1,98 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
-+#include <sys/wait.h>
-+#include <signal.h>
-+#include <string>
-+#include <iostream>
-+#include <netdb.h>
-+#include <netinet/in.h>
-+#include <string.h>
-+#include <google/protobuf/io/coded_stream.h>
-+#include <google/protobuf/generated_message_util.h>
-+#include <google/protobuf/message.h>
-+#include <google/protobuf/extension_set.h>
-+#include <google/protobuf/unknown_field_set.h>
-+#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
-+
-+#include "SerializeServerTemplateCpuCode.h"
-+#include "FCorrelationFinancial.pb.h"
-+
-+void sender(parm *arg)
-+{
-+    struct sockaddr_in server_addr;
-+    int transmitter_socket;
-+    socklen_t sin_size;
-+    int true_var=1;
-+    struct sockaddr_in transmitter_addr;
-+
-+    if ((transmitter_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-+    {
-+        perror("Socket");
-+        exit(1);
-+    }
-+
-+    if (setsockopt(transmitter_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
-+    {
-+        perror("Setsockopt");
-+        exit(1);
-+    }
-+
-+    server_addr.sin_family = AF_INET;
-+    server_addr.sin_port = htons(2401);
-+    server_addr.sin_addr.s_addr = INADDR_ANY;
-+    bzero(&(server_addr.sin_zero),8);
-+
-+    if (bind(transmitter_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
-+    {
-+        perror("Unable to bind");
-+        exit(1);
-+    }
-+
-+    if (listen(transmitter_socket, 5) == -1)
-+    {
-+        perror("Listen failed");
-+        exit(1);
-+    }
-+
-+    printf("TCPServer Waiting for client on port 2401\n");
-+
-+    sin_size = sizeof(transmitter_addr);
-+    int transmitter_socket_connected = accept(transmitter_socket, (struct sockaddr *)&transmitter_addr,&sin_size);
-+    printf("Got a connection from (%s , %d)\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));
-+    printf("Connection with Spout\n");
-+
-+    eu::qualimaster::families::protobuf::SIFCorrelationFinancialPairwiseFinancialOutput to;
-+
-+    struct message_processor_sender msg;
-+    while(1)
-+    {
-+        while(!arg->queue_processor_sender->pop(msg))
-+        {
-+            ;
-+        }
-+        to.set_randominteger(msg.data);
-+        //already set up a message object called serverAck
-+        //make a buffer that can hold message + room for a 32bit delimiter
-+        int ackSize=to.ByteSize()+ google::protobuf::io::CodedOutputStream::VarintSize32(to.ByteSize());
-+        char* ackBuf=new char[ackSize];
-+
-+        //write varint delimiter to buffer
-+        google::protobuf::io::ArrayOutputStream arrayOut(ackBuf, ackSize);
-+        google::protobuf::io::CodedOutputStream codedOut(&arrayOut);
-+
-+        //write protobuf ack to buffer
-+        codedOut.WriteVarint32(to.ByteSize());
-+        to.SerializeToCodedStream(&codedOut);
-+
-+        //send buffer to client
-+        send(transmitter_socket_connected, ackBuf, ackSize, 0);
-+
-+        delete(ackBuf);
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/receiver.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/receiver.cpp
-new file mode 100644
-index 0000000..7714e77
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/receiver.cpp
-@@ -0,0 +1,192 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
-+#include <sys/wait.h>
-+#include <signal.h>
-+#include <string>
-+#include <iostream>
-+#include <google/protobuf/io/coded_stream.h>
-+#include <google/protobuf/generated_message_util.h>
-+#include <google/protobuf/message.h>
-+#include <google/protobuf/extension_set.h>
-+#include <google/protobuf/unknown_field_set.h>
-+#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
-+
-+#include "SerializeServerTemplateCpuCode.h"
-+#include "parameters.pb.h"
-+#include "FCorrelationFinancial.pb.h"
-+#include "stringlist.pb.h"
-+using namespace std;
-+
-+void receiver(parm *arg)
-+{
-+    struct sockaddr_in server_addr;
-+    int receiver_socket;
-+    int true_var=1;
-+    struct sockaddr_in receiver_addr;
-+    socklen_t sin_size;
-+
-+    if ((receiver_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-+    {
-+        perror("Socket");
-+        exit(1);
-+    }
-+
-+    if (setsockopt(receiver_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
-+    {
-+        perror("Setsockopt");
-+        exit(1);
-+    }
-+
-+    server_addr.sin_family = AF_INET;
-+    server_addr.sin_port = htons(2400);
-+    server_addr.sin_addr.s_addr = INADDR_ANY;
-+    bzero(&(server_addr.sin_zero),8);
-+
-+    if (bind(receiver_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
-+    {
-+        perror("Unable to bind");
-+        exit(1);
-+    }
-+
-+    if (listen(receiver_socket, 5) == -1)
-+    {
-+        perror("Listen failed");
-+        exit(1);
-+    }
-+
-+    printf("TCPServer Waiting for client on port 2400\n");
-+
-+    sin_size = (socklen_t)sizeof(receiver_addr);
-+    int receiver_socket_connected = accept(receiver_socket, (struct sockaddr *)&receiver_addr,&sin_size);
-+    printf("Got a connection from (%s , %d)\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port));
-+    printf("Connection with Bolt\n");
-+
-+    eu::qualimaster::families::protobuf::SIFCorrelationFinancialpreprocessedStreamInput preprocessedStreamInput;
-+    eu::qualimaster::base::protos::SStringList stringList;
-+    eu::qualimaster::base::protos::SIntegerParameter IntegerParameter;
-+
-+    google::protobuf::uint32 size;
-+    google::protobuf::io::CodedInputStream::Limit msgLimit;
-+    unsigned char buffer[MAXDATASIZE];
-+    unsigned char temp[10];
-+    int numbytes = 0;
-+    int internal_size = 0;
-+    int pointer = 0;
-+    int j, i;
-+    bzero(buffer,0);
-+
-+    struct message_receiver_processor msg;
-+    while(1)
-+    {
-+        numbytes = 0;
-+        while(pointer < MESSAGE_HEADER)
-+        {
-+            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
-+            if(numbytes > 0)
-+                pointer = pointer + numbytes;
-+        }
-+
-+        google::protobuf::io::CodedInputStream codedIn1(&arrayIn);
-+
-+        codedIn1.ReadRaw(temp, 2); // Read the protocol Message type
-+        codedIn1.ReadVarint32(&size);
-+        if((size & 0x7f800000) > 0)
-+        {
-+            message_size = 4 + (size + 2); //size of size variable in the message + size Bytes + 2 Bytes protocol
-+        }
-+        else if((size & 0x7f8000) > 0)
-+        {
-+            message_size = 3 + (size + 2);
-+        }
-+        else if((size & 0x7f80) > 0)
-+        {
-+            message_size = 2 + (size + 2);
-+        }
-+        else
-+        {
-+            message_size = 1 + (size + 2);
-+        }
-+        //Read the remaining Bytes from the incoming message from TCP buffer
-+        while(pointer < message_size)
-+        {
-+            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
-+            if(numbytes > 0)
-+                pointer = pointer + numbytes;
-+        }
-+        //Deserialize the complete incoming message
-+        google::protobuf::io::CodedInputStream codedIn(buffer, message_size);
-+
-+        // Omit the first two Bytes (Message ID)
-+        codedIn.Skip(2);
-+
-+            if(temp[0] == 'd') { //Data
-+                if(temp[1] == 'a') { //1st Data Type
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    preprocessedStreamInput.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    // Parse the message data
-+                    msg.type = 0;
-+                    msg.data = preprocessedStreamInput.randominteger();
-+
-+                    //Push data into the lockfree structure
-+                    while(!arg->queue_receiver_processor->push(msg))
-+                    {
-+                        ;
-+                    }
-+                }
-+                if(temp[1] == 'b') { //2st Data Type
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    stringList.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    // Parse the message data
-+                    msg.type = 0;
-+                    msg.data = stringList.randominteger();
-+
-+                    //Push data into the lockfree structure
-+                    while(!arg->queue_receiver_processor->push(msg))
-+                    {
-+                        ;
-+                    }
-+                }
-+            }
-+            else if(temp[0] == 'p') { //Parameters
-+                if(temp[1] == 'a')  {//int Parameter
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    IntegerParameter.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    if((size & 0x7f800000) > 0)
-+                    {
-+                        internal_size = internal_size + size + 4;
-+                    }
-+                    else if((size & 0x7f8000) > 0)
-+                    {
-+                        internal_size = internal_size + size + 3;
-+                    }
-+                    else if((size & 0x7f80) > 0)
-+                    {
-+                        internal_size = internal_size + size + 2;
-+                    }
-+                    else
-+                    {
-+                        internal_size = internal_size + size + 1;
-+                    }
-+                }
-+            }
-+            else if(temp[0] == 'c')
-+            {
-+                printf("Connection closed\n");
-+                return;
-+            }
-+
-+    }
-+    close(receiver_socket_connected);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/sender.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/sender.cpp
-new file mode 100644
-index 0000000..f1364be
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/MutualInformationHardware/sender.cpp
-@@ -0,0 +1,98 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
-+#include <sys/wait.h>
-+#include <signal.h>
-+#include <string>
-+#include <iostream>
-+#include <netdb.h>
-+#include <netinet/in.h>
-+#include <string.h>
-+#include <google/protobuf/io/coded_stream.h>
-+#include <google/protobuf/generated_message_util.h>
-+#include <google/protobuf/message.h>
-+#include <google/protobuf/extension_set.h>
-+#include <google/protobuf/unknown_field_set.h>
-+#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
-+
-+#include "SerializeServerTemplateCpuCode.h"
-+#include "FCorrelationFinancial.pb.h"
-+
-+void sender(parm *arg)
-+{
-+    struct sockaddr_in server_addr;
-+    int transmitter_socket;
-+    socklen_t sin_size;
-+    int true_var=1;
-+    struct sockaddr_in transmitter_addr;
-+
-+    if ((transmitter_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-+    {
-+        perror("Socket");
-+        exit(1);
-+    }
-+
-+    if (setsockopt(transmitter_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
-+    {
-+        perror("Setsockopt");
-+        exit(1);
-+    }
-+
-+    server_addr.sin_family = AF_INET;
-+    server_addr.sin_port = htons(2401);
-+    server_addr.sin_addr.s_addr = INADDR_ANY;
-+    bzero(&(server_addr.sin_zero),8);
-+
-+    if (bind(transmitter_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
-+    {
-+        perror("Unable to bind");
-+        exit(1);
-+    }
-+
-+    if (listen(transmitter_socket, 5) == -1)
-+    {
-+        perror("Listen failed");
-+        exit(1);
-+    }
-+
-+    printf("TCPServer Waiting for client on port 2401\n");
-+
-+    sin_size = sizeof(transmitter_addr);
-+    int transmitter_socket_connected = accept(transmitter_socket, (struct sockaddr *)&transmitter_addr,&sin_size);
-+    printf("Got a connection from (%s , %d)\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));
-+    printf("Connection with Spout\n");
-+
-+    eu::qualimaster::families::protobuf::SIFCorrelationFinancialPairwiseFinancialOutput to;
-+
-+    struct message_processor_sender msg;
-+    while(1)
-+    {
-+        while(!arg->queue_processor_sender->pop(msg))
-+        {
-+            ;
-+        }
-+        to.set_randominteger(msg.data);
-+        //already set up a message object called serverAck
-+        //make a buffer that can hold message + room for a 32bit delimiter
-+        int ackSize=to.ByteSize()+ google::protobuf::io::CodedOutputStream::VarintSize32(to.ByteSize());
-+        char* ackBuf=new char[ackSize];
-+
-+        //write varint delimiter to buffer
-+        google::protobuf::io::ArrayOutputStream arrayOut(ackBuf, ackSize);
-+        google::protobuf::io::CodedOutputStream codedOut(&arrayOut);
-+
-+        //write protobuf ack to buffer
-+        codedOut.WriteVarint32(to.ByteSize());
-+        to.SerializeToCodedStream(&codedOut);
-+
-+        //send buffer to client
-+        send(transmitter_socket_connected, ackBuf, ackSize, 0);
-+
-+        delete(ackBuf);
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/receiver.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/receiver.cpp
-new file mode 100644
-index 0000000..7714e77
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/receiver.cpp
-@@ -0,0 +1,192 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
-+#include <sys/wait.h>
-+#include <signal.h>
-+#include <string>
-+#include <iostream>
-+#include <google/protobuf/io/coded_stream.h>
-+#include <google/protobuf/generated_message_util.h>
-+#include <google/protobuf/message.h>
-+#include <google/protobuf/extension_set.h>
-+#include <google/protobuf/unknown_field_set.h>
-+#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
-+
-+#include "SerializeServerTemplateCpuCode.h"
-+#include "parameters.pb.h"
-+#include "FCorrelationFinancial.pb.h"
-+#include "stringlist.pb.h"
-+using namespace std;
-+
-+void receiver(parm *arg)
-+{
-+    struct sockaddr_in server_addr;
-+    int receiver_socket;
-+    int true_var=1;
-+    struct sockaddr_in receiver_addr;
-+    socklen_t sin_size;
-+
-+    if ((receiver_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-+    {
-+        perror("Socket");
-+        exit(1);
-+    }
-+
-+    if (setsockopt(receiver_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
-+    {
-+        perror("Setsockopt");
-+        exit(1);
-+    }
-+
-+    server_addr.sin_family = AF_INET;
-+    server_addr.sin_port = htons(2400);
-+    server_addr.sin_addr.s_addr = INADDR_ANY;
-+    bzero(&(server_addr.sin_zero),8);
-+
-+    if (bind(receiver_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
-+    {
-+        perror("Unable to bind");
-+        exit(1);
-+    }
-+
-+    if (listen(receiver_socket, 5) == -1)
-+    {
-+        perror("Listen failed");
-+        exit(1);
-+    }
-+
-+    printf("TCPServer Waiting for client on port 2400\n");
-+
-+    sin_size = (socklen_t)sizeof(receiver_addr);
-+    int receiver_socket_connected = accept(receiver_socket, (struct sockaddr *)&receiver_addr,&sin_size);
-+    printf("Got a connection from (%s , %d)\n",inet_ntoa(receiver_addr.sin_addr),ntohs(receiver_addr.sin_port));
-+    printf("Connection with Bolt\n");
-+
-+    eu::qualimaster::families::protobuf::SIFCorrelationFinancialpreprocessedStreamInput preprocessedStreamInput;
-+    eu::qualimaster::base::protos::SStringList stringList;
-+    eu::qualimaster::base::protos::SIntegerParameter IntegerParameter;
-+
-+    google::protobuf::uint32 size;
-+    google::protobuf::io::CodedInputStream::Limit msgLimit;
-+    unsigned char buffer[MAXDATASIZE];
-+    unsigned char temp[10];
-+    int numbytes = 0;
-+    int internal_size = 0;
-+    int pointer = 0;
-+    int j, i;
-+    bzero(buffer,0);
-+
-+    struct message_receiver_processor msg;
-+    while(1)
-+    {
-+        numbytes = 0;
-+        while(pointer < MESSAGE_HEADER)
-+        {
-+            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
-+            if(numbytes > 0)
-+                pointer = pointer + numbytes;
-+        }
-+
-+        google::protobuf::io::CodedInputStream codedIn1(&arrayIn);
-+
-+        codedIn1.ReadRaw(temp, 2); // Read the protocol Message type
-+        codedIn1.ReadVarint32(&size);
-+        if((size & 0x7f800000) > 0)
-+        {
-+            message_size = 4 + (size + 2); //size of size variable in the message + size Bytes + 2 Bytes protocol
-+        }
-+        else if((size & 0x7f8000) > 0)
-+        {
-+            message_size = 3 + (size + 2);
-+        }
-+        else if((size & 0x7f80) > 0)
-+        {
-+            message_size = 2 + (size + 2);
-+        }
-+        else
-+        {
-+            message_size = 1 + (size + 2);
-+        }
-+        //Read the remaining Bytes from the incoming message from TCP buffer
-+        while(pointer < message_size)
-+        {
-+            numbytes = recv(receiver_socket_connected, &buffer[pointer], 1, 0);
-+            if(numbytes > 0)
-+                pointer = pointer + numbytes;
-+        }
-+        //Deserialize the complete incoming message
-+        google::protobuf::io::CodedInputStream codedIn(buffer, message_size);
-+
-+        // Omit the first two Bytes (Message ID)
-+        codedIn.Skip(2);
-+
-+            if(temp[0] == 'd') { //Data
-+                if(temp[1] == 'a') { //1st Data Type
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    preprocessedStreamInput.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    // Parse the message data
-+                    msg.type = 0;
-+                    msg.data = preprocessedStreamInput.randominteger();
-+
-+                    //Push data into the lockfree structure
-+                    while(!arg->queue_receiver_processor->push(msg))
-+                    {
-+                        ;
-+                    }
-+                }
-+                if(temp[1] == 'b') { //2st Data Type
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    stringList.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    // Parse the message data
-+                    msg.type = 0;
-+                    msg.data = stringList.randominteger();
-+
-+                    //Push data into the lockfree structure
-+                    while(!arg->queue_receiver_processor->push(msg))
-+                    {
-+                        ;
-+                    }
-+                }
-+            }
-+            else if(temp[0] == 'p') { //Parameters
-+                if(temp[1] == 'a')  {//int Parameter
-+                    codedIn.ReadVarint32(&size);
-+                    msgLimit = codedIn.PushLimit(size);
-+                    IntegerParameter.ParseFromCodedStream(&codedIn);
-+                    codedIn.PopLimit(msgLimit);
-+                    if((size & 0x7f800000) > 0)
-+                    {
-+                        internal_size = internal_size + size + 4;
-+                    }
-+                    else if((size & 0x7f8000) > 0)
-+                    {
-+                        internal_size = internal_size + size + 3;
-+                    }
-+                    else if((size & 0x7f80) > 0)
-+                    {
-+                        internal_size = internal_size + size + 2;
-+                    }
-+                    else
-+                    {
-+                        internal_size = internal_size + size + 1;
-+                    }
-+                }
-+            }
-+            else if(temp[0] == 'c')
-+            {
-+                printf("Connection closed\n");
-+                return;
-+            }
-+
-+    }
-+    close(receiver_socket_connected);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/sender.cpp b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/sender.cpp
-new file mode 100644
-index 0000000..f1364be
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/hw-gen/TransferEntropyHardware/sender.cpp
-@@ -0,0 +1,98 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
-+#include <sys/wait.h>
-+#include <signal.h>
-+#include <string>
-+#include <iostream>
-+#include <netdb.h>
-+#include <netinet/in.h>
-+#include <string.h>
-+#include <google/protobuf/io/coded_stream.h>
-+#include <google/protobuf/generated_message_util.h>
-+#include <google/protobuf/message.h>
-+#include <google/protobuf/extension_set.h>
-+#include <google/protobuf/unknown_field_set.h>
-+#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
-+
-+#include "SerializeServerTemplateCpuCode.h"
-+#include "FCorrelationFinancial.pb.h"
-+
-+void sender(parm *arg)
-+{
-+    struct sockaddr_in server_addr;
-+    int transmitter_socket;
-+    socklen_t sin_size;
-+    int true_var=1;
-+    struct sockaddr_in transmitter_addr;
-+
-+    if ((transmitter_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-+    {
-+        perror("Socket");
-+        exit(1);
-+    }
-+
-+    if (setsockopt(transmitter_socket,SOL_SOCKET,SO_REUSEADDR,&true_var,sizeof(int)) == -1)
-+    {
-+        perror("Setsockopt");
-+        exit(1);
-+    }
-+
-+    server_addr.sin_family = AF_INET;
-+    server_addr.sin_port = htons(2401);
-+    server_addr.sin_addr.s_addr = INADDR_ANY;
-+    bzero(&(server_addr.sin_zero),8);
-+
-+    if (bind(transmitter_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
-+    {
-+        perror("Unable to bind");
-+        exit(1);
-+    }
-+
-+    if (listen(transmitter_socket, 5) == -1)
-+    {
-+        perror("Listen failed");
-+        exit(1);
-+    }
-+
-+    printf("TCPServer Waiting for client on port 2401\n");
-+
-+    sin_size = sizeof(transmitter_addr);
-+    int transmitter_socket_connected = accept(transmitter_socket, (struct sockaddr *)&transmitter_addr,&sin_size);
-+    printf("Got a connection from (%s , %d)\n",inet_ntoa(transmitter_addr.sin_addr),ntohs(transmitter_addr.sin_port));
-+    printf("Connection with Spout\n");
-+
-+    eu::qualimaster::families::protobuf::SIFCorrelationFinancialPairwiseFinancialOutput to;
-+
-+    struct message_processor_sender msg;
-+    while(1)
-+    {
-+        while(!arg->queue_processor_sender->pop(msg))
-+        {
-+            ;
-+        }
-+        to.set_randominteger(msg.data);
-+        //already set up a message object called serverAck
-+        //make a buffer that can hold message + room for a 32bit delimiter
-+        int ackSize=to.ByteSize()+ google::protobuf::io::CodedOutputStream::VarintSize32(to.ByteSize());
-+        char* ackBuf=new char[ackSize];
-+
-+        //write varint delimiter to buffer
-+        google::protobuf::io::ArrayOutputStream arrayOut(ackBuf, ackSize);
-+        google::protobuf::io::CodedOutputStream codedOut(&arrayOut);
-+
-+        //write protobuf ack to buffer
-+        codedOut.WriteVarint32(to.ByteSize());
-+        to.SerializeToCodedStream(&codedOut);
-+
-+        //send buffer to client
-+        send(transmitter_socket_connected, ackBuf, ackSize, 0);
-+
-+        delete(ackBuf);
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSink.java
-new file mode 100644
-index 0000000..e13afb0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSink.java
-@@ -0,0 +1,72 @@
-+package eu.qualimaster.data.imp;
-+
-+import eu.qualimaster.data.inf.IDynamicGraphSink;
-+import eu.qualimaster.data.inf.IDynamicGraphSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class DynamicGraphSink implements IDynamicGraphSink{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class DynamicGraphSinkHubStreamInput implements IDynamicGraphSinkHubStreamInput {
-+        private String hubList;
-+        /**
-+        * Returns the input value for tuple field "hubList".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getHubList() {
-+            return hubList;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "hubList".
-+        * @param hubList the field value
-+        */
-+        @Override
-+        public void setHubList(String hubList) {
-+            this.hubList = hubList;
-+        }
-+        static {
-+            SerializerRegistry.register("DynamicGraphSinkHubStreamInput", DynamicGraphSinkSerializers.DynamicGraphSinkHubStreamInputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data DynamicGraphSinkHubStreamInput
-+    **/
-+    @Override
-+    public void postDataHubStream(IDynamicGraphSinkHubStreamInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IDynamicGraphSinkHubStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, IDynamicGraphSinkHubStreamInput tuple) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSinkSerializers.java
-new file mode 100644
-index 0000000..f2ab2af
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/DynamicGraphSinkSerializers.java
-@@ -0,0 +1,71 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.DynamicGraphSink;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.DynamicGraphSinkProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "DynamicGraphSink" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class DynamicGraphSinkSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link DynamicGraphSink.IDynamicGraphSinkHubStreamInput} algorithm.
-+ */
-+public static class DynamicGraphSinkHubStreamInputSerializer extends Serializer<DynamicGraphSink.DynamicGraphSinkHubStreamInput> implements ISerializer<DynamicGraphSink.IDynamicGraphSinkHubStreamInput> {
-+
-+    @Override
-+    public void serializeTo(DynamicGraphSink.IDynamicGraphSinkHubStreamInput object, OutputStream out) throws IOException {
-+        SDynamicGraphSinkHubStreamInput tmp = SDynamicGraphSinkHubStreamInput.newBuilder()
-+            .setHubList(object.getHubList())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(DynamicGraphSink.IDynamicGraphSinkHubStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getHubList());
-+        }
-+
-+    @Override
-+    public DynamicGraphSink.IDynamicGraphSinkHubStreamInput deserializeFrom(InputStream in) throws IOException {
-+        DynamicGraphSink.DynamicGraphSinkHubStreamInput result = new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
-+        SDynamicGraphSinkHubStreamInput tmp = SDynamicGraphSinkHubStreamInput.parseDelimitedFrom(in);
-+        result.setHubList(tmp.getHubList());
-+        return result;
-+    }
-+
-+        @Override
-+        public DynamicGraphSink.IDynamicGraphSinkHubStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            DynamicGraphSink.DynamicGraphSinkHubStreamInput result = new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
-+            result.setHubList(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, DynamicGraphSink.DynamicGraphSinkHubStreamInput object) {
-+        output.writeString(object.getHubList());
-+    }
-+
-+    @Override
-+    public DynamicGraphSink.DynamicGraphSinkHubStreamInput read(Kryo kryo, Input input, Class<DynamicGraphSink.DynamicGraphSinkHubStreamInput> type) {
-+        DynamicGraphSink.DynamicGraphSinkHubStreamInput result = new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
-+        result.setHubList(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialData.java
-new file mode 100644
-index 0000000..6bf4306
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialData.java
-@@ -0,0 +1,136 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData;
-+import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class FixedRateSimulatedFinancialData implements IFixedRateSimulatedFinancialData{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class FixedRateSimulatedFinancialDataSymbolListOutput implements IFixedRateSimulatedFinancialDataSymbolListOutput {
-+        private java.util.List<String> allSymbols;
-+        /**
-+        * Returns the input value for tuple field "allSymbols".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "allSymbols".
-+        * @param allSymbols the field value
-+        */
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("FixedRateSimulatedFinancialDataSymbolListOutput", FixedRateSimulatedFinancialDataSerializers.FixedRateSimulatedFinancialDataSymbolListOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class FixedRateSimulatedFinancialDataSpringStreamOutput implements IFixedRateSimulatedFinancialDataSpringStreamOutput {
-+        private String symbolTuple;
-+        /**
-+        * Returns the input value for tuple field "symbolTuple".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getSymbolTuple(){
-+            return symbolTuple;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "symbolTuple".
-+        * @param symbolTuple the field value
-+        */
-+        @Override
-+        public void setSymbolTuple(String symbolTuple){
-+            this.symbolTuple = symbolTuple;
-+        }
-+        static {
-+            SerializerRegistry.register("FixedRateSimulatedFinancialDataSpringStreamOutput", FixedRateSimulatedFinancialDataSerializers.FixedRateSimulatedFinancialDataSpringStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return FixedRateSimulatedFinancialDataSymbolListOutput the source data
-+    **/
-+    @Override
-+    public FixedRateSimulatedFinancialDataSymbolListOutput getSymbolList() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(IFixedRateSimulatedFinancialDataSymbolListOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return FixedRateSimulatedFinancialDataSpringStreamOutput the source data
-+    **/
-+    @Override
-+    public FixedRateSimulatedFinancialDataSpringStreamOutput getSpringStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(IFixedRateSimulatedFinancialDataSpringStreamOutput tuple) {
-+        return null;
-+    }
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialDataSerializers.java
-new file mode 100644
-index 0000000..1a52b63
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FixedRateSimulatedFinancialDataSerializers.java
-@@ -0,0 +1,113 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.FixedRateSimulatedFinancialData;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.FixedRateSimulatedFinancialDataProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "FixedRateSimulatedFinancialData" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FixedRateSimulatedFinancialDataSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput} algorithm.
-+ */
-+public static class FixedRateSimulatedFinancialDataSymbolListOutputSerializer extends Serializer<FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput> implements ISerializer<FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput> {
-+
-+    @Override
-+    public void serializeTo(FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
-+        FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
-+            FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput> type) {
-+        FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput} algorithm.
-+ */
-+public static class FixedRateSimulatedFinancialDataSpringStreamOutputSerializer extends Serializer<FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput> implements ISerializer<FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
-+        SFixedRateSimulatedFinancialDataSpringStreamOutput tmp = SFixedRateSimulatedFinancialDataSpringStreamOutput.newBuilder()
-+            .setSymbolTuple(object.getSymbolTuple())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolTuple());
-+        }
-+
-+    @Override
-+    public FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput();
-+        SFixedRateSimulatedFinancialDataSpringStreamOutput tmp = SFixedRateSimulatedFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolTuple(tmp.getSymbolTuple());
-+        return result;
-+    }
-+
-+        @Override
-+        public FixedRateSimulatedFinancialData.IFixedRateSimulatedFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput();
-+            result.setSymbolTuple(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput object) {
-+        output.writeString(object.getSymbolTuple());
-+    }
-+
-+    @Override
-+    public FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput> type) {
-+        FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput result = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput();
-+        result.setSymbolTuple(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialData.java
-new file mode 100644
-index 0000000..c0245cb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialData.java
-@@ -0,0 +1,147 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.IFocusFincancialData;
-+import eu.qualimaster.data.inf.IFocusFincancialData.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class FocusFincancialData implements IFocusFincancialData{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class FocusFincancialDataSymbolListOutput implements IFocusFincancialDataSymbolListOutput {
-+        private java.util.List<String> allSymbols;
-+        /**
-+        * Returns the input value for tuple field "allSymbols".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "allSymbols".
-+        * @param allSymbols the field value
-+        */
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("FocusFincancialDataSymbolListOutput", FocusFincancialDataSerializers.FocusFincancialDataSymbolListOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class FocusFincancialDataSpringStreamOutput implements IFocusFincancialDataSpringStreamOutput {
-+        private String symbolTuple;
-+        /**
-+        * Returns the input value for tuple field "symbolTuple".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getSymbolTuple(){
-+            return symbolTuple;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "symbolTuple".
-+        * @param symbolTuple the field value
-+        */
-+        @Override
-+        public void setSymbolTuple(String symbolTuple){
-+            this.symbolTuple = symbolTuple;
-+        }
-+        static {
-+            SerializerRegistry.register("FocusFincancialDataSpringStreamOutput", FocusFincancialDataSerializers.FocusFincancialDataSpringStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return FocusFincancialDataSymbolListOutput the source data
-+    **/
-+    @Override
-+    public FocusFincancialDataSymbolListOutput getSymbolList() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(IFocusFincancialDataSymbolListOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return FocusFincancialDataSpringStreamOutput the source data
-+    **/
-+    @Override
-+    public FocusFincancialDataSpringStreamOutput getSpringStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(IFocusFincancialDataSpringStreamOutput tuple) {
-+        return null;
-+    }
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "playerList".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterPlayerList(String value) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialDataSerializers.java
-new file mode 100644
-index 0000000..fdbd7ce
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusFincancialDataSerializers.java
-@@ -0,0 +1,113 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.FocusFincancialData;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.FocusFincancialDataProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "FocusFincancialData" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FocusFincancialDataSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link FocusFincancialData.IFocusFincancialDataSymbolListOutput} algorithm.
-+ */
-+public static class FocusFincancialDataSymbolListOutputSerializer extends Serializer<FocusFincancialData.FocusFincancialDataSymbolListOutput> implements ISerializer<FocusFincancialData.IFocusFincancialDataSymbolListOutput> {
-+
-+    @Override
-+    public void serializeTo(FocusFincancialData.IFocusFincancialDataSymbolListOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(FocusFincancialData.IFocusFincancialDataSymbolListOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public FocusFincancialData.IFocusFincancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
-+        FocusFincancialData.FocusFincancialDataSymbolListOutput result = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public FocusFincancialData.IFocusFincancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
-+            FocusFincancialData.FocusFincancialDataSymbolListOutput result = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FocusFincancialData.FocusFincancialDataSymbolListOutput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public FocusFincancialData.FocusFincancialDataSymbolListOutput read(Kryo kryo, Input input, Class<FocusFincancialData.FocusFincancialDataSymbolListOutput> type) {
-+        FocusFincancialData.FocusFincancialDataSymbolListOutput result = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link FocusFincancialData.IFocusFincancialDataSpringStreamOutput} algorithm.
-+ */
-+public static class FocusFincancialDataSpringStreamOutputSerializer extends Serializer<FocusFincancialData.FocusFincancialDataSpringStreamOutput> implements ISerializer<FocusFincancialData.IFocusFincancialDataSpringStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(FocusFincancialData.IFocusFincancialDataSpringStreamOutput object, OutputStream out) throws IOException {
-+        SFocusFincancialDataSpringStreamOutput tmp = SFocusFincancialDataSpringStreamOutput.newBuilder()
-+            .setSymbolTuple(object.getSymbolTuple())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(FocusFincancialData.IFocusFincancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolTuple());
-+        }
-+
-+    @Override
-+    public FocusFincancialData.IFocusFincancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FocusFincancialData.FocusFincancialDataSpringStreamOutput result = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
-+        SFocusFincancialDataSpringStreamOutput tmp = SFocusFincancialDataSpringStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolTuple(tmp.getSymbolTuple());
-+        return result;
-+    }
-+
-+        @Override
-+        public FocusFincancialData.IFocusFincancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FocusFincancialData.FocusFincancialDataSpringStreamOutput result = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
-+            result.setSymbolTuple(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FocusFincancialData.FocusFincancialDataSpringStreamOutput object) {
-+        output.writeString(object.getSymbolTuple());
-+    }
-+
-+    @Override
-+    public FocusFincancialData.FocusFincancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<FocusFincancialData.FocusFincancialDataSpringStreamOutput> type) {
-+        FocusFincancialData.FocusFincancialDataSpringStreamOutput result = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
-+        result.setSymbolTuple(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSink.java
-new file mode 100644
-index 0000000..2e47081
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSink.java
-@@ -0,0 +1,114 @@
-+package eu.qualimaster.data.imp;
-+
-+import eu.qualimaster.data.inf.IFocusSink;
-+import eu.qualimaster.data.inf.IFocusSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class FocusSink implements IFocusSink{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class FocusSinkRecommendationStreamInput implements IFocusSinkRecommendationStreamInput {
-+        private String recommendations;
-+        /**
-+        * Returns the input value for tuple field "recommendations".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getRecommendations() {
-+            return recommendations;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "recommendations".
-+        * @param recommendations the field value
-+        */
-+        @Override
-+        public void setRecommendations(String recommendations) {
-+            this.recommendations = recommendations;
-+        }
-+        static {
-+            SerializerRegistry.register("FocusSinkRecommendationStreamInput", FocusSinkSerializers.FocusSinkRecommendationStreamInputSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class FocusSinkEdgeStreamInput implements IFocusSinkEdgeStreamInput {
-+        private String edge;
-+        /**
-+        * Returns the input value for tuple field "edge".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getEdge() {
-+            return edge;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "edge".
-+        * @param edge the field value
-+        */
-+        @Override
-+        public void setEdge(String edge) {
-+            this.edge = edge;
-+        }
-+        static {
-+            SerializerRegistry.register("FocusSinkEdgeStreamInput", FocusSinkSerializers.FocusSinkEdgeStreamInputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data FocusSinkRecommendationStreamInput
-+    **/
-+    @Override
-+    public void postDataRecommendationStream(IFocusSinkRecommendationStreamInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IFocusSinkRecommendationStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, IFocusSinkRecommendationStreamInput tuple) {
-+    }
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data FocusSinkEdgeStreamInput
-+    **/
-+    @Override
-+    public void postDataEdgeStream(IFocusSinkEdgeStreamInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IFocusSinkEdgeStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, IFocusSinkEdgeStreamInput tuple) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSinkSerializers.java
-new file mode 100644
-index 0000000..c097bf3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/FocusSinkSerializers.java
-@@ -0,0 +1,117 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.FocusSink;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.FocusSinkProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "FocusSink" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FocusSinkSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link FocusSink.IFocusSinkRecommendationStreamInput} algorithm.
-+ */
-+public static class FocusSinkRecommendationStreamInputSerializer extends Serializer<FocusSink.FocusSinkRecommendationStreamInput> implements ISerializer<FocusSink.IFocusSinkRecommendationStreamInput> {
-+
-+    @Override
-+    public void serializeTo(FocusSink.IFocusSinkRecommendationStreamInput object, OutputStream out) throws IOException {
-+        SFocusSinkRecommendationStreamInput tmp = SFocusSinkRecommendationStreamInput.newBuilder()
-+            .setRecommendations(object.getRecommendations())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(FocusSink.IFocusSinkRecommendationStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getRecommendations());
-+        }
-+
-+    @Override
-+    public FocusSink.IFocusSinkRecommendationStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FocusSink.FocusSinkRecommendationStreamInput result = new FocusSink.FocusSinkRecommendationStreamInput();
-+        SFocusSinkRecommendationStreamInput tmp = SFocusSinkRecommendationStreamInput.parseDelimitedFrom(in);
-+        result.setRecommendations(tmp.getRecommendations());
-+        return result;
-+    }
-+
-+        @Override
-+        public FocusSink.IFocusSinkRecommendationStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FocusSink.FocusSinkRecommendationStreamInput result = new FocusSink.FocusSinkRecommendationStreamInput();
-+            result.setRecommendations(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FocusSink.FocusSinkRecommendationStreamInput object) {
-+        output.writeString(object.getRecommendations());
-+    }
-+
-+    @Override
-+    public FocusSink.FocusSinkRecommendationStreamInput read(Kryo kryo, Input input, Class<FocusSink.FocusSinkRecommendationStreamInput> type) {
-+        FocusSink.FocusSinkRecommendationStreamInput result = new FocusSink.FocusSinkRecommendationStreamInput();
-+        result.setRecommendations(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link FocusSink.IFocusSinkEdgeStreamInput} algorithm.
-+ */
-+public static class FocusSinkEdgeStreamInputSerializer extends Serializer<FocusSink.FocusSinkEdgeStreamInput> implements ISerializer<FocusSink.IFocusSinkEdgeStreamInput> {
-+
-+    @Override
-+    public void serializeTo(FocusSink.IFocusSinkEdgeStreamInput object, OutputStream out) throws IOException {
-+        SFocusSinkEdgeStreamInput tmp = SFocusSinkEdgeStreamInput.newBuilder()
-+            .setEdge(object.getEdge())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(FocusSink.IFocusSinkEdgeStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getEdge());
-+        }
-+
-+    @Override
-+    public FocusSink.IFocusSinkEdgeStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FocusSink.FocusSinkEdgeStreamInput result = new FocusSink.FocusSinkEdgeStreamInput();
-+        SFocusSinkEdgeStreamInput tmp = SFocusSinkEdgeStreamInput.parseDelimitedFrom(in);
-+        result.setEdge(tmp.getEdge());
-+        return result;
-+    }
-+
-+        @Override
-+        public FocusSink.IFocusSinkEdgeStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FocusSink.FocusSinkEdgeStreamInput result = new FocusSink.FocusSinkEdgeStreamInput();
-+            result.setEdge(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FocusSink.FocusSinkEdgeStreamInput object) {
-+        output.writeString(object.getEdge());
-+    }
-+
-+    @Override
-+    public FocusSink.FocusSinkEdgeStreamInput read(Kryo kryo, Input input, Class<FocusSink.FocusSinkEdgeStreamInput> type) {
-+        FocusSink.FocusSinkEdgeStreamInput result = new FocusSink.FocusSinkEdgeStreamInput();
-+        result.setEdge(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_Sink.java
-new file mode 100644
-index 0000000..4c29745
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_Sink.java
-@@ -0,0 +1,126 @@
-+package eu.qualimaster.data.imp;
-+
-+import eu.qualimaster.data.inf.IMI_data_Sink;
-+import eu.qualimaster.data.inf.IMI_data_Sink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class MI_data_Sink implements IMI_data_Sink{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class MI_data_SinkPairwiseFinancialInput implements IMI_data_SinkPairwiseFinancialInput {
-+        private String id0;
-+        private String id1;
-+        private String date;
-+        private double value;
-+        /**
-+        * Returns the input value for tuple field "id0".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getId0() {
-+            return id0;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "id0".
-+        * @param id0 the field value
-+        */
-+        @Override
-+        public void setId0(String id0) {
-+            this.id0 = id0;
-+        }
-+        /**
-+        * Returns the input value for tuple field "id1".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getId1() {
-+            return id1;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "id1".
-+        * @param id1 the field value
-+        */
-+        @Override
-+        public void setId1(String id1) {
-+            this.id1 = id1;
-+        }
-+        /**
-+        * Returns the input value for tuple field "date".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getDate() {
-+            return date;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "date".
-+        * @param date the field value
-+        */
-+        @Override
-+        public void setDate(String date) {
-+            this.date = date;
-+        }
-+        /**
-+        * Returns the input value for tuple field "value".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public double getValue() {
-+            return value;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "value".
-+        * @param value the field value
-+        */
-+        @Override
-+        public void setValue(double value) {
-+            this.value = value;
-+        }
-+        static {
-+            SerializerRegistry.register("MI_data_SinkPairwiseFinancialInput", MI_data_SinkSerializers.MI_data_SinkPairwiseFinancialInputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data MI_data_SinkPairwiseFinancialInput
-+    **/
-+    @Override
-+    public void postDataPairwiseFinancial(IMI_data_SinkPairwiseFinancialInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IMI_data_SinkPairwiseFinancialInput to be emitted 
-+    **/
-+    public void emit(int ticket, IMI_data_SinkPairwiseFinancialInput tuple) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_SinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_SinkSerializers.java
-new file mode 100644
-index 0000000..67a0809
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/MI_data_SinkSerializers.java
-@@ -0,0 +1,89 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.MI_data_Sink;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.MI_data_SinkProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "MI_data_Sink" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class MI_data_SinkSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link MI_data_Sink.IMI_data_SinkPairwiseFinancialInput} algorithm.
-+ */
-+public static class MI_data_SinkPairwiseFinancialInputSerializer extends Serializer<MI_data_Sink.MI_data_SinkPairwiseFinancialInput> implements ISerializer<MI_data_Sink.IMI_data_SinkPairwiseFinancialInput> {
-+
-+    @Override
-+    public void serializeTo(MI_data_Sink.IMI_data_SinkPairwiseFinancialInput object, OutputStream out) throws IOException {
-+        SMI_data_SinkPairwiseFinancialInput tmp = SMI_data_SinkPairwiseFinancialInput.newBuilder()
-+            .setId0(object.getId0())
-+            .setId1(object.getId1())
-+            .setDate(object.getDate())
-+            .setValue(object.getValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(MI_data_Sink.IMI_data_SinkPairwiseFinancialInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getId0());
-+            out.writeString(object.getId1());
-+            out.writeString(object.getDate());
-+            out.writeDouble(object.getValue());
-+        }
-+
-+    @Override
-+    public MI_data_Sink.IMI_data_SinkPairwiseFinancialInput deserializeFrom(InputStream in) throws IOException {
-+        MI_data_Sink.MI_data_SinkPairwiseFinancialInput result = new MI_data_Sink.MI_data_SinkPairwiseFinancialInput();
-+        SMI_data_SinkPairwiseFinancialInput tmp = SMI_data_SinkPairwiseFinancialInput.parseDelimitedFrom(in);
-+        result.setId0(tmp.getId0());
-+        result.setId1(tmp.getId1());
-+        result.setDate(tmp.getDate());
-+        result.setValue(tmp.getValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public MI_data_Sink.IMI_data_SinkPairwiseFinancialInput deserializeFrom(IDataInput in) throws IOException {
-+            MI_data_Sink.MI_data_SinkPairwiseFinancialInput result = new MI_data_Sink.MI_data_SinkPairwiseFinancialInput();
-+            result.setId0(in.nextString());
-+            result.setId1(in.nextString());
-+            result.setDate(in.nextString());
-+            result.setValue(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, MI_data_Sink.MI_data_SinkPairwiseFinancialInput object) {
-+        output.writeString(object.getId0());
-+        output.writeString(object.getId1());
-+        output.writeString(object.getDate());
-+        output.writeDouble(object.getValue());
-+    }
-+
-+    @Override
-+    public MI_data_Sink.MI_data_SinkPairwiseFinancialInput read(Kryo kryo, Input input, Class<MI_data_Sink.MI_data_SinkPairwiseFinancialInput> type) {
-+        MI_data_Sink.MI_data_SinkPairwiseFinancialInput result = new MI_data_Sink.MI_data_SinkPairwiseFinancialInput();
-+        result.setId0(input.readString());
-+        result.setId1(input.readString());
-+        result.setDate(input.readString());
-+        result.setValue(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSource.java
-new file mode 100644
-index 0000000..b3de089
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSource.java
-@@ -0,0 +1,183 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.INewTwitterStreamDataSource;
-+import eu.qualimaster.data.inf.INewTwitterStreamDataSource.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class NewTwitterStreamDataSource implements INewTwitterStreamDataSource{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class NewTwitterStreamDataSourceAnalysisOutput implements INewTwitterStreamDataSourceAnalysisOutput {
-+        private twitter4j.Status status;
-+        /**
-+        * Returns the input value for tuple field "status".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public twitter4j.Status getStatus(){
-+            return status;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "status".
-+        * @param status the field value
-+        */
-+        @Override
-+        public void setStatus(twitter4j.Status status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("NewTwitterStreamDataSourceAnalysisOutput", NewTwitterStreamDataSourceSerializers.NewTwitterStreamDataSourceAnalysisOutputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return NewTwitterStreamDataSourceAnalysisOutput the source data
-+    **/
-+    @Override
-+    public NewTwitterStreamDataSourceAnalysisOutput getAnalysis() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(INewTwitterStreamDataSourceAnalysisOutput tuple) {
-+        return null;
-+    }
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "consumerKey".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterConsumerKey(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "consumerSecret".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterConsumerSecret(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "accessToken".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterAccessToken(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "accessTokenSecret".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterAccessTokenSecret(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "queueSize".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterQueueSize(int value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "tweetDirectory".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterTweetDirectory(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "speedFactor".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterSpeedFactor(double value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "runLocally".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterRunLocally(boolean value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "adjustTimeToNow".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterAdjustTimeToNow(boolean value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "realLoops".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterRealLoops(boolean value) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSourceSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSourceSerializers.java
-new file mode 100644
-index 0000000..d04ab1c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/NewTwitterStreamDataSourceSerializers.java
-@@ -0,0 +1,67 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.NewTwitterStreamDataSource;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.NewTwitterStreamDataSourceProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "NewTwitterStreamDataSource" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class NewTwitterStreamDataSourceSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput} algorithm.
-+ */
-+public static class NewTwitterStreamDataSourceAnalysisOutputSerializer extends Serializer<NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput> implements ISerializer<NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput> {
-+
-+    @Override
-+    public void serializeTo(NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput deserializeFrom(InputStream in) throws IOException {
-+        NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput result = new NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public NewTwitterStreamDataSource.INewTwitterStreamDataSourceAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
-+            NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput result = new NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput read(Kryo kryo, Input input, Class<NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput> type) {
-+        NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput result = new NewTwitterStreamDataSource.NewTwitterStreamDataSourceAnalysisOutput();
-+        result.setStatus(kryo.readObject(input, twitter4j.Status.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSink.java
-new file mode 100644
-index 0000000..6c962fd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSink.java
-@@ -0,0 +1,222 @@
-+package eu.qualimaster.data.imp;
-+
-+import eu.qualimaster.data.inf.IPriorityDataSink;
-+import eu.qualimaster.data.inf.IPriorityDataSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class PriorityDataSink implements IPriorityDataSink{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class PriorityDataSinkPairwiseFinancialInput implements IPriorityDataSinkPairwiseFinancialInput {
-+        private String id0;
-+        private String id1;
-+        private String date;
-+        private double value;
-+        /**
-+        * Returns the input value for tuple field "id0".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getId0() {
-+            return id0;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "id0".
-+        * @param id0 the field value
-+        */
-+        @Override
-+        public void setId0(String id0) {
-+            this.id0 = id0;
-+        }
-+        /**
-+        * Returns the input value for tuple field "id1".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getId1() {
-+            return id1;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "id1".
-+        * @param id1 the field value
-+        */
-+        @Override
-+        public void setId1(String id1) {
-+            this.id1 = id1;
-+        }
-+        /**
-+        * Returns the input value for tuple field "date".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getDate() {
-+            return date;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "date".
-+        * @param date the field value
-+        */
-+        @Override
-+        public void setDate(String date) {
-+            this.date = date;
-+        }
-+        /**
-+        * Returns the input value for tuple field "value".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public double getValue() {
-+            return value;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "value".
-+        * @param value the field value
-+        */
-+        @Override
-+        public void setValue(double value) {
-+            this.value = value;
-+        }
-+        static {
-+            SerializerRegistry.register("PriorityDataSinkPairwiseFinancialInput", PriorityDataSinkSerializers.PriorityDataSinkPairwiseFinancialInputSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class PriorityDataSinkAnalyzedStreamInput implements IPriorityDataSinkAnalyzedStreamInput {
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+        private int volume;
-+        /**
-+        * Returns the input value for tuple field "symbolId".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getSymbolId() {
-+            return symbolId;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "symbolId".
-+        * @param symbolId the field value
-+        */
-+        @Override
-+        public void setSymbolId(String symbolId) {
-+            this.symbolId = symbolId;
-+        }
-+        /**
-+        * Returns the input value for tuple field "timestamp".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getTimestamp() {
-+            return timestamp;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "timestamp".
-+        * @param timestamp the field value
-+        */
-+        @Override
-+        public void setTimestamp(long timestamp) {
-+            this.timestamp = timestamp;
-+        }
-+        /**
-+        * Returns the input value for tuple field "value".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public double getValue() {
-+            return value;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "value".
-+        * @param value the field value
-+        */
-+        @Override
-+        public void setValue(double value) {
-+            this.value = value;
-+        }
-+        /**
-+        * Returns the input value for tuple field "volume".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public int getVolume() {
-+            return volume;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "volume".
-+        * @param volume the field value
-+        */
-+        @Override
-+        public void setVolume(int volume) {
-+            this.volume = volume;
-+        }
-+        static {
-+            SerializerRegistry.register("PriorityDataSinkAnalyzedStreamInput", PriorityDataSinkSerializers.PriorityDataSinkAnalyzedStreamInputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data PriorityDataSinkPairwiseFinancialInput
-+    **/
-+    @Override
-+    public void postDataPairwiseFinancial(IPriorityDataSinkPairwiseFinancialInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IPriorityDataSinkPairwiseFinancialInput to be emitted 
-+    **/
-+    public void emit(int ticket, IPriorityDataSinkPairwiseFinancialInput tuple) {
-+    }
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data PriorityDataSinkAnalyzedStreamInput
-+    **/
-+    @Override
-+    public void postDataAnalyzedStream(IPriorityDataSinkAnalyzedStreamInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IPriorityDataSinkAnalyzedStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, IPriorityDataSinkAnalyzedStreamInput tuple) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSinkSerializers.java
-new file mode 100644
-index 0000000..713e9a2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/PriorityDataSinkSerializers.java
-@@ -0,0 +1,153 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.PriorityDataSink;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.PriorityDataSinkProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "PriorityDataSink" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class PriorityDataSinkSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput} algorithm.
-+ */
-+public static class PriorityDataSinkPairwiseFinancialInputSerializer extends Serializer<PriorityDataSink.PriorityDataSinkPairwiseFinancialInput> implements ISerializer<PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput> {
-+
-+    @Override
-+    public void serializeTo(PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput object, OutputStream out) throws IOException {
-+        SPriorityDataSinkPairwiseFinancialInput tmp = SPriorityDataSinkPairwiseFinancialInput.newBuilder()
-+            .setId0(object.getId0())
-+            .setId1(object.getId1())
-+            .setDate(object.getDate())
-+            .setValue(object.getValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getId0());
-+            out.writeString(object.getId1());
-+            out.writeString(object.getDate());
-+            out.writeDouble(object.getValue());
-+        }
-+
-+    @Override
-+    public PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput deserializeFrom(InputStream in) throws IOException {
-+        PriorityDataSink.PriorityDataSinkPairwiseFinancialInput result = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+        SPriorityDataSinkPairwiseFinancialInput tmp = SPriorityDataSinkPairwiseFinancialInput.parseDelimitedFrom(in);
-+        result.setId0(tmp.getId0());
-+        result.setId1(tmp.getId1());
-+        result.setDate(tmp.getDate());
-+        result.setValue(tmp.getValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public PriorityDataSink.IPriorityDataSinkPairwiseFinancialInput deserializeFrom(IDataInput in) throws IOException {
-+            PriorityDataSink.PriorityDataSinkPairwiseFinancialInput result = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+            result.setId0(in.nextString());
-+            result.setId1(in.nextString());
-+            result.setDate(in.nextString());
-+            result.setValue(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, PriorityDataSink.PriorityDataSinkPairwiseFinancialInput object) {
-+        output.writeString(object.getId0());
-+        output.writeString(object.getId1());
-+        output.writeString(object.getDate());
-+        output.writeDouble(object.getValue());
-+    }
-+
-+    @Override
-+    public PriorityDataSink.PriorityDataSinkPairwiseFinancialInput read(Kryo kryo, Input input, Class<PriorityDataSink.PriorityDataSinkPairwiseFinancialInput> type) {
-+        PriorityDataSink.PriorityDataSinkPairwiseFinancialInput result = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+        result.setId0(input.readString());
-+        result.setId1(input.readString());
-+        result.setDate(input.readString());
-+        result.setValue(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput} algorithm.
-+ */
-+public static class PriorityDataSinkAnalyzedStreamInputSerializer extends Serializer<PriorityDataSink.PriorityDataSinkAnalyzedStreamInput> implements ISerializer<PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput> {
-+
-+    @Override
-+    public void serializeTo(PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput object, OutputStream out) throws IOException {
-+        SPriorityDataSinkAnalyzedStreamInput tmp = SPriorityDataSinkAnalyzedStreamInput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .setVolume(object.getVolume())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+            out.writeInt(object.getVolume());
-+        }
-+
-+    @Override
-+    public PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput deserializeFrom(InputStream in) throws IOException {
-+        PriorityDataSink.PriorityDataSinkAnalyzedStreamInput result = new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+        SPriorityDataSinkAnalyzedStreamInput tmp = SPriorityDataSinkAnalyzedStreamInput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        result.setVolume(tmp.getVolume());
-+        return result;
-+    }
-+
-+        @Override
-+        public PriorityDataSink.IPriorityDataSinkAnalyzedStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            PriorityDataSink.PriorityDataSinkAnalyzedStreamInput result = new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            result.setVolume(in.nextInt());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, PriorityDataSink.PriorityDataSinkAnalyzedStreamInput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+        output.writeInt(object.getVolume());
-+    }
-+
-+    @Override
-+    public PriorityDataSink.PriorityDataSinkAnalyzedStreamInput read(Kryo kryo, Input input, Class<PriorityDataSink.PriorityDataSinkAnalyzedStreamInput> type) {
-+        PriorityDataSink.PriorityDataSinkAnalyzedStreamInput result = new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        result.setVolume(input.readInt());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSink.java
-new file mode 100644
-index 0000000..6adc15b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSink.java
-@@ -0,0 +1,90 @@
-+package eu.qualimaster.data.imp;
-+
-+import eu.qualimaster.data.inf.IRandomSink;
-+import eu.qualimaster.data.inf.IRandomSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class RandomSink implements IRandomSink{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class RandomSinkRandomDataInput implements IRandomSinkRandomDataInput {
-+        private int randomInteger;
-+        private long timestamp;
-+        /**
-+        * Returns the input value for tuple field "randomInteger".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public int getRandomInteger() {
-+            return randomInteger;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "randomInteger".
-+        * @param randomInteger the field value
-+        */
-+        @Override
-+        public void setRandomInteger(int randomInteger) {
-+            this.randomInteger = randomInteger;
-+        }
-+        /**
-+        * Returns the input value for tuple field "timestamp".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getTimestamp() {
-+            return timestamp;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "timestamp".
-+        * @param timestamp the field value
-+        */
-+        @Override
-+        public void setTimestamp(long timestamp) {
-+            this.timestamp = timestamp;
-+        }
-+        static {
-+            SerializerRegistry.register("RandomSinkRandomDataInput", RandomSinkSerializers.RandomSinkRandomDataInputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data RandomSinkRandomDataInput
-+    **/
-+    @Override
-+    public void postDataRandomData(IRandomSinkRandomDataInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IRandomSinkRandomDataInput to be emitted 
-+    **/
-+    public void emit(int ticket, IRandomSinkRandomDataInput tuple) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSinkSerializers.java
-new file mode 100644
-index 0000000..46115f2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSinkSerializers.java
-@@ -0,0 +1,77 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.RandomSink;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.RandomSinkProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "RandomSink" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class RandomSinkSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link RandomSink.IRandomSinkRandomDataInput} algorithm.
-+ */
-+public static class RandomSinkRandomDataInputSerializer extends Serializer<RandomSink.RandomSinkRandomDataInput> implements ISerializer<RandomSink.IRandomSinkRandomDataInput> {
-+
-+    @Override
-+    public void serializeTo(RandomSink.IRandomSinkRandomDataInput object, OutputStream out) throws IOException {
-+        SRandomSinkRandomDataInput tmp = SRandomSinkRandomDataInput.newBuilder()
-+            .setRandomInteger(object.getRandomInteger())
-+            .setTimestamp(object.getTimestamp())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(RandomSink.IRandomSinkRandomDataInput object, IDataOutput out) throws IOException {
-+            out.writeInt(object.getRandomInteger());
-+            out.writeLong(object.getTimestamp());
-+        }
-+
-+    @Override
-+    public RandomSink.IRandomSinkRandomDataInput deserializeFrom(InputStream in) throws IOException {
-+        RandomSink.RandomSinkRandomDataInput result = new RandomSink.RandomSinkRandomDataInput();
-+        SRandomSinkRandomDataInput tmp = SRandomSinkRandomDataInput.parseDelimitedFrom(in);
-+        result.setRandomInteger(tmp.getRandomInteger());
-+        result.setTimestamp(tmp.getTimestamp());
-+        return result;
-+    }
-+
-+        @Override
-+        public RandomSink.IRandomSinkRandomDataInput deserializeFrom(IDataInput in) throws IOException {
-+            RandomSink.RandomSinkRandomDataInput result = new RandomSink.RandomSinkRandomDataInput();
-+            result.setRandomInteger(in.nextInt());
-+            result.setTimestamp(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, RandomSink.RandomSinkRandomDataInput object) {
-+        output.writeInt(object.getRandomInteger());
-+        output.writeLong(object.getTimestamp());
-+    }
-+
-+    @Override
-+    public RandomSink.RandomSinkRandomDataInput read(Kryo kryo, Input input, Class<RandomSink.RandomSinkRandomDataInput> type) {
-+        RandomSink.RandomSinkRandomDataInput result = new RandomSink.RandomSinkRandomDataInput();
-+        result.setRandomInteger(input.readInt());
-+        result.setTimestamp(input.readLong());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSource.java
-new file mode 100644
-index 0000000..91b6070
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSource.java
-@@ -0,0 +1,120 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.IRandomSource;
-+import eu.qualimaster.data.inf.IRandomSource.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class RandomSource implements IRandomSource{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class RandomSourceRandomDataOutput implements IRandomSourceRandomDataOutput {
-+        private int randomInteger;
-+        private long timestamp;
-+        /**
-+        * Returns the input value for tuple field "randomInteger".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public int getRandomInteger(){
-+            return randomInteger;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "randomInteger".
-+        * @param randomInteger the field value
-+        */
-+        @Override
-+        public void setRandomInteger(int randomInteger){
-+            this.randomInteger = randomInteger;
-+        }
-+        /**
-+        * Returns the input value for tuple field "timestamp".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "timestamp".
-+        * @param timestamp the field value
-+        */
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        static {
-+            SerializerRegistry.register("RandomSourceRandomDataOutput", RandomSourceSerializers.RandomSourceRandomDataOutputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return RandomSourceRandomDataOutput the source data
-+    **/
-+    @Override
-+    public RandomSourceRandomDataOutput getRandomData() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(IRandomSourceRandomDataOutput tuple) {
-+        return null;
-+    }
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "delay".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterDelay(int value) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSourceSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSourceSerializers.java
-new file mode 100644
-index 0000000..135df8e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/RandomSourceSerializers.java
-@@ -0,0 +1,77 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.RandomSource;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.RandomSourceProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "RandomSource" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class RandomSourceSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link RandomSource.IRandomSourceRandomDataOutput} algorithm.
-+ */
-+public static class RandomSourceRandomDataOutputSerializer extends Serializer<RandomSource.RandomSourceRandomDataOutput> implements ISerializer<RandomSource.IRandomSourceRandomDataOutput> {
-+
-+    @Override
-+    public void serializeTo(RandomSource.IRandomSourceRandomDataOutput object, OutputStream out) throws IOException {
-+        SRandomSourceRandomDataOutput tmp = SRandomSourceRandomDataOutput.newBuilder()
-+            .setRandomInteger(object.getRandomInteger())
-+            .setTimestamp(object.getTimestamp())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(RandomSource.IRandomSourceRandomDataOutput object, IDataOutput out) throws IOException {
-+            out.writeInt(object.getRandomInteger());
-+            out.writeLong(object.getTimestamp());
-+        }
-+
-+    @Override
-+    public RandomSource.IRandomSourceRandomDataOutput deserializeFrom(InputStream in) throws IOException {
-+        RandomSource.RandomSourceRandomDataOutput result = new RandomSource.RandomSourceRandomDataOutput();
-+        SRandomSourceRandomDataOutput tmp = SRandomSourceRandomDataOutput.parseDelimitedFrom(in);
-+        result.setRandomInteger(tmp.getRandomInteger());
-+        result.setTimestamp(tmp.getTimestamp());
-+        return result;
-+    }
-+
-+        @Override
-+        public RandomSource.IRandomSourceRandomDataOutput deserializeFrom(IDataInput in) throws IOException {
-+            RandomSource.RandomSourceRandomDataOutput result = new RandomSource.RandomSourceRandomDataOutput();
-+            result.setRandomInteger(in.nextInt());
-+            result.setTimestamp(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, RandomSource.RandomSourceRandomDataOutput object) {
-+        output.writeInt(object.getRandomInteger());
-+        output.writeLong(object.getTimestamp());
-+    }
-+
-+    @Override
-+    public RandomSource.RandomSourceRandomDataOutput read(Kryo kryo, Input input, Class<RandomSource.RandomSourceRandomDataOutput> type) {
-+        RandomSource.RandomSourceRandomDataOutput result = new RandomSource.RandomSourceRandomDataOutput();
-+        result.setRandomInteger(input.readInt());
-+        result.setTimestamp(input.readLong());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialData.java
-new file mode 100644
-index 0000000..d615000
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialData.java
-@@ -0,0 +1,147 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class SimulatedFinancialData implements ISimulatedFinancialData{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class SimulatedFinancialDataSymbolListOutput implements ISimulatedFinancialDataSymbolListOutput {
-+        private java.util.List<String> allSymbols;
-+        /**
-+        * Returns the input value for tuple field "allSymbols".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "allSymbols".
-+        * @param allSymbols the field value
-+        */
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("SimulatedFinancialDataSymbolListOutput", SimulatedFinancialDataSerializers.SimulatedFinancialDataSymbolListOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class SimulatedFinancialDataSpringStreamOutput implements ISimulatedFinancialDataSpringStreamOutput {
-+        private String symbolTuple;
-+        /**
-+        * Returns the input value for tuple field "symbolTuple".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getSymbolTuple(){
-+            return symbolTuple;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "symbolTuple".
-+        * @param symbolTuple the field value
-+        */
-+        @Override
-+        public void setSymbolTuple(String symbolTuple){
-+            this.symbolTuple = symbolTuple;
-+        }
-+        static {
-+            SerializerRegistry.register("SimulatedFinancialDataSpringStreamOutput", SimulatedFinancialDataSerializers.SimulatedFinancialDataSpringStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return SimulatedFinancialDataSymbolListOutput the source data
-+    **/
-+    @Override
-+    public SimulatedFinancialDataSymbolListOutput getSymbolList() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ISimulatedFinancialDataSymbolListOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return SimulatedFinancialDataSpringStreamOutput the source data
-+    **/
-+    @Override
-+    public SimulatedFinancialDataSpringStreamOutput getSpringStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ISimulatedFinancialDataSpringStreamOutput tuple) {
-+        return null;
-+    }
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "speedFactor".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterSpeedFactor(double value) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialDataSerializers.java
-new file mode 100644
-index 0000000..2c7ac5a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFinancialDataSerializers.java
-@@ -0,0 +1,113 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.SimulatedFinancialData;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.SimulatedFinancialDataProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "SimulatedFinancialData" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class SimulatedFinancialDataSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput} algorithm.
-+ */
-+public static class SimulatedFinancialDataSymbolListOutputSerializer extends Serializer<SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput> implements ISerializer<SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput> {
-+
-+    @Override
-+    public void serializeTo(SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
-+        SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput result = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public SimulatedFinancialData.ISimulatedFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
-+            SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput result = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput> type) {
-+        SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput result = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput} algorithm.
-+ */
-+public static class SimulatedFinancialDataSpringStreamOutputSerializer extends Serializer<SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput> implements ISerializer<SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
-+        SSimulatedFinancialDataSpringStreamOutput tmp = SSimulatedFinancialDataSpringStreamOutput.newBuilder()
-+            .setSymbolTuple(object.getSymbolTuple())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolTuple());
-+        }
-+
-+    @Override
-+    public SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput result = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
-+        SSimulatedFinancialDataSpringStreamOutput tmp = SSimulatedFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolTuple(tmp.getSymbolTuple());
-+        return result;
-+    }
-+
-+        @Override
-+        public SimulatedFinancialData.ISimulatedFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput result = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
-+            result.setSymbolTuple(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput object) {
-+        output.writeString(object.getSymbolTuple());
-+    }
-+
-+    @Override
-+    public SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput> type) {
-+        SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput result = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
-+        result.setSymbolTuple(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialData.java
-new file mode 100644
-index 0000000..e0e8ed9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialData.java
-@@ -0,0 +1,156 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.ISimulatedFocusFinancialData;
-+import eu.qualimaster.data.inf.ISimulatedFocusFinancialData.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class SimulatedFocusFinancialData implements ISimulatedFocusFinancialData{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class SimulatedFocusFinancialDataSymbolListOutput implements ISimulatedFocusFinancialDataSymbolListOutput {
-+        private java.util.List<String> allSymbols;
-+        /**
-+        * Returns the input value for tuple field "allSymbols".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "allSymbols".
-+        * @param allSymbols the field value
-+        */
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("SimulatedFocusFinancialDataSymbolListOutput", SimulatedFocusFinancialDataSerializers.SimulatedFocusFinancialDataSymbolListOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class SimulatedFocusFinancialDataSpringStreamOutput implements ISimulatedFocusFinancialDataSpringStreamOutput {
-+        private String symbolTuple;
-+        /**
-+        * Returns the input value for tuple field "symbolTuple".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getSymbolTuple(){
-+            return symbolTuple;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "symbolTuple".
-+        * @param symbolTuple the field value
-+        */
-+        @Override
-+        public void setSymbolTuple(String symbolTuple){
-+            this.symbolTuple = symbolTuple;
-+        }
-+        static {
-+            SerializerRegistry.register("SimulatedFocusFinancialDataSpringStreamOutput", SimulatedFocusFinancialDataSerializers.SimulatedFocusFinancialDataSpringStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return SimulatedFocusFinancialDataSymbolListOutput the source data
-+    **/
-+    @Override
-+    public SimulatedFocusFinancialDataSymbolListOutput getSymbolList() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ISimulatedFocusFinancialDataSymbolListOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return SimulatedFocusFinancialDataSpringStreamOutput the source data
-+    **/
-+    @Override
-+    public SimulatedFocusFinancialDataSpringStreamOutput getSpringStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ISimulatedFocusFinancialDataSpringStreamOutput tuple) {
-+        return null;
-+    }
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "speedFactor".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterSpeedFactor(double value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "playerList".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterPlayerList(String value) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialDataSerializers.java
-new file mode 100644
-index 0000000..4557f3e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedFocusFinancialDataSerializers.java
-@@ -0,0 +1,113 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.SimulatedFocusFinancialData;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.SimulatedFocusFinancialDataProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "SimulatedFocusFinancialData" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class SimulatedFocusFinancialDataSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput} algorithm.
-+ */
-+public static class SimulatedFocusFinancialDataSymbolListOutputSerializer extends Serializer<SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput> implements ISerializer<SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput> {
-+
-+    @Override
-+    public void serializeTo(SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
-+        SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
-+            SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput> type) {
-+        SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSymbolListOutput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput} algorithm.
-+ */
-+public static class SimulatedFocusFinancialDataSpringStreamOutputSerializer extends Serializer<SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput> implements ISerializer<SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
-+        SSimulatedFocusFinancialDataSpringStreamOutput tmp = SSimulatedFocusFinancialDataSpringStreamOutput.newBuilder()
-+            .setSymbolTuple(object.getSymbolTuple())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolTuple());
-+        }
-+
-+    @Override
-+    public SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput();
-+        SSimulatedFocusFinancialDataSpringStreamOutput tmp = SSimulatedFocusFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolTuple(tmp.getSymbolTuple());
-+        return result;
-+    }
-+
-+        @Override
-+        public SimulatedFocusFinancialData.ISimulatedFocusFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput();
-+            result.setSymbolTuple(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput object) {
-+        output.writeString(object.getSymbolTuple());
-+    }
-+
-+    @Override
-+    public SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput> type) {
-+        SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput result = new SimulatedFocusFinancialData.SimulatedFocusFinancialDataSpringStreamOutput();
-+        result.setSymbolTuple(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphData.java
-new file mode 100644
-index 0000000..21a36be
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphData.java
-@@ -0,0 +1,91 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.ISimulatedGraphData;
-+import eu.qualimaster.data.inf.ISimulatedGraphData.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class SimulatedGraphData implements ISimulatedGraphData{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class SimulatedGraphDataEdgeStreamOutput implements ISimulatedGraphDataEdgeStreamOutput {
-+        private String edge;
-+        /**
-+        * Returns the input value for tuple field "edge".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getEdge(){
-+            return edge;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "edge".
-+        * @param edge the field value
-+        */
-+        @Override
-+        public void setEdge(String edge){
-+            this.edge = edge;
-+        }
-+        static {
-+            SerializerRegistry.register("SimulatedGraphDataEdgeStreamOutput", SimulatedGraphDataSerializers.SimulatedGraphDataEdgeStreamOutputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return SimulatedGraphDataEdgeStreamOutput the source data
-+    **/
-+    @Override
-+    public SimulatedGraphDataEdgeStreamOutput getEdgeStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ISimulatedGraphDataEdgeStreamOutput tuple) {
-+        return null;
-+    }
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphDataSerializers.java
-new file mode 100644
-index 0000000..c319a0f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SimulatedGraphDataSerializers.java
-@@ -0,0 +1,71 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.SimulatedGraphData;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.SimulatedGraphDataProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "SimulatedGraphData" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class SimulatedGraphDataSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput} algorithm.
-+ */
-+public static class SimulatedGraphDataEdgeStreamOutputSerializer extends Serializer<SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput> implements ISerializer<SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput object, OutputStream out) throws IOException {
-+        SSimulatedGraphDataEdgeStreamOutput tmp = SSimulatedGraphDataEdgeStreamOutput.newBuilder()
-+            .setEdge(object.getEdge())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getEdge());
-+        }
-+
-+    @Override
-+    public SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput result = new SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput();
-+        SSimulatedGraphDataEdgeStreamOutput tmp = SSimulatedGraphDataEdgeStreamOutput.parseDelimitedFrom(in);
-+        result.setEdge(tmp.getEdge());
-+        return result;
-+    }
-+
-+        @Override
-+        public SimulatedGraphData.ISimulatedGraphDataEdgeStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput result = new SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput();
-+            result.setEdge(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput object) {
-+        output.writeString(object.getEdge());
-+    }
-+
-+    @Override
-+    public SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput read(Kryo kryo, Input input, Class<SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput> type) {
-+        SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput result = new SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput();
-+        result.setEdge(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialData.java
-new file mode 100644
-index 0000000..393a13c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialData.java
-@@ -0,0 +1,136 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.ISpringFinancialData;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class SpringFinancialData implements ISpringFinancialData{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class SpringFinancialDataSymbolListOutput implements ISpringFinancialDataSymbolListOutput {
-+        private java.util.List<String> allSymbols;
-+        /**
-+        * Returns the input value for tuple field "allSymbols".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "allSymbols".
-+        * @param allSymbols the field value
-+        */
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("SpringFinancialDataSymbolListOutput", SpringFinancialDataSerializers.SpringFinancialDataSymbolListOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class SpringFinancialDataSpringStreamOutput implements ISpringFinancialDataSpringStreamOutput {
-+        private String symbolTuple;
-+        /**
-+        * Returns the input value for tuple field "symbolTuple".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getSymbolTuple(){
-+            return symbolTuple;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "symbolTuple".
-+        * @param symbolTuple the field value
-+        */
-+        @Override
-+        public void setSymbolTuple(String symbolTuple){
-+            this.symbolTuple = symbolTuple;
-+        }
-+        static {
-+            SerializerRegistry.register("SpringFinancialDataSpringStreamOutput", SpringFinancialDataSerializers.SpringFinancialDataSpringStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return SpringFinancialDataSymbolListOutput the source data
-+    **/
-+    @Override
-+    public SpringFinancialDataSymbolListOutput getSymbolList() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return SpringFinancialDataSpringStreamOutput the source data
-+    **/
-+    @Override
-+    public SpringFinancialDataSpringStreamOutput getSpringStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple) {
-+        return null;
-+    }
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialDataSerializers.java
-new file mode 100644
-index 0000000..cfff958
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/SpringFinancialDataSerializers.java
-@@ -0,0 +1,113 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.SpringFinancialData;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.SpringFinancialDataProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "SpringFinancialData" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class SpringFinancialDataSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SpringFinancialData.ISpringFinancialDataSymbolListOutput} algorithm.
-+ */
-+public static class SpringFinancialDataSymbolListOutputSerializer extends Serializer<SpringFinancialData.SpringFinancialDataSymbolListOutput> implements ISerializer<SpringFinancialData.ISpringFinancialDataSymbolListOutput> {
-+
-+    @Override
-+    public void serializeTo(SpringFinancialData.ISpringFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(SpringFinancialData.ISpringFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public SpringFinancialData.ISpringFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
-+        SpringFinancialData.SpringFinancialDataSymbolListOutput result = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public SpringFinancialData.ISpringFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
-+            SpringFinancialData.SpringFinancialDataSymbolListOutput result = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SpringFinancialData.SpringFinancialDataSymbolListOutput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public SpringFinancialData.SpringFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<SpringFinancialData.SpringFinancialDataSymbolListOutput> type) {
-+        SpringFinancialData.SpringFinancialDataSymbolListOutput result = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link SpringFinancialData.ISpringFinancialDataSpringStreamOutput} algorithm.
-+ */
-+public static class SpringFinancialDataSpringStreamOutputSerializer extends Serializer<SpringFinancialData.SpringFinancialDataSpringStreamOutput> implements ISerializer<SpringFinancialData.ISpringFinancialDataSpringStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(SpringFinancialData.ISpringFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
-+        SSpringFinancialDataSpringStreamOutput tmp = SSpringFinancialDataSpringStreamOutput.newBuilder()
-+            .setSymbolTuple(object.getSymbolTuple())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(SpringFinancialData.ISpringFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolTuple());
-+        }
-+
-+    @Override
-+    public SpringFinancialData.ISpringFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        SpringFinancialData.SpringFinancialDataSpringStreamOutput result = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
-+        SSpringFinancialDataSpringStreamOutput tmp = SSpringFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolTuple(tmp.getSymbolTuple());
-+        return result;
-+    }
-+
-+        @Override
-+        public SpringFinancialData.ISpringFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            SpringFinancialData.SpringFinancialDataSpringStreamOutput result = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
-+            result.setSymbolTuple(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SpringFinancialData.SpringFinancialDataSpringStreamOutput object) {
-+        output.writeString(object.getSymbolTuple());
-+    }
-+
-+    @Override
-+    public SpringFinancialData.SpringFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<SpringFinancialData.SpringFinancialDataSpringStreamOutput> type) {
-+        SpringFinancialData.SpringFinancialDataSpringStreamOutput result = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
-+        result.setSymbolTuple(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSource.java
-new file mode 100644
-index 0000000..0fd80cd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSource.java
-@@ -0,0 +1,244 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.ITimeGraphQueriesSource;
-+import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class TimeGraphQueriesSource implements ITimeGraphQueriesSource{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class TimeGraphQueriesSourceSnapshotQueryStreamOutput implements ITimeGraphQueriesSourceSnapshotQueryStreamOutput {
-+        private long start;
-+        private long end;
-+        /**
-+        * Returns the input value for tuple field "start".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getStart(){
-+            return start;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "start".
-+        * @param start the field value
-+        */
-+        @Override
-+        public void setStart(long start){
-+            this.start = start;
-+        }
-+        /**
-+        * Returns the input value for tuple field "end".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getEnd(){
-+            return end;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "end".
-+        * @param end the field value
-+        */
-+        @Override
-+        public void setEnd(long end){
-+            this.end = end;
-+        }
-+        static {
-+            SerializerRegistry.register("TimeGraphQueriesSourceSnapshotQueryStreamOutput", TimeGraphQueriesSourceSerializers.TimeGraphQueriesSourceSnapshotQueryStreamOutputSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class TimeGraphQueriesSourcePathQueryStreamOutput implements ITimeGraphQueriesSourcePathQueryStreamOutput {
-+        private long start;
-+        private long end;
-+        private String vertexA;
-+        private String vertexB;
-+        private String type;
-+        /**
-+        * Returns the input value for tuple field "start".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getStart(){
-+            return start;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "start".
-+        * @param start the field value
-+        */
-+        @Override
-+        public void setStart(long start){
-+            this.start = start;
-+        }
-+        /**
-+        * Returns the input value for tuple field "end".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getEnd(){
-+            return end;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "end".
-+        * @param end the field value
-+        */
-+        @Override
-+        public void setEnd(long end){
-+            this.end = end;
-+        }
-+        /**
-+        * Returns the input value for tuple field "vertexA".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getVertexA(){
-+            return vertexA;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "vertexA".
-+        * @param vertexA the field value
-+        */
-+        @Override
-+        public void setVertexA(String vertexA){
-+            this.vertexA = vertexA;
-+        }
-+        /**
-+        * Returns the input value for tuple field "vertexB".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getVertexB(){
-+            return vertexB;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "vertexB".
-+        * @param vertexB the field value
-+        */
-+        @Override
-+        public void setVertexB(String vertexB){
-+            this.vertexB = vertexB;
-+        }
-+        /**
-+        * Returns the input value for tuple field "type".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getType(){
-+            return type;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "type".
-+        * @param type the field value
-+        */
-+        @Override
-+        public void setType(String type){
-+            this.type = type;
-+        }
-+        static {
-+            SerializerRegistry.register("TimeGraphQueriesSourcePathQueryStreamOutput", TimeGraphQueriesSourceSerializers.TimeGraphQueriesSourcePathQueryStreamOutputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return TimeGraphQueriesSourceSnapshotQueryStreamOutput the source data
-+    **/
-+    @Override
-+    public TimeGraphQueriesSourceSnapshotQueryStreamOutput getSnapshotQueryStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ITimeGraphQueriesSourceSnapshotQueryStreamOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return TimeGraphQueriesSourcePathQueryStreamOutput the source data
-+    **/
-+    @Override
-+    public TimeGraphQueriesSourcePathQueryStreamOutput getPathQueryStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ITimeGraphQueriesSourcePathQueryStreamOutput tuple) {
-+        return null;
-+    }
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "snapshotQuery".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterSnapshotQuery(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "pathQuery".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterPathQuery(String value) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSourceSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSourceSerializers.java
-new file mode 100644
-index 0000000..d1e9a47
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeGraphQueriesSourceSerializers.java
-@@ -0,0 +1,147 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.TimeGraphQueriesSource;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.TimeGraphQueriesSourceProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "TimeGraphQueriesSource" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class TimeGraphQueriesSourceSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput} algorithm.
-+ */
-+public static class TimeGraphQueriesSourceSnapshotQueryStreamOutputSerializer extends Serializer<TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput> implements ISerializer<TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput object, OutputStream out) throws IOException {
-+        STimeGraphQueriesSourceSnapshotQueryStreamOutput tmp = STimeGraphQueriesSourceSnapshotQueryStreamOutput.newBuilder()
-+            .setStart(object.getStart())
-+            .setEnd(object.getEnd())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getStart());
-+            out.writeLong(object.getEnd());
-+        }
-+
-+    @Override
-+    public TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
-+        STimeGraphQueriesSourceSnapshotQueryStreamOutput tmp = STimeGraphQueriesSourceSnapshotQueryStreamOutput.parseDelimitedFrom(in);
-+        result.setStart(tmp.getStart());
-+        result.setEnd(tmp.getEnd());
-+        return result;
-+    }
-+
-+        @Override
-+        public TimeGraphQueriesSource.ITimeGraphQueriesSourceSnapshotQueryStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
-+            result.setStart(in.nextLong());
-+            result.setEnd(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput object) {
-+        output.writeLong(object.getStart());
-+        output.writeLong(object.getEnd());
-+    }
-+
-+    @Override
-+    public TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput read(Kryo kryo, Input input, Class<TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput> type) {
-+        TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
-+        result.setStart(input.readLong());
-+        result.setEnd(input.readLong());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput} algorithm.
-+ */
-+public static class TimeGraphQueriesSourcePathQueryStreamOutputSerializer extends Serializer<TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput> implements ISerializer<TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput object, OutputStream out) throws IOException {
-+        STimeGraphQueriesSourcePathQueryStreamOutput tmp = STimeGraphQueriesSourcePathQueryStreamOutput.newBuilder()
-+            .setStart(object.getStart())
-+            .setEnd(object.getEnd())
-+            .setVertexA(object.getVertexA())
-+            .setVertexB(object.getVertexB())
-+            .setType(object.getType())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getStart());
-+            out.writeLong(object.getEnd());
-+            out.writeString(object.getVertexA());
-+            out.writeString(object.getVertexB());
-+            out.writeString(object.getType());
-+        }
-+
-+    @Override
-+    public TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
-+        STimeGraphQueriesSourcePathQueryStreamOutput tmp = STimeGraphQueriesSourcePathQueryStreamOutput.parseDelimitedFrom(in);
-+        result.setStart(tmp.getStart());
-+        result.setEnd(tmp.getEnd());
-+        result.setVertexA(tmp.getVertexA());
-+        result.setVertexB(tmp.getVertexB());
-+        result.setType(tmp.getType());
-+        return result;
-+    }
-+
-+        @Override
-+        public TimeGraphQueriesSource.ITimeGraphQueriesSourcePathQueryStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
-+            result.setStart(in.nextLong());
-+            result.setEnd(in.nextLong());
-+            result.setVertexA(in.nextString());
-+            result.setVertexB(in.nextString());
-+            result.setType(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput object) {
-+        output.writeLong(object.getStart());
-+        output.writeLong(object.getEnd());
-+        output.writeString(object.getVertexA());
-+        output.writeString(object.getVertexB());
-+        output.writeString(object.getType());
-+    }
-+
-+    @Override
-+    public TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput read(Kryo kryo, Input input, Class<TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput> type) {
-+        TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput result = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
-+        result.setStart(input.readLong());
-+        result.setEnd(input.readLong());
-+        result.setVertexA(input.readString());
-+        result.setVertexB(input.readString());
-+        result.setType(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSink.java
-new file mode 100644
-index 0000000..a3082e1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSink.java
-@@ -0,0 +1,114 @@
-+package eu.qualimaster.data.imp;
-+
-+import eu.qualimaster.data.inf.ITimeTravelSink;
-+import eu.qualimaster.data.inf.ITimeTravelSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class TimeTravelSink implements ITimeTravelSink{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class TimeTravelSinkSnapshotStreamInput implements ITimeTravelSinkSnapshotStreamInput {
-+        private String snapshot;
-+        /**
-+        * Returns the input value for tuple field "snapshot".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getSnapshot() {
-+            return snapshot;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "snapshot".
-+        * @param snapshot the field value
-+        */
-+        @Override
-+        public void setSnapshot(String snapshot) {
-+            this.snapshot = snapshot;
-+        }
-+        static {
-+            SerializerRegistry.register("TimeTravelSinkSnapshotStreamInput", TimeTravelSinkSerializers.TimeTravelSinkSnapshotStreamInputSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class TimeTravelSinkPathStreamInput implements ITimeTravelSinkPathStreamInput {
-+        private String path;
-+        /**
-+        * Returns the input value for tuple field "path".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getPath() {
-+            return path;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "path".
-+        * @param path the field value
-+        */
-+        @Override
-+        public void setPath(String path) {
-+            this.path = path;
-+        }
-+        static {
-+            SerializerRegistry.register("TimeTravelSinkPathStreamInput", TimeTravelSinkSerializers.TimeTravelSinkPathStreamInputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data TimeTravelSinkSnapshotStreamInput
-+    **/
-+    @Override
-+    public void postDataSnapshotStream(ITimeTravelSinkSnapshotStreamInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple ITimeTravelSinkSnapshotStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, ITimeTravelSinkSnapshotStreamInput tuple) {
-+    }
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data TimeTravelSinkPathStreamInput
-+    **/
-+    @Override
-+    public void postDataPathStream(ITimeTravelSinkPathStreamInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple ITimeTravelSinkPathStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, ITimeTravelSinkPathStreamInput tuple) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSinkSerializers.java
-new file mode 100644
-index 0000000..e29ac7f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TimeTravelSinkSerializers.java
-@@ -0,0 +1,117 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.TimeTravelSink;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.TimeTravelSinkProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "TimeTravelSink" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class TimeTravelSinkSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link TimeTravelSink.ITimeTravelSinkSnapshotStreamInput} algorithm.
-+ */
-+public static class TimeTravelSinkSnapshotStreamInputSerializer extends Serializer<TimeTravelSink.TimeTravelSinkSnapshotStreamInput> implements ISerializer<TimeTravelSink.ITimeTravelSinkSnapshotStreamInput> {
-+
-+    @Override
-+    public void serializeTo(TimeTravelSink.ITimeTravelSinkSnapshotStreamInput object, OutputStream out) throws IOException {
-+        STimeTravelSinkSnapshotStreamInput tmp = STimeTravelSinkSnapshotStreamInput.newBuilder()
-+            .setSnapshot(object.getSnapshot())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(TimeTravelSink.ITimeTravelSinkSnapshotStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSnapshot());
-+        }
-+
-+    @Override
-+    public TimeTravelSink.ITimeTravelSinkSnapshotStreamInput deserializeFrom(InputStream in) throws IOException {
-+        TimeTravelSink.TimeTravelSinkSnapshotStreamInput result = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
-+        STimeTravelSinkSnapshotStreamInput tmp = STimeTravelSinkSnapshotStreamInput.parseDelimitedFrom(in);
-+        result.setSnapshot(tmp.getSnapshot());
-+        return result;
-+    }
-+
-+        @Override
-+        public TimeTravelSink.ITimeTravelSinkSnapshotStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            TimeTravelSink.TimeTravelSinkSnapshotStreamInput result = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
-+            result.setSnapshot(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, TimeTravelSink.TimeTravelSinkSnapshotStreamInput object) {
-+        output.writeString(object.getSnapshot());
-+    }
-+
-+    @Override
-+    public TimeTravelSink.TimeTravelSinkSnapshotStreamInput read(Kryo kryo, Input input, Class<TimeTravelSink.TimeTravelSinkSnapshotStreamInput> type) {
-+        TimeTravelSink.TimeTravelSinkSnapshotStreamInput result = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
-+        result.setSnapshot(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link TimeTravelSink.ITimeTravelSinkPathStreamInput} algorithm.
-+ */
-+public static class TimeTravelSinkPathStreamInputSerializer extends Serializer<TimeTravelSink.TimeTravelSinkPathStreamInput> implements ISerializer<TimeTravelSink.ITimeTravelSinkPathStreamInput> {
-+
-+    @Override
-+    public void serializeTo(TimeTravelSink.ITimeTravelSinkPathStreamInput object, OutputStream out) throws IOException {
-+        STimeTravelSinkPathStreamInput tmp = STimeTravelSinkPathStreamInput.newBuilder()
-+            .setPath(object.getPath())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(TimeTravelSink.ITimeTravelSinkPathStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getPath());
-+        }
-+
-+    @Override
-+    public TimeTravelSink.ITimeTravelSinkPathStreamInput deserializeFrom(InputStream in) throws IOException {
-+        TimeTravelSink.TimeTravelSinkPathStreamInput result = new TimeTravelSink.TimeTravelSinkPathStreamInput();
-+        STimeTravelSinkPathStreamInput tmp = STimeTravelSinkPathStreamInput.parseDelimitedFrom(in);
-+        result.setPath(tmp.getPath());
-+        return result;
-+    }
-+
-+        @Override
-+        public TimeTravelSink.ITimeTravelSinkPathStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            TimeTravelSink.TimeTravelSinkPathStreamInput result = new TimeTravelSink.TimeTravelSinkPathStreamInput();
-+            result.setPath(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, TimeTravelSink.TimeTravelSinkPathStreamInput object) {
-+        output.writeString(object.getPath());
-+    }
-+
-+    @Override
-+    public TimeTravelSink.TimeTravelSinkPathStreamInput read(Kryo kryo, Input input, Class<TimeTravelSink.TimeTravelSinkPathStreamInput> type) {
-+        TimeTravelSink.TimeTravelSinkPathStreamInput result = new TimeTravelSink.TimeTravelSinkPathStreamInput();
-+        result.setPath(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSink.java
-new file mode 100644
-index 0000000..23c288e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSink.java
-@@ -0,0 +1,126 @@
-+package eu.qualimaster.data.imp;
-+
-+import eu.qualimaster.data.inf.ITransferSink;
-+import eu.qualimaster.data.inf.ITransferSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class TransferSink implements ITransferSink{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class TransferSinkPairwiseFinancialInput implements ITransferSinkPairwiseFinancialInput {
-+        private String id0;
-+        private String id1;
-+        private String date;
-+        private double value;
-+        /**
-+        * Returns the input value for tuple field "id0".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getId0() {
-+            return id0;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "id0".
-+        * @param id0 the field value
-+        */
-+        @Override
-+        public void setId0(String id0) {
-+            this.id0 = id0;
-+        }
-+        /**
-+        * Returns the input value for tuple field "id1".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getId1() {
-+            return id1;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "id1".
-+        * @param id1 the field value
-+        */
-+        @Override
-+        public void setId1(String id1) {
-+            this.id1 = id1;
-+        }
-+        /**
-+        * Returns the input value for tuple field "date".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getDate() {
-+            return date;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "date".
-+        * @param date the field value
-+        */
-+        @Override
-+        public void setDate(String date) {
-+            this.date = date;
-+        }
-+        /**
-+        * Returns the input value for tuple field "value".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public double getValue() {
-+            return value;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "value".
-+        * @param value the field value
-+        */
-+        @Override
-+        public void setValue(double value) {
-+            this.value = value;
-+        }
-+        static {
-+            SerializerRegistry.register("TransferSinkPairwiseFinancialInput", TransferSinkSerializers.TransferSinkPairwiseFinancialInputSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data TransferSinkPairwiseFinancialInput
-+    **/
-+    @Override
-+    public void postDataPairwiseFinancial(ITransferSinkPairwiseFinancialInput data) {
-+    }
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple ITransferSinkPairwiseFinancialInput to be emitted 
-+    **/
-+    public void emit(int ticket, ITransferSinkPairwiseFinancialInput tuple) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSinkSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSinkSerializers.java
-new file mode 100644
-index 0000000..a088a0d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TransferSinkSerializers.java
-@@ -0,0 +1,89 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.TransferSink;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.TransferSinkProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "TransferSink" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class TransferSinkSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link TransferSink.ITransferSinkPairwiseFinancialInput} algorithm.
-+ */
-+public static class TransferSinkPairwiseFinancialInputSerializer extends Serializer<TransferSink.TransferSinkPairwiseFinancialInput> implements ISerializer<TransferSink.ITransferSinkPairwiseFinancialInput> {
-+
-+    @Override
-+    public void serializeTo(TransferSink.ITransferSinkPairwiseFinancialInput object, OutputStream out) throws IOException {
-+        STransferSinkPairwiseFinancialInput tmp = STransferSinkPairwiseFinancialInput.newBuilder()
-+            .setId0(object.getId0())
-+            .setId1(object.getId1())
-+            .setDate(object.getDate())
-+            .setValue(object.getValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(TransferSink.ITransferSinkPairwiseFinancialInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getId0());
-+            out.writeString(object.getId1());
-+            out.writeString(object.getDate());
-+            out.writeDouble(object.getValue());
-+        }
-+
-+    @Override
-+    public TransferSink.ITransferSinkPairwiseFinancialInput deserializeFrom(InputStream in) throws IOException {
-+        TransferSink.TransferSinkPairwiseFinancialInput result = new TransferSink.TransferSinkPairwiseFinancialInput();
-+        STransferSinkPairwiseFinancialInput tmp = STransferSinkPairwiseFinancialInput.parseDelimitedFrom(in);
-+        result.setId0(tmp.getId0());
-+        result.setId1(tmp.getId1());
-+        result.setDate(tmp.getDate());
-+        result.setValue(tmp.getValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public TransferSink.ITransferSinkPairwiseFinancialInput deserializeFrom(IDataInput in) throws IOException {
-+            TransferSink.TransferSinkPairwiseFinancialInput result = new TransferSink.TransferSinkPairwiseFinancialInput();
-+            result.setId0(in.nextString());
-+            result.setId1(in.nextString());
-+            result.setDate(in.nextString());
-+            result.setValue(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, TransferSink.TransferSinkPairwiseFinancialInput object) {
-+        output.writeString(object.getId0());
-+        output.writeString(object.getId1());
-+        output.writeString(object.getDate());
-+        output.writeDouble(object.getValue());
-+    }
-+
-+    @Override
-+    public TransferSink.TransferSinkPairwiseFinancialInput read(Kryo kryo, Input input, Class<TransferSink.TransferSinkPairwiseFinancialInput> type) {
-+        TransferSink.TransferSinkPairwiseFinancialInput result = new TransferSink.TransferSinkPairwiseFinancialInput();
-+        result.setId0(input.readString());
-+        result.setId1(input.readString());
-+        result.setDate(input.readString());
-+        result.setValue(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamData.java
-new file mode 100644
-index 0000000..22ba321
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamData.java
-@@ -0,0 +1,237 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.ITwitterStreamData;
-+import eu.qualimaster.data.inf.ITwitterStreamData.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class TwitterStreamData implements ITwitterStreamData{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class TwitterStreamDataSymbolListOutput implements ITwitterStreamDataSymbolListOutput {
-+        private java.util.List<String> allSymbols;
-+        /**
-+        * Returns the input value for tuple field "allSymbols".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "allSymbols".
-+        * @param allSymbols the field value
-+        */
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("TwitterStreamDataSymbolListOutput", TwitterStreamDataSerializers.TwitterStreamDataSymbolListOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class TwitterStreamDataTwitterStreamOutput implements ITwitterStreamDataTwitterStreamOutput {
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+        /**
-+        * Returns the input value for tuple field "status".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "status".
-+        * @param status the field value
-+        */
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("TwitterStreamDataTwitterStreamOutput", TwitterStreamDataSerializers.TwitterStreamDataTwitterStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return TwitterStreamDataSymbolListOutput the source data
-+    **/
-+    @Override
-+    public TwitterStreamDataSymbolListOutput getSymbolList() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ITwitterStreamDataSymbolListOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return TwitterStreamDataTwitterStreamOutput the source data
-+    **/
-+    @Override
-+    public TwitterStreamDataTwitterStreamOutput getTwitterStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(ITwitterStreamDataTwitterStreamOutput tuple) {
-+        return null;
-+    }
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "consumerKey".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterConsumerKey(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "consumerSecret".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterConsumerSecret(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "accessToken".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterAccessToken(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "accessTokenSecret".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterAccessTokenSecret(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "queueSize".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterQueueSize(int value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "tweetDirectory".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterTweetDirectory(String value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "speedFactor".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterSpeedFactor(double value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "runLocally".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterRunLocally(boolean value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "adjustTimeToNow".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterAdjustTimeToNow(boolean value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "realLoops".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterRealLoops(boolean value) {
-+    }
-+
-+    /**
-+     * Sets the data source parameter "setAdditionalKeywords".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    @Override
-+    public void setParameterSetAdditionalKeywords(String value) {
-+    }
-+
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamDataSerializers.java
-new file mode 100644
-index 0000000..650d4b2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/TwitterStreamDataSerializers.java
-@@ -0,0 +1,109 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.TwitterStreamData;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.TwitterStreamDataProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "TwitterStreamData" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class TwitterStreamDataSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link TwitterStreamData.ITwitterStreamDataSymbolListOutput} algorithm.
-+ */
-+public static class TwitterStreamDataSymbolListOutputSerializer extends Serializer<TwitterStreamData.TwitterStreamDataSymbolListOutput> implements ISerializer<TwitterStreamData.ITwitterStreamDataSymbolListOutput> {
-+
-+    @Override
-+    public void serializeTo(TwitterStreamData.ITwitterStreamDataSymbolListOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(TwitterStreamData.ITwitterStreamDataSymbolListOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public TwitterStreamData.ITwitterStreamDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
-+        TwitterStreamData.TwitterStreamDataSymbolListOutput result = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public TwitterStreamData.ITwitterStreamDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
-+            TwitterStreamData.TwitterStreamDataSymbolListOutput result = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, TwitterStreamData.TwitterStreamDataSymbolListOutput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public TwitterStreamData.TwitterStreamDataSymbolListOutput read(Kryo kryo, Input input, Class<TwitterStreamData.TwitterStreamDataSymbolListOutput> type) {
-+        TwitterStreamData.TwitterStreamDataSymbolListOutput result = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link TwitterStreamData.ITwitterStreamDataTwitterStreamOutput} algorithm.
-+ */
-+public static class TwitterStreamDataTwitterStreamOutputSerializer extends Serializer<TwitterStreamData.TwitterStreamDataTwitterStreamOutput> implements ISerializer<TwitterStreamData.ITwitterStreamDataTwitterStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(TwitterStreamData.ITwitterStreamDataTwitterStreamOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(TwitterStreamData.ITwitterStreamDataTwitterStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public TwitterStreamData.ITwitterStreamDataTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        TwitterStreamData.TwitterStreamDataTwitterStreamOutput result = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public TwitterStreamData.ITwitterStreamDataTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            TwitterStreamData.TwitterStreamDataTwitterStreamOutput result = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, TwitterStreamData.TwitterStreamDataTwitterStreamOutput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public TwitterStreamData.TwitterStreamDataTwitterStreamOutput read(Kryo kryo, Input input, Class<TwitterStreamData.TwitterStreamDataTwitterStreamOutput> type) {
-+        TwitterStreamData.TwitterStreamDataTwitterStreamOutput result = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialData.java
-new file mode 100644
-index 0000000..827a44b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialData.java
-@@ -0,0 +1,198 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.util.Map;
-+import eu.qualimaster.data.inf.IWindowedSpringFinancialData;
-+import eu.qualimaster.data.inf.IWindowedSpringFinancialData.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.observables.*;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.sources.*;
-+
-+/**
-+* Define the data source class(GEN).
-+**/
-+public class WindowedSpringFinancialData implements IWindowedSpringFinancialData{
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class WindowedSpringFinancialDataSymbolListOutput implements IWindowedSpringFinancialDataSymbolListOutput {
-+        private java.util.List<String> allSymbols;
-+        /**
-+        * Returns the input value for tuple field "allSymbols".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "allSymbols".
-+        * @param allSymbols the field value
-+        */
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("WindowedSpringFinancialDataSymbolListOutput", WindowedSpringFinancialDataSerializers.WindowedSpringFinancialDataSymbolListOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class WindowedSpringFinancialDataSpringStreamOutput implements IWindowedSpringFinancialDataSpringStreamOutput {
-+        private String symbolTuple;
-+        /**
-+        * Returns the input value for tuple field "symbolTuple".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public String getSymbolTuple(){
-+            return symbolTuple;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "symbolTuple".
-+        * @param symbolTuple the field value
-+        */
-+        @Override
-+        public void setSymbolTuple(String symbolTuple){
-+            this.symbolTuple = symbolTuple;
-+        }
-+        static {
-+            SerializerRegistry.register("WindowedSpringFinancialDataSpringStreamOutput", WindowedSpringFinancialDataSerializers.WindowedSpringFinancialDataSpringStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static class WindowedSpringFinancialDataResetWindowOutput implements IWindowedSpringFinancialDataResetWindowOutput {
-+        private long windowStart;
-+        private long windowEnd;
-+        /**
-+        * Returns the input value for tuple field "windowStart".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getWindowStart(){
-+            return windowStart;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "windowStart".
-+        * @param windowStart the field value
-+        */
-+        @Override
-+        public void setWindowStart(long windowStart){
-+            this.windowStart = windowStart;
-+        }
-+        /**
-+        * Returns the input value for tuple field "windowEnd".
-+        * @return the tuple value
-+        */
-+        @Override
-+        public long getWindowEnd(){
-+            return windowEnd;
-+        }
-+
-+        /**
-+        * Sets the output value for tuple field "windowEnd".
-+        * @param windowEnd the field value
-+        */
-+        @Override
-+        public void setWindowEnd(long windowEnd){
-+            this.windowEnd = windowEnd;
-+        }
-+        static {
-+            SerializerRegistry.register("WindowedSpringFinancialDataResetWindowOutput", WindowedSpringFinancialDataSerializers.WindowedSpringFinancialDataResetWindowOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return WindowedSpringFinancialDataSymbolListOutput the source data
-+    **/
-+    @Override
-+    public WindowedSpringFinancialDataSymbolListOutput getSymbolList() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(IWindowedSpringFinancialDataSymbolListOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return WindowedSpringFinancialDataSpringStreamOutput the source data
-+    **/
-+    @Override
-+    public WindowedSpringFinancialDataSpringStreamOutput getSpringStream() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(IWindowedSpringFinancialDataSpringStreamOutput tuple) {
-+        return null;
-+    }
-+    /**
-+    * Returns a specific type of data source.
-+    * @return WindowedSpringFinancialDataResetWindowOutput the source data
-+    **/
-+    @Override
-+    public WindowedSpringFinancialDataResetWindowOutput getResetWindow() {
-+        return null;
-+    }
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    @Override
-+    public String getAggregationKey(IWindowedSpringFinancialDataResetWindowOutput tuple) {
-+        return null;
-+    }
-+    @Override
-+    public void connect() {}
-+
-+    @Override
-+    public void disconnect(){}
-+
-+    @Override
-+    public void setStrategy(IStorageStrategyDescriptor strategy) {}
-+
-+    @Override
-+    public IStorageStrategyDescriptor getStrategy() { return NoStorageStrategyDescriptor.INSTANCE;}
-+
-+    @Override
-+    public Double getMeasurement(IObservable observable) { return null;}
-+
-+    @Override
-+    public IHistoricalDataProvider getHistoricalDataProvider() {
-+        return null;
-+    }
-+
-+    @Override
-+    public Map<String, String> getIdsNamesMap() {
-+        return null;
-+    }
-+
-+    @Override
-+    public void setDataSourceListener(IDataSourceListener listener) {
-+        // no mapping, no listener needed
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialDataSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialDataSerializers.java
-new file mode 100644
-index 0000000..7d0281b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/imp/WindowedSpringFinancialDataSerializers.java
-@@ -0,0 +1,165 @@
-+package eu.qualimaster.data.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.data.imp.WindowedSpringFinancialData;
-+import eu.qualimaster.data.inf.*;
-+
-+import eu.qualimaster.protos.WindowedSpringFinancialDataProtos.*;
-+/**
-+ * The implementation of the serializers for the data element "WindowedSpringFinancialData" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class WindowedSpringFinancialDataSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput} algorithm.
-+ */
-+public static class WindowedSpringFinancialDataSymbolListOutputSerializer extends Serializer<WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput> implements ISerializer<WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput> {
-+
-+    @Override
-+    public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput deserializeFrom(InputStream in) throws IOException {
-+        WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public WindowedSpringFinancialData.IWindowedSpringFinancialDataSymbolListOutput deserializeFrom(IDataInput in) throws IOException {
-+            WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput read(Kryo kryo, Input input, Class<WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput> type) {
-+        WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSymbolListOutput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput} algorithm.
-+ */
-+public static class WindowedSpringFinancialDataSpringStreamOutputSerializer extends Serializer<WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput> implements ISerializer<WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput object, OutputStream out) throws IOException {
-+        SWindowedSpringFinancialDataSpringStreamOutput tmp = SWindowedSpringFinancialDataSpringStreamOutput.newBuilder()
-+            .setSymbolTuple(object.getSymbolTuple())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolTuple());
-+        }
-+
-+    @Override
-+    public WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput();
-+        SWindowedSpringFinancialDataSpringStreamOutput tmp = SWindowedSpringFinancialDataSpringStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolTuple(tmp.getSymbolTuple());
-+        return result;
-+    }
-+
-+        @Override
-+        public WindowedSpringFinancialData.IWindowedSpringFinancialDataSpringStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput();
-+            result.setSymbolTuple(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput object) {
-+        output.writeString(object.getSymbolTuple());
-+    }
-+
-+    @Override
-+    public WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput read(Kryo kryo, Input input, Class<WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput> type) {
-+        WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataSpringStreamOutput();
-+        result.setSymbolTuple(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput} algorithm.
-+ */
-+public static class WindowedSpringFinancialDataResetWindowOutputSerializer extends Serializer<WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput> implements ISerializer<WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput> {
-+
-+    @Override
-+    public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput object, OutputStream out) throws IOException {
-+        SWindowedSpringFinancialDataResetWindowOutput tmp = SWindowedSpringFinancialDataResetWindowOutput.newBuilder()
-+            .setWindowStart(object.getWindowStart())
-+            .setWindowEnd(object.getWindowEnd())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getWindowStart());
-+            out.writeLong(object.getWindowEnd());
-+        }
-+
-+    @Override
-+    public WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput deserializeFrom(InputStream in) throws IOException {
-+        WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput();
-+        SWindowedSpringFinancialDataResetWindowOutput tmp = SWindowedSpringFinancialDataResetWindowOutput.parseDelimitedFrom(in);
-+        result.setWindowStart(tmp.getWindowStart());
-+        result.setWindowEnd(tmp.getWindowEnd());
-+        return result;
-+    }
-+
-+        @Override
-+        public WindowedSpringFinancialData.IWindowedSpringFinancialDataResetWindowOutput deserializeFrom(IDataInput in) throws IOException {
-+            WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput();
-+            result.setWindowStart(in.nextLong());
-+            result.setWindowEnd(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput object) {
-+        output.writeLong(object.getWindowStart());
-+        output.writeLong(object.getWindowEnd());
-+    }
-+
-+    @Override
-+    public WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput read(Kryo kryo, Input input, Class<WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput> type) {
-+        WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput result = new WindowedSpringFinancialData.WindowedSpringFinancialDataResetWindowOutput();
-+        result.setWindowStart(input.readLong());
-+        result.setWindowEnd(input.readLong());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IDynamicGraphSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IDynamicGraphSink.java
-new file mode 100644
-index 0000000..ffd3bc2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IDynamicGraphSink.java
-@@ -0,0 +1,42 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sinks.IDataSink;
-+
-+/**
-+* Define the data sink interface(GEN).
-+**/
-+public interface IDynamicGraphSink extends IDataSink {
-+
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface IDynamicGraphSinkHubStreamInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "hubList".
-+         * @return the tuple value
-+         */
-+        public String getHubList();
-+
-+        /**
-+         * Sets the output value for tuple field "hubList".
-+         * @param hubList the field value
-+         */
-+        public void setHubList(String hubList);
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data IDynamicGraphSinkHubStreamInput 
-+    **/
-+    public void postDataHubStream(IDynamicGraphSinkHubStreamInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IDynamicGraphSinkHubStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, IDynamicGraphSinkHubStreamInput tuple);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFixedRateSimulatedFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFixedRateSimulatedFinancialData.java
-new file mode 100644
-index 0000000..3944a20
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFixedRateSimulatedFinancialData.java
-@@ -0,0 +1,68 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface IFixedRateSimulatedFinancialData extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface IFixedRateSimulatedFinancialDataSymbolListOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Sets the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface IFixedRateSimulatedFinancialDataSpringStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "symbolTuple".
-+         * @return the tuple value
-+         */
-+        public String getSymbolTuple();
-+
-+        /**
-+         * Sets the output value for tuple field "symbolTuple".
-+         * @param symbolTuple the field value
-+         */
-+        public void setSymbolTuple(String symbolTuple);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return IFixedRateSimulatedFinancialDataSymbolListOutput the source data
-+    **/
-+    public IFixedRateSimulatedFinancialDataSymbolListOutput getSymbolList();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(IFixedRateSimulatedFinancialDataSymbolListOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return IFixedRateSimulatedFinancialDataSpringStreamOutput the source data
-+    **/
-+    public IFixedRateSimulatedFinancialDataSpringStreamOutput getSpringStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(IFixedRateSimulatedFinancialDataSpringStreamOutput tuple);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusFincancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusFincancialData.java
-new file mode 100644
-index 0000000..1603871
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusFincancialData.java
-@@ -0,0 +1,77 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface IFocusFincancialData extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface IFocusFincancialDataSymbolListOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Sets the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface IFocusFincancialDataSpringStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "symbolTuple".
-+         * @return the tuple value
-+         */
-+        public String getSymbolTuple();
-+
-+        /**
-+         * Sets the output value for tuple field "symbolTuple".
-+         * @param symbolTuple the field value
-+         */
-+        public void setSymbolTuple(String symbolTuple);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return IFocusFincancialDataSymbolListOutput the source data
-+    **/
-+    public IFocusFincancialDataSymbolListOutput getSymbolList();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(IFocusFincancialDataSymbolListOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return IFocusFincancialDataSpringStreamOutput the source data
-+    **/
-+    public IFocusFincancialDataSpringStreamOutput getSpringStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(IFocusFincancialDataSpringStreamOutput tuple);
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "playerList".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterPlayerList(String value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusSink.java
-new file mode 100644
-index 0000000..4fd01a3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IFocusSink.java
-@@ -0,0 +1,71 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sinks.IDataSink;
-+
-+/**
-+* Define the data sink interface(GEN).
-+**/
-+public interface IFocusSink extends IDataSink {
-+
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface IFocusSinkRecommendationStreamInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "recommendations".
-+         * @return the tuple value
-+         */
-+        public String getRecommendations();
-+
-+        /**
-+         * Sets the output value for tuple field "recommendations".
-+         * @param recommendations the field value
-+         */
-+        public void setRecommendations(String recommendations);
-+    }
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface IFocusSinkEdgeStreamInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "edge".
-+         * @return the tuple value
-+         */
-+        public String getEdge();
-+
-+        /**
-+         * Sets the output value for tuple field "edge".
-+         * @param edge the field value
-+         */
-+        public void setEdge(String edge);
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data IFocusSinkRecommendationStreamInput 
-+    **/
-+    public void postDataRecommendationStream(IFocusSinkRecommendationStreamInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IFocusSinkRecommendationStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, IFocusSinkRecommendationStreamInput tuple);
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data IFocusSinkEdgeStreamInput 
-+    **/
-+    public void postDataEdgeStream(IFocusSinkEdgeStreamInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IFocusSinkEdgeStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, IFocusSinkEdgeStreamInput tuple);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IMI_data_Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IMI_data_Sink.java
-new file mode 100644
-index 0000000..41c6366
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IMI_data_Sink.java
-@@ -0,0 +1,75 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sinks.IDataSink;
-+
-+/**
-+* Define the data sink interface(GEN).
-+**/
-+public interface IMI_data_Sink extends IDataSink {
-+
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface IMI_data_SinkPairwiseFinancialInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "id0".
-+         * @return the tuple value
-+         */
-+        public String getId0();
-+
-+        /**
-+         * Sets the output value for tuple field "id0".
-+         * @param id0 the field value
-+         */
-+        public void setId0(String id0);
-+        /**
-+         * Returns the input value for tuple field "id1".
-+         * @return the tuple value
-+         */
-+        public String getId1();
-+
-+        /**
-+         * Sets the output value for tuple field "id1".
-+         * @param id1 the field value
-+         */
-+        public void setId1(String id1);
-+        /**
-+         * Returns the input value for tuple field "date".
-+         * @return the tuple value
-+         */
-+        public String getDate();
-+
-+        /**
-+         * Sets the output value for tuple field "date".
-+         * @param date the field value
-+         */
-+        public void setDate(String date);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Sets the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data IMI_data_SinkPairwiseFinancialInput 
-+    **/
-+    public void postDataPairwiseFinancial(IMI_data_SinkPairwiseFinancialInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IMI_data_SinkPairwiseFinancialInput to be emitted 
-+    **/
-+    public void emit(int ticket, IMI_data_SinkPairwiseFinancialInput tuple);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/INewTwitterStreamDataSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/INewTwitterStreamDataSource.java
-new file mode 100644
-index 0000000..e7f39a5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/INewTwitterStreamDataSource.java
-@@ -0,0 +1,113 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface INewTwitterStreamDataSource extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface INewTwitterStreamDataSourceAnalysisOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public twitter4j.Status getStatus();
-+
-+        /**
-+         * Sets the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(twitter4j.Status status);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return INewTwitterStreamDataSourceAnalysisOutput the source data
-+    **/
-+    public INewTwitterStreamDataSourceAnalysisOutput getAnalysis();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(INewTwitterStreamDataSourceAnalysisOutput tuple);
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "consumerKey".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterConsumerKey(String value);
-+
-+    /**
-+     * Sets the data source parameter "consumerSecret".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterConsumerSecret(String value);
-+
-+    /**
-+     * Sets the data source parameter "accessToken".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterAccessToken(String value);
-+
-+    /**
-+     * Sets the data source parameter "accessTokenSecret".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterAccessTokenSecret(String value);
-+
-+    /**
-+     * Sets the data source parameter "queueSize".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterQueueSize(int value);
-+
-+    /**
-+     * Sets the data source parameter "tweetDirectory".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterTweetDirectory(String value);
-+
-+    /**
-+     * Sets the data source parameter "speedFactor".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterSpeedFactor(double value);
-+
-+    /**
-+     * Sets the data source parameter "runLocally".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterRunLocally(boolean value);
-+
-+    /**
-+     * Sets the data source parameter "adjustTimeToNow".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterAdjustTimeToNow(boolean value);
-+
-+    /**
-+     * Sets the data source parameter "realLoops".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterRealLoops(boolean value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IPriorityDataSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IPriorityDataSink.java
-new file mode 100644
-index 0000000..6ad381c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IPriorityDataSink.java
-@@ -0,0 +1,137 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sinks.IDataSink;
-+
-+/**
-+* Define the data sink interface(GEN).
-+**/
-+public interface IPriorityDataSink extends IDataSink {
-+
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface IPriorityDataSinkPairwiseFinancialInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "id0".
-+         * @return the tuple value
-+         */
-+        public String getId0();
-+
-+        /**
-+         * Sets the output value for tuple field "id0".
-+         * @param id0 the field value
-+         */
-+        public void setId0(String id0);
-+        /**
-+         * Returns the input value for tuple field "id1".
-+         * @return the tuple value
-+         */
-+        public String getId1();
-+
-+        /**
-+         * Sets the output value for tuple field "id1".
-+         * @param id1 the field value
-+         */
-+        public void setId1(String id1);
-+        /**
-+         * Returns the input value for tuple field "date".
-+         * @return the tuple value
-+         */
-+        public String getDate();
-+
-+        /**
-+         * Sets the output value for tuple field "date".
-+         * @param date the field value
-+         */
-+        public void setDate(String date);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Sets the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+    }
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface IPriorityDataSinkAnalyzedStreamInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Sets the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Sets the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Sets the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+        /**
-+         * Returns the input value for tuple field "volume".
-+         * @return the tuple value
-+         */
-+        public int getVolume();
-+
-+        /**
-+         * Sets the output value for tuple field "volume".
-+         * @param volume the field value
-+         */
-+        public void setVolume(int volume);
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data IPriorityDataSinkPairwiseFinancialInput 
-+    **/
-+    public void postDataPairwiseFinancial(IPriorityDataSinkPairwiseFinancialInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IPriorityDataSinkPairwiseFinancialInput to be emitted 
-+    **/
-+    public void emit(int ticket, IPriorityDataSinkPairwiseFinancialInput tuple);
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data IPriorityDataSinkAnalyzedStreamInput 
-+    **/
-+    public void postDataAnalyzedStream(IPriorityDataSinkAnalyzedStreamInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IPriorityDataSinkAnalyzedStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, IPriorityDataSinkAnalyzedStreamInput tuple);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSink.java
-new file mode 100644
-index 0000000..72fbcca
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSink.java
-@@ -0,0 +1,53 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sinks.IDataSink;
-+
-+/**
-+* Define the data sink interface(GEN).
-+**/
-+public interface IRandomSink extends IDataSink {
-+
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface IRandomSinkRandomDataInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "randomInteger".
-+         * @return the tuple value
-+         */
-+        public int getRandomInteger();
-+
-+        /**
-+         * Sets the output value for tuple field "randomInteger".
-+         * @param randomInteger the field value
-+         */
-+        public void setRandomInteger(int randomInteger);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Sets the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data IRandomSinkRandomDataInput 
-+    **/
-+    public void postDataRandomData(IRandomSinkRandomDataInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple IRandomSinkRandomDataInput to be emitted 
-+    **/
-+    public void emit(int ticket, IRandomSinkRandomDataInput tuple);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSource.java
-new file mode 100644
-index 0000000..550c331
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IRandomSource.java
-@@ -0,0 +1,61 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface IRandomSource extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface IRandomSourceRandomDataOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "randomInteger".
-+         * @return the tuple value
-+         */
-+        public int getRandomInteger();
-+
-+        /**
-+         * Sets the output value for tuple field "randomInteger".
-+         * @param randomInteger the field value
-+         */
-+        public void setRandomInteger(int randomInteger);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Sets the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return IRandomSourceRandomDataOutput the source data
-+    **/
-+    public IRandomSourceRandomDataOutput getRandomData();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(IRandomSourceRandomDataOutput tuple);
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "delay".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterDelay(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFinancialData.java
-new file mode 100644
-index 0000000..a42216f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFinancialData.java
-@@ -0,0 +1,77 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface ISimulatedFinancialData extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ISimulatedFinancialDataSymbolListOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Sets the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ISimulatedFinancialDataSpringStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "symbolTuple".
-+         * @return the tuple value
-+         */
-+        public String getSymbolTuple();
-+
-+        /**
-+         * Sets the output value for tuple field "symbolTuple".
-+         * @param symbolTuple the field value
-+         */
-+        public void setSymbolTuple(String symbolTuple);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ISimulatedFinancialDataSymbolListOutput the source data
-+    **/
-+    public ISimulatedFinancialDataSymbolListOutput getSymbolList();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ISimulatedFinancialDataSymbolListOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ISimulatedFinancialDataSpringStreamOutput the source data
-+    **/
-+    public ISimulatedFinancialDataSpringStreamOutput getSpringStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ISimulatedFinancialDataSpringStreamOutput tuple);
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "speedFactor".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterSpeedFactor(double value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFocusFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFocusFinancialData.java
-new file mode 100644
-index 0000000..f1fdacb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedFocusFinancialData.java
-@@ -0,0 +1,84 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface ISimulatedFocusFinancialData extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ISimulatedFocusFinancialDataSymbolListOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Sets the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ISimulatedFocusFinancialDataSpringStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "symbolTuple".
-+         * @return the tuple value
-+         */
-+        public String getSymbolTuple();
-+
-+        /**
-+         * Sets the output value for tuple field "symbolTuple".
-+         * @param symbolTuple the field value
-+         */
-+        public void setSymbolTuple(String symbolTuple);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ISimulatedFocusFinancialDataSymbolListOutput the source data
-+    **/
-+    public ISimulatedFocusFinancialDataSymbolListOutput getSymbolList();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ISimulatedFocusFinancialDataSymbolListOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ISimulatedFocusFinancialDataSpringStreamOutput the source data
-+    **/
-+    public ISimulatedFocusFinancialDataSpringStreamOutput getSpringStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ISimulatedFocusFinancialDataSpringStreamOutput tuple);
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "speedFactor".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterSpeedFactor(double value);
-+
-+    /**
-+     * Sets the data source parameter "playerList".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterPlayerList(String value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedGraphData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedGraphData.java
-new file mode 100644
-index 0000000..1291bc3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISimulatedGraphData.java
-@@ -0,0 +1,41 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface ISimulatedGraphData extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ISimulatedGraphDataEdgeStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "edge".
-+         * @return the tuple value
-+         */
-+        public String getEdge();
-+
-+        /**
-+         * Sets the output value for tuple field "edge".
-+         * @param edge the field value
-+         */
-+        public void setEdge(String edge);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ISimulatedGraphDataEdgeStreamOutput the source data
-+    **/
-+    public ISimulatedGraphDataEdgeStreamOutput getEdgeStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ISimulatedGraphDataEdgeStreamOutput tuple);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISpringFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISpringFinancialData.java
-new file mode 100644
-index 0000000..f42e961
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ISpringFinancialData.java
-@@ -0,0 +1,68 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface ISpringFinancialData extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ISpringFinancialDataSymbolListOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Sets the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ISpringFinancialDataSpringStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "symbolTuple".
-+         * @return the tuple value
-+         */
-+        public String getSymbolTuple();
-+
-+        /**
-+         * Sets the output value for tuple field "symbolTuple".
-+         * @param symbolTuple the field value
-+         */
-+        public void setSymbolTuple(String symbolTuple);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ISpringFinancialDataSymbolListOutput the source data
-+    **/
-+    public ISpringFinancialDataSymbolListOutput getSymbolList();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ISpringFinancialDataSpringStreamOutput the source data
-+    **/
-+    public ISpringFinancialDataSpringStreamOutput getSpringStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeGraphQueriesSource.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeGraphQueriesSource.java
-new file mode 100644
-index 0000000..54d8f7a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeGraphQueriesSource.java
-@@ -0,0 +1,139 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface ITimeGraphQueriesSource extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ITimeGraphQueriesSourceSnapshotQueryStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "start".
-+         * @return the tuple value
-+         */
-+        public long getStart();
-+
-+        /**
-+         * Sets the output value for tuple field "start".
-+         * @param start the field value
-+         */
-+        public void setStart(long start);
-+        /**
-+         * Returns the input value for tuple field "end".
-+         * @return the tuple value
-+         */
-+        public long getEnd();
-+
-+        /**
-+         * Sets the output value for tuple field "end".
-+         * @param end the field value
-+         */
-+        public void setEnd(long end);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ITimeGraphQueriesSourcePathQueryStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "start".
-+         * @return the tuple value
-+         */
-+        public long getStart();
-+
-+        /**
-+         * Sets the output value for tuple field "start".
-+         * @param start the field value
-+         */
-+        public void setStart(long start);
-+        /**
-+         * Returns the input value for tuple field "end".
-+         * @return the tuple value
-+         */
-+        public long getEnd();
-+
-+        /**
-+         * Sets the output value for tuple field "end".
-+         * @param end the field value
-+         */
-+        public void setEnd(long end);
-+        /**
-+         * Returns the input value for tuple field "vertexA".
-+         * @return the tuple value
-+         */
-+        public String getVertexA();
-+
-+        /**
-+         * Sets the output value for tuple field "vertexA".
-+         * @param vertexA the field value
-+         */
-+        public void setVertexA(String vertexA);
-+        /**
-+         * Returns the input value for tuple field "vertexB".
-+         * @return the tuple value
-+         */
-+        public String getVertexB();
-+
-+        /**
-+         * Sets the output value for tuple field "vertexB".
-+         * @param vertexB the field value
-+         */
-+        public void setVertexB(String vertexB);
-+        /**
-+         * Returns the input value for tuple field "type".
-+         * @return the tuple value
-+         */
-+        public String getType();
-+
-+        /**
-+         * Sets the output value for tuple field "type".
-+         * @param type the field value
-+         */
-+        public void setType(String type);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ITimeGraphQueriesSourceSnapshotQueryStreamOutput the source data
-+    **/
-+    public ITimeGraphQueriesSourceSnapshotQueryStreamOutput getSnapshotQueryStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ITimeGraphQueriesSourceSnapshotQueryStreamOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ITimeGraphQueriesSourcePathQueryStreamOutput the source data
-+    **/
-+    public ITimeGraphQueriesSourcePathQueryStreamOutput getPathQueryStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ITimeGraphQueriesSourcePathQueryStreamOutput tuple);
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "snapshotQuery".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterSnapshotQuery(String value);
-+
-+    /**
-+     * Sets the data source parameter "pathQuery".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterPathQuery(String value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeTravelSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeTravelSink.java
-new file mode 100644
-index 0000000..508f806
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITimeTravelSink.java
-@@ -0,0 +1,71 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sinks.IDataSink;
-+
-+/**
-+* Define the data sink interface(GEN).
-+**/
-+public interface ITimeTravelSink extends IDataSink {
-+
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface ITimeTravelSinkSnapshotStreamInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "snapshot".
-+         * @return the tuple value
-+         */
-+        public String getSnapshot();
-+
-+        /**
-+         * Sets the output value for tuple field "snapshot".
-+         * @param snapshot the field value
-+         */
-+        public void setSnapshot(String snapshot);
-+    }
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface ITimeTravelSinkPathStreamInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "path".
-+         * @return the tuple value
-+         */
-+        public String getPath();
-+
-+        /**
-+         * Sets the output value for tuple field "path".
-+         * @param path the field value
-+         */
-+        public void setPath(String path);
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data ITimeTravelSinkSnapshotStreamInput 
-+    **/
-+    public void postDataSnapshotStream(ITimeTravelSinkSnapshotStreamInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple ITimeTravelSinkSnapshotStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, ITimeTravelSinkSnapshotStreamInput tuple);
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data ITimeTravelSinkPathStreamInput 
-+    **/
-+    public void postDataPathStream(ITimeTravelSinkPathStreamInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple ITimeTravelSinkPathStreamInput to be emitted 
-+    **/
-+    public void emit(int ticket, ITimeTravelSinkPathStreamInput tuple);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITransferSink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITransferSink.java
-new file mode 100644
-index 0000000..7829e47
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITransferSink.java
-@@ -0,0 +1,75 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sinks.IDataSink;
-+
-+/**
-+* Define the data sink interface(GEN).
-+**/
-+public interface ITransferSink extends IDataSink {
-+
-+    /**
-+    * Define the sink data input interface.
-+    **/
-+    public static interface ITransferSinkPairwiseFinancialInput extends Serializable {
-+        /**
-+         * Returns the input value for tuple field "id0".
-+         * @return the tuple value
-+         */
-+        public String getId0();
-+
-+        /**
-+         * Sets the output value for tuple field "id0".
-+         * @param id0 the field value
-+         */
-+        public void setId0(String id0);
-+        /**
-+         * Returns the input value for tuple field "id1".
-+         * @return the tuple value
-+         */
-+        public String getId1();
-+
-+        /**
-+         * Sets the output value for tuple field "id1".
-+         * @param id1 the field value
-+         */
-+        public void setId1(String id1);
-+        /**
-+         * Returns the input value for tuple field "date".
-+         * @return the tuple value
-+         */
-+        public String getDate();
-+
-+        /**
-+         * Sets the output value for tuple field "date".
-+         * @param date the field value
-+         */
-+        public void setDate(String date);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Sets the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+    }
-+
-+
-+    /**
-+    * Posts a specific type of data sink.
-+    * @param data the sink data ITransferSinkPairwiseFinancialInput 
-+    **/
-+    public void postDataPairwiseFinancial(ITransferSinkPairwiseFinancialInput data);
-+
-+    /**
-+    * Emits tuple along with a ticket.
-+    * @param ticket the ticket to identify the responses for application
-+    * @param tuple the tuple ITransferSinkPairwiseFinancialInput to be emitted 
-+    **/
-+    public void emit(int ticket, ITransferSinkPairwiseFinancialInput tuple);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITwitterStreamData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITwitterStreamData.java
-new file mode 100644
-index 0000000..2eaf8d4
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/ITwitterStreamData.java
-@@ -0,0 +1,147 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface ITwitterStreamData extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ITwitterStreamDataSymbolListOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Sets the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface ITwitterStreamDataTwitterStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Sets the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ITwitterStreamDataSymbolListOutput the source data
-+    **/
-+    public ITwitterStreamDataSymbolListOutput getSymbolList();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ITwitterStreamDataSymbolListOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return ITwitterStreamDataTwitterStreamOutput the source data
-+    **/
-+    public ITwitterStreamDataTwitterStreamOutput getTwitterStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(ITwitterStreamDataTwitterStreamOutput tuple);
-+    // data source parameters
-+
-+    /**
-+     * Sets the data source parameter "consumerKey".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterConsumerKey(String value);
-+
-+    /**
-+     * Sets the data source parameter "consumerSecret".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterConsumerSecret(String value);
-+
-+    /**
-+     * Sets the data source parameter "accessToken".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterAccessToken(String value);
-+
-+    /**
-+     * Sets the data source parameter "accessTokenSecret".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterAccessTokenSecret(String value);
-+
-+    /**
-+     * Sets the data source parameter "queueSize".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterQueueSize(int value);
-+
-+    /**
-+     * Sets the data source parameter "tweetDirectory".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterTweetDirectory(String value);
-+
-+    /**
-+     * Sets the data source parameter "speedFactor".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterSpeedFactor(double value);
-+
-+    /**
-+     * Sets the data source parameter "runLocally".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterRunLocally(boolean value);
-+
-+    /**
-+     * Sets the data source parameter "adjustTimeToNow".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterAdjustTimeToNow(boolean value);
-+
-+    /**
-+     * Sets the data source parameter "realLoops".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterRealLoops(boolean value);
-+
-+    /**
-+     * Sets the data source parameter "setAdditionalKeywords".
-+     *
-+     * @param value the new value of the data source parameter
-+     */
-+    public void setParameterSetAdditionalKeywords(String value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IWindowedSpringFinancialData.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IWindowedSpringFinancialData.java
-new file mode 100644
-index 0000000..05f758b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/data/inf/IWindowedSpringFinancialData.java
-@@ -0,0 +1,106 @@
-+package eu.qualimaster.data.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.dataManagement.sources.IDataSource;
-+
-+/**
-+* Define the data source interface(GEN).
-+**/
-+public interface IWindowedSpringFinancialData extends IDataSource {
-+
-+
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface IWindowedSpringFinancialDataSymbolListOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Sets the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface IWindowedSpringFinancialDataSpringStreamOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "symbolTuple".
-+         * @return the tuple value
-+         */
-+        public String getSymbolTuple();
-+
-+        /**
-+         * Sets the output value for tuple field "symbolTuple".
-+         * @param symbolTuple the field value
-+         */
-+        public void setSymbolTuple(String symbolTuple);
-+    }
-+    /**
-+    * Define the source data input interface.
-+    **/
-+    public static interface IWindowedSpringFinancialDataResetWindowOutput extends Serializable{
-+        /**
-+         * Returns the input value for tuple field "windowStart".
-+         * @return the tuple value
-+         */
-+        public long getWindowStart();
-+
-+        /**
-+         * Sets the output value for tuple field "windowStart".
-+         * @param windowStart the field value
-+         */
-+        public void setWindowStart(long windowStart);
-+        /**
-+         * Returns the input value for tuple field "windowEnd".
-+         * @return the tuple value
-+         */
-+        public long getWindowEnd();
-+
-+        /**
-+         * Sets the output value for tuple field "windowEnd".
-+         * @param windowEnd the field value
-+         */
-+        public void setWindowEnd(long windowEnd);
-+    }
-+
-+
-+    /**
-+    * Returns a specific type of data source.
-+    * @return IWindowedSpringFinancialDataSymbolListOutput the source data
-+    **/
-+    public IWindowedSpringFinancialDataSymbolListOutput getSymbolList();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(IWindowedSpringFinancialDataSymbolListOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return IWindowedSpringFinancialDataSpringStreamOutput the source data
-+    **/
-+    public IWindowedSpringFinancialDataSpringStreamOutput getSpringStream();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(IWindowedSpringFinancialDataSpringStreamOutput tuple);
-+    /**
-+    * Returns a specific type of data source.
-+    * @return IWindowedSpringFinancialDataResetWindowOutput the source data
-+    **/
-+    public IWindowedSpringFinancialDataResetWindowOutput getResetWindow();
-+
-+    /**
-+    * Returns an aggregation key from the key property of the tuple type for predicting source data. If null, do not aggregate or predict.
-+    * @return an aggregation key
-+    **/
-+    public String getAggregationKey(IWindowedSpringFinancialDataResetWindowOutput tuple);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancial.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancial.java
-new file mode 100644
-index 0000000..c99ad8e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancial.java
-@@ -0,0 +1,203 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFCorrelationFinancial" (GEN).
-+ */
-+public class FCorrelationFinancial implements IFCorrelationFinancial {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFCorrelationFinancialPreprocessedStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFCorrelationFinancialPreprocessedStreamInput implements IIFCorrelationFinancialPreprocessedStreamInput {
-+
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+        private int volume;
-+
-+        @Override
-+        public String getSymbolId(){
-+            return symbolId;
-+        }
-+
-+        @Override
-+        public void setSymbolId(String symbolId){
-+            this.symbolId = symbolId;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        @Override
-+        public int getVolume(){
-+            return volume;
-+        }
-+
-+        @Override
-+        public void setVolume(int volume){
-+            this.volume = volume;
-+        }
-+        static {
-+            SerializerRegistry.register("IFCorrelationFinancialPreprocessedStreamInput", FCorrelationFinancialSerializers.IFCorrelationFinancialPreprocessedStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFCorrelationFinancialSymbolListInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFCorrelationFinancialSymbolListInput implements IIFCorrelationFinancialSymbolListInput {
-+
-+        private java.util.List<String> allSymbols;
-+
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("IFCorrelationFinancialSymbolListInput", FCorrelationFinancialSerializers.IFCorrelationFinancialSymbolListInputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFCorrelationFinancialPairwiseFinancialOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFCorrelationFinancialPairwiseFinancialOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFCorrelationFinancialPairwiseFinancialOutput> implements IIFCorrelationFinancialPairwiseFinancialOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFCorrelationFinancialPairwiseFinancialOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFCorrelationFinancialPairwiseFinancialOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFCorrelationFinancialPairwiseFinancialOutput createItem() {
-+            return new IFCorrelationFinancialPairwiseFinancialOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String id0;
-+        private String id1;
-+        private String date;
-+        private double value;
-+
-+        @Override
-+        public String getId0(){
-+            return id0;
-+        }
-+
-+        @Override
-+        public void setId0(String id0){
-+            this.id0 = id0;
-+        }
-+        @Override
-+        public String getId1(){
-+            return id1;
-+        }
-+
-+        @Override
-+        public void setId1(String id1){
-+            this.id1 = id1;
-+        }
-+        @Override
-+        public String getDate(){
-+            return date;
-+        }
-+
-+        @Override
-+        public void setDate(String date){
-+            this.date = date;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        static {
-+            SerializerRegistry.register("IFCorrelationFinancialPairwiseFinancialOutput", FCorrelationFinancialSerializers.IFCorrelationFinancialPairwiseFinancialOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancialSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancialSerializers.java
-new file mode 100644
-index 0000000..d87d31b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationFinancialSerializers.java
-@@ -0,0 +1,195 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FCorrelationFinancial;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FCorrelationFinancialProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFCorrelationFinancial" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FCorrelationFinancialSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput} algorithm.
-+ */
-+public static class IFCorrelationFinancialPreprocessedStreamInputSerializer extends Serializer<FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput> implements ISerializer<IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput object, OutputStream out) throws IOException {
-+        SIFCorrelationFinancialPreprocessedStreamInput tmp = SIFCorrelationFinancialPreprocessedStreamInput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .setVolume(object.getVolume())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+            out.writeInt(object.getVolume());
-+        }
-+
-+    @Override
-+    public IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput result = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+        SIFCorrelationFinancialPreprocessedStreamInput tmp = SIFCorrelationFinancialPreprocessedStreamInput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        result.setVolume(tmp.getVolume());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFCorrelationFinancial.IIFCorrelationFinancialPreprocessedStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput result = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            result.setVolume(in.nextInt());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+        output.writeInt(object.getVolume());
-+    }
-+
-+    @Override
-+    public FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput read(Kryo kryo, Input input, Class<FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput> type) {
-+        FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput result = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        result.setVolume(input.readInt());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput} algorithm.
-+ */
-+public static class IFCorrelationFinancialSymbolListInputSerializer extends Serializer<FCorrelationFinancial.IFCorrelationFinancialSymbolListInput> implements ISerializer<IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput> {
-+
-+    @Override
-+    public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput deserializeFrom(InputStream in) throws IOException {
-+        FCorrelationFinancial.IFCorrelationFinancialSymbolListInput result = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFCorrelationFinancial.IIFCorrelationFinancialSymbolListInput deserializeFrom(IDataInput in) throws IOException {
-+            FCorrelationFinancial.IFCorrelationFinancialSymbolListInput result = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FCorrelationFinancial.IFCorrelationFinancialSymbolListInput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public FCorrelationFinancial.IFCorrelationFinancialSymbolListInput read(Kryo kryo, Input input, Class<FCorrelationFinancial.IFCorrelationFinancialSymbolListInput> type) {
-+        FCorrelationFinancial.IFCorrelationFinancialSymbolListInput result = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput} algorithm.
-+ */
-+public static class IFCorrelationFinancialPairwiseFinancialOutputSerializer extends Serializer<FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput> implements ISerializer<IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput> {
-+
-+    @Override
-+    public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput object, OutputStream out) throws IOException {
-+        SIFCorrelationFinancialPairwiseFinancialOutput tmp = SIFCorrelationFinancialPairwiseFinancialOutput.newBuilder()
-+            .setId0(object.getId0())
-+            .setId1(object.getId1())
-+            .setDate(object.getDate())
-+            .setValue(object.getValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getId0());
-+            out.writeString(object.getId1());
-+            out.writeString(object.getDate());
-+            out.writeDouble(object.getValue());
-+        }
-+
-+    @Override
-+    public IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput deserializeFrom(InputStream in) throws IOException {
-+        FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput result = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        SIFCorrelationFinancialPairwiseFinancialOutput tmp = SIFCorrelationFinancialPairwiseFinancialOutput.parseDelimitedFrom(in);
-+        result.setId0(tmp.getId0());
-+        result.setId1(tmp.getId1());
-+        result.setDate(tmp.getDate());
-+        result.setValue(tmp.getValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFCorrelationFinancial.IIFCorrelationFinancialPairwiseFinancialOutput deserializeFrom(IDataInput in) throws IOException {
-+            FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput result = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+            result.setId0(in.nextString());
-+            result.setId1(in.nextString());
-+            result.setDate(in.nextString());
-+            result.setValue(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput object) {
-+        output.writeString(object.getId0());
-+        output.writeString(object.getId1());
-+        output.writeString(object.getDate());
-+        output.writeDouble(object.getValue());
-+    }
-+
-+    @Override
-+    public FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput read(Kryo kryo, Input input, Class<FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput> type) {
-+        FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput result = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        result.setId0(input.readString());
-+        result.setId1(input.readString());
-+        result.setDate(input.readString());
-+        result.setValue(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitter.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitter.java
-new file mode 100644
-index 0000000..0861f73
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitter.java
-@@ -0,0 +1,173 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFCorrelationTwitter" (GEN).
-+ */
-+public class FCorrelationTwitter implements IFCorrelationTwitter {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFCorrelationTwitterAnalyzedStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFCorrelationTwitterAnalyzedStreamInput implements IIFCorrelationTwitterAnalyzedStreamInput {
-+
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+        private int volume;
-+
-+        @Override
-+        public String getSymbolId(){
-+            return symbolId;
-+        }
-+
-+        @Override
-+        public void setSymbolId(String symbolId){
-+            this.symbolId = symbolId;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        @Override
-+        public int getVolume(){
-+            return volume;
-+        }
-+
-+        @Override
-+        public void setVolume(int volume){
-+            this.volume = volume;
-+        }
-+        static {
-+            SerializerRegistry.register("IFCorrelationTwitterAnalyzedStreamInput", FCorrelationTwitterSerializers.IFCorrelationTwitterAnalyzedStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFCorrelationTwitterSymbolListInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFCorrelationTwitterSymbolListInput implements IIFCorrelationTwitterSymbolListInput {
-+
-+        private java.util.List<String> allSymbols;
-+
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("IFCorrelationTwitterSymbolListInput", FCorrelationTwitterSerializers.IFCorrelationTwitterSymbolListInputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFCorrelationTwitterPairwiseTwitterOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFCorrelationTwitterPairwiseTwitterOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFCorrelationTwitterPairwiseTwitterOutput> implements IIFCorrelationTwitterPairwiseTwitterOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFCorrelationTwitterPairwiseTwitterOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFCorrelationTwitterPairwiseTwitterOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFCorrelationTwitterPairwiseTwitterOutput createItem() {
-+            return new IFCorrelationTwitterPairwiseTwitterOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String pairwiseCorrelationTwitter;
-+
-+        @Override
-+        public String getPairwiseCorrelationTwitter(){
-+            return pairwiseCorrelationTwitter;
-+        }
-+
-+        @Override
-+        public void setPairwiseCorrelationTwitter(String pairwiseCorrelationTwitter){
-+            this.pairwiseCorrelationTwitter = pairwiseCorrelationTwitter;
-+        }
-+        static {
-+            SerializerRegistry.register("IFCorrelationTwitterPairwiseTwitterOutput", FCorrelationTwitterSerializers.IFCorrelationTwitterPairwiseTwitterOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationTwitterAnalyzedStreamInput input, IIFCorrelationTwitterPairwiseTwitterOutput pairwiseTwitterResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationTwitterSymbolListInput input, IIFCorrelationTwitterPairwiseTwitterOutput pairwiseTwitterResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitterSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitterSerializers.java
-new file mode 100644
-index 0000000..6794342
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FCorrelationTwitterSerializers.java
-@@ -0,0 +1,177 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FCorrelationTwitter;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FCorrelationTwitterProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFCorrelationTwitter" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FCorrelationTwitterSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput} algorithm.
-+ */
-+public static class IFCorrelationTwitterAnalyzedStreamInputSerializer extends Serializer<FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput> implements ISerializer<IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput object, OutputStream out) throws IOException {
-+        SIFCorrelationTwitterAnalyzedStreamInput tmp = SIFCorrelationTwitterAnalyzedStreamInput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .setVolume(object.getVolume())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+            out.writeInt(object.getVolume());
-+        }
-+
-+    @Override
-+    public IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput result = new FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput();
-+        SIFCorrelationTwitterAnalyzedStreamInput tmp = SIFCorrelationTwitterAnalyzedStreamInput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        result.setVolume(tmp.getVolume());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFCorrelationTwitter.IIFCorrelationTwitterAnalyzedStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput result = new FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            result.setVolume(in.nextInt());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+        output.writeInt(object.getVolume());
-+    }
-+
-+    @Override
-+    public FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput read(Kryo kryo, Input input, Class<FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput> type) {
-+        FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput result = new FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        result.setVolume(input.readInt());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput} algorithm.
-+ */
-+public static class IFCorrelationTwitterSymbolListInputSerializer extends Serializer<FCorrelationTwitter.IFCorrelationTwitterSymbolListInput> implements ISerializer<IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput> {
-+
-+    @Override
-+    public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput deserializeFrom(InputStream in) throws IOException {
-+        FCorrelationTwitter.IFCorrelationTwitterSymbolListInput result = new FCorrelationTwitter.IFCorrelationTwitterSymbolListInput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFCorrelationTwitter.IIFCorrelationTwitterSymbolListInput deserializeFrom(IDataInput in) throws IOException {
-+            FCorrelationTwitter.IFCorrelationTwitterSymbolListInput result = new FCorrelationTwitter.IFCorrelationTwitterSymbolListInput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FCorrelationTwitter.IFCorrelationTwitterSymbolListInput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public FCorrelationTwitter.IFCorrelationTwitterSymbolListInput read(Kryo kryo, Input input, Class<FCorrelationTwitter.IFCorrelationTwitterSymbolListInput> type) {
-+        FCorrelationTwitter.IFCorrelationTwitterSymbolListInput result = new FCorrelationTwitter.IFCorrelationTwitterSymbolListInput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput} algorithm.
-+ */
-+public static class IFCorrelationTwitterPairwiseTwitterOutputSerializer extends Serializer<FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput> implements ISerializer<IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput> {
-+
-+    @Override
-+    public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput object, OutputStream out) throws IOException {
-+        SIFCorrelationTwitterPairwiseTwitterOutput tmp = SIFCorrelationTwitterPairwiseTwitterOutput.newBuilder()
-+            .setPairwiseCorrelationTwitter(object.getPairwiseCorrelationTwitter())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getPairwiseCorrelationTwitter());
-+        }
-+
-+    @Override
-+    public IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput deserializeFrom(InputStream in) throws IOException {
-+        FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput result = new FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput();
-+        SIFCorrelationTwitterPairwiseTwitterOutput tmp = SIFCorrelationTwitterPairwiseTwitterOutput.parseDelimitedFrom(in);
-+        result.setPairwiseCorrelationTwitter(tmp.getPairwiseCorrelationTwitter());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFCorrelationTwitter.IIFCorrelationTwitterPairwiseTwitterOutput deserializeFrom(IDataInput in) throws IOException {
-+            FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput result = new FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput();
-+            result.setPairwiseCorrelationTwitter(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput object) {
-+        output.writeString(object.getPairwiseCorrelationTwitter());
-+    }
-+
-+    @Override
-+    public FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput read(Kryo kryo, Input input, Class<FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput> type) {
-+        FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput result = new FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput();
-+        result.setPairwiseCorrelationTwitter(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilation.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilation.java
-new file mode 100644
-index 0000000..2c1d75b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilation.java
-@@ -0,0 +1,141 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFDynamicGraphCompilation" (GEN).
-+ */
-+public class FDynamicGraphCompilation implements IFDynamicGraphCompilation {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFDynamicGraphCompilationPairwiseFinancialInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFDynamicGraphCompilationPairwiseFinancialInput implements IIFDynamicGraphCompilationPairwiseFinancialInput {
-+
-+        private String id0;
-+        private String id1;
-+        private String date;
-+        private double value;
-+
-+        @Override
-+        public String getId0(){
-+            return id0;
-+        }
-+
-+        @Override
-+        public void setId0(String id0){
-+            this.id0 = id0;
-+        }
-+        @Override
-+        public String getId1(){
-+            return id1;
-+        }
-+
-+        @Override
-+        public void setId1(String id1){
-+            this.id1 = id1;
-+        }
-+        @Override
-+        public String getDate(){
-+            return date;
-+        }
-+
-+        @Override
-+        public void setDate(String date){
-+            this.date = date;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        static {
-+            SerializerRegistry.register("IFDynamicGraphCompilationPairwiseFinancialInput", FDynamicGraphCompilationSerializers.IFDynamicGraphCompilationPairwiseFinancialInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFDynamicGraphCompilationEdgeStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFDynamicGraphCompilationEdgeStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFDynamicGraphCompilationEdgeStreamOutput> implements IIFDynamicGraphCompilationEdgeStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFDynamicGraphCompilationEdgeStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFDynamicGraphCompilationEdgeStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFDynamicGraphCompilationEdgeStreamOutput createItem() {
-+            return new IFDynamicGraphCompilationEdgeStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String edge;
-+
-+        @Override
-+        public String getEdge(){
-+            return edge;
-+        }
-+
-+        @Override
-+        public void setEdge(String edge){
-+            this.edge = edge;
-+        }
-+        static {
-+            SerializerRegistry.register("IFDynamicGraphCompilationEdgeStreamOutput", FDynamicGraphCompilationSerializers.IFDynamicGraphCompilationEdgeStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFDynamicGraphCompilationPairwiseFinancialInput input, IIFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "correlationThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterCorrelationThreshold(double value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilationSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilationSerializers.java
-new file mode 100644
-index 0000000..2b0ec30
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicGraphCompilationSerializers.java
-@@ -0,0 +1,135 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FDynamicGraphCompilation;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FDynamicGraphCompilationProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFDynamicGraphCompilation" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FDynamicGraphCompilationSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput} algorithm.
-+ */
-+public static class IFDynamicGraphCompilationPairwiseFinancialInputSerializer extends Serializer<FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput> implements ISerializer<IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput> {
-+
-+    @Override
-+    public void serializeTo(IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput object, OutputStream out) throws IOException {
-+        SIFDynamicGraphCompilationPairwiseFinancialInput tmp = SIFDynamicGraphCompilationPairwiseFinancialInput.newBuilder()
-+            .setId0(object.getId0())
-+            .setId1(object.getId1())
-+            .setDate(object.getDate())
-+            .setValue(object.getValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getId0());
-+            out.writeString(object.getId1());
-+            out.writeString(object.getDate());
-+            out.writeDouble(object.getValue());
-+        }
-+
-+    @Override
-+    public IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput deserializeFrom(InputStream in) throws IOException {
-+        FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
-+        SIFDynamicGraphCompilationPairwiseFinancialInput tmp = SIFDynamicGraphCompilationPairwiseFinancialInput.parseDelimitedFrom(in);
-+        result.setId0(tmp.getId0());
-+        result.setId1(tmp.getId1());
-+        result.setDate(tmp.getDate());
-+        result.setValue(tmp.getValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFDynamicGraphCompilation.IIFDynamicGraphCompilationPairwiseFinancialInput deserializeFrom(IDataInput in) throws IOException {
-+            FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
-+            result.setId0(in.nextString());
-+            result.setId1(in.nextString());
-+            result.setDate(in.nextString());
-+            result.setValue(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput object) {
-+        output.writeString(object.getId0());
-+        output.writeString(object.getId1());
-+        output.writeString(object.getDate());
-+        output.writeDouble(object.getValue());
-+    }
-+
-+    @Override
-+    public FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput read(Kryo kryo, Input input, Class<FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput> type) {
-+        FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
-+        result.setId0(input.readString());
-+        result.setId1(input.readString());
-+        result.setDate(input.readString());
-+        result.setValue(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput} algorithm.
-+ */
-+public static class IFDynamicGraphCompilationEdgeStreamOutputSerializer extends Serializer<FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput> implements ISerializer<IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput object, OutputStream out) throws IOException {
-+        SIFDynamicGraphCompilationEdgeStreamOutput tmp = SIFDynamicGraphCompilationEdgeStreamOutput.newBuilder()
-+            .setEdge(object.getEdge())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getEdge());
-+        }
-+
-+    @Override
-+    public IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+        SIFDynamicGraphCompilationEdgeStreamOutput tmp = SIFDynamicGraphCompilationEdgeStreamOutput.parseDelimitedFrom(in);
-+        result.setEdge(tmp.getEdge());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFDynamicGraphCompilation.IIFDynamicGraphCompilationEdgeStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+            result.setEdge(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput object) {
-+        output.writeString(object.getEdge());
-+    }
-+
-+    @Override
-+    public FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput read(Kryo kryo, Input input, Class<FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput> type) {
-+        FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput result = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+        result.setEdge(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputation.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputation.java
-new file mode 100644
-index 0000000..1d4bc2e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputation.java
-@@ -0,0 +1,119 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFDynamicHubComputation" (GEN).
-+ */
-+public class FDynamicHubComputation implements IFDynamicHubComputation {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFDynamicHubComputationEdgeStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFDynamicHubComputationEdgeStreamInput implements IIFDynamicHubComputationEdgeStreamInput {
-+
-+        private String edge;
-+
-+        @Override
-+        public String getEdge(){
-+            return edge;
-+        }
-+
-+        @Override
-+        public void setEdge(String edge){
-+            this.edge = edge;
-+        }
-+        static {
-+            SerializerRegistry.register("IFDynamicHubComputationEdgeStreamInput", FDynamicHubComputationSerializers.IFDynamicHubComputationEdgeStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFDynamicHubComputationHubStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFDynamicHubComputationHubStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFDynamicHubComputationHubStreamOutput> implements IIFDynamicHubComputationHubStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFDynamicHubComputationHubStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFDynamicHubComputationHubStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFDynamicHubComputationHubStreamOutput createItem() {
-+            return new IFDynamicHubComputationHubStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String hubList;
-+
-+        @Override
-+        public String getHubList(){
-+            return hubList;
-+        }
-+
-+        @Override
-+        public void setHubList(String hubList){
-+            this.hubList = hubList;
-+        }
-+        static {
-+            SerializerRegistry.register("IFDynamicHubComputationHubStreamOutput", FDynamicHubComputationSerializers.IFDynamicHubComputationHubStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFDynamicHubComputationEdgeStreamInput input, IIFDynamicHubComputationHubStreamOutput hubStreamResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "hubListSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterHubListSize(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputationSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputationSerializers.java
-new file mode 100644
-index 0000000..e0a7d9c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FDynamicHubComputationSerializers.java
-@@ -0,0 +1,117 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FDynamicHubComputation;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FDynamicHubComputationProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFDynamicHubComputation" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FDynamicHubComputationSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput} algorithm.
-+ */
-+public static class IFDynamicHubComputationEdgeStreamInputSerializer extends Serializer<FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput> implements ISerializer<IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput object, OutputStream out) throws IOException {
-+        SIFDynamicHubComputationEdgeStreamInput tmp = SIFDynamicHubComputationEdgeStreamInput.newBuilder()
-+            .setEdge(object.getEdge())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getEdge());
-+        }
-+
-+    @Override
-+    public IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput result = new FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput();
-+        SIFDynamicHubComputationEdgeStreamInput tmp = SIFDynamicHubComputationEdgeStreamInput.parseDelimitedFrom(in);
-+        result.setEdge(tmp.getEdge());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFDynamicHubComputation.IIFDynamicHubComputationEdgeStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput result = new FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput();
-+            result.setEdge(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput object) {
-+        output.writeString(object.getEdge());
-+    }
-+
-+    @Override
-+    public FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput read(Kryo kryo, Input input, Class<FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput> type) {
-+        FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput result = new FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput();
-+        result.setEdge(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput} algorithm.
-+ */
-+public static class IFDynamicHubComputationHubStreamOutputSerializer extends Serializer<FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput> implements ISerializer<IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput object, OutputStream out) throws IOException {
-+        SIFDynamicHubComputationHubStreamOutput tmp = SIFDynamicHubComputationHubStreamOutput.newBuilder()
-+            .setHubList(object.getHubList())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getHubList());
-+        }
-+
-+    @Override
-+    public IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput result = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
-+        SIFDynamicHubComputationHubStreamOutput tmp = SIFDynamicHubComputationHubStreamOutput.parseDelimitedFrom(in);
-+        result.setHubList(tmp.getHubList());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFDynamicHubComputation.IIFDynamicHubComputationHubStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput result = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
-+            result.setHubList(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput object) {
-+        output.writeString(object.getHubList());
-+    }
-+
-+    @Override
-+    public FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput read(Kryo kryo, Input input, Class<FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput> type) {
-+        FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput result = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
-+        result.setHubList(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichment.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichment.java
-new file mode 100644
-index 0000000..409db94
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichment.java
-@@ -0,0 +1,144 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFEventEnrichment" (GEN).
-+ */
-+public class FEventEnrichment implements IFEventEnrichment {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFEventEnrichmentEventStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFEventEnrichmentEventStreamInput implements IIFEventEnrichmentEventStreamInput {
-+
-+        private eu.qualimaster.data.stream.source.LabelledTweet tweet;
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getTweet(){
-+            return tweet;
-+        }
-+
-+        @Override
-+        public void setTweet(eu.qualimaster.data.stream.source.LabelledTweet tweet){
-+            this.tweet = tweet;
-+        }
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        static {
-+            SerializerRegistry.register("IFEventEnrichmentEventStreamInput", FEventEnrichmentSerializers.IFEventEnrichmentEventStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFEventEnrichmentKeywordStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFEventEnrichmentKeywordStreamInput implements IIFEventEnrichmentKeywordStreamInput {
-+
-+        private java.util.List<String> keywords;
-+
-+        @Override
-+        public java.util.List<String> getKeywords(){
-+            return keywords;
-+        }
-+
-+        @Override
-+        public void setKeywords(java.util.List<String> keywords){
-+            this.keywords = keywords;
-+        }
-+        static {
-+            SerializerRegistry.register("IFEventEnrichmentKeywordStreamInput", FEventEnrichmentSerializers.IFEventEnrichmentKeywordStreamInputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFEventEnrichmentEnrichedEventsStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFEventEnrichmentEnrichedEventsStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFEventEnrichmentEnrichedEventsStreamOutput> implements IIFEventEnrichmentEnrichedEventsStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFEventEnrichmentEnrichedEventsStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFEventEnrichmentEnrichedEventsStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFEventEnrichmentEnrichedEventsStreamOutput createItem() {
-+            return new IFEventEnrichmentEnrichedEventsStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        static {
-+            SerializerRegistry.register("IFEventEnrichmentEnrichedEventsStreamOutput", FEventEnrichmentSerializers.IFEventEnrichmentEnrichedEventsStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFEventEnrichmentEventStreamInput input, IIFEventEnrichmentEnrichedEventsStreamOutput enrichedEventsStreamResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFEventEnrichmentKeywordStreamInput input, IIFEventEnrichmentEnrichedEventsStreamOutput enrichedEventsStreamResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichmentSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichmentSerializers.java
-new file mode 100644
-index 0000000..26a9b95
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FEventEnrichmentSerializers.java
-@@ -0,0 +1,157 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FEventEnrichment;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FEventEnrichmentProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFEventEnrichment" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FEventEnrichmentSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFEventEnrichment.IIFEventEnrichmentEventStreamInput} algorithm.
-+ */
-+public static class IFEventEnrichmentEventStreamInputSerializer extends Serializer<FEventEnrichment.IFEventEnrichmentEventStreamInput> implements ISerializer<IFEventEnrichment.IIFEventEnrichmentEventStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFEventEnrichment.IIFEventEnrichmentEventStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getTweet(), out);
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFEventEnrichment.IIFEventEnrichmentEventStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getTweet(), out);
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        }
-+
-+    @Override
-+    public IFEventEnrichment.IIFEventEnrichmentEventStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FEventEnrichment.IFEventEnrichmentEventStreamInput result = new FEventEnrichment.IFEventEnrichmentEventStreamInput();
-+        result.setTweet(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFEventEnrichment.IIFEventEnrichmentEventStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FEventEnrichment.IFEventEnrichmentEventStreamInput result = new FEventEnrichment.IFEventEnrichmentEventStreamInput();
-+            result.setTweet(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FEventEnrichment.IFEventEnrichmentEventStreamInput object) {
-+        kryo.writeObject(output, object.getTweet());
-+        kryo.writeObject(output, object.getEvents());
-+    }
-+
-+    @Override
-+    public FEventEnrichment.IFEventEnrichmentEventStreamInput read(Kryo kryo, Input input, Class<FEventEnrichment.IFEventEnrichmentEventStreamInput> type) {
-+        FEventEnrichment.IFEventEnrichmentEventStreamInput result = new FEventEnrichment.IFEventEnrichmentEventStreamInput();
-+        result.setTweet(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput} algorithm.
-+ */
-+public static class IFEventEnrichmentKeywordStreamInputSerializer extends Serializer<FEventEnrichment.IFEventEnrichmentKeywordStreamInput> implements ISerializer<IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
-+        }
-+
-+    @Override
-+    public IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FEventEnrichment.IFEventEnrichmentKeywordStreamInput result = new FEventEnrichment.IFEventEnrichmentKeywordStreamInput();
-+        result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFEventEnrichment.IIFEventEnrichmentKeywordStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FEventEnrichment.IFEventEnrichmentKeywordStreamInput result = new FEventEnrichment.IFEventEnrichmentKeywordStreamInput();
-+            result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FEventEnrichment.IFEventEnrichmentKeywordStreamInput object) {
-+        kryo.writeObject(output, object.getKeywords());
-+    }
-+
-+    @Override
-+    public FEventEnrichment.IFEventEnrichmentKeywordStreamInput read(Kryo kryo, Input input, Class<FEventEnrichment.IFEventEnrichmentKeywordStreamInput> type) {
-+        FEventEnrichment.IFEventEnrichmentKeywordStreamInput result = new FEventEnrichment.IFEventEnrichmentKeywordStreamInput();
-+        result.setKeywords(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput} algorithm.
-+ */
-+public static class IFEventEnrichmentEnrichedEventsStreamOutputSerializer extends Serializer<FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput> implements ISerializer<IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        }
-+
-+    @Override
-+    public IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput result = new FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput();
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFEventEnrichment.IIFEventEnrichmentEnrichedEventsStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput result = new FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput();
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput object) {
-+        kryo.writeObject(output, object.getEvents());
-+    }
-+
-+    @Override
-+    public FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput read(Kryo kryo, Input input, Class<FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput> type) {
-+        FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput result = new FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput();
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearch.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearch.java
-new file mode 100644
-index 0000000..7eff552
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearch.java
-@@ -0,0 +1,142 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFExpertSearch" (GEN).
-+ */
-+public class FExpertSearch implements IFExpertSearch {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFExpertSearchAnalysisInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFExpertSearchAnalysisInput implements IIFExpertSearchAnalysisInput {
-+
-+        private twitter4j.Status status;
-+
-+        @Override
-+        public twitter4j.Status getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(twitter4j.Status status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFExpertSearchAnalysisInput", FExpertSearchSerializers.IFExpertSearchAnalysisInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFExpertSearchAnalysisOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFExpertSearchAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFExpertSearchAnalysisOutput> implements IIFExpertSearchAnalysisOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFExpertSearchAnalysisOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFExpertSearchAnalysisOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFExpertSearchAnalysisOutput createItem() {
-+            return new IFExpertSearchAnalysisOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> experts;
-+        private eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval;
-+        private java.util.List<String> keywords;
-+        private java.util.List<String> symbols;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> getExperts(){
-+            return experts;
-+        }
-+
-+        @Override
-+        public void setExperts(java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> experts){
-+            this.experts = experts;
-+        }
-+        @Override
-+        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval(){
-+            return timeInterval;
-+        }
-+
-+        @Override
-+        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval){
-+            this.timeInterval = timeInterval;
-+        }
-+        @Override
-+        public java.util.List<String> getKeywords(){
-+            return keywords;
-+        }
-+
-+        @Override
-+        public void setKeywords(java.util.List<String> keywords){
-+            this.keywords = keywords;
-+        }
-+        @Override
-+        public java.util.List<String> getSymbols(){
-+            return symbols;
-+        }
-+
-+        @Override
-+        public void setSymbols(java.util.List<String> symbols){
-+            this.symbols = symbols;
-+        }
-+        static {
-+            SerializerRegistry.register("IFExpertSearchAnalysisOutput", FExpertSearchSerializers.IFExpertSearchAnalysisOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFExpertSearchAnalysisInput input, IIFExpertSearchAnalysisOutput analysisResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearchSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearchSerializers.java
-new file mode 100644
-index 0000000..c9580d0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FExpertSearchSerializers.java
-@@ -0,0 +1,127 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FExpertSearch;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FExpertSearchProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFExpertSearch" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FExpertSearchSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFExpertSearch.IIFExpertSearchAnalysisInput} algorithm.
-+ */
-+public static class IFExpertSearchAnalysisInputSerializer extends Serializer<FExpertSearch.IFExpertSearchAnalysisInput> implements ISerializer<IFExpertSearch.IIFExpertSearchAnalysisInput> {
-+
-+    @Override
-+    public void serializeTo(IFExpertSearch.IIFExpertSearchAnalysisInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFExpertSearch.IIFExpertSearchAnalysisInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFExpertSearch.IIFExpertSearchAnalysisInput deserializeFrom(InputStream in) throws IOException {
-+        FExpertSearch.IFExpertSearchAnalysisInput result = new FExpertSearch.IFExpertSearchAnalysisInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFExpertSearch.IIFExpertSearchAnalysisInput deserializeFrom(IDataInput in) throws IOException {
-+            FExpertSearch.IFExpertSearchAnalysisInput result = new FExpertSearch.IFExpertSearchAnalysisInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FExpertSearch.IFExpertSearchAnalysisInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FExpertSearch.IFExpertSearchAnalysisInput read(Kryo kryo, Input input, Class<FExpertSearch.IFExpertSearchAnalysisInput> type) {
-+        FExpertSearch.IFExpertSearchAnalysisInput result = new FExpertSearch.IFExpertSearchAnalysisInput();
-+        result.setStatus(kryo.readObject(input, twitter4j.Status.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFExpertSearch.IIFExpertSearchAnalysisOutput} algorithm.
-+ */
-+public static class IFExpertSearchAnalysisOutputSerializer extends Serializer<FExpertSearch.IFExpertSearchAnalysisOutput> implements ISerializer<IFExpertSearch.IIFExpertSearchAnalysisOutput> {
-+
-+    @Override
-+    public void serializeTo(IFExpertSearch.IIFExpertSearchAnalysisOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEXPERTLIST", eu.qualimaster.families.datatypes.expertsearch.IFExpert.class).serializeTo(object.getExperts(), out);
-+        SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFExpertSearch.IIFExpertSearchAnalysisOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEXPERTLIST", eu.qualimaster.families.datatypes.expertsearch.IFExpert.class).serializeTo(object.getExperts(), out);
-+            SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getSymbols(), out);
-+        }
-+
-+    @Override
-+    public IFExpertSearch.IIFExpertSearchAnalysisOutput deserializeFrom(InputStream in) throws IOException {
-+        FExpertSearch.IFExpertSearchAnalysisOutput result = new FExpertSearch.IFExpertSearchAnalysisOutput();
-+        result.setExperts(SerializerRegistry.getListSerializerSafe("IFEXPERTLIST", eu.qualimaster.families.datatypes.expertsearch.IFExpert.class).deserializeFrom(in));
-+        result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
-+        result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        result.setSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFExpertSearch.IIFExpertSearchAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
-+            FExpertSearch.IFExpertSearchAnalysisOutput result = new FExpertSearch.IFExpertSearchAnalysisOutput();
-+            result.setExperts(SerializerRegistry.getListSerializerSafe("IFEXPERTLIST", eu.qualimaster.families.datatypes.expertsearch.IFExpert.class).deserializeFrom(in));
-+            result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
-+            result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            result.setSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FExpertSearch.IFExpertSearchAnalysisOutput object) {
-+        kryo.writeObject(output, object.getExperts());
-+        kryo.writeObject(output, object.getTimeInterval());
-+        kryo.writeObject(output, object.getKeywords());
-+        kryo.writeObject(output, object.getSymbols());
-+    }
-+
-+    @Override
-+    public FExpertSearch.IFExpertSearchAnalysisOutput read(Kryo kryo, Input input, Class<FExpertSearch.IFExpertSearchAnalysisOutput> type) {
-+        FExpertSearch.IFExpertSearchAnalysisOutput result = new FExpertSearch.IFExpertSearchAnalysisOutput();
-+        result.setExperts(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setTimeInterval(kryo.readObject(input, eu.qualimaster.families.datatypes.common.IFTimeInterval.class));
-+        result.setKeywords(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtraction.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtraction.java
-new file mode 100644
-index 0000000..940dfc1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtraction.java
-@@ -0,0 +1,121 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFFinancialNetworkExtraction" (GEN).
-+ */
-+public class FFinancialNetworkExtraction implements IFFinancialNetworkExtraction {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFFinancialNetworkExtractionAnalysisInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFFinancialNetworkExtractionAnalysisInput implements IIFFinancialNetworkExtractionAnalysisInput {
-+
-+        private twitter4j.Status status;
-+
-+        @Override
-+        public twitter4j.Status getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(twitter4j.Status status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFFinancialNetworkExtractionAnalysisInput", FFinancialNetworkExtractionSerializers.IFFinancialNetworkExtractionAnalysisInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFFinancialNetworkExtractionAnalysisOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFFinancialNetworkExtractionAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFFinancialNetworkExtractionAnalysisOutput> implements IIFFinancialNetworkExtractionAnalysisOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFFinancialNetworkExtractionAnalysisOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFFinancialNetworkExtractionAnalysisOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFFinancialNetworkExtractionAnalysisOutput createItem() {
-+            return new IFFinancialNetworkExtractionAnalysisOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> edges;
-+        private eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> getEdges(){
-+            return edges;
-+        }
-+
-+        @Override
-+        public void setEdges(java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> edges){
-+            this.edges = edges;
-+        }
-+        @Override
-+        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval(){
-+            return timeInterval;
-+        }
-+
-+        @Override
-+        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval){
-+            this.timeInterval = timeInterval;
-+        }
-+        static {
-+            SerializerRegistry.register("IFFinancialNetworkExtractionAnalysisOutput", FFinancialNetworkExtractionSerializers.IFFinancialNetworkExtractionAnalysisOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFFinancialNetworkExtractionAnalysisInput input, IIFFinancialNetworkExtractionAnalysisOutput analysisResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtractionSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtractionSerializers.java
-new file mode 100644
-index 0000000..a27e396
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FFinancialNetworkExtractionSerializers.java
-@@ -0,0 +1,115 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FFinancialNetworkExtraction;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FFinancialNetworkExtractionProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFFinancialNetworkExtraction" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FFinancialNetworkExtractionSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput} algorithm.
-+ */
-+public static class IFFinancialNetworkExtractionAnalysisInputSerializer extends Serializer<FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput> implements ISerializer<IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput> {
-+
-+    @Override
-+    public void serializeTo(IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput deserializeFrom(InputStream in) throws IOException {
-+        FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisInput deserializeFrom(IDataInput in) throws IOException {
-+            FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput read(Kryo kryo, Input input, Class<FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput> type) {
-+        FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput();
-+        result.setStatus(kryo.readObject(input, twitter4j.Status.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput} algorithm.
-+ */
-+public static class IFFinancialNetworkExtractionAnalysisOutputSerializer extends Serializer<FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput> implements ISerializer<IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput> {
-+
-+    @Override
-+    public void serializeTo(IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEDGETYPE", eu.qualimaster.families.datatypes.financialnetwork.IFEdge.class).serializeTo(object.getEdges(), out);
-+        SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEDGETYPE", eu.qualimaster.families.datatypes.financialnetwork.IFEdge.class).serializeTo(object.getEdges(), out);
-+            SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
-+        }
-+
-+    @Override
-+    public IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput deserializeFrom(InputStream in) throws IOException {
-+        FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput();
-+        result.setEdges(SerializerRegistry.getListSerializerSafe("IFEDGETYPE", eu.qualimaster.families.datatypes.financialnetwork.IFEdge.class).deserializeFrom(in));
-+        result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFFinancialNetworkExtraction.IIFFinancialNetworkExtractionAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
-+            FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput();
-+            result.setEdges(SerializerRegistry.getListSerializerSafe("IFEDGETYPE", eu.qualimaster.families.datatypes.financialnetwork.IFEdge.class).deserializeFrom(in));
-+            result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput object) {
-+        kryo.writeObject(output, object.getEdges());
-+        kryo.writeObject(output, object.getTimeInterval());
-+    }
-+
-+    @Override
-+    public FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput read(Kryo kryo, Input input, Class<FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput> type) {
-+        FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput result = new FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput();
-+        result.setEdges(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setTimeInterval(kryo.readObject(input, eu.qualimaster.families.datatypes.common.IFTimeInterval.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshida.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshida.java
-new file mode 100644
-index 0000000..505d9b9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshida.java
-@@ -0,0 +1,192 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFHayashiYoshida" (GEN).
-+ */
-+public class FHayashiYoshida implements IFHayashiYoshida {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFHayashiYoshidaSymbolsStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFHayashiYoshidaSymbolsStreamInput implements IIFHayashiYoshidaSymbolsStreamInput {
-+
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+
-+        @Override
-+        public String getSymbolId(){
-+            return symbolId;
-+        }
-+
-+        @Override
-+        public void setSymbolId(String symbolId){
-+            this.symbolId = symbolId;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        static {
-+            SerializerRegistry.register("IFHayashiYoshidaSymbolsStreamInput", FHayashiYoshidaSerializers.IFHayashiYoshidaSymbolsStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFHayashiYoshidaConfigurationStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFHayashiYoshidaConfigurationStreamInput implements IIFHayashiYoshidaConfigurationStreamInput {
-+
-+        private String pairKey;
-+        private String pairValue;
-+
-+        @Override
-+        public String getPairKey(){
-+            return pairKey;
-+        }
-+
-+        @Override
-+        public void setPairKey(String pairKey){
-+            this.pairKey = pairKey;
-+        }
-+        @Override
-+        public String getPairValue(){
-+            return pairValue;
-+        }
-+
-+        @Override
-+        public void setPairValue(String pairValue){
-+            this.pairValue = pairValue;
-+        }
-+        static {
-+            SerializerRegistry.register("IFHayashiYoshidaConfigurationStreamInput", FHayashiYoshidaSerializers.IFHayashiYoshidaConfigurationStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFHayashiYoshidaResetWindowStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFHayashiYoshidaResetWindowStreamInput implements IIFHayashiYoshidaResetWindowStreamInput {
-+
-+        private long windowStart;
-+
-+        @Override
-+        public long getWindowStart(){
-+            return windowStart;
-+        }
-+
-+        @Override
-+        public void setWindowStart(long windowStart){
-+            this.windowStart = windowStart;
-+        }
-+        static {
-+            SerializerRegistry.register("IFHayashiYoshidaResetWindowStreamInput", FHayashiYoshidaSerializers.IFHayashiYoshidaResetWindowStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFHayashiYoshidaPairwiseFinancialOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFHayashiYoshidaPairwiseFinancialOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFHayashiYoshidaPairwiseFinancialOutput> implements IIFHayashiYoshidaPairwiseFinancialOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFHayashiYoshidaPairwiseFinancialOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFHayashiYoshidaPairwiseFinancialOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFHayashiYoshidaPairwiseFinancialOutput createItem() {
-+            return new IFHayashiYoshidaPairwiseFinancialOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String pairwiseCorrelationFinancial;
-+
-+        @Override
-+        public String getPairwiseCorrelationFinancial(){
-+            return pairwiseCorrelationFinancial;
-+        }
-+
-+        @Override
-+        public void setPairwiseCorrelationFinancial(String pairwiseCorrelationFinancial){
-+            this.pairwiseCorrelationFinancial = pairwiseCorrelationFinancial;
-+        }
-+        static {
-+            SerializerRegistry.register("IFHayashiYoshidaPairwiseFinancialOutput", FHayashiYoshidaSerializers.IFHayashiYoshidaPairwiseFinancialOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFHayashiYoshidaSymbolsStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFHayashiYoshidaConfigurationStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFHayashiYoshidaResetWindowStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshidaSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshidaSerializers.java
-new file mode 100644
-index 0000000..d3f19b2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FHayashiYoshidaSerializers.java
-@@ -0,0 +1,227 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FHayashiYoshida;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FHayashiYoshidaProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFHayashiYoshida" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FHayashiYoshidaSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput} algorithm.
-+ */
-+public static class IFHayashiYoshidaSymbolsStreamInputSerializer extends Serializer<FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput> implements ISerializer<IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput object, OutputStream out) throws IOException {
-+        SIFHayashiYoshidaSymbolsStreamInput tmp = SIFHayashiYoshidaSymbolsStreamInput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+        }
-+
-+    @Override
-+    public IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput result = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
-+        SIFHayashiYoshidaSymbolsStreamInput tmp = SIFHayashiYoshidaSymbolsStreamInput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFHayashiYoshida.IIFHayashiYoshidaSymbolsStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput result = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+    }
-+
-+    @Override
-+    public FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput read(Kryo kryo, Input input, Class<FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput> type) {
-+        FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput result = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput} algorithm.
-+ */
-+public static class IFHayashiYoshidaConfigurationStreamInputSerializer extends Serializer<FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput> implements ISerializer<IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput object, OutputStream out) throws IOException {
-+        SIFHayashiYoshidaConfigurationStreamInput tmp = SIFHayashiYoshidaConfigurationStreamInput.newBuilder()
-+            .setPairKey(object.getPairKey())
-+            .setPairValue(object.getPairValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getPairKey());
-+            out.writeString(object.getPairValue());
-+        }
-+
-+    @Override
-+    public IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput result = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
-+        SIFHayashiYoshidaConfigurationStreamInput tmp = SIFHayashiYoshidaConfigurationStreamInput.parseDelimitedFrom(in);
-+        result.setPairKey(tmp.getPairKey());
-+        result.setPairValue(tmp.getPairValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFHayashiYoshida.IIFHayashiYoshidaConfigurationStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput result = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
-+            result.setPairKey(in.nextString());
-+            result.setPairValue(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput object) {
-+        output.writeString(object.getPairKey());
-+        output.writeString(object.getPairValue());
-+    }
-+
-+    @Override
-+    public FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput read(Kryo kryo, Input input, Class<FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput> type) {
-+        FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput result = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
-+        result.setPairKey(input.readString());
-+        result.setPairValue(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput} algorithm.
-+ */
-+public static class IFHayashiYoshidaResetWindowStreamInputSerializer extends Serializer<FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput> implements ISerializer<IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput object, OutputStream out) throws IOException {
-+        SIFHayashiYoshidaResetWindowStreamInput tmp = SIFHayashiYoshidaResetWindowStreamInput.newBuilder()
-+            .setWindowStart(object.getWindowStart())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getWindowStart());
-+        }
-+
-+    @Override
-+    public IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput result = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
-+        SIFHayashiYoshidaResetWindowStreamInput tmp = SIFHayashiYoshidaResetWindowStreamInput.parseDelimitedFrom(in);
-+        result.setWindowStart(tmp.getWindowStart());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFHayashiYoshida.IIFHayashiYoshidaResetWindowStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput result = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
-+            result.setWindowStart(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput object) {
-+        output.writeLong(object.getWindowStart());
-+    }
-+
-+    @Override
-+    public FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput read(Kryo kryo, Input input, Class<FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput> type) {
-+        FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput result = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
-+        result.setWindowStart(input.readLong());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput} algorithm.
-+ */
-+public static class IFHayashiYoshidaPairwiseFinancialOutputSerializer extends Serializer<FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput> implements ISerializer<IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput> {
-+
-+    @Override
-+    public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput object, OutputStream out) throws IOException {
-+        SIFHayashiYoshidaPairwiseFinancialOutput tmp = SIFHayashiYoshidaPairwiseFinancialOutput.newBuilder()
-+            .setPairwiseCorrelationFinancial(object.getPairwiseCorrelationFinancial())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getPairwiseCorrelationFinancial());
-+        }
-+
-+    @Override
-+    public IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput deserializeFrom(InputStream in) throws IOException {
-+        FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput result = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
-+        SIFHayashiYoshidaPairwiseFinancialOutput tmp = SIFHayashiYoshidaPairwiseFinancialOutput.parseDelimitedFrom(in);
-+        result.setPairwiseCorrelationFinancial(tmp.getPairwiseCorrelationFinancial());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFHayashiYoshida.IIFHayashiYoshidaPairwiseFinancialOutput deserializeFrom(IDataInput in) throws IOException {
-+            FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput result = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
-+            result.setPairwiseCorrelationFinancial(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput object) {
-+        output.writeString(object.getPairwiseCorrelationFinancial());
-+    }
-+
-+    @Override
-+    public FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput read(Kryo kryo, Input input, Class<FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput> type) {
-+        FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput result = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
-+        result.setPairwiseCorrelationFinancial(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzer.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzer.java
-new file mode 100644
-index 0000000..ca18fe7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzer.java
-@@ -0,0 +1,139 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFKeywordAnalyzer" (GEN).
-+ */
-+public class FKeywordAnalyzer implements IFKeywordAnalyzer {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFKeywordAnalyzerTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFKeywordAnalyzerTwitterStreamInput implements IIFKeywordAnalyzerTwitterStreamInput {
-+
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFKeywordAnalyzerTwitterStreamInput", FKeywordAnalyzerSerializers.IFKeywordAnalyzerTwitterStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFKeywordAnalyzerTwitterStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFKeywordAnalyzerTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFKeywordAnalyzerTwitterStreamOutput> implements IIFKeywordAnalyzerTwitterStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFKeywordAnalyzerTwitterStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFKeywordAnalyzerTwitterStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFKeywordAnalyzerTwitterStreamOutput createItem() {
-+            return new IFKeywordAnalyzerTwitterStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFKeywordAnalyzerTwitterStreamOutput", FKeywordAnalyzerSerializers.IFKeywordAnalyzerTwitterStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFKeywordAnalyzerTwitterStreamInput input, IIFKeywordAnalyzerTwitterStreamOutput twitterStreamResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "threshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterThreshold(double value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "decay".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDecay(double value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzerSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzerSerializers.java
-new file mode 100644
-index 0000000..72ef755
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FKeywordAnalyzerSerializers.java
-@@ -0,0 +1,121 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FKeywordAnalyzer;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FKeywordAnalyzerProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFKeywordAnalyzer" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FKeywordAnalyzerSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput} algorithm.
-+ */
-+public static class IFKeywordAnalyzerTwitterStreamInputSerializer extends Serializer<FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput> implements ISerializer<IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput();
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput();
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getEvents());
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput read(Kryo kryo, Input input, Class<FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput> type) {
-+        FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput();
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput} algorithm.
-+ */
-+public static class IFKeywordAnalyzerTwitterStreamOutputSerializer extends Serializer<FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput> implements ISerializer<IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFKeywordAnalyzer.IIFKeywordAnalyzerTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput object) {
-+        kryo.writeObject(output, object.getEvents());
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput read(Kryo kryo, Input input, Class<FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput> type) {
-+        FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput result = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapper.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapper.java
-new file mode 100644
-index 0000000..b096f60
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapper.java
-@@ -0,0 +1,309 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFMapper" (GEN).
-+ */
-+public class FMapper implements IFMapper {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFMapperPreprocessedStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFMapperPreprocessedStreamInput implements IIFMapperPreprocessedStreamInput {
-+
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+        private int volume;
-+
-+        @Override
-+        public String getSymbolId(){
-+            return symbolId;
-+        }
-+
-+        @Override
-+        public void setSymbolId(String symbolId){
-+            this.symbolId = symbolId;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        @Override
-+        public int getVolume(){
-+            return volume;
-+        }
-+
-+        @Override
-+        public void setVolume(int volume){
-+            this.volume = volume;
-+        }
-+        static {
-+            SerializerRegistry.register("IFMapperPreprocessedStreamInput", FMapperSerializers.IFMapperPreprocessedStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFMapperSymbolListInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFMapperSymbolListInput implements IIFMapperSymbolListInput {
-+
-+        private java.util.List<String> allSymbols;
-+
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("IFMapperSymbolListInput", FMapperSerializers.IFMapperSymbolListInputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFMapperSymbolsStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFMapperSymbolsStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFMapperSymbolsStreamOutput> implements IIFMapperSymbolsStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFMapperSymbolsStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFMapperSymbolsStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFMapperSymbolsStreamOutput createItem() {
-+            return new IFMapperSymbolsStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+
-+        @Override
-+        public String getSymbolId(){
-+            return symbolId;
-+        }
-+
-+        @Override
-+        public void setSymbolId(String symbolId){
-+            this.symbolId = symbolId;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        static {
-+            SerializerRegistry.register("IFMapperSymbolsStreamOutput", FMapperSerializers.IFMapperSymbolsStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFMapperConfigurationStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFMapperConfigurationStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFMapperConfigurationStreamOutput> implements IIFMapperConfigurationStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFMapperConfigurationStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFMapperConfigurationStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFMapperConfigurationStreamOutput createItem() {
-+            return new IFMapperConfigurationStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String pairKey;
-+        private String pairValue;
-+
-+        @Override
-+        public String getPairKey(){
-+            return pairKey;
-+        }
-+
-+        @Override
-+        public void setPairKey(String pairKey){
-+            this.pairKey = pairKey;
-+        }
-+        @Override
-+        public String getPairValue(){
-+            return pairValue;
-+        }
-+
-+        @Override
-+        public void setPairValue(String pairValue){
-+            this.pairValue = pairValue;
-+        }
-+        static {
-+            SerializerRegistry.register("IFMapperConfigurationStreamOutput", FMapperSerializers.IFMapperConfigurationStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFMapperResetWindowStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFMapperResetWindowStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFMapperResetWindowStreamOutput> implements IIFMapperResetWindowStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFMapperResetWindowStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFMapperResetWindowStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFMapperResetWindowStreamOutput createItem() {
-+            return new IFMapperResetWindowStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private long windowStart;
-+
-+        @Override
-+        public long getWindowStart(){
-+            return windowStart;
-+        }
-+
-+        @Override
-+        public void setWindowStart(long windowStart){
-+            this.windowStart = windowStart;
-+        }
-+        static {
-+            SerializerRegistry.register("IFMapperResetWindowStreamOutput", FMapperSerializers.IFMapperResetWindowStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFMapperPreprocessedStreamInput input, IIFMapperSymbolsStreamOutput symbolsStreamResult, IIFMapperConfigurationStreamOutput configurationStreamResult, IIFMapperResetWindowStreamOutput resetWindowStreamResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFMapperSymbolListInput input, IIFMapperSymbolsStreamOutput symbolsStreamResult, IIFMapperConfigurationStreamOutput configurationStreamResult, IIFMapperResetWindowStreamOutput resetWindowStreamResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapperSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapperSerializers.java
-new file mode 100644
-index 0000000..8ad8754
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMapperSerializers.java
-@@ -0,0 +1,287 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FMapper;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FMapperProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFMapper" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FMapperSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFMapper.IIFMapperPreprocessedStreamInput} algorithm.
-+ */
-+public static class IFMapperPreprocessedStreamInputSerializer extends Serializer<FMapper.IFMapperPreprocessedStreamInput> implements ISerializer<IFMapper.IIFMapperPreprocessedStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFMapper.IIFMapperPreprocessedStreamInput object, OutputStream out) throws IOException {
-+        SIFMapperPreprocessedStreamInput tmp = SIFMapperPreprocessedStreamInput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .setVolume(object.getVolume())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFMapper.IIFMapperPreprocessedStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+            out.writeInt(object.getVolume());
-+        }
-+
-+    @Override
-+    public IFMapper.IIFMapperPreprocessedStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FMapper.IFMapperPreprocessedStreamInput result = new FMapper.IFMapperPreprocessedStreamInput();
-+        SIFMapperPreprocessedStreamInput tmp = SIFMapperPreprocessedStreamInput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        result.setVolume(tmp.getVolume());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFMapper.IIFMapperPreprocessedStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FMapper.IFMapperPreprocessedStreamInput result = new FMapper.IFMapperPreprocessedStreamInput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            result.setVolume(in.nextInt());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FMapper.IFMapperPreprocessedStreamInput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+        output.writeInt(object.getVolume());
-+    }
-+
-+    @Override
-+    public FMapper.IFMapperPreprocessedStreamInput read(Kryo kryo, Input input, Class<FMapper.IFMapperPreprocessedStreamInput> type) {
-+        FMapper.IFMapperPreprocessedStreamInput result = new FMapper.IFMapperPreprocessedStreamInput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        result.setVolume(input.readInt());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFMapper.IIFMapperSymbolListInput} algorithm.
-+ */
-+public static class IFMapperSymbolListInputSerializer extends Serializer<FMapper.IFMapperSymbolListInput> implements ISerializer<IFMapper.IIFMapperSymbolListInput> {
-+
-+    @Override
-+    public void serializeTo(IFMapper.IIFMapperSymbolListInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFMapper.IIFMapperSymbolListInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public IFMapper.IIFMapperSymbolListInput deserializeFrom(InputStream in) throws IOException {
-+        FMapper.IFMapperSymbolListInput result = new FMapper.IFMapperSymbolListInput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFMapper.IIFMapperSymbolListInput deserializeFrom(IDataInput in) throws IOException {
-+            FMapper.IFMapperSymbolListInput result = new FMapper.IFMapperSymbolListInput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FMapper.IFMapperSymbolListInput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public FMapper.IFMapperSymbolListInput read(Kryo kryo, Input input, Class<FMapper.IFMapperSymbolListInput> type) {
-+        FMapper.IFMapperSymbolListInput result = new FMapper.IFMapperSymbolListInput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFMapper.IIFMapperSymbolsStreamOutput} algorithm.
-+ */
-+public static class IFMapperSymbolsStreamOutputSerializer extends Serializer<FMapper.IFMapperSymbolsStreamOutput> implements ISerializer<IFMapper.IIFMapperSymbolsStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFMapper.IIFMapperSymbolsStreamOutput object, OutputStream out) throws IOException {
-+        SIFMapperSymbolsStreamOutput tmp = SIFMapperSymbolsStreamOutput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFMapper.IIFMapperSymbolsStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+        }
-+
-+    @Override
-+    public IFMapper.IIFMapperSymbolsStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FMapper.IFMapperSymbolsStreamOutput result = new FMapper.IFMapperSymbolsStreamOutput();
-+        SIFMapperSymbolsStreamOutput tmp = SIFMapperSymbolsStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFMapper.IIFMapperSymbolsStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FMapper.IFMapperSymbolsStreamOutput result = new FMapper.IFMapperSymbolsStreamOutput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FMapper.IFMapperSymbolsStreamOutput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+    }
-+
-+    @Override
-+    public FMapper.IFMapperSymbolsStreamOutput read(Kryo kryo, Input input, Class<FMapper.IFMapperSymbolsStreamOutput> type) {
-+        FMapper.IFMapperSymbolsStreamOutput result = new FMapper.IFMapperSymbolsStreamOutput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFMapper.IIFMapperConfigurationStreamOutput} algorithm.
-+ */
-+public static class IFMapperConfigurationStreamOutputSerializer extends Serializer<FMapper.IFMapperConfigurationStreamOutput> implements ISerializer<IFMapper.IIFMapperConfigurationStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFMapper.IIFMapperConfigurationStreamOutput object, OutputStream out) throws IOException {
-+        SIFMapperConfigurationStreamOutput tmp = SIFMapperConfigurationStreamOutput.newBuilder()
-+            .setPairKey(object.getPairKey())
-+            .setPairValue(object.getPairValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFMapper.IIFMapperConfigurationStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getPairKey());
-+            out.writeString(object.getPairValue());
-+        }
-+
-+    @Override
-+    public IFMapper.IIFMapperConfigurationStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FMapper.IFMapperConfigurationStreamOutput result = new FMapper.IFMapperConfigurationStreamOutput();
-+        SIFMapperConfigurationStreamOutput tmp = SIFMapperConfigurationStreamOutput.parseDelimitedFrom(in);
-+        result.setPairKey(tmp.getPairKey());
-+        result.setPairValue(tmp.getPairValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFMapper.IIFMapperConfigurationStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FMapper.IFMapperConfigurationStreamOutput result = new FMapper.IFMapperConfigurationStreamOutput();
-+            result.setPairKey(in.nextString());
-+            result.setPairValue(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FMapper.IFMapperConfigurationStreamOutput object) {
-+        output.writeString(object.getPairKey());
-+        output.writeString(object.getPairValue());
-+    }
-+
-+    @Override
-+    public FMapper.IFMapperConfigurationStreamOutput read(Kryo kryo, Input input, Class<FMapper.IFMapperConfigurationStreamOutput> type) {
-+        FMapper.IFMapperConfigurationStreamOutput result = new FMapper.IFMapperConfigurationStreamOutput();
-+        result.setPairKey(input.readString());
-+        result.setPairValue(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFMapper.IIFMapperResetWindowStreamOutput} algorithm.
-+ */
-+public static class IFMapperResetWindowStreamOutputSerializer extends Serializer<FMapper.IFMapperResetWindowStreamOutput> implements ISerializer<IFMapper.IIFMapperResetWindowStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFMapper.IIFMapperResetWindowStreamOutput object, OutputStream out) throws IOException {
-+        SIFMapperResetWindowStreamOutput tmp = SIFMapperResetWindowStreamOutput.newBuilder()
-+            .setWindowStart(object.getWindowStart())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFMapper.IIFMapperResetWindowStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getWindowStart());
-+        }
-+
-+    @Override
-+    public IFMapper.IIFMapperResetWindowStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FMapper.IFMapperResetWindowStreamOutput result = new FMapper.IFMapperResetWindowStreamOutput();
-+        SIFMapperResetWindowStreamOutput tmp = SIFMapperResetWindowStreamOutput.parseDelimitedFrom(in);
-+        result.setWindowStart(tmp.getWindowStart());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFMapper.IIFMapperResetWindowStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FMapper.IFMapperResetWindowStreamOutput result = new FMapper.IFMapperResetWindowStreamOutput();
-+            result.setWindowStart(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FMapper.IFMapperResetWindowStreamOutput object) {
-+        output.writeLong(object.getWindowStart());
-+    }
-+
-+    @Override
-+    public FMapper.IFMapperResetWindowStreamOutput read(Kryo kryo, Input input, Class<FMapper.IFMapperResetWindowStreamOutput> type) {
-+        FMapper.IFMapperResetWindowStreamOutput result = new FMapper.IFMapperResetWindowStreamOutput();
-+        result.setWindowStart(input.readLong());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamily.java
-new file mode 100644
-index 0000000..4c50162
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamily.java
-@@ -0,0 +1,132 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFMismatchedFamily" (GEN).
-+ */
-+public class FMismatchedFamily implements IFMismatchedFamily {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFMismatchedFamilyMisStringInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFMismatchedFamilyMisStringInput implements IIFMismatchedFamilyMisStringInput {
-+
-+        private String symbolTuple1;
-+        private int volume;
-+
-+        @Override
-+        public String getSymbolTuple1(){
-+            return symbolTuple1;
-+        }
-+
-+        @Override
-+        public void setSymbolTuple1(String symbolTuple1){
-+            this.symbolTuple1 = symbolTuple1;
-+        }
-+        @Override
-+        public int getVolume(){
-+            return volume;
-+        }
-+
-+        @Override
-+        public void setVolume(int volume){
-+            this.volume = volume;
-+        }
-+        static {
-+            SerializerRegistry.register("IFMismatchedFamilyMisStringInput", FMismatchedFamilySerializers.IFMismatchedFamilyMisStringInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFMismatchedFamilyMisStringOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFMismatchedFamilyMisStringOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFMismatchedFamilyMisStringOutput> implements IIFMismatchedFamilyMisStringOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFMismatchedFamilyMisStringOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFMismatchedFamilyMisStringOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFMismatchedFamilyMisStringOutput createItem() {
-+            return new IFMismatchedFamilyMisStringOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String streamID1;
-+        private int timestamp;
-+        private double quote;
-+
-+        @Override
-+        public String getStreamID1(){
-+            return streamID1;
-+        }
-+
-+        @Override
-+        public void setStreamID1(String streamID1){
-+            this.streamID1 = streamID1;
-+        }
-+        @Override
-+        public int getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(int timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getQuote(){
-+            return quote;
-+        }
-+
-+        @Override
-+        public void setQuote(double quote){
-+            this.quote = quote;
-+        }
-+        static {
-+            SerializerRegistry.register("IFMismatchedFamilyMisStringOutput", FMismatchedFamilySerializers.IFMismatchedFamilyMisStringOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFMismatchedFamilyMisStringInput input, IIFMismatchedFamilyMisStringOutput misStringResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamilySerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamilySerializers.java
-new file mode 100644
-index 0000000..07f9813
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FMismatchedFamilySerializers.java
-@@ -0,0 +1,135 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FMismatchedFamily;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FMismatchedFamilyProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFMismatchedFamily" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FMismatchedFamilySerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFMismatchedFamily.IIFMismatchedFamilyMisStringInput} algorithm.
-+ */
-+public static class IFMismatchedFamilyMisStringInputSerializer extends Serializer<FMismatchedFamily.IFMismatchedFamilyMisStringInput> implements ISerializer<IFMismatchedFamily.IIFMismatchedFamilyMisStringInput> {
-+
-+    @Override
-+    public void serializeTo(IFMismatchedFamily.IIFMismatchedFamilyMisStringInput object, OutputStream out) throws IOException {
-+        SIFMismatchedFamilyMisStringInput tmp = SIFMismatchedFamilyMisStringInput.newBuilder()
-+            .setSymbolTuple1(object.getSymbolTuple1())
-+            .setVolume(object.getVolume())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFMismatchedFamily.IIFMismatchedFamilyMisStringInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolTuple1());
-+            out.writeInt(object.getVolume());
-+        }
-+
-+    @Override
-+    public IFMismatchedFamily.IIFMismatchedFamilyMisStringInput deserializeFrom(InputStream in) throws IOException {
-+        FMismatchedFamily.IFMismatchedFamilyMisStringInput result = new FMismatchedFamily.IFMismatchedFamilyMisStringInput();
-+        SIFMismatchedFamilyMisStringInput tmp = SIFMismatchedFamilyMisStringInput.parseDelimitedFrom(in);
-+        result.setSymbolTuple1(tmp.getSymbolTuple1());
-+        result.setVolume(tmp.getVolume());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFMismatchedFamily.IIFMismatchedFamilyMisStringInput deserializeFrom(IDataInput in) throws IOException {
-+            FMismatchedFamily.IFMismatchedFamilyMisStringInput result = new FMismatchedFamily.IFMismatchedFamilyMisStringInput();
-+            result.setSymbolTuple1(in.nextString());
-+            result.setVolume(in.nextInt());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FMismatchedFamily.IFMismatchedFamilyMisStringInput object) {
-+        output.writeString(object.getSymbolTuple1());
-+        output.writeInt(object.getVolume());
-+    }
-+
-+    @Override
-+    public FMismatchedFamily.IFMismatchedFamilyMisStringInput read(Kryo kryo, Input input, Class<FMismatchedFamily.IFMismatchedFamilyMisStringInput> type) {
-+        FMismatchedFamily.IFMismatchedFamilyMisStringInput result = new FMismatchedFamily.IFMismatchedFamilyMisStringInput();
-+        result.setSymbolTuple1(input.readString());
-+        result.setVolume(input.readInt());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput} algorithm.
-+ */
-+public static class IFMismatchedFamilyMisStringOutputSerializer extends Serializer<FMismatchedFamily.IFMismatchedFamilyMisStringOutput> implements ISerializer<IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput> {
-+
-+    @Override
-+    public void serializeTo(IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput object, OutputStream out) throws IOException {
-+        SIFMismatchedFamilyMisStringOutput tmp = SIFMismatchedFamilyMisStringOutput.newBuilder()
-+            .setStreamID1(object.getStreamID1())
-+            .setTimestamp(object.getTimestamp())
-+            .setQuote(object.getQuote())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getStreamID1());
-+            out.writeInt(object.getTimestamp());
-+            out.writeDouble(object.getQuote());
-+        }
-+
-+    @Override
-+    public IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput deserializeFrom(InputStream in) throws IOException {
-+        FMismatchedFamily.IFMismatchedFamilyMisStringOutput result = new FMismatchedFamily.IFMismatchedFamilyMisStringOutput();
-+        SIFMismatchedFamilyMisStringOutput tmp = SIFMismatchedFamilyMisStringOutput.parseDelimitedFrom(in);
-+        result.setStreamID1(tmp.getStreamID1());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setQuote(tmp.getQuote());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFMismatchedFamily.IIFMismatchedFamilyMisStringOutput deserializeFrom(IDataInput in) throws IOException {
-+            FMismatchedFamily.IFMismatchedFamilyMisStringOutput result = new FMismatchedFamily.IFMismatchedFamilyMisStringOutput();
-+            result.setStreamID1(in.nextString());
-+            result.setTimestamp(in.nextInt());
-+            result.setQuote(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FMismatchedFamily.IFMismatchedFamilyMisStringOutput object) {
-+        output.writeString(object.getStreamID1());
-+        output.writeInt(object.getTimestamp());
-+        output.writeDouble(object.getQuote());
-+    }
-+
-+    @Override
-+    public FMismatchedFamily.IFMismatchedFamilyMisStringOutput read(Kryo kryo, Input input, Class<FMismatchedFamily.IFMismatchedFamilyMisStringOutput> type) {
-+        FMismatchedFamily.IFMismatchedFamilyMisStringOutput result = new FMismatchedFamily.IFMismatchedFamilyMisStringOutput();
-+        result.setStreamID1(input.readString());
-+        result.setTimestamp(input.readInt());
-+        result.setQuote(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessor.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessor.java
-new file mode 100644
-index 0000000..a63baf7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessor.java
-@@ -0,0 +1,132 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFPreprocessor" (GEN).
-+ */
-+public class FPreprocessor implements IFPreprocessor {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFPreprocessorSpringStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFPreprocessorSpringStreamInput implements IIFPreprocessorSpringStreamInput {
-+
-+        private String symbolTuple;
-+
-+        @Override
-+        public String getSymbolTuple(){
-+            return symbolTuple;
-+        }
-+
-+        @Override
-+        public void setSymbolTuple(String symbolTuple){
-+            this.symbolTuple = symbolTuple;
-+        }
-+        static {
-+            SerializerRegistry.register("IFPreprocessorSpringStreamInput", FPreprocessorSerializers.IFPreprocessorSpringStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFPreprocessorPreprocessedStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFPreprocessorPreprocessedStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFPreprocessorPreprocessedStreamOutput> implements IIFPreprocessorPreprocessedStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFPreprocessorPreprocessedStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFPreprocessorPreprocessedStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFPreprocessorPreprocessedStreamOutput createItem() {
-+            return new IFPreprocessorPreprocessedStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+        private int volume;
-+
-+        @Override
-+        public String getSymbolId(){
-+            return symbolId;
-+        }
-+
-+        @Override
-+        public void setSymbolId(String symbolId){
-+            this.symbolId = symbolId;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        @Override
-+        public int getVolume(){
-+            return volume;
-+        }
-+
-+        @Override
-+        public void setVolume(int volume){
-+            this.volume = volume;
-+        }
-+        static {
-+            SerializerRegistry.register("IFPreprocessorPreprocessedStreamOutput", FPreprocessorSerializers.IFPreprocessorPreprocessedStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFPreprocessorSpringStreamInput input, IIFPreprocessorPreprocessedStreamOutput preprocessedStreamResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessorSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessorSerializers.java
-new file mode 100644
-index 0000000..672ab3e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FPreprocessorSerializers.java
-@@ -0,0 +1,135 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FPreprocessor;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FPreprocessorProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFPreprocessor" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FPreprocessorSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFPreprocessor.IIFPreprocessorSpringStreamInput} algorithm.
-+ */
-+public static class IFPreprocessorSpringStreamInputSerializer extends Serializer<FPreprocessor.IFPreprocessorSpringStreamInput> implements ISerializer<IFPreprocessor.IIFPreprocessorSpringStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFPreprocessor.IIFPreprocessorSpringStreamInput object, OutputStream out) throws IOException {
-+        SIFPreprocessorSpringStreamInput tmp = SIFPreprocessorSpringStreamInput.newBuilder()
-+            .setSymbolTuple(object.getSymbolTuple())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFPreprocessor.IIFPreprocessorSpringStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolTuple());
-+        }
-+
-+    @Override
-+    public IFPreprocessor.IIFPreprocessorSpringStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FPreprocessor.IFPreprocessorSpringStreamInput result = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        SIFPreprocessorSpringStreamInput tmp = SIFPreprocessorSpringStreamInput.parseDelimitedFrom(in);
-+        result.setSymbolTuple(tmp.getSymbolTuple());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFPreprocessor.IIFPreprocessorSpringStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FPreprocessor.IFPreprocessorSpringStreamInput result = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+            result.setSymbolTuple(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FPreprocessor.IFPreprocessorSpringStreamInput object) {
-+        output.writeString(object.getSymbolTuple());
-+    }
-+
-+    @Override
-+    public FPreprocessor.IFPreprocessorSpringStreamInput read(Kryo kryo, Input input, Class<FPreprocessor.IFPreprocessorSpringStreamInput> type) {
-+        FPreprocessor.IFPreprocessorSpringStreamInput result = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        result.setSymbolTuple(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput} algorithm.
-+ */
-+public static class IFPreprocessorPreprocessedStreamOutputSerializer extends Serializer<FPreprocessor.IFPreprocessorPreprocessedStreamOutput> implements ISerializer<IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput object, OutputStream out) throws IOException {
-+        SIFPreprocessorPreprocessedStreamOutput tmp = SIFPreprocessorPreprocessedStreamOutput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .setVolume(object.getVolume())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+            out.writeInt(object.getVolume());
-+        }
-+
-+    @Override
-+    public IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FPreprocessor.IFPreprocessorPreprocessedStreamOutput result = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        SIFPreprocessorPreprocessedStreamOutput tmp = SIFPreprocessorPreprocessedStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        result.setVolume(tmp.getVolume());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFPreprocessor.IIFPreprocessorPreprocessedStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FPreprocessor.IFPreprocessorPreprocessedStreamOutput result = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            result.setVolume(in.nextInt());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FPreprocessor.IFPreprocessorPreprocessedStreamOutput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+        output.writeInt(object.getVolume());
-+    }
-+
-+    @Override
-+    public FPreprocessor.IFPreprocessorPreprocessedStreamOutput read(Kryo kryo, Input input, Class<FPreprocessor.IFPreprocessorPreprocessedStreamOutput> type) {
-+        FPreprocessor.IFPreprocessorPreprocessedStreamOutput result = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        result.setVolume(input.readInt());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendations.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendations.java
-new file mode 100644
-index 0000000..cb2db6e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendations.java
-@@ -0,0 +1,129 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFRecommendations" (GEN).
-+ */
-+public class FRecommendations implements IFRecommendations {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFRecommendationsTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFRecommendationsTwitterStreamInput implements IIFRecommendationsTwitterStreamInput {
-+
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFRecommendationsTwitterStreamInput", FRecommendationsSerializers.IFRecommendationsTwitterStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFRecommendationsRecommendationStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFRecommendationsRecommendationStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFRecommendationsRecommendationStreamOutput> implements IIFRecommendationsRecommendationStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFRecommendationsRecommendationStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFRecommendationsRecommendationStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFRecommendationsRecommendationStreamOutput createItem() {
-+            return new IFRecommendationsRecommendationStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String recommendations;
-+
-+        @Override
-+        public String getRecommendations(){
-+            return recommendations;
-+        }
-+
-+        @Override
-+        public void setRecommendations(String recommendations){
-+            this.recommendations = recommendations;
-+        }
-+        static {
-+            SerializerRegistry.register("IFRecommendationsRecommendationStreamOutput", FRecommendationsSerializers.IFRecommendationsRecommendationStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFRecommendationsTwitterStreamInput input, IIFRecommendationsRecommendationStreamOutput recommendationStreamResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "impactThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterImpactThreshold(double value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "stockCooccurrenceThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterStockCooccurrenceThreshold(double value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendationsSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendationsSerializers.java
-new file mode 100644
-index 0000000..ce99097
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FRecommendationsSerializers.java
-@@ -0,0 +1,119 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FRecommendations;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FRecommendationsProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFRecommendations" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FRecommendationsSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFRecommendations.IIFRecommendationsTwitterStreamInput} algorithm.
-+ */
-+public static class IFRecommendationsTwitterStreamInputSerializer extends Serializer<FRecommendations.IFRecommendationsTwitterStreamInput> implements ISerializer<IFRecommendations.IIFRecommendationsTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFRecommendations.IIFRecommendationsTwitterStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFRecommendations.IIFRecommendationsTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFRecommendations.IIFRecommendationsTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FRecommendations.IFRecommendationsTwitterStreamInput result = new FRecommendations.IFRecommendationsTwitterStreamInput();
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFRecommendations.IIFRecommendationsTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FRecommendations.IFRecommendationsTwitterStreamInput result = new FRecommendations.IFRecommendationsTwitterStreamInput();
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FRecommendations.IFRecommendationsTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getEvents());
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FRecommendations.IFRecommendationsTwitterStreamInput read(Kryo kryo, Input input, Class<FRecommendations.IFRecommendationsTwitterStreamInput> type) {
-+        FRecommendations.IFRecommendationsTwitterStreamInput result = new FRecommendations.IFRecommendationsTwitterStreamInput();
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFRecommendations.IIFRecommendationsRecommendationStreamOutput} algorithm.
-+ */
-+public static class IFRecommendationsRecommendationStreamOutputSerializer extends Serializer<FRecommendations.IFRecommendationsRecommendationStreamOutput> implements ISerializer<IFRecommendations.IIFRecommendationsRecommendationStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFRecommendations.IIFRecommendationsRecommendationStreamOutput object, OutputStream out) throws IOException {
-+        SIFRecommendationsRecommendationStreamOutput tmp = SIFRecommendationsRecommendationStreamOutput.newBuilder()
-+            .setRecommendations(object.getRecommendations())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFRecommendations.IIFRecommendationsRecommendationStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getRecommendations());
-+        }
-+
-+    @Override
-+    public IFRecommendations.IIFRecommendationsRecommendationStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FRecommendations.IFRecommendationsRecommendationStreamOutput result = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
-+        SIFRecommendationsRecommendationStreamOutput tmp = SIFRecommendationsRecommendationStreamOutput.parseDelimitedFrom(in);
-+        result.setRecommendations(tmp.getRecommendations());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFRecommendations.IIFRecommendationsRecommendationStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FRecommendations.IFRecommendationsRecommendationStreamOutput result = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
-+            result.setRecommendations(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FRecommendations.IFRecommendationsRecommendationStreamOutput object) {
-+        output.writeString(object.getRecommendations());
-+    }
-+
-+    @Override
-+    public FRecommendations.IFRecommendationsRecommendationStreamOutput read(Kryo kryo, Input input, Class<FRecommendations.IFRecommendationsRecommendationStreamOutput> type) {
-+        FRecommendations.IFRecommendationsRecommendationStreamOutput result = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
-+        result.setRecommendations(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysis.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysis.java
-new file mode 100644
-index 0000000..77a7381
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysis.java
-@@ -0,0 +1,157 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFSentimentAnalysis" (GEN).
-+ */
-+public class FSentimentAnalysis implements IFSentimentAnalysis {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFSentimentAnalysisTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFSentimentAnalysisTwitterStreamInput implements IIFSentimentAnalysisTwitterStreamInput {
-+
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFSentimentAnalysisTwitterStreamInput", FSentimentAnalysisSerializers.IFSentimentAnalysisTwitterStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFSentimentAnalysisAnalyzedStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFSentimentAnalysisAnalyzedStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFSentimentAnalysisAnalyzedStreamOutput> implements IIFSentimentAnalysisAnalyzedStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFSentimentAnalysisAnalyzedStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFSentimentAnalysisAnalyzedStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFSentimentAnalysisAnalyzedStreamOutput createItem() {
-+            return new IFSentimentAnalysisAnalyzedStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+        private int volume;
-+
-+        @Override
-+        public String getSymbolId(){
-+            return symbolId;
-+        }
-+
-+        @Override
-+        public void setSymbolId(String symbolId){
-+            this.symbolId = symbolId;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        @Override
-+        public int getVolume(){
-+            return volume;
-+        }
-+
-+        @Override
-+        public void setVolume(int volume){
-+            this.volume = volume;
-+        }
-+        static {
-+            SerializerRegistry.register("IFSentimentAnalysisAnalyzedStreamOutput", FSentimentAnalysisSerializers.IFSentimentAnalysisAnalyzedStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFSentimentAnalysisTwitterStreamInput input, IIFSentimentAnalysisAnalyzedStreamOutput analyzedStreamResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "sentimentClass".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterSentimentClass(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "classificationThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterClassificationThreshold(double value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysisSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysisSerializers.java
-new file mode 100644
-index 0000000..d9cc40c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSentimentAnalysisSerializers.java
-@@ -0,0 +1,131 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FSentimentAnalysis;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FSentimentAnalysisProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFSentimentAnalysis" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FSentimentAnalysisSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput} algorithm.
-+ */
-+public static class IFSentimentAnalysisTwitterStreamInputSerializer extends Serializer<FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput> implements ISerializer<IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput result = new FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFSentimentAnalysis.IIFSentimentAnalysisTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput result = new FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput read(Kryo kryo, Input input, Class<FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput> type) {
-+        FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput result = new FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput} algorithm.
-+ */
-+public static class IFSentimentAnalysisAnalyzedStreamOutputSerializer extends Serializer<FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput> implements ISerializer<IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput object, OutputStream out) throws IOException {
-+        SIFSentimentAnalysisAnalyzedStreamOutput tmp = SIFSentimentAnalysisAnalyzedStreamOutput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .setVolume(object.getVolume())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+            out.writeInt(object.getVolume());
-+        }
-+
-+    @Override
-+    public IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput result = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
-+        SIFSentimentAnalysisAnalyzedStreamOutput tmp = SIFSentimentAnalysisAnalyzedStreamOutput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        result.setVolume(tmp.getVolume());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFSentimentAnalysis.IIFSentimentAnalysisAnalyzedStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput result = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            result.setVolume(in.nextInt());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+        output.writeInt(object.getVolume());
-+    }
-+
-+    @Override
-+    public FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput read(Kryo kryo, Input input, Class<FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput> type) {
-+        FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput result = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        result.setVolume(input.readInt());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendations.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendations.java
-new file mode 100644
-index 0000000..767c7f1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendations.java
-@@ -0,0 +1,112 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFSimpleRecommendations" (GEN).
-+ */
-+public class FSimpleRecommendations implements IFSimpleRecommendations {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFSimpleRecommendationsTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFSimpleRecommendationsTwitterStreamInput implements IIFSimpleRecommendationsTwitterStreamInput {
-+
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFSimpleRecommendationsTwitterStreamInput", FSimpleRecommendationsSerializers.IFSimpleRecommendationsTwitterStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFSimpleRecommendationsTwitterStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFSimpleRecommendationsTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFSimpleRecommendationsTwitterStreamOutput> implements IIFSimpleRecommendationsTwitterStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFSimpleRecommendationsTwitterStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFSimpleRecommendationsTwitterStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFSimpleRecommendationsTwitterStreamOutput createItem() {
-+            return new IFSimpleRecommendationsTwitterStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String recommendations;
-+
-+        @Override
-+        public String getRecommendations(){
-+            return recommendations;
-+        }
-+
-+        @Override
-+        public void setRecommendations(String recommendations){
-+            this.recommendations = recommendations;
-+        }
-+        static {
-+            SerializerRegistry.register("IFSimpleRecommendationsTwitterStreamOutput", FSimpleRecommendationsSerializers.IFSimpleRecommendationsTwitterStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFSimpleRecommendationsTwitterStreamInput input, IIFSimpleRecommendationsTwitterStreamOutput twitterStreamResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendationsSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendationsSerializers.java
-new file mode 100644
-index 0000000..9e3ffb3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSimpleRecommendationsSerializers.java
-@@ -0,0 +1,119 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FSimpleRecommendations;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FSimpleRecommendationsProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFSimpleRecommendations" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FSimpleRecommendationsSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput} algorithm.
-+ */
-+public static class IFSimpleRecommendationsTwitterStreamInputSerializer extends Serializer<FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput> implements ISerializer<IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput();
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput();
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getEvents());
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput read(Kryo kryo, Input input, Class<FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput> type) {
-+        FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput();
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput} algorithm.
-+ */
-+public static class IFSimpleRecommendationsTwitterStreamOutputSerializer extends Serializer<FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput> implements ISerializer<IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput object, OutputStream out) throws IOException {
-+        SIFSimpleRecommendationsTwitterStreamOutput tmp = SIFSimpleRecommendationsTwitterStreamOutput.newBuilder()
-+            .setRecommendations(object.getRecommendations())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getRecommendations());
-+        }
-+
-+    @Override
-+    public IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput();
-+        SIFSimpleRecommendationsTwitterStreamOutput tmp = SIFSimpleRecommendationsTwitterStreamOutput.parseDelimitedFrom(in);
-+        result.setRecommendations(tmp.getRecommendations());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFSimpleRecommendations.IIFSimpleRecommendationsTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput();
-+            result.setRecommendations(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput object) {
-+        output.writeString(object.getRecommendations());
-+    }
-+
-+    @Override
-+    public FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput read(Kryo kryo, Input input, Class<FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput> type) {
-+        FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput result = new FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput();
-+        result.setRecommendations(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetection.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetection.java
-new file mode 100644
-index 0000000..8a5eba5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetection.java
-@@ -0,0 +1,112 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFSpamDetection" (GEN).
-+ */
-+public class FSpamDetection implements IFSpamDetection {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFSpamDetectionTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFSpamDetectionTwitterStreamInput implements IIFSpamDetectionTwitterStreamInput {
-+
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFSpamDetectionTwitterStreamInput", FSpamDetectionSerializers.IFSpamDetectionTwitterStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFSpamDetectionTwitterStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFSpamDetectionTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFSpamDetectionTwitterStreamOutput> implements IIFSpamDetectionTwitterStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFSpamDetectionTwitterStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFSpamDetectionTwitterStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFSpamDetectionTwitterStreamOutput createItem() {
-+            return new IFSpamDetectionTwitterStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+        private double spamPropability;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        @Override
-+        public double getSpamPropability(){
-+            return spamPropability;
-+        }
-+
-+        @Override
-+        public void setSpamPropability(double spamPropability){
-+            this.spamPropability = spamPropability;
-+        }
-+        static {
-+            SerializerRegistry.register("IFSpamDetectionTwitterStreamOutput", FSpamDetectionSerializers.IFSpamDetectionTwitterStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFSpamDetectionTwitterStreamInput input, IIFSpamDetectionTwitterStreamOutput twitterStreamResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetectionSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetectionSerializers.java
-new file mode 100644
-index 0000000..3df41a2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamDetectionSerializers.java
-@@ -0,0 +1,119 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FSpamDetection;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FSpamDetectionProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFSpamDetection" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FSpamDetectionSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFSpamDetection.IIFSpamDetectionTwitterStreamInput} algorithm.
-+ */
-+public static class IFSpamDetectionTwitterStreamInputSerializer extends Serializer<FSpamDetection.IFSpamDetectionTwitterStreamInput> implements ISerializer<IFSpamDetection.IIFSpamDetectionTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFSpamDetection.IIFSpamDetectionTwitterStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFSpamDetection.IIFSpamDetectionTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFSpamDetection.IIFSpamDetectionTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FSpamDetection.IFSpamDetectionTwitterStreamInput result = new FSpamDetection.IFSpamDetectionTwitterStreamInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFSpamDetection.IIFSpamDetectionTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FSpamDetection.IFSpamDetectionTwitterStreamInput result = new FSpamDetection.IFSpamDetectionTwitterStreamInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FSpamDetection.IFSpamDetectionTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FSpamDetection.IFSpamDetectionTwitterStreamInput read(Kryo kryo, Input input, Class<FSpamDetection.IFSpamDetectionTwitterStreamInput> type) {
-+        FSpamDetection.IFSpamDetectionTwitterStreamInput result = new FSpamDetection.IFSpamDetectionTwitterStreamInput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFSpamDetection.IIFSpamDetectionTwitterStreamOutput} algorithm.
-+ */
-+public static class IFSpamDetectionTwitterStreamOutputSerializer extends Serializer<FSpamDetection.IFSpamDetectionTwitterStreamOutput> implements ISerializer<IFSpamDetection.IIFSpamDetectionTwitterStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFSpamDetection.IIFSpamDetectionTwitterStreamOutput object, OutputStream out) throws IOException {
-+        SIFSpamDetectionTwitterStreamOutput tmp = SIFSpamDetectionTwitterStreamOutput.newBuilder()
-+            .setSpamPropability(object.getSpamPropability())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFSpamDetection.IIFSpamDetectionTwitterStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+            out.writeDouble(object.getSpamPropability());
-+        }
-+
-+    @Override
-+    public IFSpamDetection.IIFSpamDetectionTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FSpamDetection.IFSpamDetectionTwitterStreamOutput result = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        SIFSpamDetectionTwitterStreamOutput tmp = SIFSpamDetectionTwitterStreamOutput.parseDelimitedFrom(in);
-+        result.setSpamPropability(tmp.getSpamPropability());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFSpamDetection.IIFSpamDetectionTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FSpamDetection.IFSpamDetectionTwitterStreamOutput result = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            result.setSpamPropability(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FSpamDetection.IFSpamDetectionTwitterStreamOutput object) {
-+        kryo.writeObject(output, object.getStatus());
-+        output.writeDouble(object.getSpamPropability());
-+    }
-+
-+    @Override
-+    public FSpamDetection.IFSpamDetectionTwitterStreamOutput read(Kryo kryo, Input input, Class<FSpamDetection.IFSpamDetectionTwitterStreamOutput> type) {
-+        FSpamDetection.IFSpamDetectionTwitterStreamOutput result = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        result.setSpamPropability(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemoval.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemoval.java
-new file mode 100644
-index 0000000..db1259b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemoval.java
-@@ -0,0 +1,121 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFSpamRemoval" (GEN).
-+ */
-+public class FSpamRemoval implements IFSpamRemoval {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFSpamRemovalTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFSpamRemovalTwitterStreamInput implements IIFSpamRemovalTwitterStreamInput {
-+
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+        private double spamPropability;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        @Override
-+        public double getSpamPropability(){
-+            return spamPropability;
-+        }
-+
-+        @Override
-+        public void setSpamPropability(double spamPropability){
-+            this.spamPropability = spamPropability;
-+        }
-+        static {
-+            SerializerRegistry.register("IFSpamRemovalTwitterStreamInput", FSpamRemovalSerializers.IFSpamRemovalTwitterStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFSpamRemovalTwitterStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFSpamRemovalTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFSpamRemovalTwitterStreamOutput> implements IIFSpamRemovalTwitterStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFSpamRemovalTwitterStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFSpamRemovalTwitterStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFSpamRemovalTwitterStreamOutput createItem() {
-+            return new IFSpamRemovalTwitterStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFSpamRemovalTwitterStreamOutput", FSpamRemovalSerializers.IFSpamRemovalTwitterStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFSpamRemovalTwitterStreamInput input, IIFSpamRemovalTwitterStreamOutput twitterStreamResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "spamThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterSpamThreshold(double value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemovalSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemovalSerializers.java
-new file mode 100644
-index 0000000..6d6b3a0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FSpamRemovalSerializers.java
-@@ -0,0 +1,119 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FSpamRemoval;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FSpamRemovalProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFSpamRemoval" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FSpamRemovalSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFSpamRemoval.IIFSpamRemovalTwitterStreamInput} algorithm.
-+ */
-+public static class IFSpamRemovalTwitterStreamInputSerializer extends Serializer<FSpamRemoval.IFSpamRemovalTwitterStreamInput> implements ISerializer<IFSpamRemoval.IIFSpamRemovalTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFSpamRemoval.IIFSpamRemovalTwitterStreamInput object, OutputStream out) throws IOException {
-+        SIFSpamRemovalTwitterStreamInput tmp = SIFSpamRemovalTwitterStreamInput.newBuilder()
-+            .setSpamPropability(object.getSpamPropability())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFSpamRemoval.IIFSpamRemovalTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+            out.writeDouble(object.getSpamPropability());
-+        }
-+
-+    @Override
-+    public IFSpamRemoval.IIFSpamRemovalTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FSpamRemoval.IFSpamRemovalTwitterStreamInput result = new FSpamRemoval.IFSpamRemovalTwitterStreamInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        SIFSpamRemovalTwitterStreamInput tmp = SIFSpamRemovalTwitterStreamInput.parseDelimitedFrom(in);
-+        result.setSpamPropability(tmp.getSpamPropability());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFSpamRemoval.IIFSpamRemovalTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FSpamRemoval.IFSpamRemovalTwitterStreamInput result = new FSpamRemoval.IFSpamRemovalTwitterStreamInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            result.setSpamPropability(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FSpamRemoval.IFSpamRemovalTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+        output.writeDouble(object.getSpamPropability());
-+    }
-+
-+    @Override
-+    public FSpamRemoval.IFSpamRemovalTwitterStreamInput read(Kryo kryo, Input input, Class<FSpamRemoval.IFSpamRemovalTwitterStreamInput> type) {
-+        FSpamRemoval.IFSpamRemovalTwitterStreamInput result = new FSpamRemoval.IFSpamRemovalTwitterStreamInput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        result.setSpamPropability(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput} algorithm.
-+ */
-+public static class IFSpamRemovalTwitterStreamOutputSerializer extends Serializer<FSpamRemoval.IFSpamRemovalTwitterStreamOutput> implements ISerializer<IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FSpamRemoval.IFSpamRemovalTwitterStreamOutput result = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFSpamRemoval.IIFSpamRemovalTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FSpamRemoval.IFSpamRemovalTwitterStreamOutput result = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FSpamRemoval.IFSpamRemovalTwitterStreamOutput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FSpamRemoval.IFSpamRemovalTwitterStreamOutput read(Kryo kryo, Input input, Class<FSpamRemoval.IFSpamRemovalTwitterStreamOutput> type) {
-+        FSpamRemoval.IFSpamRemovalTwitterStreamOutput result = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParser.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParser.java
-new file mode 100644
-index 0000000..e67fa45
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParser.java
-@@ -0,0 +1,113 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFStockParser" (GEN).
-+ */
-+public class FStockParser implements IFStockParser {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFStockParserTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFStockParserTwitterStreamInput implements IIFStockParserTwitterStreamInput {
-+
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFStockParserTwitterStreamInput", FStockParserSerializers.IFStockParserTwitterStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFStockParserTwitterStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFStockParserTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFStockParserTwitterStreamOutput> implements IIFStockParserTwitterStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFStockParserTwitterStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFStockParserTwitterStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFStockParserTwitterStreamOutput createItem() {
-+            return new IFStockParserTwitterStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+        private java.util.List<String> stocks;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        @Override
-+        public java.util.List<String> getStocks(){
-+            return stocks;
-+        }
-+
-+        @Override
-+        public void setStocks(java.util.List<String> stocks){
-+            this.stocks = stocks;
-+        }
-+        static {
-+            SerializerRegistry.register("IFStockParserTwitterStreamOutput", FStockParserSerializers.IFStockParserTwitterStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFStockParserTwitterStreamInput input, IIFStockParserTwitterStreamOutput twitterStreamResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParserSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParserSerializers.java
-new file mode 100644
-index 0000000..bff8eaa
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FStockParserSerializers.java
-@@ -0,0 +1,115 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FStockParser;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FStockParserProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFStockParser" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FStockParserSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFStockParser.IIFStockParserTwitterStreamInput} algorithm.
-+ */
-+public static class IFStockParserTwitterStreamInputSerializer extends Serializer<FStockParser.IFStockParserTwitterStreamInput> implements ISerializer<IFStockParser.IIFStockParserTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFStockParser.IIFStockParserTwitterStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFStockParser.IIFStockParserTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFStockParser.IIFStockParserTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FStockParser.IFStockParserTwitterStreamInput result = new FStockParser.IFStockParserTwitterStreamInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFStockParser.IIFStockParserTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FStockParser.IFStockParserTwitterStreamInput result = new FStockParser.IFStockParserTwitterStreamInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FStockParser.IFStockParserTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FStockParser.IFStockParserTwitterStreamInput read(Kryo kryo, Input input, Class<FStockParser.IFStockParserTwitterStreamInput> type) {
-+        FStockParser.IFStockParserTwitterStreamInput result = new FStockParser.IFStockParserTwitterStreamInput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFStockParser.IIFStockParserTwitterStreamOutput} algorithm.
-+ */
-+public static class IFStockParserTwitterStreamOutputSerializer extends Serializer<FStockParser.IFStockParserTwitterStreamOutput> implements ISerializer<IFStockParser.IIFStockParserTwitterStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFStockParser.IIFStockParserTwitterStreamOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFStockParser.IIFStockParserTwitterStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
-+        }
-+
-+    @Override
-+    public IFStockParser.IIFStockParserTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FStockParser.IFStockParserTwitterStreamOutput result = new FStockParser.IFStockParserTwitterStreamOutput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFStockParser.IIFStockParserTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FStockParser.IFStockParserTwitterStreamOutput result = new FStockParser.IFStockParserTwitterStreamOutput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FStockParser.IFStockParserTwitterStreamOutput object) {
-+        kryo.writeObject(output, object.getStatus());
-+        kryo.writeObject(output, object.getStocks());
-+    }
-+
-+    @Override
-+    public FStockParser.IFStockParserTwitterStreamOutput read(Kryo kryo, Input input, Class<FStockParser.IFStockParserTwitterStreamOutput> type) {
-+        FStockParser.IFStockParserTwitterStreamOutput result = new FStockParser.IFStockParserTwitterStreamOutput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        result.setStocks(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraph.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraph.java
-new file mode 100644
-index 0000000..e20120c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraph.java
-@@ -0,0 +1,274 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTimeGraph" (GEN).
-+ */
-+public class FTimeGraph implements IFTimeGraph {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphDataStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphDataStreamInput implements IIFTimeGraphDataStreamInput {
-+
-+        private Object update;
-+        private boolean isAddition;
-+
-+        @Override
-+        public Object getUpdate(){
-+            return update;
-+        }
-+
-+        @Override
-+        public void setUpdate(Object update){
-+            this.update = update;
-+        }
-+        @Override
-+        public boolean getIsAddition(){
-+            return isAddition;
-+        }
-+
-+        @Override
-+        public void setIsAddition(boolean isAddition){
-+            this.isAddition = isAddition;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphDataStreamInput", FTimeGraphSerializers.IFTimeGraphDataStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphSnapshotQueryStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphSnapshotQueryStreamInput implements IIFTimeGraphSnapshotQueryStreamInput {
-+
-+        private long start;
-+        private long end;
-+
-+        @Override
-+        public long getStart(){
-+            return start;
-+        }
-+
-+        @Override
-+        public void setStart(long start){
-+            this.start = start;
-+        }
-+        @Override
-+        public long getEnd(){
-+            return end;
-+        }
-+
-+        @Override
-+        public void setEnd(long end){
-+            this.end = end;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphSnapshotQueryStreamInput", FTimeGraphSerializers.IFTimeGraphSnapshotQueryStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphPathQueryStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphPathQueryStreamInput implements IIFTimeGraphPathQueryStreamInput {
-+
-+        private long start;
-+        private long end;
-+        private String vertexA;
-+        private String vertexB;
-+        private String type;
-+
-+        @Override
-+        public long getStart(){
-+            return start;
-+        }
-+
-+        @Override
-+        public void setStart(long start){
-+            this.start = start;
-+        }
-+        @Override
-+        public long getEnd(){
-+            return end;
-+        }
-+
-+        @Override
-+        public void setEnd(long end){
-+            this.end = end;
-+        }
-+        @Override
-+        public String getVertexA(){
-+            return vertexA;
-+        }
-+
-+        @Override
-+        public void setVertexA(String vertexA){
-+            this.vertexA = vertexA;
-+        }
-+        @Override
-+        public String getVertexB(){
-+            return vertexB;
-+        }
-+
-+        @Override
-+        public void setVertexB(String vertexB){
-+            this.vertexB = vertexB;
-+        }
-+        @Override
-+        public String getType(){
-+            return type;
-+        }
-+
-+        @Override
-+        public void setType(String type){
-+            this.type = type;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphPathQueryStreamInput", FTimeGraphSerializers.IFTimeGraphPathQueryStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphSnapshotStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphSnapshotStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphSnapshotStreamOutput> implements IIFTimeGraphSnapshotStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphSnapshotStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphSnapshotStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphSnapshotStreamOutput createItem() {
-+            return new IFTimeGraphSnapshotStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String snapshot;
-+
-+        @Override
-+        public String getSnapshot(){
-+            return snapshot;
-+        }
-+
-+        @Override
-+        public void setSnapshot(String snapshot){
-+            this.snapshot = snapshot;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphSnapshotStreamOutput", FTimeGraphSerializers.IFTimeGraphSnapshotStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphPathStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphPathStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphPathStreamOutput> implements IIFTimeGraphPathStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphPathStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphPathStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphPathStreamOutput createItem() {
-+            return new IFTimeGraphPathStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String path;
-+
-+        @Override
-+        public String getPath(){
-+            return path;
-+        }
-+
-+        @Override
-+        public void setPath(String path){
-+            this.path = path;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphPathStreamOutput", FTimeGraphSerializers.IFTimeGraphPathStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphDataStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphSnapshotQueryStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphPathQueryStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexer.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexer.java
-new file mode 100644
-index 0000000..1536282
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexer.java
-@@ -0,0 +1,254 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTimeGraphIndexer" (GEN).
-+ */
-+public class FTimeGraphIndexer implements IFTimeGraphIndexer {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphIndexerDataStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphIndexerDataStreamInput implements IIFTimeGraphIndexerDataStreamInput {
-+
-+        private Object update;
-+        private boolean isAddition;
-+
-+        @Override
-+        public Object getUpdate(){
-+            return update;
-+        }
-+
-+        @Override
-+        public void setUpdate(Object update){
-+            this.update = update;
-+        }
-+        @Override
-+        public boolean getIsAddition(){
-+            return isAddition;
-+        }
-+
-+        @Override
-+        public void setIsAddition(boolean isAddition){
-+            this.isAddition = isAddition;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphIndexerDataStreamInput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerDataStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphIndexerInternalRequestsInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphIndexerInternalRequestsInput implements IIFTimeGraphIndexerInternalRequestsInput {
-+
-+        private Object internalRequest;
-+
-+        @Override
-+        public Object getInternalRequest(){
-+            return internalRequest;
-+        }
-+
-+        @Override
-+        public void setInternalRequest(Object internalRequest){
-+            this.internalRequest = internalRequest;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphIndexerInternalRequestsInput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerInternalRequestsInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphIndexerUnicastRequestsInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphIndexerUnicastRequestsInput implements IIFTimeGraphIndexerUnicastRequestsInput {
-+
-+        private Object unicastExternalRequest;
-+
-+        @Override
-+        public Object getUnicastExternalRequest(){
-+            return unicastExternalRequest;
-+        }
-+
-+        @Override
-+        public void setUnicastExternalRequest(Object unicastExternalRequest){
-+            this.unicastExternalRequest = unicastExternalRequest;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphIndexerUnicastRequestsInput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerUnicastRequestsInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphIndexerBroadcastRequestsInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphIndexerBroadcastRequestsInput implements IIFTimeGraphIndexerBroadcastRequestsInput {
-+
-+        private Object broadcastExternalRequest;
-+
-+        @Override
-+        public Object getBroadcastExternalRequest(){
-+            return broadcastExternalRequest;
-+        }
-+
-+        @Override
-+        public void setBroadcastExternalRequest(Object broadcastExternalRequest){
-+            this.broadcastExternalRequest = broadcastExternalRequest;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphIndexerBroadcastRequestsInput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerBroadcastRequestsInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphIndexerExternalResponsesOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphIndexerExternalResponsesOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphIndexerExternalResponsesOutput> implements IIFTimeGraphIndexerExternalResponsesOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphIndexerExternalResponsesOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphIndexerExternalResponsesOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphIndexerExternalResponsesOutput createItem() {
-+            return new IFTimeGraphIndexerExternalResponsesOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private Object externalResponse;
-+
-+        @Override
-+        public Object getExternalResponse(){
-+            return externalResponse;
-+        }
-+
-+        @Override
-+        public void setExternalResponse(Object externalResponse){
-+            this.externalResponse = externalResponse;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphIndexerExternalResponsesOutput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerExternalResponsesOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphIndexerInternalRequestsOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphIndexerInternalRequestsOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphIndexerInternalRequestsOutput> implements IIFTimeGraphIndexerInternalRequestsOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphIndexerInternalRequestsOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphIndexerInternalRequestsOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphIndexerInternalRequestsOutput createItem() {
-+            return new IFTimeGraphIndexerInternalRequestsOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private Object internalRequest;
-+
-+        @Override
-+        public Object getInternalRequest(){
-+            return internalRequest;
-+        }
-+
-+        @Override
-+        public void setInternalRequest(Object internalRequest){
-+            this.internalRequest = internalRequest;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphIndexerInternalRequestsOutput", FTimeGraphIndexerSerializers.IFTimeGraphIndexerInternalRequestsOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphIndexerDataStreamInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphIndexerInternalRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphIndexerUnicastRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphIndexerBroadcastRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexerSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexerSerializers.java
-new file mode 100644
-index 0000000..7c24641
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphIndexerSerializers.java
-@@ -0,0 +1,287 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTimeGraphIndexer;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTimeGraphIndexerProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTimeGraphIndexer" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTimeGraphIndexerSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput} algorithm.
-+ */
-+public static class IFTimeGraphIndexerDataStreamInputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput object, OutputStream out) throws IOException {
-+        SIFTimeGraphIndexerDataStreamInput tmp = SIFTimeGraphIndexerDataStreamInput.newBuilder()
-+            .setIsAddition(object.getIsAddition())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
-+            out.writeBoolean(object.getIsAddition());
-+        }
-+
-+    @Override
-+    public IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput result = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
-+        result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        SIFTimeGraphIndexerDataStreamInput tmp = SIFTimeGraphIndexerDataStreamInput.parseDelimitedFrom(in);
-+        result.setIsAddition(tmp.getIsAddition());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphIndexer.IIFTimeGraphIndexerDataStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput result = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
-+            result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            result.setIsAddition(in.nextBoolean());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput object) {
-+        kryo.writeObject(output, object.getUpdate());
-+        output.writeBoolean(object.getIsAddition());
-+    }
-+
-+    @Override
-+    public FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput> type) {
-+        FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput result = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
-+        result.setUpdate(kryo.readObject(input, Object.class));
-+        result.setIsAddition(input.readBoolean());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput} algorithm.
-+ */
-+public static class IFTimeGraphIndexerInternalRequestsInputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getInternalRequest(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getInternalRequest(), out);
-+        }
-+
-+    @Override
-+    public IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
-+        result.setInternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
-+            result.setInternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput object) {
-+        kryo.writeObject(output, object.getInternalRequest());
-+    }
-+
-+    @Override
-+    public FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput> type) {
-+        FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
-+        result.setInternalRequest(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput} algorithm.
-+ */
-+public static class IFTimeGraphIndexerUnicastRequestsInputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUnicastExternalRequest(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUnicastExternalRequest(), out);
-+        }
-+
-+    @Override
-+    public IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
-+        result.setUnicastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphIndexer.IIFTimeGraphIndexerUnicastRequestsInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
-+            result.setUnicastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput object) {
-+        kryo.writeObject(output, object.getUnicastExternalRequest());
-+    }
-+
-+    @Override
-+    public FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput> type) {
-+        FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
-+        result.setUnicastExternalRequest(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput} algorithm.
-+ */
-+public static class IFTimeGraphIndexerBroadcastRequestsInputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getBroadcastExternalRequest(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getBroadcastExternalRequest(), out);
-+        }
-+
-+    @Override
-+    public IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
-+        result.setBroadcastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphIndexer.IIFTimeGraphIndexerBroadcastRequestsInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
-+            result.setBroadcastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput object) {
-+        kryo.writeObject(output, object.getBroadcastExternalRequest());
-+    }
-+
-+    @Override
-+    public FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput> type) {
-+        FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput result = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
-+        result.setBroadcastExternalRequest(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput} algorithm.
-+ */
-+public static class IFTimeGraphIndexerExternalResponsesOutputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getExternalResponse(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getExternalResponse(), out);
-+        }
-+
-+    @Override
-+    public IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
-+        result.setExternalResponse(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphIndexer.IIFTimeGraphIndexerExternalResponsesOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
-+            result.setExternalResponse(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput object) {
-+        kryo.writeObject(output, object.getExternalResponse());
-+    }
-+
-+    @Override
-+    public FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput> type) {
-+        FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
-+        result.setExternalResponse(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput} algorithm.
-+ */
-+public static class IFTimeGraphIndexerInternalRequestsOutputSerializer extends Serializer<FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput> implements ISerializer<IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getInternalRequest(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getInternalRequest(), out);
-+        }
-+
-+    @Override
-+    public IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
-+        result.setInternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphIndexer.IIFTimeGraphIndexerInternalRequestsOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
-+            result.setInternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput object) {
-+        kryo.writeObject(output, object.getInternalRequest());
-+    }
-+
-+    @Override
-+    public FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput read(Kryo kryo, Input input, Class<FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput> type) {
-+        FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput result = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
-+        result.setInternalRequest(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapper.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapper.java
-new file mode 100644
-index 0000000..29ff61b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapper.java
-@@ -0,0 +1,112 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTimeGraphMapper" (GEN).
-+ */
-+public class FTimeGraphMapper implements IFTimeGraphMapper {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphMapperEdgeStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphMapperEdgeStreamInput implements IIFTimeGraphMapperEdgeStreamInput {
-+
-+        private String edge;
-+
-+        @Override
-+        public String getEdge(){
-+            return edge;
-+        }
-+
-+        @Override
-+        public void setEdge(String edge){
-+            this.edge = edge;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphMapperEdgeStreamInput", FTimeGraphMapperSerializers.IFTimeGraphMapperEdgeStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphMapperDataStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphMapperDataStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphMapperDataStreamOutput> implements IIFTimeGraphMapperDataStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphMapperDataStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphMapperDataStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphMapperDataStreamOutput createItem() {
-+            return new IFTimeGraphMapperDataStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private Object update;
-+        private boolean isAddition;
-+
-+        @Override
-+        public Object getUpdate(){
-+            return update;
-+        }
-+
-+        @Override
-+        public void setUpdate(Object update){
-+            this.update = update;
-+        }
-+        @Override
-+        public boolean getIsAddition(){
-+            return isAddition;
-+        }
-+
-+        @Override
-+        public void setIsAddition(boolean isAddition){
-+            this.isAddition = isAddition;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphMapperDataStreamOutput", FTimeGraphMapperSerializers.IFTimeGraphMapperDataStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphMapperEdgeStreamInput input, IIFTimeGraphMapperDataStreamOutput dataStreamResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapperSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapperSerializers.java
-new file mode 100644
-index 0000000..faaf85a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphMapperSerializers.java
-@@ -0,0 +1,123 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTimeGraphMapper;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTimeGraphMapperProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTimeGraphMapper" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTimeGraphMapperSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput} algorithm.
-+ */
-+public static class IFTimeGraphMapperEdgeStreamInputSerializer extends Serializer<FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput> implements ISerializer<IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput object, OutputStream out) throws IOException {
-+        SIFTimeGraphMapperEdgeStreamInput tmp = SIFTimeGraphMapperEdgeStreamInput.newBuilder()
-+            .setEdge(object.getEdge())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getEdge());
-+        }
-+
-+    @Override
-+    public IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput result = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
-+        SIFTimeGraphMapperEdgeStreamInput tmp = SIFTimeGraphMapperEdgeStreamInput.parseDelimitedFrom(in);
-+        result.setEdge(tmp.getEdge());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphMapper.IIFTimeGraphMapperEdgeStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput result = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
-+            result.setEdge(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput object) {
-+        output.writeString(object.getEdge());
-+    }
-+
-+    @Override
-+    public FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput read(Kryo kryo, Input input, Class<FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput> type) {
-+        FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput result = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
-+        result.setEdge(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput} algorithm.
-+ */
-+public static class IFTimeGraphMapperDataStreamOutputSerializer extends Serializer<FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput> implements ISerializer<IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput object, OutputStream out) throws IOException {
-+        SIFTimeGraphMapperDataStreamOutput tmp = SIFTimeGraphMapperDataStreamOutput.newBuilder()
-+            .setIsAddition(object.getIsAddition())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
-+            out.writeBoolean(object.getIsAddition());
-+        }
-+
-+    @Override
-+    public IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput result = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
-+        result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        SIFTimeGraphMapperDataStreamOutput tmp = SIFTimeGraphMapperDataStreamOutput.parseDelimitedFrom(in);
-+        result.setIsAddition(tmp.getIsAddition());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphMapper.IIFTimeGraphMapperDataStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput result = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
-+            result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            result.setIsAddition(in.nextBoolean());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput object) {
-+        kryo.writeObject(output, object.getUpdate());
-+        output.writeBoolean(object.getIsAddition());
-+    }
-+
-+    @Override
-+    public FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput read(Kryo kryo, Input input, Class<FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput> type) {
-+        FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput result = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
-+        result.setUpdate(kryo.readObject(input, Object.class));
-+        result.setIsAddition(input.readBoolean());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutor.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutor.java
-new file mode 100644
-index 0000000..2b51896
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutor.java
-@@ -0,0 +1,368 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTimeGraphQueryExecutor" (GEN).
-+ */
-+public class FTimeGraphQueryExecutor implements IFTimeGraphQueryExecutor {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphQueryExecutorSnapshotQueryStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphQueryExecutorSnapshotQueryStreamInput implements IIFTimeGraphQueryExecutorSnapshotQueryStreamInput {
-+
-+        private long start;
-+        private long end;
-+
-+        @Override
-+        public long getStart(){
-+            return start;
-+        }
-+
-+        @Override
-+        public void setStart(long start){
-+            this.start = start;
-+        }
-+        @Override
-+        public long getEnd(){
-+            return end;
-+        }
-+
-+        @Override
-+        public void setEnd(long end){
-+            this.end = end;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphQueryExecutorSnapshotQueryStreamInput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorSnapshotQueryStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphQueryExecutorPathQueryStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphQueryExecutorPathQueryStreamInput implements IIFTimeGraphQueryExecutorPathQueryStreamInput {
-+
-+        private long start;
-+        private long end;
-+        private String vertexA;
-+        private String vertexB;
-+        private String type;
-+
-+        @Override
-+        public long getStart(){
-+            return start;
-+        }
-+
-+        @Override
-+        public void setStart(long start){
-+            this.start = start;
-+        }
-+        @Override
-+        public long getEnd(){
-+            return end;
-+        }
-+
-+        @Override
-+        public void setEnd(long end){
-+            this.end = end;
-+        }
-+        @Override
-+        public String getVertexA(){
-+            return vertexA;
-+        }
-+
-+        @Override
-+        public void setVertexA(String vertexA){
-+            this.vertexA = vertexA;
-+        }
-+        @Override
-+        public String getVertexB(){
-+            return vertexB;
-+        }
-+
-+        @Override
-+        public void setVertexB(String vertexB){
-+            this.vertexB = vertexB;
-+        }
-+        @Override
-+        public String getType(){
-+            return type;
-+        }
-+
-+        @Override
-+        public void setType(String type){
-+            this.type = type;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphQueryExecutorPathQueryStreamInput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorPathQueryStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTimeGraphQueryExecutorExternalResponsesInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphQueryExecutorExternalResponsesInput implements IIFTimeGraphQueryExecutorExternalResponsesInput {
-+
-+        private Object externalResponse;
-+
-+        @Override
-+        public Object getExternalResponse(){
-+            return externalResponse;
-+        }
-+
-+        @Override
-+        public void setExternalResponse(Object externalResponse){
-+            this.externalResponse = externalResponse;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphQueryExecutorExternalResponsesInput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorExternalResponsesInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphQueryExecutorSnapshotStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphQueryExecutorSnapshotStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphQueryExecutorSnapshotStreamOutput> implements IIFTimeGraphQueryExecutorSnapshotStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphQueryExecutorSnapshotStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphQueryExecutorSnapshotStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutorSnapshotStreamOutput createItem() {
-+            return new IFTimeGraphQueryExecutorSnapshotStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String snapshot;
-+
-+        @Override
-+        public String getSnapshot(){
-+            return snapshot;
-+        }
-+
-+        @Override
-+        public void setSnapshot(String snapshot){
-+            this.snapshot = snapshot;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphQueryExecutorSnapshotStreamOutput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorSnapshotStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphQueryExecutorPathStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphQueryExecutorPathStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphQueryExecutorPathStreamOutput> implements IIFTimeGraphQueryExecutorPathStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphQueryExecutorPathStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphQueryExecutorPathStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutorPathStreamOutput createItem() {
-+            return new IFTimeGraphQueryExecutorPathStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String path;
-+
-+        @Override
-+        public String getPath(){
-+            return path;
-+        }
-+
-+        @Override
-+        public void setPath(String path){
-+            this.path = path;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphQueryExecutorPathStreamOutput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorPathStreamOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphQueryExecutorUnicastRequestsOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphQueryExecutorUnicastRequestsOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphQueryExecutorUnicastRequestsOutput> implements IIFTimeGraphQueryExecutorUnicastRequestsOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphQueryExecutorUnicastRequestsOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphQueryExecutorUnicastRequestsOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutorUnicastRequestsOutput createItem() {
-+            return new IFTimeGraphQueryExecutorUnicastRequestsOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private Object unicastExternalRequest;
-+
-+        @Override
-+        public Object getUnicastExternalRequest(){
-+            return unicastExternalRequest;
-+        }
-+
-+        @Override
-+        public void setUnicastExternalRequest(Object unicastExternalRequest){
-+            this.unicastExternalRequest = unicastExternalRequest;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphQueryExecutorUnicastRequestsOutput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorUnicastRequestsOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTimeGraphQueryExecutorBroadcastRequestsOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTimeGraphQueryExecutorBroadcastRequestsOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> implements IIFTimeGraphQueryExecutorBroadcastRequestsOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTimeGraphQueryExecutorBroadcastRequestsOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTimeGraphQueryExecutorBroadcastRequestsOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutorBroadcastRequestsOutput createItem() {
-+            return new IFTimeGraphQueryExecutorBroadcastRequestsOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private Object broadcastExternalRequest;
-+
-+        @Override
-+        public Object getBroadcastExternalRequest(){
-+            return broadcastExternalRequest;
-+        }
-+
-+        @Override
-+        public void setBroadcastExternalRequest(Object broadcastExternalRequest){
-+            this.broadcastExternalRequest = broadcastExternalRequest;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTimeGraphQueryExecutorBroadcastRequestsOutput", FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorBroadcastRequestsOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphQueryExecutorSnapshotQueryStreamInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphQueryExecutorPathQueryStreamInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphQueryExecutorExternalResponsesInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutorSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutorSerializers.java
-new file mode 100644
-index 0000000..72e978e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphQueryExecutorSerializers.java
-@@ -0,0 +1,365 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTimeGraphQueryExecutor;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTimeGraphQueryExecutorProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTimeGraphQueryExecutor" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTimeGraphQueryExecutorSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput} algorithm.
-+ */
-+public static class IFTimeGraphQueryExecutorSnapshotQueryStreamInputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput object, OutputStream out) throws IOException {
-+        SIFTimeGraphQueryExecutorSnapshotQueryStreamInput tmp = SIFTimeGraphQueryExecutorSnapshotQueryStreamInput.newBuilder()
-+            .setStart(object.getStart())
-+            .setEnd(object.getEnd())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getStart());
-+            out.writeLong(object.getEnd());
-+        }
-+
-+    @Override
-+    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
-+        SIFTimeGraphQueryExecutorSnapshotQueryStreamInput tmp = SIFTimeGraphQueryExecutorSnapshotQueryStreamInput.parseDelimitedFrom(in);
-+        result.setStart(tmp.getStart());
-+        result.setEnd(tmp.getEnd());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotQueryStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
-+            result.setStart(in.nextLong());
-+            result.setEnd(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput object) {
-+        output.writeLong(object.getStart());
-+        output.writeLong(object.getEnd());
-+    }
-+
-+    @Override
-+    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput> type) {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
-+        result.setStart(input.readLong());
-+        result.setEnd(input.readLong());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput} algorithm.
-+ */
-+public static class IFTimeGraphQueryExecutorPathQueryStreamInputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput object, OutputStream out) throws IOException {
-+        SIFTimeGraphQueryExecutorPathQueryStreamInput tmp = SIFTimeGraphQueryExecutorPathQueryStreamInput.newBuilder()
-+            .setStart(object.getStart())
-+            .setEnd(object.getEnd())
-+            .setVertexA(object.getVertexA())
-+            .setVertexB(object.getVertexB())
-+            .setType(object.getType())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getStart());
-+            out.writeLong(object.getEnd());
-+            out.writeString(object.getVertexA());
-+            out.writeString(object.getVertexB());
-+            out.writeString(object.getType());
-+        }
-+
-+    @Override
-+    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
-+        SIFTimeGraphQueryExecutorPathQueryStreamInput tmp = SIFTimeGraphQueryExecutorPathQueryStreamInput.parseDelimitedFrom(in);
-+        result.setStart(tmp.getStart());
-+        result.setEnd(tmp.getEnd());
-+        result.setVertexA(tmp.getVertexA());
-+        result.setVertexB(tmp.getVertexB());
-+        result.setType(tmp.getType());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathQueryStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
-+            result.setStart(in.nextLong());
-+            result.setEnd(in.nextLong());
-+            result.setVertexA(in.nextString());
-+            result.setVertexB(in.nextString());
-+            result.setType(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput object) {
-+        output.writeLong(object.getStart());
-+        output.writeLong(object.getEnd());
-+        output.writeString(object.getVertexA());
-+        output.writeString(object.getVertexB());
-+        output.writeString(object.getType());
-+    }
-+
-+    @Override
-+    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput> type) {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
-+        result.setStart(input.readLong());
-+        result.setEnd(input.readLong());
-+        result.setVertexA(input.readString());
-+        result.setVertexB(input.readString());
-+        result.setType(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput} algorithm.
-+ */
-+public static class IFTimeGraphQueryExecutorExternalResponsesInputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getExternalResponse(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getExternalResponse(), out);
-+        }
-+
-+    @Override
-+    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
-+        result.setExternalResponse(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorExternalResponsesInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
-+            result.setExternalResponse(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput object) {
-+        kryo.writeObject(output, object.getExternalResponse());
-+    }
-+
-+    @Override
-+    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput> type) {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
-+        result.setExternalResponse(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput} algorithm.
-+ */
-+public static class IFTimeGraphQueryExecutorSnapshotStreamOutputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput object, OutputStream out) throws IOException {
-+        SIFTimeGraphQueryExecutorSnapshotStreamOutput tmp = SIFTimeGraphQueryExecutorSnapshotStreamOutput.newBuilder()
-+            .setSnapshot(object.getSnapshot())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSnapshot());
-+        }
-+
-+    @Override
-+    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
-+        SIFTimeGraphQueryExecutorSnapshotStreamOutput tmp = SIFTimeGraphQueryExecutorSnapshotStreamOutput.parseDelimitedFrom(in);
-+        result.setSnapshot(tmp.getSnapshot());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorSnapshotStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
-+            result.setSnapshot(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput object) {
-+        output.writeString(object.getSnapshot());
-+    }
-+
-+    @Override
-+    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput> type) {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
-+        result.setSnapshot(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput} algorithm.
-+ */
-+public static class IFTimeGraphQueryExecutorPathStreamOutputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput object, OutputStream out) throws IOException {
-+        SIFTimeGraphQueryExecutorPathStreamOutput tmp = SIFTimeGraphQueryExecutorPathStreamOutput.newBuilder()
-+            .setPath(object.getPath())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getPath());
-+        }
-+
-+    @Override
-+    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
-+        SIFTimeGraphQueryExecutorPathStreamOutput tmp = SIFTimeGraphQueryExecutorPathStreamOutput.parseDelimitedFrom(in);
-+        result.setPath(tmp.getPath());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorPathStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
-+            result.setPath(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput object) {
-+        output.writeString(object.getPath());
-+    }
-+
-+    @Override
-+    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput> type) {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
-+        result.setPath(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput} algorithm.
-+ */
-+public static class IFTimeGraphQueryExecutorUnicastRequestsOutputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUnicastExternalRequest(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUnicastExternalRequest(), out);
-+        }
-+
-+    @Override
-+    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
-+        result.setUnicastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorUnicastRequestsOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
-+            result.setUnicastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput object) {
-+        kryo.writeObject(output, object.getUnicastExternalRequest());
-+    }
-+
-+    @Override
-+    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput> type) {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
-+        result.setUnicastExternalRequest(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput} algorithm.
-+ */
-+public static class IFTimeGraphQueryExecutorBroadcastRequestsOutputSerializer extends Serializer<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput> implements ISerializer<IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getBroadcastExternalRequest(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getBroadcastExternalRequest(), out);
-+        }
-+
-+    @Override
-+    public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
-+        result.setBroadcastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraphQueryExecutor.IIFTimeGraphQueryExecutorBroadcastRequestsOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
-+            result.setBroadcastExternalRequest(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput object) {
-+        kryo.writeObject(output, object.getBroadcastExternalRequest());
-+    }
-+
-+    @Override
-+    public FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput read(Kryo kryo, Input input, Class<FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput> type) {
-+        FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput result = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
-+        result.setBroadcastExternalRequest(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphSerializers.java
-new file mode 100644
-index 0000000..d2a349c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTimeGraphSerializers.java
-@@ -0,0 +1,291 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTimeGraph;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTimeGraphProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTimeGraph" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTimeGraphSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraph.IIFTimeGraphDataStreamInput} algorithm.
-+ */
-+public static class IFTimeGraphDataStreamInputSerializer extends Serializer<FTimeGraph.IFTimeGraphDataStreamInput> implements ISerializer<IFTimeGraph.IIFTimeGraphDataStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraph.IIFTimeGraphDataStreamInput object, OutputStream out) throws IOException {
-+        SIFTimeGraphDataStreamInput tmp = SIFTimeGraphDataStreamInput.newBuilder()
-+            .setIsAddition(object.getIsAddition())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraph.IIFTimeGraphDataStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getUpdate(), out);
-+            out.writeBoolean(object.getIsAddition());
-+        }
-+
-+    @Override
-+    public IFTimeGraph.IIFTimeGraphDataStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraph.IFTimeGraphDataStreamInput result = new FTimeGraph.IFTimeGraphDataStreamInput();
-+        result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        SIFTimeGraphDataStreamInput tmp = SIFTimeGraphDataStreamInput.parseDelimitedFrom(in);
-+        result.setIsAddition(tmp.getIsAddition());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraph.IIFTimeGraphDataStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraph.IFTimeGraphDataStreamInput result = new FTimeGraph.IFTimeGraphDataStreamInput();
-+            result.setUpdate(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            result.setIsAddition(in.nextBoolean());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphDataStreamInput object) {
-+        kryo.writeObject(output, object.getUpdate());
-+        output.writeBoolean(object.getIsAddition());
-+    }
-+
-+    @Override
-+    public FTimeGraph.IFTimeGraphDataStreamInput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphDataStreamInput> type) {
-+        FTimeGraph.IFTimeGraphDataStreamInput result = new FTimeGraph.IFTimeGraphDataStreamInput();
-+        result.setUpdate(kryo.readObject(input, Object.class));
-+        result.setIsAddition(input.readBoolean());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput} algorithm.
-+ */
-+public static class IFTimeGraphSnapshotQueryStreamInputSerializer extends Serializer<FTimeGraph.IFTimeGraphSnapshotQueryStreamInput> implements ISerializer<IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput object, OutputStream out) throws IOException {
-+        SIFTimeGraphSnapshotQueryStreamInput tmp = SIFTimeGraphSnapshotQueryStreamInput.newBuilder()
-+            .setStart(object.getStart())
-+            .setEnd(object.getEnd())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getStart());
-+            out.writeLong(object.getEnd());
-+        }
-+
-+    @Override
-+    public IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraph.IFTimeGraphSnapshotQueryStreamInput result = new FTimeGraph.IFTimeGraphSnapshotQueryStreamInput();
-+        SIFTimeGraphSnapshotQueryStreamInput tmp = SIFTimeGraphSnapshotQueryStreamInput.parseDelimitedFrom(in);
-+        result.setStart(tmp.getStart());
-+        result.setEnd(tmp.getEnd());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraph.IIFTimeGraphSnapshotQueryStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraph.IFTimeGraphSnapshotQueryStreamInput result = new FTimeGraph.IFTimeGraphSnapshotQueryStreamInput();
-+            result.setStart(in.nextLong());
-+            result.setEnd(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphSnapshotQueryStreamInput object) {
-+        output.writeLong(object.getStart());
-+        output.writeLong(object.getEnd());
-+    }
-+
-+    @Override
-+    public FTimeGraph.IFTimeGraphSnapshotQueryStreamInput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphSnapshotQueryStreamInput> type) {
-+        FTimeGraph.IFTimeGraphSnapshotQueryStreamInput result = new FTimeGraph.IFTimeGraphSnapshotQueryStreamInput();
-+        result.setStart(input.readLong());
-+        result.setEnd(input.readLong());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTimeGraph.IIFTimeGraphPathQueryStreamInput} algorithm.
-+ */
-+public static class IFTimeGraphPathQueryStreamInputSerializer extends Serializer<FTimeGraph.IFTimeGraphPathQueryStreamInput> implements ISerializer<IFTimeGraph.IIFTimeGraphPathQueryStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraph.IIFTimeGraphPathQueryStreamInput object, OutputStream out) throws IOException {
-+        SIFTimeGraphPathQueryStreamInput tmp = SIFTimeGraphPathQueryStreamInput.newBuilder()
-+            .setStart(object.getStart())
-+            .setEnd(object.getEnd())
-+            .setVertexA(object.getVertexA())
-+            .setVertexB(object.getVertexB())
-+            .setType(object.getType())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraph.IIFTimeGraphPathQueryStreamInput object, IDataOutput out) throws IOException {
-+            out.writeLong(object.getStart());
-+            out.writeLong(object.getEnd());
-+            out.writeString(object.getVertexA());
-+            out.writeString(object.getVertexB());
-+            out.writeString(object.getType());
-+        }
-+
-+    @Override
-+    public IFTimeGraph.IIFTimeGraphPathQueryStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraph.IFTimeGraphPathQueryStreamInput result = new FTimeGraph.IFTimeGraphPathQueryStreamInput();
-+        SIFTimeGraphPathQueryStreamInput tmp = SIFTimeGraphPathQueryStreamInput.parseDelimitedFrom(in);
-+        result.setStart(tmp.getStart());
-+        result.setEnd(tmp.getEnd());
-+        result.setVertexA(tmp.getVertexA());
-+        result.setVertexB(tmp.getVertexB());
-+        result.setType(tmp.getType());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraph.IIFTimeGraphPathQueryStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraph.IFTimeGraphPathQueryStreamInput result = new FTimeGraph.IFTimeGraphPathQueryStreamInput();
-+            result.setStart(in.nextLong());
-+            result.setEnd(in.nextLong());
-+            result.setVertexA(in.nextString());
-+            result.setVertexB(in.nextString());
-+            result.setType(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphPathQueryStreamInput object) {
-+        output.writeLong(object.getStart());
-+        output.writeLong(object.getEnd());
-+        output.writeString(object.getVertexA());
-+        output.writeString(object.getVertexB());
-+        output.writeString(object.getType());
-+    }
-+
-+    @Override
-+    public FTimeGraph.IFTimeGraphPathQueryStreamInput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphPathQueryStreamInput> type) {
-+        FTimeGraph.IFTimeGraphPathQueryStreamInput result = new FTimeGraph.IFTimeGraphPathQueryStreamInput();
-+        result.setStart(input.readLong());
-+        result.setEnd(input.readLong());
-+        result.setVertexA(input.readString());
-+        result.setVertexB(input.readString());
-+        result.setType(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraph.IIFTimeGraphSnapshotStreamOutput} algorithm.
-+ */
-+public static class IFTimeGraphSnapshotStreamOutputSerializer extends Serializer<FTimeGraph.IFTimeGraphSnapshotStreamOutput> implements ISerializer<IFTimeGraph.IIFTimeGraphSnapshotStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraph.IIFTimeGraphSnapshotStreamOutput object, OutputStream out) throws IOException {
-+        SIFTimeGraphSnapshotStreamOutput tmp = SIFTimeGraphSnapshotStreamOutput.newBuilder()
-+            .setSnapshot(object.getSnapshot())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraph.IIFTimeGraphSnapshotStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSnapshot());
-+        }
-+
-+    @Override
-+    public IFTimeGraph.IIFTimeGraphSnapshotStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraph.IFTimeGraphSnapshotStreamOutput result = new FTimeGraph.IFTimeGraphSnapshotStreamOutput();
-+        SIFTimeGraphSnapshotStreamOutput tmp = SIFTimeGraphSnapshotStreamOutput.parseDelimitedFrom(in);
-+        result.setSnapshot(tmp.getSnapshot());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraph.IIFTimeGraphSnapshotStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraph.IFTimeGraphSnapshotStreamOutput result = new FTimeGraph.IFTimeGraphSnapshotStreamOutput();
-+            result.setSnapshot(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphSnapshotStreamOutput object) {
-+        output.writeString(object.getSnapshot());
-+    }
-+
-+    @Override
-+    public FTimeGraph.IFTimeGraphSnapshotStreamOutput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphSnapshotStreamOutput> type) {
-+        FTimeGraph.IFTimeGraphSnapshotStreamOutput result = new FTimeGraph.IFTimeGraphSnapshotStreamOutput();
-+        result.setSnapshot(input.readString());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTimeGraph.IIFTimeGraphPathStreamOutput} algorithm.
-+ */
-+public static class IFTimeGraphPathStreamOutputSerializer extends Serializer<FTimeGraph.IFTimeGraphPathStreamOutput> implements ISerializer<IFTimeGraph.IIFTimeGraphPathStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTimeGraph.IIFTimeGraphPathStreamOutput object, OutputStream out) throws IOException {
-+        SIFTimeGraphPathStreamOutput tmp = SIFTimeGraphPathStreamOutput.newBuilder()
-+            .setPath(object.getPath())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTimeGraph.IIFTimeGraphPathStreamOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getPath());
-+        }
-+
-+    @Override
-+    public IFTimeGraph.IIFTimeGraphPathStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FTimeGraph.IFTimeGraphPathStreamOutput result = new FTimeGraph.IFTimeGraphPathStreamOutput();
-+        SIFTimeGraphPathStreamOutput tmp = SIFTimeGraphPathStreamOutput.parseDelimitedFrom(in);
-+        result.setPath(tmp.getPath());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTimeGraph.IIFTimeGraphPathStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTimeGraph.IFTimeGraphPathStreamOutput result = new FTimeGraph.IFTimeGraphPathStreamOutput();
-+            result.setPath(in.nextString());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTimeGraph.IFTimeGraphPathStreamOutput object) {
-+        output.writeString(object.getPath());
-+    }
-+
-+    @Override
-+    public FTimeGraph.IFTimeGraphPathStreamOutput read(Kryo kryo, Input input, Class<FTimeGraph.IFTimeGraphPathStreamOutput> type) {
-+        FTimeGraph.IFTimeGraphPathStreamOutput result = new FTimeGraph.IFTimeGraphPathStreamOutput();
-+        result.setPath(input.readString());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropy.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropy.java
-new file mode 100644
-index 0000000..c04a0bf
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropy.java
-@@ -0,0 +1,219 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTransferEntropy" (GEN).
-+ */
-+public class FTransferEntropy implements IFTransferEntropy {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTransferEntropyPreprocessedStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTransferEntropyPreprocessedStreamInput implements IIFTransferEntropyPreprocessedStreamInput {
-+
-+        private String symbolId;
-+        private long timestamp;
-+        private double value;
-+        private int volume;
-+
-+        @Override
-+        public String getSymbolId(){
-+            return symbolId;
-+        }
-+
-+        @Override
-+        public void setSymbolId(String symbolId){
-+            this.symbolId = symbolId;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        @Override
-+        public int getVolume(){
-+            return volume;
-+        }
-+
-+        @Override
-+        public void setVolume(int volume){
-+            this.volume = volume;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTransferEntropyPreprocessedStreamInput", FTransferEntropySerializers.IFTransferEntropyPreprocessedStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTransferEntropySymbolListInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTransferEntropySymbolListInput implements IIFTransferEntropySymbolListInput {
-+
-+        private java.util.List<String> allSymbols;
-+
-+        @Override
-+        public java.util.List<String> getAllSymbols(){
-+            return allSymbols;
-+        }
-+
-+        @Override
-+        public void setAllSymbols(java.util.List<String> allSymbols){
-+            this.allSymbols = allSymbols;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTransferEntropySymbolListInput", FTransferEntropySerializers.IFTransferEntropySymbolListInputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTransferEntropyPairwiseFinancialOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTransferEntropyPairwiseFinancialOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTransferEntropyPairwiseFinancialOutput> implements IIFTransferEntropyPairwiseFinancialOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTransferEntropyPairwiseFinancialOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTransferEntropyPairwiseFinancialOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTransferEntropyPairwiseFinancialOutput createItem() {
-+            return new IFTransferEntropyPairwiseFinancialOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private String id0;
-+        private String id1;
-+        private String date;
-+        private double value;
-+
-+        @Override
-+        public String getId0(){
-+            return id0;
-+        }
-+
-+        @Override
-+        public void setId0(String id0){
-+            this.id0 = id0;
-+        }
-+        @Override
-+        public String getId1(){
-+            return id1;
-+        }
-+
-+        @Override
-+        public void setId1(String id1){
-+            this.id1 = id1;
-+        }
-+        @Override
-+        public String getDate(){
-+            return date;
-+        }
-+
-+        @Override
-+        public void setDate(String date){
-+            this.date = date;
-+        }
-+        @Override
-+        public double getValue(){
-+            return value;
-+        }
-+
-+        @Override
-+        public void setValue(double value){
-+            this.value = value;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTransferEntropyPairwiseFinancialOutput", FTransferEntropySerializers.IFTransferEntropyPairwiseFinancialOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTransferEntropyPreprocessedStreamInput input, IIFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTransferEntropySymbolListInput input, IIFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowAdvance".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowAdvance(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "densitySize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDensitySize(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropySerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropySerializers.java
-new file mode 100644
-index 0000000..9d58e1e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTransferEntropySerializers.java
-@@ -0,0 +1,195 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTransferEntropy;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTransferEntropyProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTransferEntropy" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTransferEntropySerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput} algorithm.
-+ */
-+public static class IFTransferEntropyPreprocessedStreamInputSerializer extends Serializer<FTransferEntropy.IFTransferEntropyPreprocessedStreamInput> implements ISerializer<IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput object, OutputStream out) throws IOException {
-+        SIFTransferEntropyPreprocessedStreamInput tmp = SIFTransferEntropyPreprocessedStreamInput.newBuilder()
-+            .setSymbolId(object.getSymbolId())
-+            .setTimestamp(object.getTimestamp())
-+            .setValue(object.getValue())
-+            .setVolume(object.getVolume())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getSymbolId());
-+            out.writeLong(object.getTimestamp());
-+            out.writeDouble(object.getValue());
-+            out.writeInt(object.getVolume());
-+        }
-+
-+    @Override
-+    public IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTransferEntropy.IFTransferEntropyPreprocessedStreamInput result = new FTransferEntropy.IFTransferEntropyPreprocessedStreamInput();
-+        SIFTransferEntropyPreprocessedStreamInput tmp = SIFTransferEntropyPreprocessedStreamInput.parseDelimitedFrom(in);
-+        result.setSymbolId(tmp.getSymbolId());
-+        result.setTimestamp(tmp.getTimestamp());
-+        result.setValue(tmp.getValue());
-+        result.setVolume(tmp.getVolume());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTransferEntropy.IIFTransferEntropyPreprocessedStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTransferEntropy.IFTransferEntropyPreprocessedStreamInput result = new FTransferEntropy.IFTransferEntropyPreprocessedStreamInput();
-+            result.setSymbolId(in.nextString());
-+            result.setTimestamp(in.nextLong());
-+            result.setValue(in.nextDouble());
-+            result.setVolume(in.nextInt());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTransferEntropy.IFTransferEntropyPreprocessedStreamInput object) {
-+        output.writeString(object.getSymbolId());
-+        output.writeLong(object.getTimestamp());
-+        output.writeDouble(object.getValue());
-+        output.writeInt(object.getVolume());
-+    }
-+
-+    @Override
-+    public FTransferEntropy.IFTransferEntropyPreprocessedStreamInput read(Kryo kryo, Input input, Class<FTransferEntropy.IFTransferEntropyPreprocessedStreamInput> type) {
-+        FTransferEntropy.IFTransferEntropyPreprocessedStreamInput result = new FTransferEntropy.IFTransferEntropyPreprocessedStreamInput();
-+        result.setSymbolId(input.readString());
-+        result.setTimestamp(input.readLong());
-+        result.setValue(input.readDouble());
-+        result.setVolume(input.readInt());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTransferEntropy.IIFTransferEntropySymbolListInput} algorithm.
-+ */
-+public static class IFTransferEntropySymbolListInputSerializer extends Serializer<FTransferEntropy.IFTransferEntropySymbolListInput> implements ISerializer<IFTransferEntropy.IIFTransferEntropySymbolListInput> {
-+
-+    @Override
-+    public void serializeTo(IFTransferEntropy.IIFTransferEntropySymbolListInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTransferEntropy.IIFTransferEntropySymbolListInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getAllSymbols(), out);
-+        }
-+
-+    @Override
-+    public IFTransferEntropy.IIFTransferEntropySymbolListInput deserializeFrom(InputStream in) throws IOException {
-+        FTransferEntropy.IFTransferEntropySymbolListInput result = new FTransferEntropy.IFTransferEntropySymbolListInput();
-+        result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTransferEntropy.IIFTransferEntropySymbolListInput deserializeFrom(IDataInput in) throws IOException {
-+            FTransferEntropy.IFTransferEntropySymbolListInput result = new FTransferEntropy.IFTransferEntropySymbolListInput();
-+            result.setAllSymbols(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTransferEntropy.IFTransferEntropySymbolListInput object) {
-+        kryo.writeObject(output, object.getAllSymbols());
-+    }
-+
-+    @Override
-+    public FTransferEntropy.IFTransferEntropySymbolListInput read(Kryo kryo, Input input, Class<FTransferEntropy.IFTransferEntropySymbolListInput> type) {
-+        FTransferEntropy.IFTransferEntropySymbolListInput result = new FTransferEntropy.IFTransferEntropySymbolListInput();
-+        result.setAllSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput} algorithm.
-+ */
-+public static class IFTransferEntropyPairwiseFinancialOutputSerializer extends Serializer<FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput> implements ISerializer<IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput object, OutputStream out) throws IOException {
-+        SIFTransferEntropyPairwiseFinancialOutput tmp = SIFTransferEntropyPairwiseFinancialOutput.newBuilder()
-+            .setId0(object.getId0())
-+            .setId1(object.getId1())
-+            .setDate(object.getDate())
-+            .setValue(object.getValue())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput object, IDataOutput out) throws IOException {
-+            out.writeString(object.getId0());
-+            out.writeString(object.getId1());
-+            out.writeString(object.getDate());
-+            out.writeDouble(object.getValue());
-+        }
-+
-+    @Override
-+    public IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput deserializeFrom(InputStream in) throws IOException {
-+        FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput result = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
-+        SIFTransferEntropyPairwiseFinancialOutput tmp = SIFTransferEntropyPairwiseFinancialOutput.parseDelimitedFrom(in);
-+        result.setId0(tmp.getId0());
-+        result.setId1(tmp.getId1());
-+        result.setDate(tmp.getDate());
-+        result.setValue(tmp.getValue());
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTransferEntropy.IIFTransferEntropyPairwiseFinancialOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput result = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
-+            result.setId0(in.nextString());
-+            result.setId1(in.nextString());
-+            result.setDate(in.nextString());
-+            result.setValue(in.nextDouble());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput object) {
-+        output.writeString(object.getId0());
-+        output.writeString(object.getId1());
-+        output.writeString(object.getDate());
-+        output.writeDouble(object.getValue());
-+    }
-+
-+    @Override
-+    public FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput read(Kryo kryo, Input input, Class<FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput> type) {
-+        FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput result = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
-+        result.setId0(input.readString());
-+        result.setId1(input.readString());
-+        result.setDate(input.readString());
-+        result.setValue(input.readDouble());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifier.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifier.java
-new file mode 100644
-index 0000000..e3ac115
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifier.java
-@@ -0,0 +1,144 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTweetClassifier" (GEN).
-+ */
-+public class FTweetClassifier implements IFTweetClassifier {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTweetClassifierModifiedTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTweetClassifierModifiedTwitterStreamInput implements IIFTweetClassifierModifiedTwitterStreamInput {
-+
-+        private twitter4j.Status status;
-+
-+        @Override
-+        public twitter4j.Status getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(twitter4j.Status status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTweetClassifierModifiedTwitterStreamInput", FTweetClassifierSerializers.IFTweetClassifierModifiedTwitterStreamInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTweetClassifierKeywordStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTweetClassifierKeywordStreamInput implements IIFTweetClassifierKeywordStreamInput {
-+
-+        private java.util.List<String> keywords;
-+
-+        @Override
-+        public java.util.List<String> getKeywords(){
-+            return keywords;
-+        }
-+
-+        @Override
-+        public void setKeywords(java.util.List<String> keywords){
-+            this.keywords = keywords;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTweetClassifierKeywordStreamInput", FTweetClassifierSerializers.IFTweetClassifierKeywordStreamInputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTweetClassifierModifiedTwitterStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTweetClassifierModifiedTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTweetClassifierModifiedTwitterStreamOutput> implements IIFTweetClassifierModifiedTwitterStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTweetClassifierModifiedTwitterStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTweetClassifierModifiedTwitterStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTweetClassifierModifiedTwitterStreamOutput createItem() {
-+            return new IFTweetClassifierModifiedTwitterStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private twitter4j.Status tweet;
-+        private java.util.List<String> stocks;
-+
-+        @Override
-+        public twitter4j.Status getTweet(){
-+            return tweet;
-+        }
-+
-+        @Override
-+        public void setTweet(twitter4j.Status tweet){
-+            this.tweet = tweet;
-+        }
-+        @Override
-+        public java.util.List<String> getStocks(){
-+            return stocks;
-+        }
-+
-+        @Override
-+        public void setStocks(java.util.List<String> stocks){
-+            this.stocks = stocks;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTweetClassifierModifiedTwitterStreamOutput", FTweetClassifierSerializers.IFTweetClassifierModifiedTwitterStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTweetClassifierModifiedTwitterStreamInput input, IIFTweetClassifierModifiedTwitterStreamOutput modifiedTwitterStreamResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTweetClassifierKeywordStreamInput input, IIFTweetClassifierModifiedTwitterStreamOutput modifiedTwitterStreamResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifierSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifierSerializers.java
-new file mode 100644
-index 0000000..f6be51f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTweetClassifierSerializers.java
-@@ -0,0 +1,157 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTweetClassifier;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTweetClassifierProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTweetClassifier" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTweetClassifierSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput} algorithm.
-+ */
-+public static class IFTweetClassifierModifiedTwitterStreamInputSerializer extends Serializer<FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput> implements ISerializer<IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput read(Kryo kryo, Input input, Class<FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput> type) {
-+        FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput();
-+        result.setStatus(kryo.readObject(input, twitter4j.Status.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTweetClassifier.IIFTweetClassifierKeywordStreamInput} algorithm.
-+ */
-+public static class IFTweetClassifierKeywordStreamInputSerializer extends Serializer<FTweetClassifier.IFTweetClassifierKeywordStreamInput> implements ISerializer<IFTweetClassifier.IIFTweetClassifierKeywordStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTweetClassifier.IIFTweetClassifierKeywordStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTweetClassifier.IIFTweetClassifierKeywordStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getKeywords(), out);
-+        }
-+
-+    @Override
-+    public IFTweetClassifier.IIFTweetClassifierKeywordStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTweetClassifier.IFTweetClassifierKeywordStreamInput result = new FTweetClassifier.IFTweetClassifierKeywordStreamInput();
-+        result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTweetClassifier.IIFTweetClassifierKeywordStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTweetClassifier.IFTweetClassifierKeywordStreamInput result = new FTweetClassifier.IFTweetClassifierKeywordStreamInput();
-+            result.setKeywords(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTweetClassifier.IFTweetClassifierKeywordStreamInput object) {
-+        kryo.writeObject(output, object.getKeywords());
-+    }
-+
-+    @Override
-+    public FTweetClassifier.IFTweetClassifierKeywordStreamInput read(Kryo kryo, Input input, Class<FTweetClassifier.IFTweetClassifierKeywordStreamInput> type) {
-+        FTweetClassifier.IFTweetClassifierKeywordStreamInput result = new FTweetClassifier.IFTweetClassifierKeywordStreamInput();
-+        result.setKeywords(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput} algorithm.
-+ */
-+public static class IFTweetClassifierModifiedTwitterStreamOutputSerializer extends Serializer<FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput> implements ISerializer<IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getTweet(), out);
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).serializeTo(object.getTweet(), out);
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
-+        }
-+
-+    @Override
-+    public IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput();
-+        result.setTweet(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+        result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTweetClassifier.IIFTweetClassifierModifiedTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput();
-+            result.setTweet(SerializerRegistry.getSerializerSafe("STATUS", twitter4j.Status.class).deserializeFrom(in));
-+            result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput object) {
-+        kryo.writeObject(output, object.getTweet());
-+        kryo.writeObject(output, object.getStocks());
-+    }
-+
-+    @Override
-+    public FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput read(Kryo kryo, Input input, Class<FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput> type) {
-+        FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput result = new FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput();
-+        result.setTweet(kryo.readObject(input, twitter4j.Status.class));
-+        result.setStocks(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawling.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawling.java
-new file mode 100644
-index 0000000..b79baf0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawling.java
-@@ -0,0 +1,121 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTwitterCrawling" (GEN).
-+ */
-+public class FTwitterCrawling implements IFTwitterCrawling {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTwitterCrawlingAnalysisInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTwitterCrawlingAnalysisInput implements IIFTwitterCrawlingAnalysisInput {
-+
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTwitterCrawlingAnalysisInput", FTwitterCrawlingSerializers.IFTwitterCrawlingAnalysisInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTwitterCrawlingAnalysisOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTwitterCrawlingAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTwitterCrawlingAnalysisOutput> implements IIFTwitterCrawlingAnalysisOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTwitterCrawlingAnalysisOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTwitterCrawlingAnalysisOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTwitterCrawlingAnalysisOutput createItem() {
-+            return new IFTwitterCrawlingAnalysisOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+        private eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        @Override
-+        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval(){
-+            return timeInterval;
-+        }
-+
-+        @Override
-+        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval){
-+            this.timeInterval = timeInterval;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTwitterCrawlingAnalysisOutput", FTwitterCrawlingSerializers.IFTwitterCrawlingAnalysisOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTwitterCrawlingAnalysisInput input, IIFTwitterCrawlingAnalysisOutput analysisResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawlingSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawlingSerializers.java
-new file mode 100644
-index 0000000..9fabcbf
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterCrawlingSerializers.java
-@@ -0,0 +1,115 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTwitterCrawling;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTwitterCrawlingProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTwitterCrawling" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTwitterCrawlingSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput} algorithm.
-+ */
-+public static class IFTwitterCrawlingAnalysisInputSerializer extends Serializer<FTwitterCrawling.IFTwitterCrawlingAnalysisInput> implements ISerializer<IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput> {
-+
-+    @Override
-+    public void serializeTo(IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput deserializeFrom(InputStream in) throws IOException {
-+        FTwitterCrawling.IFTwitterCrawlingAnalysisInput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTwitterCrawling.IIFTwitterCrawlingAnalysisInput deserializeFrom(IDataInput in) throws IOException {
-+            FTwitterCrawling.IFTwitterCrawlingAnalysisInput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTwitterCrawling.IFTwitterCrawlingAnalysisInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FTwitterCrawling.IFTwitterCrawlingAnalysisInput read(Kryo kryo, Input input, Class<FTwitterCrawling.IFTwitterCrawlingAnalysisInput> type) {
-+        FTwitterCrawling.IFTwitterCrawlingAnalysisInput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisInput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput} algorithm.
-+ */
-+public static class IFTwitterCrawlingAnalysisOutputSerializer extends Serializer<FTwitterCrawling.IFTwitterCrawlingAnalysisOutput> implements ISerializer<IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+            SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
-+        }
-+
-+    @Override
-+    public IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput deserializeFrom(InputStream in) throws IOException {
-+        FTwitterCrawling.IFTwitterCrawlingAnalysisOutput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisOutput();
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTwitterCrawling.IIFTwitterCrawlingAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTwitterCrawling.IFTwitterCrawlingAnalysisOutput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisOutput();
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTwitterCrawling.IFTwitterCrawlingAnalysisOutput object) {
-+        kryo.writeObject(output, object.getEvents());
-+        kryo.writeObject(output, object.getTimeInterval());
-+    }
-+
-+    @Override
-+    public FTwitterCrawling.IFTwitterCrawlingAnalysisOutput read(Kryo kryo, Input input, Class<FTwitterCrawling.IFTwitterCrawlingAnalysisOutput> type) {
-+        FTwitterCrawling.IFTwitterCrawlingAnalysisOutput result = new FTwitterCrawling.IFTwitterCrawlingAnalysisOutput();
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setTimeInterval(kryo.readObject(input, eu.qualimaster.families.datatypes.common.IFTimeInterval.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetection.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetection.java
-new file mode 100644
-index 0000000..fea43d6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetection.java
-@@ -0,0 +1,157 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTwitterEventDetection" (GEN).
-+ */
-+public class FTwitterEventDetection implements IFTwitterEventDetection {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTwitterEventDetectionTwitterStreamInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTwitterEventDetectionTwitterStreamInput implements IIFTwitterEventDetectionTwitterStreamInput {
-+
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+        private java.util.List<String> stocks;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        @Override
-+        public java.util.List<String> getStocks(){
-+            return stocks;
-+        }
-+
-+        @Override
-+        public void setStocks(java.util.List<String> stocks){
-+            this.stocks = stocks;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTwitterEventDetectionTwitterStreamInput", FTwitterEventDetectionSerializers.IFTwitterEventDetectionTwitterStreamInputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTwitterEventDetectionTwitterStreamOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTwitterEventDetectionTwitterStreamOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTwitterEventDetectionTwitterStreamOutput> implements IIFTwitterEventDetectionTwitterStreamOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTwitterEventDetectionTwitterStreamOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTwitterEventDetectionTwitterStreamOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTwitterEventDetectionTwitterStreamOutput createItem() {
-+            return new IFTwitterEventDetectionTwitterStreamOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTwitterEventDetectionTwitterStreamOutput", FTwitterEventDetectionSerializers.IFTwitterEventDetectionTwitterStreamOutputSerializer.class);
-+            SerializerRegistry.register("STRINGLIST", eu.qualimaster.base.serializer.StringListSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTwitterEventDetectionTwitterStreamInput input, IIFTwitterEventDetectionTwitterStreamOutput twitterStreamResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "hardThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterHardThreshold(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "percentageThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterPercentageThreshold(double value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "lengthOfTimeWindow".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterLengthOfTimeWindow(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "frequenceOfCheckForEvent".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterFrequenceOfCheckForEvent(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetectionSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetectionSerializers.java
-new file mode 100644
-index 0000000..2cccbf7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventDetectionSerializers.java
-@@ -0,0 +1,121 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTwitterEventDetection;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTwitterEventDetectionProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTwitterEventDetection" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTwitterEventDetectionSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput} algorithm.
-+ */
-+public static class IFTwitterEventDetectionTwitterStreamInputSerializer extends Serializer<FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput> implements ISerializer<IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput> {
-+
-+    @Override
-+    public void serializeTo(IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+            SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).serializeTo(object.getStocks(), out);
-+        }
-+
-+    @Override
-+    public IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput deserializeFrom(InputStream in) throws IOException {
-+        FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamInput deserializeFrom(IDataInput in) throws IOException {
-+            FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            result.setStocks(SerializerRegistry.getListSerializerSafe("STRINGLIST", String.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+        kryo.writeObject(output, object.getStocks());
-+    }
-+
-+    @Override
-+    public FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput read(Kryo kryo, Input input, Class<FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput> type) {
-+        FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        result.setStocks(kryo.readObject(input, java.util.ArrayList.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput} algorithm.
-+ */
-+public static class IFTwitterEventDetectionTwitterStreamOutputSerializer extends Serializer<FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput> implements ISerializer<IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput deserializeFrom(InputStream in) throws IOException {
-+        FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTwitterEventDetection.IIFTwitterEventDetectionTwitterStreamOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput object) {
-+        kryo.writeObject(output, object.getEvents());
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput read(Kryo kryo, Input input, Class<FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput> type) {
-+        FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput result = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPrediction.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPrediction.java
-new file mode 100644
-index 0000000..2639854
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPrediction.java
-@@ -0,0 +1,131 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTwitterEventPrediction" (GEN).
-+ */
-+public class FTwitterEventPrediction implements IFTwitterEventPrediction {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTwitterEventPredictionAnalysisInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTwitterEventPredictionAnalysisInput implements IIFTwitterEventPredictionAnalysisInput {
-+
-+        private eu.qualimaster.data.stream.source.LabelledTweet status;
-+
-+        @Override
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTwitterEventPredictionAnalysisInput", FTwitterEventPredictionSerializers.IFTwitterEventPredictionAnalysisInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTwitterEventPredictionAnalysisOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTwitterEventPredictionAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTwitterEventPredictionAnalysisOutput> implements IIFTwitterEventPredictionAnalysisOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTwitterEventPredictionAnalysisOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTwitterEventPredictionAnalysisOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTwitterEventPredictionAnalysisOutput createItem() {
-+            return new IFTwitterEventPredictionAnalysisOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events;
-+        private java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> symbols;
-+        private eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval;
-+
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents(){
-+            return events;
-+        }
-+
-+        @Override
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events){
-+            this.events = events;
-+        }
-+        @Override
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getSymbols(){
-+            return symbols;
-+        }
-+
-+        @Override
-+        public void setSymbols(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> symbols){
-+            this.symbols = symbols;
-+        }
-+        @Override
-+        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval(){
-+            return timeInterval;
-+        }
-+
-+        @Override
-+        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval){
-+            this.timeInterval = timeInterval;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTwitterEventPredictionAnalysisOutput", FTwitterEventPredictionSerializers.IFTwitterEventPredictionAnalysisOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTwitterEventPredictionAnalysisInput input, IIFTwitterEventPredictionAnalysisOutput analysisResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPredictionSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPredictionSerializers.java
-new file mode 100644
-index 0000000..d49813b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterEventPredictionSerializers.java
-@@ -0,0 +1,121 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTwitterEventPrediction;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTwitterEventPredictionProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTwitterEventPrediction" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTwitterEventPredictionSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput} algorithm.
-+ */
-+public static class IFTwitterEventPredictionAnalysisInputSerializer extends Serializer<FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput> implements ISerializer<IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput> {
-+
-+    @Override
-+    public void serializeTo(IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput deserializeFrom(InputStream in) throws IOException {
-+        FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisInput deserializeFrom(IDataInput in) throws IOException {
-+            FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("LABELLEDTWEET", eu.qualimaster.data.stream.source.LabelledTweet.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput read(Kryo kryo, Input input, Class<FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput> type) {
-+        FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput();
-+        result.setStatus(kryo.readObject(input, eu.qualimaster.data.stream.source.LabelledTweet.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput} algorithm.
-+ */
-+public static class IFTwitterEventPredictionAnalysisOutputSerializer extends Serializer<FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput> implements ISerializer<IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+        SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getSymbols(), out);
-+        SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getEvents(), out);
-+            SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).serializeTo(object.getSymbols(), out);
-+            SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).serializeTo(object.getTimeInterval(), out);
-+        }
-+
-+    @Override
-+    public IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput deserializeFrom(InputStream in) throws IOException {
-+        FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput();
-+        result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        result.setSymbols(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+        result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTwitterEventPrediction.IIFTwitterEventPredictionAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput();
-+            result.setEvents(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            result.setSymbols(SerializerRegistry.getListSerializerSafe("IFEVENTLISTTYPE", eu.qualimaster.families.datatypes.events.IFEvent.class).deserializeFrom(in));
-+            result.setTimeInterval(SerializerRegistry.getSerializerSafe("IFTIMEINTERVAL", eu.qualimaster.families.datatypes.common.IFTimeInterval.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput object) {
-+        kryo.writeObject(output, object.getEvents());
-+        kryo.writeObject(output, object.getSymbols());
-+        kryo.writeObject(output, object.getTimeInterval());
-+    }
-+
-+    @Override
-+    public FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput read(Kryo kryo, Input input, Class<FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput> type) {
-+        FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput result = new FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput();
-+        result.setEvents(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setSymbols(kryo.readObject(input, java.util.ArrayList.class));
-+        result.setTimeInterval(kryo.readObject(input, eu.qualimaster.families.datatypes.common.IFTimeInterval.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFiltering.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFiltering.java
-new file mode 100644
-index 0000000..367c204
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFiltering.java
-@@ -0,0 +1,102 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IFTwitterStreamFiltering" (GEN).
-+ */
-+public class FTwitterStreamFiltering implements IFTwitterStreamFiltering {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IFTwitterStreamFilteringAnalysisInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTwitterStreamFilteringAnalysisInput implements IIFTwitterStreamFilteringAnalysisInput {
-+
-+        private Object status;
-+
-+        @Override
-+        public Object getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(Object status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTwitterStreamFilteringAnalysisInput", FTwitterStreamFilteringSerializers.IFTwitterStreamFilteringAnalysisInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IFTwitterStreamFilteringAnalysisOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IFTwitterStreamFilteringAnalysisOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIFTwitterStreamFilteringAnalysisOutput> implements IIFTwitterStreamFilteringAnalysisOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IFTwitterStreamFilteringAnalysisOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IFTwitterStreamFilteringAnalysisOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IFTwitterStreamFilteringAnalysisOutput createItem() {
-+            return new IFTwitterStreamFilteringAnalysisOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private Object status;
-+
-+        @Override
-+        public Object getStatus(){
-+            return status;
-+        }
-+
-+        @Override
-+        public void setStatus(Object status){
-+            this.status = status;
-+        }
-+        static {
-+            SerializerRegistry.register("IFTwitterStreamFilteringAnalysisOutput", FTwitterStreamFilteringSerializers.IFTwitterStreamFilteringAnalysisOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTwitterStreamFilteringAnalysisInput input, IIFTwitterStreamFilteringAnalysisOutput analysisResult) {
-+    }
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFilteringSerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFilteringSerializers.java
-new file mode 100644
-index 0000000..d0cb901
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/FTwitterStreamFilteringSerializers.java
-@@ -0,0 +1,109 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.FTwitterStreamFiltering;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.FTwitterStreamFilteringProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IFTwitterStreamFiltering" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class FTwitterStreamFilteringSerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput} algorithm.
-+ */
-+public static class IFTwitterStreamFilteringAnalysisInputSerializer extends Serializer<FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput> implements ISerializer<IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput> {
-+
-+    @Override
-+    public void serializeTo(IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput deserializeFrom(InputStream in) throws IOException {
-+        FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisInput deserializeFrom(IDataInput in) throws IOException {
-+            FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput read(Kryo kryo, Input input, Class<FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput> type) {
-+        FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput();
-+        result.setStatus(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput} algorithm.
-+ */
-+public static class IFTwitterStreamFilteringAnalysisOutputSerializer extends Serializer<FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput> implements ISerializer<IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput> {
-+
-+    @Override
-+    public void serializeTo(IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput object, OutputStream out) throws IOException {
-+        SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getStatus(), out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput object, IDataOutput out) throws IOException {
-+            SerializerRegistry.getSerializerSafe("OBJECT", Object.class).serializeTo(object.getStatus(), out);
-+        }
-+
-+    @Override
-+    public IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput deserializeFrom(InputStream in) throws IOException {
-+        FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput();
-+        result.setStatus(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+        return result;
-+    }
-+
-+        @Override
-+        public IFTwitterStreamFiltering.IIFTwitterStreamFilteringAnalysisOutput deserializeFrom(IDataInput in) throws IOException {
-+            FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput();
-+            result.setStatus(SerializerRegistry.getSerializerSafe("OBJECT", Object.class).deserializeFrom(in));
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput object) {
-+        kryo.writeObject(output, object.getStatus());
-+    }
-+
-+    @Override
-+    public FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput read(Kryo kryo, Input input, Class<FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput> type) {
-+        FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput result = new FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput();
-+        result.setStatus(kryo.readObject(input, Object.class));
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamily.java
-new file mode 100644
-index 0000000..ec67835
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamily.java
-@@ -0,0 +1,147 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "IRandomFamily" (GEN).
-+ */
-+public class RandomFamily implements IRandomFamily {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link IRandomFamilyRandomDataInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IRandomFamilyRandomDataInput implements IIRandomFamilyRandomDataInput {
-+
-+        private int randomInteger;
-+        private long timestamp;
-+
-+        @Override
-+        public int getRandomInteger(){
-+            return randomInteger;
-+        }
-+
-+        @Override
-+        public void setRandomInteger(int randomInteger){
-+            this.randomInteger = randomInteger;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        static {
-+            SerializerRegistry.register("IRandomFamilyRandomDataInput", RandomFamilySerializers.IRandomFamilyRandomDataInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link IRandomFamilyRandomDataOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class IRandomFamilyRandomDataOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IIRandomFamilyRandomDataOutput> implements IIRandomFamilyRandomDataOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public IRandomFamilyRandomDataOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private IRandomFamilyRandomDataOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public IRandomFamilyRandomDataOutput createItem() {
-+            return new IRandomFamilyRandomDataOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private int randomInteger;
-+        private long timestamp;
-+
-+        @Override
-+        public int getRandomInteger(){
-+            return randomInteger;
-+        }
-+
-+        @Override
-+        public void setRandomInteger(int randomInteger){
-+            this.randomInteger = randomInteger;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        static {
-+            SerializerRegistry.register("IRandomFamilyRandomDataOutput", RandomFamilySerializers.IRandomFamilyRandomDataOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIRandomFamilyRandomDataInput input, IIRandomFamilyRandomDataOutput randomDataResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "delay".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDelay(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "flag".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterFlag(boolean value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamilySerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamilySerializers.java
-new file mode 100644
-index 0000000..8e57bba
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/RandomFamilySerializers.java
-@@ -0,0 +1,129 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.RandomFamily;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.RandomFamilyProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "IRandomFamily" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class RandomFamilySerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link IRandomFamily.IIRandomFamilyRandomDataInput} algorithm.
-+ */
-+public static class IRandomFamilyRandomDataInputSerializer extends Serializer<RandomFamily.IRandomFamilyRandomDataInput> implements ISerializer<IRandomFamily.IIRandomFamilyRandomDataInput> {
-+
-+    @Override
-+    public void serializeTo(IRandomFamily.IIRandomFamilyRandomDataInput object, OutputStream out) throws IOException {
-+        SIRandomFamilyRandomDataInput tmp = SIRandomFamilyRandomDataInput.newBuilder()
-+            .setRandomInteger(object.getRandomInteger())
-+            .setTimestamp(object.getTimestamp())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IRandomFamily.IIRandomFamilyRandomDataInput object, IDataOutput out) throws IOException {
-+            out.writeInt(object.getRandomInteger());
-+            out.writeLong(object.getTimestamp());
-+        }
-+
-+    @Override
-+    public IRandomFamily.IIRandomFamilyRandomDataInput deserializeFrom(InputStream in) throws IOException {
-+        RandomFamily.IRandomFamilyRandomDataInput result = new RandomFamily.IRandomFamilyRandomDataInput();
-+        SIRandomFamilyRandomDataInput tmp = SIRandomFamilyRandomDataInput.parseDelimitedFrom(in);
-+        result.setRandomInteger(tmp.getRandomInteger());
-+        result.setTimestamp(tmp.getTimestamp());
-+        return result;
-+    }
-+
-+        @Override
-+        public IRandomFamily.IIRandomFamilyRandomDataInput deserializeFrom(IDataInput in) throws IOException {
-+            RandomFamily.IRandomFamilyRandomDataInput result = new RandomFamily.IRandomFamilyRandomDataInput();
-+            result.setRandomInteger(in.nextInt());
-+            result.setTimestamp(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, RandomFamily.IRandomFamilyRandomDataInput object) {
-+        output.writeInt(object.getRandomInteger());
-+        output.writeLong(object.getTimestamp());
-+    }
-+
-+    @Override
-+    public RandomFamily.IRandomFamilyRandomDataInput read(Kryo kryo, Input input, Class<RandomFamily.IRandomFamilyRandomDataInput> type) {
-+        RandomFamily.IRandomFamilyRandomDataInput result = new RandomFamily.IRandomFamilyRandomDataInput();
-+        result.setRandomInteger(input.readInt());
-+        result.setTimestamp(input.readLong());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link IRandomFamily.IIRandomFamilyRandomDataOutput} algorithm.
-+ */
-+public static class IRandomFamilyRandomDataOutputSerializer extends Serializer<RandomFamily.IRandomFamilyRandomDataOutput> implements ISerializer<IRandomFamily.IIRandomFamilyRandomDataOutput> {
-+
-+    @Override
-+    public void serializeTo(IRandomFamily.IIRandomFamilyRandomDataOutput object, OutputStream out) throws IOException {
-+        SIRandomFamilyRandomDataOutput tmp = SIRandomFamilyRandomDataOutput.newBuilder()
-+            .setRandomInteger(object.getRandomInteger())
-+            .setTimestamp(object.getTimestamp())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(IRandomFamily.IIRandomFamilyRandomDataOutput object, IDataOutput out) throws IOException {
-+            out.writeInt(object.getRandomInteger());
-+            out.writeLong(object.getTimestamp());
-+        }
-+
-+    @Override
-+    public IRandomFamily.IIRandomFamilyRandomDataOutput deserializeFrom(InputStream in) throws IOException {
-+        RandomFamily.IRandomFamilyRandomDataOutput result = new RandomFamily.IRandomFamilyRandomDataOutput();
-+        SIRandomFamilyRandomDataOutput tmp = SIRandomFamilyRandomDataOutput.parseDelimitedFrom(in);
-+        result.setRandomInteger(tmp.getRandomInteger());
-+        result.setTimestamp(tmp.getTimestamp());
-+        return result;
-+    }
-+
-+        @Override
-+        public IRandomFamily.IIRandomFamilyRandomDataOutput deserializeFrom(IDataInput in) throws IOException {
-+            RandomFamily.IRandomFamilyRandomDataOutput result = new RandomFamily.IRandomFamilyRandomDataOutput();
-+            result.setRandomInteger(in.nextInt());
-+            result.setTimestamp(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, RandomFamily.IRandomFamilyRandomDataOutput object) {
-+        output.writeInt(object.getRandomInteger());
-+        output.writeLong(object.getTimestamp());
-+    }
-+
-+    @Override
-+    public RandomFamily.IRandomFamilyRandomDataOutput read(Kryo kryo, Input input, Class<RandomFamily.IRandomFamilyRandomDataOutput> type) {
-+        RandomFamily.IRandomFamilyRandomDataOutput result = new RandomFamily.IRandomFamilyRandomDataOutput();
-+        result.setRandomInteger(input.readInt());
-+        result.setTimestamp(input.readLong());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SerializationRegistry.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SerializationRegistry.java
-new file mode 100644
-index 0000000..71aa13b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SerializationRegistry.java
-@@ -0,0 +1,105 @@
-+package eu.qualimaster.families.imp;
-+
-+import javax.annotation.Generated;
-+import backtype.storm.Config;
-+
-+/**
-+ * The registration of the generated serializers (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class SerializationRegistry {
-+
-+/**
-+ * Registers all generated kryo serializers. To be called from a topology.
-+ */
-+    public static final void registerKryoSerializers(Config conf) {
-+        conf.registerSerialization(FPreprocessor.IFPreprocessorSpringStreamInput.class, FPreprocessorSerializers.IFPreprocessorSpringStreamInputSerializer.class);
-+        conf.registerSerialization(FPreprocessor.IFPreprocessorPreprocessedStreamOutput.class, FPreprocessorSerializers.IFPreprocessorPreprocessedStreamOutputSerializer.class);
-+        conf.registerSerialization(FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput.class, FCorrelationFinancialSerializers.IFCorrelationFinancialPreprocessedStreamInputSerializer.class);
-+        conf.registerSerialization(FCorrelationFinancial.IFCorrelationFinancialSymbolListInput.class, FCorrelationFinancialSerializers.IFCorrelationFinancialSymbolListInputSerializer.class);
-+        conf.registerSerialization(FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput.class, FCorrelationFinancialSerializers.IFCorrelationFinancialPairwiseFinancialOutputSerializer.class);
-+        conf.registerSerialization(FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput.class, FSentimentAnalysisSerializers.IFSentimentAnalysisTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput.class, FSentimentAnalysisSerializers.IFSentimentAnalysisAnalyzedStreamOutputSerializer.class);
-+        conf.registerSerialization(FCorrelationTwitter.IFCorrelationTwitterAnalyzedStreamInput.class, FCorrelationTwitterSerializers.IFCorrelationTwitterAnalyzedStreamInputSerializer.class);
-+        conf.registerSerialization(FCorrelationTwitter.IFCorrelationTwitterSymbolListInput.class, FCorrelationTwitterSerializers.IFCorrelationTwitterSymbolListInputSerializer.class);
-+        conf.registerSerialization(FCorrelationTwitter.IFCorrelationTwitterPairwiseTwitterOutput.class, FCorrelationTwitterSerializers.IFCorrelationTwitterPairwiseTwitterOutputSerializer.class);
-+        conf.registerSerialization(FMismatchedFamily.IFMismatchedFamilyMisStringInput.class, FMismatchedFamilySerializers.IFMismatchedFamilyMisStringInputSerializer.class);
-+        conf.registerSerialization(FMismatchedFamily.IFMismatchedFamilyMisStringOutput.class, FMismatchedFamilySerializers.IFMismatchedFamilyMisStringOutputSerializer.class);
-+        conf.registerSerialization(RandomFamily.IRandomFamilyRandomDataInput.class, RandomFamilySerializers.IRandomFamilyRandomDataInputSerializer.class);
-+        conf.registerSerialization(RandomFamily.IRandomFamilyRandomDataOutput.class, RandomFamilySerializers.IRandomFamilyRandomDataOutputSerializer.class);
-+        conf.registerSerialization(SwitchFamily.ISwitchFamilyRandomDataInput.class, SwitchFamilySerializers.ISwitchFamilyRandomDataInputSerializer.class);
-+        conf.registerSerialization(SwitchFamily.ISwitchFamilyRandomDataOutput.class, SwitchFamilySerializers.ISwitchFamilyRandomDataOutputSerializer.class);
-+        conf.registerSerialization(FExpertSearch.IFExpertSearchAnalysisInput.class, FExpertSearchSerializers.IFExpertSearchAnalysisInputSerializer.class);
-+        conf.registerSerialization(FExpertSearch.IFExpertSearchAnalysisOutput.class, FExpertSearchSerializers.IFExpertSearchAnalysisOutputSerializer.class);
-+        conf.registerSerialization(FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisInput.class, FFinancialNetworkExtractionSerializers.IFFinancialNetworkExtractionAnalysisInputSerializer.class);
-+        conf.registerSerialization(FFinancialNetworkExtraction.IFFinancialNetworkExtractionAnalysisOutput.class, FFinancialNetworkExtractionSerializers.IFFinancialNetworkExtractionAnalysisOutputSerializer.class);
-+        conf.registerSerialization(FTwitterCrawling.IFTwitterCrawlingAnalysisInput.class, FTwitterCrawlingSerializers.IFTwitterCrawlingAnalysisInputSerializer.class);
-+        conf.registerSerialization(FTwitterCrawling.IFTwitterCrawlingAnalysisOutput.class, FTwitterCrawlingSerializers.IFTwitterCrawlingAnalysisOutputSerializer.class);
-+        conf.registerSerialization(FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput.class, FTwitterEventDetectionSerializers.IFTwitterEventDetectionTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput.class, FTwitterEventDetectionSerializers.IFTwitterEventDetectionTwitterStreamOutputSerializer.class);
-+        conf.registerSerialization(FTwitterEventPrediction.IFTwitterEventPredictionAnalysisInput.class, FTwitterEventPredictionSerializers.IFTwitterEventPredictionAnalysisInputSerializer.class);
-+        conf.registerSerialization(FTwitterEventPrediction.IFTwitterEventPredictionAnalysisOutput.class, FTwitterEventPredictionSerializers.IFTwitterEventPredictionAnalysisOutputSerializer.class);
-+        conf.registerSerialization(FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisInput.class, FTwitterStreamFilteringSerializers.IFTwitterStreamFilteringAnalysisInputSerializer.class);
-+        conf.registerSerialization(FTwitterStreamFiltering.IFTwitterStreamFilteringAnalysisOutput.class, FTwitterStreamFilteringSerializers.IFTwitterStreamFilteringAnalysisOutputSerializer.class);
-+        conf.registerSerialization(FSpamDetection.IFSpamDetectionTwitterStreamInput.class, FSpamDetectionSerializers.IFSpamDetectionTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FSpamDetection.IFSpamDetectionTwitterStreamOutput.class, FSpamDetectionSerializers.IFSpamDetectionTwitterStreamOutputSerializer.class);
-+        conf.registerSerialization(FSpamRemoval.IFSpamRemovalTwitterStreamInput.class, FSpamRemovalSerializers.IFSpamRemovalTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FSpamRemoval.IFSpamRemovalTwitterStreamOutput.class, FSpamRemovalSerializers.IFSpamRemovalTwitterStreamOutputSerializer.class);
-+        conf.registerSerialization(FTweetClassifier.IFTweetClassifierModifiedTwitterStreamInput.class, FTweetClassifierSerializers.IFTweetClassifierModifiedTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FTweetClassifier.IFTweetClassifierKeywordStreamInput.class, FTweetClassifierSerializers.IFTweetClassifierKeywordStreamInputSerializer.class);
-+        conf.registerSerialization(FTweetClassifier.IFTweetClassifierModifiedTwitterStreamOutput.class, FTweetClassifierSerializers.IFTweetClassifierModifiedTwitterStreamOutputSerializer.class);
-+        conf.registerSerialization(FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput.class, FKeywordAnalyzerSerializers.IFKeywordAnalyzerTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput.class, FKeywordAnalyzerSerializers.IFKeywordAnalyzerTwitterStreamOutputSerializer.class);
-+        conf.registerSerialization(FEventEnrichment.IFEventEnrichmentEventStreamInput.class, FEventEnrichmentSerializers.IFEventEnrichmentEventStreamInputSerializer.class);
-+        conf.registerSerialization(FEventEnrichment.IFEventEnrichmentKeywordStreamInput.class, FEventEnrichmentSerializers.IFEventEnrichmentKeywordStreamInputSerializer.class);
-+        conf.registerSerialization(FEventEnrichment.IFEventEnrichmentEnrichedEventsStreamOutput.class, FEventEnrichmentSerializers.IFEventEnrichmentEnrichedEventsStreamOutputSerializer.class);
-+        conf.registerSerialization(FRecommendations.IFRecommendationsTwitterStreamInput.class, FRecommendationsSerializers.IFRecommendationsTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FRecommendations.IFRecommendationsRecommendationStreamOutput.class, FRecommendationsSerializers.IFRecommendationsRecommendationStreamOutputSerializer.class);
-+        conf.registerSerialization(FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamInput.class, FSimpleRecommendationsSerializers.IFSimpleRecommendationsTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FSimpleRecommendations.IFSimpleRecommendationsTwitterStreamOutput.class, FSimpleRecommendationsSerializers.IFSimpleRecommendationsTwitterStreamOutputSerializer.class);
-+        conf.registerSerialization(FStockParser.IFStockParserTwitterStreamInput.class, FStockParserSerializers.IFStockParserTwitterStreamInputSerializer.class);
-+        conf.registerSerialization(FStockParser.IFStockParserTwitterStreamOutput.class, FStockParserSerializers.IFStockParserTwitterStreamOutputSerializer.class);
-+        conf.registerSerialization(FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput.class, FDynamicGraphCompilationSerializers.IFDynamicGraphCompilationPairwiseFinancialInputSerializer.class);
-+        conf.registerSerialization(FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput.class, FDynamicGraphCompilationSerializers.IFDynamicGraphCompilationEdgeStreamOutputSerializer.class);
-+        conf.registerSerialization(FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput.class, FDynamicHubComputationSerializers.IFDynamicHubComputationEdgeStreamInputSerializer.class);
-+        conf.registerSerialization(FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput.class, FDynamicHubComputationSerializers.IFDynamicHubComputationHubStreamOutputSerializer.class);
-+        conf.registerSerialization(FTransferEntropy.IFTransferEntropyPreprocessedStreamInput.class, FTransferEntropySerializers.IFTransferEntropyPreprocessedStreamInputSerializer.class);
-+        conf.registerSerialization(FTransferEntropy.IFTransferEntropySymbolListInput.class, FTransferEntropySerializers.IFTransferEntropySymbolListInputSerializer.class);
-+        conf.registerSerialization(FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput.class, FTransferEntropySerializers.IFTransferEntropyPairwiseFinancialOutputSerializer.class);
-+        conf.registerSerialization(FMapper.IFMapperPreprocessedStreamInput.class, FMapperSerializers.IFMapperPreprocessedStreamInputSerializer.class);
-+        conf.registerSerialization(FMapper.IFMapperSymbolListInput.class, FMapperSerializers.IFMapperSymbolListInputSerializer.class);
-+        conf.registerSerialization(FMapper.IFMapperSymbolsStreamOutput.class, FMapperSerializers.IFMapperSymbolsStreamOutputSerializer.class);
-+        conf.registerSerialization(FMapper.IFMapperConfigurationStreamOutput.class, FMapperSerializers.IFMapperConfigurationStreamOutputSerializer.class);
-+        conf.registerSerialization(FMapper.IFMapperResetWindowStreamOutput.class, FMapperSerializers.IFMapperResetWindowStreamOutputSerializer.class);
-+        conf.registerSerialization(FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput.class, FHayashiYoshidaSerializers.IFHayashiYoshidaSymbolsStreamInputSerializer.class);
-+        conf.registerSerialization(FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput.class, FHayashiYoshidaSerializers.IFHayashiYoshidaConfigurationStreamInputSerializer.class);
-+        conf.registerSerialization(FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput.class, FHayashiYoshidaSerializers.IFHayashiYoshidaResetWindowStreamInputSerializer.class);
-+        conf.registerSerialization(FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput.class, FHayashiYoshidaSerializers.IFHayashiYoshidaPairwiseFinancialOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraph.IFTimeGraphDataStreamInput.class, FTimeGraphSerializers.IFTimeGraphDataStreamInputSerializer.class);
-+        conf.registerSerialization(FTimeGraph.IFTimeGraphSnapshotQueryStreamInput.class, FTimeGraphSerializers.IFTimeGraphSnapshotQueryStreamInputSerializer.class);
-+        conf.registerSerialization(FTimeGraph.IFTimeGraphPathQueryStreamInput.class, FTimeGraphSerializers.IFTimeGraphPathQueryStreamInputSerializer.class);
-+        conf.registerSerialization(FTimeGraph.IFTimeGraphSnapshotStreamOutput.class, FTimeGraphSerializers.IFTimeGraphSnapshotStreamOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraph.IFTimeGraphPathStreamOutput.class, FTimeGraphSerializers.IFTimeGraphPathStreamOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput.class, FTimeGraphMapperSerializers.IFTimeGraphMapperEdgeStreamInputSerializer.class);
-+        conf.registerSerialization(FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput.class, FTimeGraphMapperSerializers.IFTimeGraphMapperDataStreamOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerDataStreamInputSerializer.class);
-+        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerInternalRequestsInputSerializer.class);
-+        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerUnicastRequestsInputSerializer.class);
-+        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerBroadcastRequestsInputSerializer.class);
-+        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerExternalResponsesOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput.class, FTimeGraphIndexerSerializers.IFTimeGraphIndexerInternalRequestsOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorSnapshotQueryStreamInputSerializer.class);
-+        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorPathQueryStreamInputSerializer.class);
-+        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorExternalResponsesInputSerializer.class);
-+        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorSnapshotStreamOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorPathStreamOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorUnicastRequestsOutputSerializer.class);
-+        conf.registerSerialization(FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput.class, FTimeGraphQueryExecutorSerializers.IFTimeGraphQueryExecutorBroadcastRequestsOutputSerializer.class);
-+    }
-+
-+/**
-+ * Registers all generated hardware serializers. To be called from a topology.
-+ */
-+    public static final void registerHardwareSerializers() {
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamily.java
-new file mode 100644
-index 0000000..f2a0f91
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamily.java
-@@ -0,0 +1,155 @@
-+package eu.qualimaster.families.imp;
-+
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+
-+/**
-+ * The implementation for the algorithm family "ISwitchFamily" (GEN).
-+ */
-+public class SwitchFamily implements ISwitchFamily {
-+
-+    /**
-+     * Provides a default implementation of the data input for the {@link ISwitchFamilyRandomDataInput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class ISwitchFamilyRandomDataInput implements IISwitchFamilyRandomDataInput {
-+
-+        private int randomInteger;
-+        private long timestamp;
-+
-+        @Override
-+        public int getRandomInteger(){
-+            return randomInteger;
-+        }
-+
-+        @Override
-+        public void setRandomInteger(int randomInteger){
-+            this.randomInteger = randomInteger;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        static {
-+            SerializerRegistry.register("ISwitchFamilyRandomDataInput", SwitchFamilySerializers.ISwitchFamilyRandomDataInputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Provides a default implementation of the data output for the {@link ISwitchFamilyRandomDataOutput} algorithm.
-+     * Actual execution system code may also directly wrap the respective tuple concept.
-+     */
-+    public static class ISwitchFamilyRandomDataOutput extends eu.qualimaster.base.algorithm.AbstractOutputItem<IISwitchFamilyRandomDataOutput> implements IISwitchFamilyRandomDataOutput {
-+
-+        /**
-+         * Creates the item.
-+         */
-+        public ISwitchFamilyRandomDataOutput() {
-+            this(true);
-+        }
-+
-+        /**
-+         * Creates a sub-item.
-+         *
-+         * @param topLevel whether it is a top-level item
-+         */
-+        private ISwitchFamilyRandomDataOutput(boolean topLevel) {
-+            super(topLevel);
-+            setParent(this);
-+        }
-+
-+        @Override
-+        public ISwitchFamilyRandomDataOutput createItem() {
-+            return new ISwitchFamilyRandomDataOutput(false);
-+        }
-+        @Override
-+        public void setTaskId(int taskId) {
-+            this.taskId = taskId;
-+        }
-+        @Override
-+        public int getTaskId() {
-+            return taskId;
-+        }
-+        private transient int taskId;
-+        private int randomInteger;
-+        private long timestamp;
-+
-+        @Override
-+        public int getRandomInteger(){
-+            return randomInteger;
-+        }
-+
-+        @Override
-+        public void setRandomInteger(int randomInteger){
-+            this.randomInteger = randomInteger;
-+        }
-+        @Override
-+        public long getTimestamp(){
-+            return timestamp;
-+        }
-+
-+        @Override
-+        public void setTimestamp(long timestamp){
-+            this.timestamp = timestamp;
-+        }
-+        static {
-+            SerializerRegistry.register("ISwitchFamilyRandomDataOutput", SwitchFamilySerializers.ISwitchFamilyRandomDataOutputSerializer.class);
-+        }
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IISwitchFamilyRandomDataInput input, IISwitchFamilyRandomDataOutput randomDataResult) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "aggregationFactor".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterAggregationFactor(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "delay".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDelay(int value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "flag".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterFlag(boolean value) {
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+    }
-+
-+    @Override
-+    public void switchState(State arg0) {
-+    }
-+
-+    @Override
-+    public Double getMeasurement(IObservable arg0) {
-+	    return null;
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamilySerializers.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamilySerializers.java
-new file mode 100644
-index 0000000..d87b517
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/imp/SwitchFamilySerializers.java
-@@ -0,0 +1,129 @@
-+package eu.qualimaster.families.imp;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.io.OutputStream;
-+import javax.annotation.Generated;
-+import com.esotericsoftware.kryo.io.Output;
-+import com.esotericsoftware.kryo.io.Input;
-+import com.esotericsoftware.kryo.Serializer;
-+import com.esotericsoftware.kryo.Kryo;
-+import eu.qualimaster.dataManagement.serialization.ISerializer;
-+import eu.qualimaster.dataManagement.serialization.SerializerRegistry;
-+import eu.qualimaster.dataManagement.serialization.IDataInput;
-+import eu.qualimaster.dataManagement.serialization.IDataOutput;
-+import eu.qualimaster.families.imp.SwitchFamily;
-+import eu.qualimaster.families.inf.*;
-+
-+import eu.qualimaster.protos.SwitchFamilyProtos.*;
-+/**
-+ * The implementation of the serializers for the algorithm family "ISwitchFamily" (GEN).
-+ */
-+@Generated(value="EASy-Producer")
-+public class SwitchFamilySerializers {
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data input for the {@link ISwitchFamily.IISwitchFamilyRandomDataInput} algorithm.
-+ */
-+public static class ISwitchFamilyRandomDataInputSerializer extends Serializer<SwitchFamily.ISwitchFamilyRandomDataInput> implements ISerializer<ISwitchFamily.IISwitchFamilyRandomDataInput> {
-+
-+    @Override
-+    public void serializeTo(ISwitchFamily.IISwitchFamilyRandomDataInput object, OutputStream out) throws IOException {
-+        SISwitchFamilyRandomDataInput tmp = SISwitchFamilyRandomDataInput.newBuilder()
-+            .setRandomInteger(object.getRandomInteger())
-+            .setTimestamp(object.getTimestamp())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(ISwitchFamily.IISwitchFamilyRandomDataInput object, IDataOutput out) throws IOException {
-+            out.writeInt(object.getRandomInteger());
-+            out.writeLong(object.getTimestamp());
-+        }
-+
-+    @Override
-+    public ISwitchFamily.IISwitchFamilyRandomDataInput deserializeFrom(InputStream in) throws IOException {
-+        SwitchFamily.ISwitchFamilyRandomDataInput result = new SwitchFamily.ISwitchFamilyRandomDataInput();
-+        SISwitchFamilyRandomDataInput tmp = SISwitchFamilyRandomDataInput.parseDelimitedFrom(in);
-+        result.setRandomInteger(tmp.getRandomInteger());
-+        result.setTimestamp(tmp.getTimestamp());
-+        return result;
-+    }
-+
-+        @Override
-+        public ISwitchFamily.IISwitchFamilyRandomDataInput deserializeFrom(IDataInput in) throws IOException {
-+            SwitchFamily.ISwitchFamilyRandomDataInput result = new SwitchFamily.ISwitchFamilyRandomDataInput();
-+            result.setRandomInteger(in.nextInt());
-+            result.setTimestamp(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SwitchFamily.ISwitchFamilyRandomDataInput object) {
-+        output.writeInt(object.getRandomInteger());
-+        output.writeLong(object.getTimestamp());
-+    }
-+
-+    @Override
-+    public SwitchFamily.ISwitchFamilyRandomDataInput read(Kryo kryo, Input input, Class<SwitchFamily.ISwitchFamilyRandomDataInput> type) {
-+        SwitchFamily.ISwitchFamilyRandomDataInput result = new SwitchFamily.ISwitchFamilyRandomDataInput();
-+        result.setRandomInteger(input.readInt());
-+        result.setTimestamp(input.readLong());
-+        return result;
-+    }
-+}
-+
-+/**
-+ * Provides a serializer (supports both Kyro and Protobuf) for the default implementation of the data output for the {@link ISwitchFamily.IISwitchFamilyRandomDataOutput} algorithm.
-+ */
-+public static class ISwitchFamilyRandomDataOutputSerializer extends Serializer<SwitchFamily.ISwitchFamilyRandomDataOutput> implements ISerializer<ISwitchFamily.IISwitchFamilyRandomDataOutput> {
-+
-+    @Override
-+    public void serializeTo(ISwitchFamily.IISwitchFamilyRandomDataOutput object, OutputStream out) throws IOException {
-+        SISwitchFamilyRandomDataOutput tmp = SISwitchFamilyRandomDataOutput.newBuilder()
-+            .setRandomInteger(object.getRandomInteger())
-+            .setTimestamp(object.getTimestamp())
-+            .build();
-+        tmp.writeDelimitedTo(out);
-+    }
-+
-+        @Override
-+        public void serializeTo(ISwitchFamily.IISwitchFamilyRandomDataOutput object, IDataOutput out) throws IOException {
-+            out.writeInt(object.getRandomInteger());
-+            out.writeLong(object.getTimestamp());
-+        }
-+
-+    @Override
-+    public ISwitchFamily.IISwitchFamilyRandomDataOutput deserializeFrom(InputStream in) throws IOException {
-+        SwitchFamily.ISwitchFamilyRandomDataOutput result = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+        SISwitchFamilyRandomDataOutput tmp = SISwitchFamilyRandomDataOutput.parseDelimitedFrom(in);
-+        result.setRandomInteger(tmp.getRandomInteger());
-+        result.setTimestamp(tmp.getTimestamp());
-+        return result;
-+    }
-+
-+        @Override
-+        public ISwitchFamily.IISwitchFamilyRandomDataOutput deserializeFrom(IDataInput in) throws IOException {
-+            SwitchFamily.ISwitchFamilyRandomDataOutput result = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+            result.setRandomInteger(in.nextInt());
-+            result.setTimestamp(in.nextLong());
-+            return result;
-+        }
-+
-+    @Override
-+    public void write(Kryo kryo, Output output, SwitchFamily.ISwitchFamilyRandomDataOutput object) {
-+        output.writeInt(object.getRandomInteger());
-+        output.writeLong(object.getTimestamp());
-+    }
-+
-+    @Override
-+    public SwitchFamily.ISwitchFamilyRandomDataOutput read(Kryo kryo, Input input, Class<SwitchFamily.ISwitchFamilyRandomDataOutput> type) {
-+        SwitchFamily.ISwitchFamilyRandomDataOutput result = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+        result.setRandomInteger(input.readInt());
-+        result.setTimestamp(input.readLong());
-+        return result;
-+    }
-+}
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationFinancial.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationFinancial.java
-new file mode 100644
-index 0000000..8cb13b7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationFinancial.java
-@@ -0,0 +1,154 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFCorrelationFinancial" (GEN).
-+ */
-+public interface IFCorrelationFinancial extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFCorrelationFinancialPreprocessedStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFCorrelationFinancialPreprocessedStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+        /**
-+         * Returns the input value for tuple field "volume".
-+         * @return the tuple value
-+         */
-+        public int getVolume();
-+
-+        /**
-+         * Changes the output value for tuple field "volume".
-+         * @param volume the field value
-+         */
-+        public void setVolume(int volume);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFCorrelationFinancialSymbolListInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFCorrelationFinancialSymbolListInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Changes the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFCorrelationFinancialPairwiseFinancialOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFCorrelationFinancialPairwiseFinancialOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFCorrelationFinancialPairwiseFinancialOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "id0".
-+         * @return the tuple value
-+         */
-+        public String getId0();
-+
-+        /**
-+         * Changes the output value for tuple field "id0".
-+         * @param id0 the field value
-+         */
-+        public void setId0(String id0);
-+        /**
-+         * Returns the input value for tuple field "id1".
-+         * @return the tuple value
-+         */
-+        public String getId1();
-+
-+        /**
-+         * Changes the output value for tuple field "id1".
-+         * @param id1 the field value
-+         */
-+        public void setId1(String id1);
-+        /**
-+         * Returns the input value for tuple field "date".
-+         * @return the tuple value
-+         */
-+        public String getDate();
-+
-+        /**
-+         * Changes the output value for tuple field "date".
-+         * @param date the field value
-+         */
-+        public void setDate(String date);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult);
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationTwitter.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationTwitter.java
-new file mode 100644
-index 0000000..4bf86b8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFCorrelationTwitter.java
-@@ -0,0 +1,121 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFCorrelationTwitter" (GEN).
-+ */
-+public interface IFCorrelationTwitter extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFCorrelationTwitterAnalyzedStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFCorrelationTwitterAnalyzedStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+        /**
-+         * Returns the input value for tuple field "volume".
-+         * @return the tuple value
-+         */
-+        public int getVolume();
-+
-+        /**
-+         * Changes the output value for tuple field "volume".
-+         * @param volume the field value
-+         */
-+        public void setVolume(int volume);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFCorrelationTwitterSymbolListInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFCorrelationTwitterSymbolListInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Changes the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFCorrelationTwitterPairwiseTwitterOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFCorrelationTwitterPairwiseTwitterOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFCorrelationTwitterPairwiseTwitterOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "pairwiseCorrelationTwitter".
-+         * @return the tuple value
-+         */
-+        public String getPairwiseCorrelationTwitter();
-+
-+        /**
-+         * Changes the output value for tuple field "pairwiseCorrelationTwitter".
-+         * @param pairwiseCorrelationTwitter the field value
-+         */
-+        public void setPairwiseCorrelationTwitter(String pairwiseCorrelationTwitter);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationTwitterAnalyzedStreamInput input, IIFCorrelationTwitterPairwiseTwitterOutput pairwiseTwitterResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationTwitterSymbolListInput input, IIFCorrelationTwitterPairwiseTwitterOutput pairwiseTwitterResult);
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicGraphCompilation.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicGraphCompilation.java
-new file mode 100644
-index 0000000..77d407f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicGraphCompilation.java
-@@ -0,0 +1,96 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFDynamicGraphCompilation" (GEN).
-+ */
-+public interface IFDynamicGraphCompilation extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFDynamicGraphCompilationPairwiseFinancialInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFDynamicGraphCompilationPairwiseFinancialInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "id0".
-+         * @return the tuple value
-+         */
-+        public String getId0();
-+
-+        /**
-+         * Changes the output value for tuple field "id0".
-+         * @param id0 the field value
-+         */
-+        public void setId0(String id0);
-+        /**
-+         * Returns the input value for tuple field "id1".
-+         * @return the tuple value
-+         */
-+        public String getId1();
-+
-+        /**
-+         * Changes the output value for tuple field "id1".
-+         * @param id1 the field value
-+         */
-+        public void setId1(String id1);
-+        /**
-+         * Returns the input value for tuple field "date".
-+         * @return the tuple value
-+         */
-+        public String getDate();
-+
-+        /**
-+         * Changes the output value for tuple field "date".
-+         * @param date the field value
-+         */
-+        public void setDate(String date);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFDynamicGraphCompilationEdgeStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFDynamicGraphCompilationEdgeStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFDynamicGraphCompilationEdgeStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "edge".
-+         * @return the tuple value
-+         */
-+        public String getEdge();
-+
-+        /**
-+         * Changes the output value for tuple field "edge".
-+         * @param edge the field value
-+         */
-+        public void setEdge(String edge);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFDynamicGraphCompilationPairwiseFinancialInput input, IIFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult);
-+
-+    /**
-+     * Sets the algorithm parameter "correlationThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterCorrelationThreshold(double value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicHubComputation.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicHubComputation.java
-new file mode 100644
-index 0000000..47e7537
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFDynamicHubComputation.java
-@@ -0,0 +1,70 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFDynamicHubComputation" (GEN).
-+ */
-+public interface IFDynamicHubComputation extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFDynamicHubComputationEdgeStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFDynamicHubComputationEdgeStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "edge".
-+         * @return the tuple value
-+         */
-+        public String getEdge();
-+
-+        /**
-+         * Changes the output value for tuple field "edge".
-+         * @param edge the field value
-+         */
-+        public void setEdge(String edge);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFDynamicHubComputationHubStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFDynamicHubComputationHubStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFDynamicHubComputationHubStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "hubList".
-+         * @return the tuple value
-+         */
-+        public String getHubList();
-+
-+        /**
-+         * Changes the output value for tuple field "hubList".
-+         * @param hubList the field value
-+         */
-+        public void setHubList(String hubList);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFDynamicHubComputationEdgeStreamInput input, IIFDynamicHubComputationHubStreamOutput hubStreamResult);
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "hubListSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterHubListSize(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFEventEnrichment.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFEventEnrichment.java
-new file mode 100644
-index 0000000..4cc1fd2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFEventEnrichment.java
-@@ -0,0 +1,91 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFEventEnrichment" (GEN).
-+ */
-+public interface IFEventEnrichment extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFEventEnrichmentEventStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFEventEnrichmentEventStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "tweet".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getTweet();
-+
-+        /**
-+         * Changes the output value for tuple field "tweet".
-+         * @param tweet the field value
-+         */
-+        public void setTweet(eu.qualimaster.data.stream.source.LabelledTweet tweet);
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFEventEnrichmentKeywordStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFEventEnrichmentKeywordStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "keywords".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getKeywords();
-+
-+        /**
-+         * Changes the output value for tuple field "keywords".
-+         * @param keywords the field value
-+         */
-+        public void setKeywords(java.util.List<String> keywords);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFEventEnrichmentEnrichedEventsStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFEventEnrichmentEnrichedEventsStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFEventEnrichmentEnrichedEventsStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFEventEnrichmentEventStreamInput input, IIFEventEnrichmentEnrichedEventsStreamOutput enrichedEventsStreamResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFEventEnrichmentKeywordStreamInput input, IIFEventEnrichmentEnrichedEventsStreamOutput enrichedEventsStreamResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFExpertSearch.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFExpertSearch.java
-new file mode 100644
-index 0000000..dbb567f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFExpertSearch.java
-@@ -0,0 +1,96 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFExpertSearch" (GEN).
-+ */
-+public interface IFExpertSearch extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFExpertSearchAnalysisInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFExpertSearchAnalysisInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public twitter4j.Status getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(twitter4j.Status status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFExpertSearchAnalysisOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFExpertSearchAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFExpertSearchAnalysisOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "experts".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> getExperts();
-+
-+        /**
-+         * Changes the output value for tuple field "experts".
-+         * @param experts the field value
-+         */
-+        public void setExperts(java.util.List<eu.qualimaster.families.datatypes.expertsearch.IFExpert> experts);
-+        /**
-+         * Returns the input value for tuple field "timeInterval".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval();
-+
-+        /**
-+         * Changes the output value for tuple field "timeInterval".
-+         * @param timeInterval the field value
-+         */
-+        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval);
-+        /**
-+         * Returns the input value for tuple field "keywords".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getKeywords();
-+
-+        /**
-+         * Changes the output value for tuple field "keywords".
-+         * @param keywords the field value
-+         */
-+        public void setKeywords(java.util.List<String> keywords);
-+        /**
-+         * Returns the input value for tuple field "symbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getSymbols();
-+
-+        /**
-+         * Changes the output value for tuple field "symbols".
-+         * @param symbols the field value
-+         */
-+        public void setSymbols(java.util.List<String> symbols);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFExpertSearchAnalysisInput input, IIFExpertSearchAnalysisOutput analysisResult);
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFFinancialNetworkExtraction.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFFinancialNetworkExtraction.java
-new file mode 100644
-index 0000000..da9dc45
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFFinancialNetworkExtraction.java
-@@ -0,0 +1,74 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFFinancialNetworkExtraction" (GEN).
-+ */
-+public interface IFFinancialNetworkExtraction extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFFinancialNetworkExtractionAnalysisInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFFinancialNetworkExtractionAnalysisInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public twitter4j.Status getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(twitter4j.Status status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFFinancialNetworkExtractionAnalysisOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFFinancialNetworkExtractionAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFFinancialNetworkExtractionAnalysisOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "edges".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> getEdges();
-+
-+        /**
-+         * Changes the output value for tuple field "edges".
-+         * @param edges the field value
-+         */
-+        public void setEdges(java.util.List<eu.qualimaster.families.datatypes.financialnetwork.IFEdge> edges);
-+        /**
-+         * Returns the input value for tuple field "timeInterval".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval();
-+
-+        /**
-+         * Changes the output value for tuple field "timeInterval".
-+         * @param timeInterval the field value
-+         */
-+        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFFinancialNetworkExtractionAnalysisInput input, IIFFinancialNetworkExtractionAnalysisOutput analysisResult);
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFHayashiYoshida.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFHayashiYoshida.java
-new file mode 100644
-index 0000000..91065aa
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFHayashiYoshida.java
-@@ -0,0 +1,138 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFHayashiYoshida" (GEN).
-+ */
-+public interface IFHayashiYoshida extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFHayashiYoshidaSymbolsStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFHayashiYoshidaSymbolsStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFHayashiYoshidaConfigurationStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFHayashiYoshidaConfigurationStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "pairKey".
-+         * @return the tuple value
-+         */
-+        public String getPairKey();
-+
-+        /**
-+         * Changes the output value for tuple field "pairKey".
-+         * @param pairKey the field value
-+         */
-+        public void setPairKey(String pairKey);
-+        /**
-+         * Returns the input value for tuple field "pairValue".
-+         * @return the tuple value
-+         */
-+        public String getPairValue();
-+
-+        /**
-+         * Changes the output value for tuple field "pairValue".
-+         * @param pairValue the field value
-+         */
-+        public void setPairValue(String pairValue);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFHayashiYoshidaResetWindowStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFHayashiYoshidaResetWindowStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "windowStart".
-+         * @return the tuple value
-+         */
-+        public long getWindowStart();
-+
-+        /**
-+         * Changes the output value for tuple field "windowStart".
-+         * @param windowStart the field value
-+         */
-+        public void setWindowStart(long windowStart);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFHayashiYoshidaPairwiseFinancialOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFHayashiYoshidaPairwiseFinancialOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFHayashiYoshidaPairwiseFinancialOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "pairwiseCorrelationFinancial".
-+         * @return the tuple value
-+         */
-+        public String getPairwiseCorrelationFinancial();
-+
-+        /**
-+         * Changes the output value for tuple field "pairwiseCorrelationFinancial".
-+         * @param pairwiseCorrelationFinancial the field value
-+         */
-+        public void setPairwiseCorrelationFinancial(String pairwiseCorrelationFinancial);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFHayashiYoshidaSymbolsStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFHayashiYoshidaConfigurationStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFHayashiYoshidaResetWindowStreamInput input, IIFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFKeywordAnalyzer.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFKeywordAnalyzer.java
-new file mode 100644
-index 0000000..6f70158
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFKeywordAnalyzer.java
-@@ -0,0 +1,92 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFKeywordAnalyzer" (GEN).
-+ */
-+public interface IFKeywordAnalyzer extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFKeywordAnalyzerTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFKeywordAnalyzerTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFKeywordAnalyzerTwitterStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFKeywordAnalyzerTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFKeywordAnalyzerTwitterStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFKeywordAnalyzerTwitterStreamInput input, IIFKeywordAnalyzerTwitterStreamOutput twitterStreamResult);
-+
-+    /**
-+     * Sets the algorithm parameter "threshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterThreshold(double value);
-+
-+    /**
-+     * Sets the algorithm parameter "decay".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDecay(double value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMapper.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMapper.java
-new file mode 100644
-index 0000000..7be5621
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMapper.java
-@@ -0,0 +1,190 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFMapper" (GEN).
-+ */
-+public interface IFMapper extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFMapperPreprocessedStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFMapperPreprocessedStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+        /**
-+         * Returns the input value for tuple field "volume".
-+         * @return the tuple value
-+         */
-+        public int getVolume();
-+
-+        /**
-+         * Changes the output value for tuple field "volume".
-+         * @param volume the field value
-+         */
-+        public void setVolume(int volume);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFMapperSymbolListInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFMapperSymbolListInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Changes the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFMapperSymbolsStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFMapperSymbolsStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFMapperSymbolsStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFMapperConfigurationStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFMapperConfigurationStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFMapperConfigurationStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "pairKey".
-+         * @return the tuple value
-+         */
-+        public String getPairKey();
-+
-+        /**
-+         * Changes the output value for tuple field "pairKey".
-+         * @param pairKey the field value
-+         */
-+        public void setPairKey(String pairKey);
-+        /**
-+         * Returns the input value for tuple field "pairValue".
-+         * @return the tuple value
-+         */
-+        public String getPairValue();
-+
-+        /**
-+         * Changes the output value for tuple field "pairValue".
-+         * @param pairValue the field value
-+         */
-+        public void setPairValue(String pairValue);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFMapperResetWindowStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFMapperResetWindowStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFMapperResetWindowStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "windowStart".
-+         * @return the tuple value
-+         */
-+        public long getWindowStart();
-+
-+        /**
-+         * Changes the output value for tuple field "windowStart".
-+         * @param windowStart the field value
-+         */
-+        public void setWindowStart(long windowStart);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFMapperPreprocessedStreamInput input, IIFMapperSymbolsStreamOutput symbolsStreamResult, IIFMapperConfigurationStreamOutput configurationStreamResult, IIFMapperResetWindowStreamOutput resetWindowStreamResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFMapperSymbolListInput input, IIFMapperSymbolsStreamOutput symbolsStreamResult, IIFMapperConfigurationStreamOutput configurationStreamResult, IIFMapperResetWindowStreamOutput resetWindowStreamResult);
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMismatchedFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMismatchedFamily.java
-new file mode 100644
-index 0000000..0c8c513
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFMismatchedFamily.java
-@@ -0,0 +1,88 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFMismatchedFamily" (GEN).
-+ */
-+public interface IFMismatchedFamily extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFMismatchedFamilyMisStringInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFMismatchedFamilyMisStringInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolTuple1".
-+         * @return the tuple value
-+         */
-+        public String getSymbolTuple1();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolTuple1".
-+         * @param symbolTuple1 the field value
-+         */
-+        public void setSymbolTuple1(String symbolTuple1);
-+        /**
-+         * Returns the input value for tuple field "volume".
-+         * @return the tuple value
-+         */
-+        public int getVolume();
-+
-+        /**
-+         * Changes the output value for tuple field "volume".
-+         * @param volume the field value
-+         */
-+        public void setVolume(int volume);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFMismatchedFamilyMisStringOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFMismatchedFamilyMisStringOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFMismatchedFamilyMisStringOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "streamID1".
-+         * @return the tuple value
-+         */
-+        public String getStreamID1();
-+
-+        /**
-+         * Changes the output value for tuple field "streamID1".
-+         * @param streamID1 the field value
-+         */
-+        public void setStreamID1(String streamID1);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public int getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(int timestamp);
-+        /**
-+         * Returns the input value for tuple field "quote".
-+         * @return the tuple value
-+         */
-+        public double getQuote();
-+
-+        /**
-+         * Changes the output value for tuple field "quote".
-+         * @param quote the field value
-+         */
-+        public void setQuote(double quote);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFMismatchedFamilyMisStringInput input, IIFMismatchedFamilyMisStringOutput misStringResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFPreprocessor.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFPreprocessor.java
-new file mode 100644
-index 0000000..85dd771
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFPreprocessor.java
-@@ -0,0 +1,88 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFPreprocessor" (GEN).
-+ */
-+public interface IFPreprocessor extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFPreprocessorSpringStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFPreprocessorSpringStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolTuple".
-+         * @return the tuple value
-+         */
-+        public String getSymbolTuple();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolTuple".
-+         * @param symbolTuple the field value
-+         */
-+        public void setSymbolTuple(String symbolTuple);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFPreprocessorPreprocessedStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFPreprocessorPreprocessedStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFPreprocessorPreprocessedStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+        /**
-+         * Returns the input value for tuple field "volume".
-+         * @return the tuple value
-+         */
-+        public int getVolume();
-+
-+        /**
-+         * Changes the output value for tuple field "volume".
-+         * @param volume the field value
-+         */
-+        public void setVolume(int volume);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFPreprocessorSpringStreamInput input, IIFPreprocessorPreprocessedStreamOutput preprocessedStreamResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFRecommendations.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFRecommendations.java
-new file mode 100644
-index 0000000..3db1b34
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFRecommendations.java
-@@ -0,0 +1,81 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFRecommendations" (GEN).
-+ */
-+public interface IFRecommendations extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFRecommendationsTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFRecommendationsTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFRecommendationsRecommendationStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFRecommendationsRecommendationStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFRecommendationsRecommendationStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "recommendations".
-+         * @return the tuple value
-+         */
-+        public String getRecommendations();
-+
-+        /**
-+         * Changes the output value for tuple field "recommendations".
-+         * @param recommendations the field value
-+         */
-+        public void setRecommendations(String recommendations);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFRecommendationsTwitterStreamInput input, IIFRecommendationsRecommendationStreamOutput recommendationStreamResult);
-+
-+    /**
-+     * Sets the algorithm parameter "impactThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterImpactThreshold(double value);
-+
-+    /**
-+     * Sets the algorithm parameter "stockCooccurrenceThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterStockCooccurrenceThreshold(double value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSentimentAnalysis.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSentimentAnalysis.java
-new file mode 100644
-index 0000000..c0d20b8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSentimentAnalysis.java
-@@ -0,0 +1,110 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFSentimentAnalysis" (GEN).
-+ */
-+public interface IFSentimentAnalysis extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFSentimentAnalysisTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFSentimentAnalysisTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFSentimentAnalysisAnalyzedStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFSentimentAnalysisAnalyzedStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFSentimentAnalysisAnalyzedStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+        /**
-+         * Returns the input value for tuple field "volume".
-+         * @return the tuple value
-+         */
-+        public int getVolume();
-+
-+        /**
-+         * Changes the output value for tuple field "volume".
-+         * @param volume the field value
-+         */
-+        public void setVolume(int volume);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFSentimentAnalysisTwitterStreamInput input, IIFSentimentAnalysisAnalyzedStreamOutput analyzedStreamResult);
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "sentimentClass".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterSentimentClass(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "classificationThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterClassificationThreshold(double value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSimpleRecommendations.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSimpleRecommendations.java
-new file mode 100644
-index 0000000..26cfba6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSimpleRecommendations.java
-@@ -0,0 +1,66 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFSimpleRecommendations" (GEN).
-+ */
-+public interface IFSimpleRecommendations extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFSimpleRecommendationsTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFSimpleRecommendationsTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFSimpleRecommendationsTwitterStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFSimpleRecommendationsTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFSimpleRecommendationsTwitterStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "recommendations".
-+         * @return the tuple value
-+         */
-+        public String getRecommendations();
-+
-+        /**
-+         * Changes the output value for tuple field "recommendations".
-+         * @param recommendations the field value
-+         */
-+        public void setRecommendations(String recommendations);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFSimpleRecommendationsTwitterStreamInput input, IIFSimpleRecommendationsTwitterStreamOutput twitterStreamResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamDetection.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamDetection.java
-new file mode 100644
-index 0000000..bc48626
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamDetection.java
-@@ -0,0 +1,66 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFSpamDetection" (GEN).
-+ */
-+public interface IFSpamDetection extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFSpamDetectionTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFSpamDetectionTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFSpamDetectionTwitterStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFSpamDetectionTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFSpamDetectionTwitterStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+        /**
-+         * Returns the input value for tuple field "spamPropability".
-+         * @return the tuple value
-+         */
-+        public double getSpamPropability();
-+
-+        /**
-+         * Changes the output value for tuple field "spamPropability".
-+         * @param spamPropability the field value
-+         */
-+        public void setSpamPropability(double spamPropability);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFSpamDetectionTwitterStreamInput input, IIFSpamDetectionTwitterStreamOutput twitterStreamResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamRemoval.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamRemoval.java
-new file mode 100644
-index 0000000..1e2d15d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFSpamRemoval.java
-@@ -0,0 +1,74 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFSpamRemoval" (GEN).
-+ */
-+public interface IFSpamRemoval extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFSpamRemovalTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFSpamRemovalTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+        /**
-+         * Returns the input value for tuple field "spamPropability".
-+         * @return the tuple value
-+         */
-+        public double getSpamPropability();
-+
-+        /**
-+         * Changes the output value for tuple field "spamPropability".
-+         * @param spamPropability the field value
-+         */
-+        public void setSpamPropability(double spamPropability);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFSpamRemovalTwitterStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFSpamRemovalTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFSpamRemovalTwitterStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFSpamRemovalTwitterStreamInput input, IIFSpamRemovalTwitterStreamOutput twitterStreamResult);
-+
-+    /**
-+     * Sets the algorithm parameter "spamThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterSpamThreshold(double value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFStockParser.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFStockParser.java
-new file mode 100644
-index 0000000..688a501
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFStockParser.java
-@@ -0,0 +1,66 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFStockParser" (GEN).
-+ */
-+public interface IFStockParser extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFStockParserTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFStockParserTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFStockParserTwitterStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFStockParserTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFStockParserTwitterStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+        /**
-+         * Returns the input value for tuple field "stocks".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getStocks();
-+
-+        /**
-+         * Changes the output value for tuple field "stocks".
-+         * @param stocks the field value
-+         */
-+        public void setStocks(java.util.List<String> stocks);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFStockParserTwitterStreamInput input, IIFStockParserTwitterStreamOutput twitterStreamResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraph.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraph.java
-new file mode 100644
-index 0000000..01281c0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraph.java
-@@ -0,0 +1,189 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTimeGraph" (GEN).
-+ */
-+public interface IFTimeGraph extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphDataStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphDataStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "update".
-+         * @return the tuple value
-+         */
-+        public Object getUpdate();
-+
-+        /**
-+         * Changes the output value for tuple field "update".
-+         * @param update the field value
-+         */
-+        public void setUpdate(Object update);
-+        /**
-+         * Returns the input value for tuple field "isAddition".
-+         * @return the tuple value
-+         */
-+        public boolean getIsAddition();
-+
-+        /**
-+         * Changes the output value for tuple field "isAddition".
-+         * @param isAddition the field value
-+         */
-+        public void setIsAddition(boolean isAddition);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphSnapshotQueryStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphSnapshotQueryStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "start".
-+         * @return the tuple value
-+         */
-+        public long getStart();
-+
-+        /**
-+         * Changes the output value for tuple field "start".
-+         * @param start the field value
-+         */
-+        public void setStart(long start);
-+        /**
-+         * Returns the input value for tuple field "end".
-+         * @return the tuple value
-+         */
-+        public long getEnd();
-+
-+        /**
-+         * Changes the output value for tuple field "end".
-+         * @param end the field value
-+         */
-+        public void setEnd(long end);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphPathQueryStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphPathQueryStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "start".
-+         * @return the tuple value
-+         */
-+        public long getStart();
-+
-+        /**
-+         * Changes the output value for tuple field "start".
-+         * @param start the field value
-+         */
-+        public void setStart(long start);
-+        /**
-+         * Returns the input value for tuple field "end".
-+         * @return the tuple value
-+         */
-+        public long getEnd();
-+
-+        /**
-+         * Changes the output value for tuple field "end".
-+         * @param end the field value
-+         */
-+        public void setEnd(long end);
-+        /**
-+         * Returns the input value for tuple field "vertexA".
-+         * @return the tuple value
-+         */
-+        public String getVertexA();
-+
-+        /**
-+         * Changes the output value for tuple field "vertexA".
-+         * @param vertexA the field value
-+         */
-+        public void setVertexA(String vertexA);
-+        /**
-+         * Returns the input value for tuple field "vertexB".
-+         * @return the tuple value
-+         */
-+        public String getVertexB();
-+
-+        /**
-+         * Changes the output value for tuple field "vertexB".
-+         * @param vertexB the field value
-+         */
-+        public void setVertexB(String vertexB);
-+        /**
-+         * Returns the input value for tuple field "type".
-+         * @return the tuple value
-+         */
-+        public String getType();
-+
-+        /**
-+         * Changes the output value for tuple field "type".
-+         * @param type the field value
-+         */
-+        public void setType(String type);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphSnapshotStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphSnapshotStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphSnapshotStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "snapshot".
-+         * @return the tuple value
-+         */
-+        public String getSnapshot();
-+
-+        /**
-+         * Changes the output value for tuple field "snapshot".
-+         * @param snapshot the field value
-+         */
-+        public void setSnapshot(String snapshot);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphPathStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphPathStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphPathStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "path".
-+         * @return the tuple value
-+         */
-+        public String getPath();
-+
-+        /**
-+         * Changes the output value for tuple field "path".
-+         * @param path the field value
-+         */
-+        public void setPath(String path);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphDataStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphSnapshotQueryStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphPathQueryStreamInput input, IIFTimeGraphSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphPathStreamOutput pathStreamResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphIndexer.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphIndexer.java
-new file mode 100644
-index 0000000..b51c8c2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphIndexer.java
-@@ -0,0 +1,159 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTimeGraphIndexer" (GEN).
-+ */
-+public interface IFTimeGraphIndexer extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphIndexerDataStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphIndexerDataStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "update".
-+         * @return the tuple value
-+         */
-+        public Object getUpdate();
-+
-+        /**
-+         * Changes the output value for tuple field "update".
-+         * @param update the field value
-+         */
-+        public void setUpdate(Object update);
-+        /**
-+         * Returns the input value for tuple field "isAddition".
-+         * @return the tuple value
-+         */
-+        public boolean getIsAddition();
-+
-+        /**
-+         * Changes the output value for tuple field "isAddition".
-+         * @param isAddition the field value
-+         */
-+        public void setIsAddition(boolean isAddition);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphIndexerInternalRequestsInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphIndexerInternalRequestsInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "internalRequest".
-+         * @return the tuple value
-+         */
-+        public Object getInternalRequest();
-+
-+        /**
-+         * Changes the output value for tuple field "internalRequest".
-+         * @param internalRequest the field value
-+         */
-+        public void setInternalRequest(Object internalRequest);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphIndexerUnicastRequestsInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphIndexerUnicastRequestsInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "unicastExternalRequest".
-+         * @return the tuple value
-+         */
-+        public Object getUnicastExternalRequest();
-+
-+        /**
-+         * Changes the output value for tuple field "unicastExternalRequest".
-+         * @param unicastExternalRequest the field value
-+         */
-+        public void setUnicastExternalRequest(Object unicastExternalRequest);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphIndexerBroadcastRequestsInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphIndexerBroadcastRequestsInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "broadcastExternalRequest".
-+         * @return the tuple value
-+         */
-+        public Object getBroadcastExternalRequest();
-+
-+        /**
-+         * Changes the output value for tuple field "broadcastExternalRequest".
-+         * @param broadcastExternalRequest the field value
-+         */
-+        public void setBroadcastExternalRequest(Object broadcastExternalRequest);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphIndexerExternalResponsesOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphIndexerExternalResponsesOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphIndexerExternalResponsesOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "externalResponse".
-+         * @return the tuple value
-+         */
-+        public Object getExternalResponse();
-+
-+        /**
-+         * Changes the output value for tuple field "externalResponse".
-+         * @param externalResponse the field value
-+         */
-+        public void setExternalResponse(Object externalResponse);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphIndexerInternalRequestsOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphIndexerInternalRequestsOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphIndexerInternalRequestsOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "internalRequest".
-+         * @return the tuple value
-+         */
-+        public Object getInternalRequest();
-+
-+        /**
-+         * Changes the output value for tuple field "internalRequest".
-+         * @param internalRequest the field value
-+         */
-+        public void setInternalRequest(Object internalRequest);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphIndexerDataStreamInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphIndexerInternalRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphIndexerUnicastRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphIndexerBroadcastRequestsInput input, IIFTimeGraphIndexerExternalResponsesOutput externalResponsesResult, IIFTimeGraphIndexerInternalRequestsOutput internalRequestsResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphMapper.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphMapper.java
-new file mode 100644
-index 0000000..6b1affc
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphMapper.java
-@@ -0,0 +1,66 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTimeGraphMapper" (GEN).
-+ */
-+public interface IFTimeGraphMapper extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphMapperEdgeStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphMapperEdgeStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "edge".
-+         * @return the tuple value
-+         */
-+        public String getEdge();
-+
-+        /**
-+         * Changes the output value for tuple field "edge".
-+         * @param edge the field value
-+         */
-+        public void setEdge(String edge);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphMapperDataStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphMapperDataStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphMapperDataStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "update".
-+         * @return the tuple value
-+         */
-+        public Object getUpdate();
-+
-+        /**
-+         * Changes the output value for tuple field "update".
-+         * @param update the field value
-+         */
-+        public void setUpdate(Object update);
-+        /**
-+         * Returns the input value for tuple field "isAddition".
-+         * @return the tuple value
-+         */
-+        public boolean getIsAddition();
-+
-+        /**
-+         * Changes the output value for tuple field "isAddition".
-+         * @param isAddition the field value
-+         */
-+        public void setIsAddition(boolean isAddition);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphMapperEdgeStreamInput input, IIFTimeGraphMapperDataStreamOutput dataStreamResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphQueryExecutor.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphQueryExecutor.java
-new file mode 100644
-index 0000000..f568286
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTimeGraphQueryExecutor.java
-@@ -0,0 +1,214 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTimeGraphQueryExecutor" (GEN).
-+ */
-+public interface IFTimeGraphQueryExecutor extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphQueryExecutorSnapshotQueryStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphQueryExecutorSnapshotQueryStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "start".
-+         * @return the tuple value
-+         */
-+        public long getStart();
-+
-+        /**
-+         * Changes the output value for tuple field "start".
-+         * @param start the field value
-+         */
-+        public void setStart(long start);
-+        /**
-+         * Returns the input value for tuple field "end".
-+         * @return the tuple value
-+         */
-+        public long getEnd();
-+
-+        /**
-+         * Changes the output value for tuple field "end".
-+         * @param end the field value
-+         */
-+        public void setEnd(long end);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphQueryExecutorPathQueryStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphQueryExecutorPathQueryStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "start".
-+         * @return the tuple value
-+         */
-+        public long getStart();
-+
-+        /**
-+         * Changes the output value for tuple field "start".
-+         * @param start the field value
-+         */
-+        public void setStart(long start);
-+        /**
-+         * Returns the input value for tuple field "end".
-+         * @return the tuple value
-+         */
-+        public long getEnd();
-+
-+        /**
-+         * Changes the output value for tuple field "end".
-+         * @param end the field value
-+         */
-+        public void setEnd(long end);
-+        /**
-+         * Returns the input value for tuple field "vertexA".
-+         * @return the tuple value
-+         */
-+        public String getVertexA();
-+
-+        /**
-+         * Changes the output value for tuple field "vertexA".
-+         * @param vertexA the field value
-+         */
-+        public void setVertexA(String vertexA);
-+        /**
-+         * Returns the input value for tuple field "vertexB".
-+         * @return the tuple value
-+         */
-+        public String getVertexB();
-+
-+        /**
-+         * Changes the output value for tuple field "vertexB".
-+         * @param vertexB the field value
-+         */
-+        public void setVertexB(String vertexB);
-+        /**
-+         * Returns the input value for tuple field "type".
-+         * @return the tuple value
-+         */
-+        public String getType();
-+
-+        /**
-+         * Changes the output value for tuple field "type".
-+         * @param type the field value
-+         */
-+        public void setType(String type);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTimeGraphQueryExecutorExternalResponsesInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTimeGraphQueryExecutorExternalResponsesInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "externalResponse".
-+         * @return the tuple value
-+         */
-+        public Object getExternalResponse();
-+
-+        /**
-+         * Changes the output value for tuple field "externalResponse".
-+         * @param externalResponse the field value
-+         */
-+        public void setExternalResponse(Object externalResponse);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphQueryExecutorSnapshotStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphQueryExecutorSnapshotStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphQueryExecutorSnapshotStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "snapshot".
-+         * @return the tuple value
-+         */
-+        public String getSnapshot();
-+
-+        /**
-+         * Changes the output value for tuple field "snapshot".
-+         * @param snapshot the field value
-+         */
-+        public void setSnapshot(String snapshot);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphQueryExecutorPathStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphQueryExecutorPathStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphQueryExecutorPathStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "path".
-+         * @return the tuple value
-+         */
-+        public String getPath();
-+
-+        /**
-+         * Changes the output value for tuple field "path".
-+         * @param path the field value
-+         */
-+        public void setPath(String path);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphQueryExecutorUnicastRequestsOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphQueryExecutorUnicastRequestsOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphQueryExecutorUnicastRequestsOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "unicastExternalRequest".
-+         * @return the tuple value
-+         */
-+        public Object getUnicastExternalRequest();
-+
-+        /**
-+         * Changes the output value for tuple field "unicastExternalRequest".
-+         * @param unicastExternalRequest the field value
-+         */
-+        public void setUnicastExternalRequest(Object unicastExternalRequest);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTimeGraphQueryExecutorBroadcastRequestsOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTimeGraphQueryExecutorBroadcastRequestsOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTimeGraphQueryExecutorBroadcastRequestsOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "broadcastExternalRequest".
-+         * @return the tuple value
-+         */
-+        public Object getBroadcastExternalRequest();
-+
-+        /**
-+         * Changes the output value for tuple field "broadcastExternalRequest".
-+         * @param broadcastExternalRequest the field value
-+         */
-+        public void setBroadcastExternalRequest(Object broadcastExternalRequest);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphQueryExecutorSnapshotQueryStreamInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphQueryExecutorPathQueryStreamInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTimeGraphQueryExecutorExternalResponsesInput input, IIFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult, IIFTimeGraphQueryExecutorPathStreamOutput pathStreamResult, IIFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult, IIFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTransferEntropy.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTransferEntropy.java
-new file mode 100644
-index 0000000..fc6352a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTransferEntropy.java
-@@ -0,0 +1,168 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTransferEntropy" (GEN).
-+ */
-+public interface IFTransferEntropy extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTransferEntropyPreprocessedStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTransferEntropyPreprocessedStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "symbolId".
-+         * @return the tuple value
-+         */
-+        public String getSymbolId();
-+
-+        /**
-+         * Changes the output value for tuple field "symbolId".
-+         * @param symbolId the field value
-+         */
-+        public void setSymbolId(String symbolId);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+        /**
-+         * Returns the input value for tuple field "volume".
-+         * @return the tuple value
-+         */
-+        public int getVolume();
-+
-+        /**
-+         * Changes the output value for tuple field "volume".
-+         * @param volume the field value
-+         */
-+        public void setVolume(int volume);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTransferEntropySymbolListInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTransferEntropySymbolListInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "allSymbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getAllSymbols();
-+
-+        /**
-+         * Changes the output value for tuple field "allSymbols".
-+         * @param allSymbols the field value
-+         */
-+        public void setAllSymbols(java.util.List<String> allSymbols);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTransferEntropyPairwiseFinancialOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTransferEntropyPairwiseFinancialOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTransferEntropyPairwiseFinancialOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "id0".
-+         * @return the tuple value
-+         */
-+        public String getId0();
-+
-+        /**
-+         * Changes the output value for tuple field "id0".
-+         * @param id0 the field value
-+         */
-+        public void setId0(String id0);
-+        /**
-+         * Returns the input value for tuple field "id1".
-+         * @return the tuple value
-+         */
-+        public String getId1();
-+
-+        /**
-+         * Changes the output value for tuple field "id1".
-+         * @param id1 the field value
-+         */
-+        public void setId1(String id1);
-+        /**
-+         * Returns the input value for tuple field "date".
-+         * @return the tuple value
-+         */
-+        public String getDate();
-+
-+        /**
-+         * Changes the output value for tuple field "date".
-+         * @param date the field value
-+         */
-+        public void setDate(String date);
-+        /**
-+         * Returns the input value for tuple field "value".
-+         * @return the tuple value
-+         */
-+        public double getValue();
-+
-+        /**
-+         * Changes the output value for tuple field "value".
-+         * @param value the field value
-+         */
-+        public void setValue(double value);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTransferEntropyPreprocessedStreamInput input, IIFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTransferEntropySymbolListInput input, IIFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult);
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "windowAdvance".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowAdvance(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "densitySize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDensitySize(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTweetClassifier.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTweetClassifier.java
-new file mode 100644
-index 0000000..4563275
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTweetClassifier.java
-@@ -0,0 +1,91 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTweetClassifier" (GEN).
-+ */
-+public interface IFTweetClassifier extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTweetClassifierModifiedTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTweetClassifierModifiedTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public twitter4j.Status getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(twitter4j.Status status);
-+    }
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTweetClassifierKeywordStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTweetClassifierKeywordStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "keywords".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getKeywords();
-+
-+        /**
-+         * Changes the output value for tuple field "keywords".
-+         * @param keywords the field value
-+         */
-+        public void setKeywords(java.util.List<String> keywords);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTweetClassifierModifiedTwitterStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTweetClassifierModifiedTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTweetClassifierModifiedTwitterStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "tweet".
-+         * @return the tuple value
-+         */
-+        public twitter4j.Status getTweet();
-+
-+        /**
-+         * Changes the output value for tuple field "tweet".
-+         * @param tweet the field value
-+         */
-+        public void setTweet(twitter4j.Status tweet);
-+        /**
-+         * Returns the input value for tuple field "stocks".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getStocks();
-+
-+        /**
-+         * Changes the output value for tuple field "stocks".
-+         * @param stocks the field value
-+         */
-+        public void setStocks(java.util.List<String> stocks);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTweetClassifierModifiedTwitterStreamInput input, IIFTweetClassifierModifiedTwitterStreamOutput modifiedTwitterStreamResult);
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTweetClassifierKeywordStreamInput input, IIFTweetClassifierModifiedTwitterStreamOutput modifiedTwitterStreamResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterCrawling.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterCrawling.java
-new file mode 100644
-index 0000000..13abd3a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterCrawling.java
-@@ -0,0 +1,74 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTwitterCrawling" (GEN).
-+ */
-+public interface IFTwitterCrawling extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTwitterCrawlingAnalysisInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTwitterCrawlingAnalysisInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTwitterCrawlingAnalysisOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTwitterCrawlingAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTwitterCrawlingAnalysisOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+        /**
-+         * Returns the input value for tuple field "timeInterval".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval();
-+
-+        /**
-+         * Changes the output value for tuple field "timeInterval".
-+         * @param timeInterval the field value
-+         */
-+        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTwitterCrawlingAnalysisInput input, IIFTwitterCrawlingAnalysisOutput analysisResult);
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventDetection.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventDetection.java
-new file mode 100644
-index 0000000..c5ece83
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventDetection.java
-@@ -0,0 +1,106 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTwitterEventDetection" (GEN).
-+ */
-+public interface IFTwitterEventDetection extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTwitterEventDetectionTwitterStreamInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTwitterEventDetectionTwitterStreamInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+        /**
-+         * Returns the input value for tuple field "stocks".
-+         * @return the tuple value
-+         */
-+        public java.util.List<String> getStocks();
-+
-+        /**
-+         * Changes the output value for tuple field "stocks".
-+         * @param stocks the field value
-+         */
-+        public void setStocks(java.util.List<String> stocks);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTwitterEventDetectionTwitterStreamOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTwitterEventDetectionTwitterStreamOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTwitterEventDetectionTwitterStreamOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTwitterEventDetectionTwitterStreamInput input, IIFTwitterEventDetectionTwitterStreamOutput twitterStreamResult);
-+
-+    /**
-+     * Sets the algorithm parameter "hardThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterHardThreshold(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "percentageThreshold".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterPercentageThreshold(double value);
-+
-+    /**
-+     * Sets the algorithm parameter "lengthOfTimeWindow".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterLengthOfTimeWindow(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "frequenceOfCheckForEvent".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterFrequenceOfCheckForEvent(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventPrediction.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventPrediction.java
-new file mode 100644
-index 0000000..9a66c30
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterEventPrediction.java
-@@ -0,0 +1,85 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTwitterEventPrediction" (GEN).
-+ */
-+public interface IFTwitterEventPrediction extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTwitterEventPredictionAnalysisInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTwitterEventPredictionAnalysisInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.data.stream.source.LabelledTweet getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(eu.qualimaster.data.stream.source.LabelledTweet status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTwitterEventPredictionAnalysisOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTwitterEventPredictionAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTwitterEventPredictionAnalysisOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "events".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getEvents();
-+
-+        /**
-+         * Changes the output value for tuple field "events".
-+         * @param events the field value
-+         */
-+        public void setEvents(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> events);
-+        /**
-+         * Returns the input value for tuple field "symbols".
-+         * @return the tuple value
-+         */
-+        public java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> getSymbols();
-+
-+        /**
-+         * Changes the output value for tuple field "symbols".
-+         * @param symbols the field value
-+         */
-+        public void setSymbols(java.util.List<eu.qualimaster.families.datatypes.events.IFEvent> symbols);
-+        /**
-+         * Returns the input value for tuple field "timeInterval".
-+         * @return the tuple value
-+         */
-+        public eu.qualimaster.families.datatypes.common.IFTimeInterval getTimeInterval();
-+
-+        /**
-+         * Changes the output value for tuple field "timeInterval".
-+         * @param timeInterval the field value
-+         */
-+        public void setTimeInterval(eu.qualimaster.families.datatypes.common.IFTimeInterval timeInterval);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTwitterEventPredictionAnalysisInput input, IIFTwitterEventPredictionAnalysisOutput analysisResult);
-+
-+    /**
-+     * Sets the algorithm parameter "timeSeriesGranularity".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterTimeSeriesGranularity(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterStreamFiltering.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterStreamFiltering.java
-new file mode 100644
-index 0000000..11eb6e2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IFTwitterStreamFiltering.java
-@@ -0,0 +1,55 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IFTwitterStreamFiltering" (GEN).
-+ */
-+public interface IFTwitterStreamFiltering extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIFTwitterStreamFilteringAnalysisInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIFTwitterStreamFilteringAnalysisInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public Object getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(Object status);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIFTwitterStreamFilteringAnalysisOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIFTwitterStreamFilteringAnalysisOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIFTwitterStreamFilteringAnalysisOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "status".
-+         * @return the tuple value
-+         */
-+        public Object getStatus();
-+
-+        /**
-+         * Changes the output value for tuple field "status".
-+         * @param status the field value
-+         */
-+        public void setStatus(Object status);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFTwitterStreamFilteringAnalysisInput input, IIFTwitterStreamFilteringAnalysisOutput analysisResult);
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IRandomFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IRandomFamily.java
-new file mode 100644
-index 0000000..cfd797d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/IRandomFamily.java
-@@ -0,0 +1,99 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "IRandomFamily" (GEN).
-+ */
-+public interface IRandomFamily extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IIRandomFamilyRandomDataInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IIRandomFamilyRandomDataInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "randomInteger".
-+         * @return the tuple value
-+         */
-+        public int getRandomInteger();
-+
-+        /**
-+         * Changes the output value for tuple field "randomInteger".
-+         * @param randomInteger the field value
-+         */
-+        public void setRandomInteger(int randomInteger);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IIRandomFamilyRandomDataOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IIRandomFamilyRandomDataOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IIRandomFamilyRandomDataOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "randomInteger".
-+         * @return the tuple value
-+         */
-+        public int getRandomInteger();
-+
-+        /**
-+         * Changes the output value for tuple field "randomInteger".
-+         * @param randomInteger the field value
-+         */
-+        public void setRandomInteger(int randomInteger);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIRandomFamilyRandomDataInput input, IIRandomFamilyRandomDataOutput randomDataResult);
-+
-+    /**
-+     * Sets the algorithm parameter "delay".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDelay(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "flag".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterFlag(boolean value);
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/ISwitchFamily.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/ISwitchFamily.java
-new file mode 100644
-index 0000000..b90fd01
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/eu/qualimaster/families/inf/ISwitchFamily.java
-@@ -0,0 +1,106 @@
-+package eu.qualimaster.families.inf;
-+
-+import java.io.Serializable;
-+import eu.qualimaster.base.algorithm.IFamily;
-+import eu.qualimaster.base.algorithm.IDirectGroupingInfo;
-+
-+/**
-+ * Defines the interface for the algorithm family "ISwitchFamily" (GEN).
-+ */
-+public interface ISwitchFamily extends IFamily{
-+
-+    /**
-+     * Defines the data input interface for the {@link IISwitchFamilyRandomDataInput} algorithm (over all defined input tuples).
-+     */
-+    public static interface IISwitchFamilyRandomDataInput extends Serializable {
-+
-+        /**
-+         * Returns the input value for tuple field "randomInteger".
-+         * @return the tuple value
-+         */
-+        public int getRandomInteger();
-+
-+        /**
-+         * Changes the output value for tuple field "randomInteger".
-+         * @param randomInteger the field value
-+         */
-+        public void setRandomInteger(int randomInteger);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+    }
-+
-+    /**
-+     * Defines the data output interface for the {@link IISwitchFamilyRandomDataOutput} algorithm (over all defined output tuples).
-+     */
-+    public static interface IISwitchFamilyRandomDataOutput extends Serializable, eu.qualimaster.base.algorithm.IOutputItem<IISwitchFamilyRandomDataOutput>, IDirectGroupingInfo {
-+
-+        /**
-+         * Returns the input value for tuple field "randomInteger".
-+         * @return the tuple value
-+         */
-+        public int getRandomInteger();
-+
-+        /**
-+         * Changes the output value for tuple field "randomInteger".
-+         * @param randomInteger the field value
-+         */
-+        public void setRandomInteger(int randomInteger);
-+        /**
-+         * Returns the input value for tuple field "timestamp".
-+         * @return the tuple value
-+         */
-+        public long getTimestamp();
-+
-+        /**
-+         * Changes the output value for tuple field "timestamp".
-+         * @param timestamp the field value
-+         */
-+        public void setTimestamp(long timestamp);
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IISwitchFamilyRandomDataInput input, IISwitchFamilyRandomDataOutput randomDataResult);
-+
-+    /**
-+     * Sets the algorithm parameter "aggregationFactor".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterAggregationFactor(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "delay".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDelay(int value);
-+
-+    /**
-+     * Sets the algorithm parameter "flag".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterFlag(boolean value);
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize".
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value);
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/pom.xml
-new file mode 100644
-index 0000000..1f4aa69
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/pom.xml
-@@ -0,0 +1,142 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <build>
-+    <sourceDirectory>${basedir}/</sourceDirectory>
-+    <plugins>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-source-plugin</artifactId>
-+				<version>2.2.1</version>
-+				<executions>
-+					<execution>
-+						<id>attach-sources</id>
-+						<phase>verify</phase>
-+						<goals>
-+							<goal>jar</goal>
-+						</goals>
-+					</execution>
-+				</executions>
-+			</plugin>
-+            <plugin>
-+    			<groupId>com.github.os72</groupId>
-+    			<artifactId>protoc-jar-maven-plugin</artifactId>
-+    			<version>3.0.0-a3</version>
-+    			<executions>
-+        			<execution>
-+            			<phase>generate-sources</phase>
-+			            <goals>
-+			                <goal>run</goal>
-+			            </goals>
-+			            <configuration>
-+			                <protocVersion>2.6.1</protocVersion> <!-- 2.4.1, 2.5.0, 2.6.1, 3.0.0 -->
-+			                <includeDirectories>
-+			                    <include>${basedir}/protobuf</include>
-+			                </includeDirectories>
-+			                <inputDirectories>
-+			                    <include>${basedir}/protobuf</include>
-+			                </inputDirectories>
-+			            </configuration>
-+			        </execution>
-+			    </executions>
-+			</plugin>
-+    </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>protobuf/*.proto</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>org.apache.storm</groupId>
-+     <artifactId>storm-core</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>com.esotericsoftware.kryo</groupId>
-+     <artifactId>kryo</artifactId>
-+   </dependency>
-+    <dependency>
-+    <groupId>com.google.protobuf</groupId>
-+    <artifactId>protobuf-java</artifactId>
-+    <version>2.6.1</version>
-+</dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+    <dependency>
-+        <groupId>eu.qualimaster.families</groupId>
-+        <artifactId>Datatypes</artifactId>
-+        <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+        <groupId>org.twitter4j</groupId>
-+        <artifactId>twitter4j-stream</artifactId>
-+        <version>4.0.1</version>
-+    </dependency>
-+    <dependency>
-+        <groupId>eu.qualimaster</groupId>
-+        <artifactId>TwitterStreamDataSource</artifactId>
-+        <version>0.0.5-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/DynamicGraphSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/DynamicGraphSink.proto
-new file mode 100644
-index 0000000..b879feb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/DynamicGraphSink.proto
-@@ -0,0 +1,8 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "DynamicGraphSinkProtos";
-+
-+message SDynamicGraphSinkHubStreamInput {
-+    required string hubList = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationFinancial.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationFinancial.proto
-new file mode 100644
-index 0000000..01ced9b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationFinancial.proto
-@@ -0,0 +1,19 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FCorrelationFinancialProtos";
-+
-+message SIFCorrelationFinancialPreprocessedStreamInput {
-+    required string symbolId = 1;
-+    required int64 timestamp = 2;
-+    required double value = 3;
-+    required int32 volume = 4;
-+}
-+
-+
-+message SIFCorrelationFinancialPairwiseFinancialOutput {
-+    required string id0 = 1;
-+    required string id1 = 2;
-+    required string date = 3;
-+    required double value = 4;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationTwitter.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationTwitter.proto
-new file mode 100644
-index 0000000..c31bd11
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FCorrelationTwitter.proto
-@@ -0,0 +1,16 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FCorrelationTwitterProtos";
-+
-+message SIFCorrelationTwitterAnalyzedStreamInput {
-+    required string symbolId = 1;
-+    required int64 timestamp = 2;
-+    required double value = 3;
-+    required int32 volume = 4;
-+}
-+
-+
-+message SIFCorrelationTwitterPairwiseTwitterOutput {
-+    required string pairwiseCorrelationTwitter = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicGraphCompilation.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicGraphCompilation.proto
-new file mode 100644
-index 0000000..cdf4403
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicGraphCompilation.proto
-@@ -0,0 +1,15 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FDynamicGraphCompilationProtos";
-+
-+message SIFDynamicGraphCompilationPairwiseFinancialInput {
-+    required string id0 = 1;
-+    required string id1 = 2;
-+    required string date = 3;
-+    required double value = 4;
-+}
-+
-+message SIFDynamicGraphCompilationEdgeStreamOutput {
-+    required string edge = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicHubComputation.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicHubComputation.proto
-new file mode 100644
-index 0000000..510c6da
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FDynamicHubComputation.proto
-@@ -0,0 +1,12 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FDynamicHubComputationProtos";
-+
-+message SIFDynamicHubComputationEdgeStreamInput {
-+    required string edge = 1;
-+}
-+
-+message SIFDynamicHubComputationHubStreamOutput {
-+    required string hubList = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FEventEnrichment.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FEventEnrichment.proto
-new file mode 100644
-index 0000000..cfb77fe
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FEventEnrichment.proto
-@@ -0,0 +1,7 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FEventEnrichmentProtos";
-+
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FExpertSearch.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FExpertSearch.proto
-new file mode 100644
-index 0000000..123bb35
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FExpertSearch.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FExpertSearchProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FFinancialNetworkExtraction.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FFinancialNetworkExtraction.proto
-new file mode 100644
-index 0000000..6e577ce
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FFinancialNetworkExtraction.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FFinancialNetworkExtractionProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FHayashiYoshida.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FHayashiYoshida.proto
-new file mode 100644
-index 0000000..8a8e053
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FHayashiYoshida.proto
-@@ -0,0 +1,23 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FHayashiYoshidaProtos";
-+
-+message SIFHayashiYoshidaSymbolsStreamInput {
-+    required string symbolId = 1;
-+    required int64 timestamp = 2;
-+    required double value = 3;
-+}
-+
-+message SIFHayashiYoshidaConfigurationStreamInput {
-+    required string pairKey = 4;
-+    required string pairValue = 5;
-+}
-+
-+message SIFHayashiYoshidaResetWindowStreamInput {
-+    required int64 windowStart = 6;
-+}
-+
-+message SIFHayashiYoshidaPairwiseFinancialOutput {
-+    required string pairwiseCorrelationFinancial = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FKeywordAnalyzer.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FKeywordAnalyzer.proto
-new file mode 100644
-index 0000000..f75427c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FKeywordAnalyzer.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FKeywordAnalyzerProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMapper.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMapper.proto
-new file mode 100644
-index 0000000..827f347
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMapper.proto
-@@ -0,0 +1,27 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FMapperProtos";
-+
-+message SIFMapperPreprocessedStreamInput {
-+    required string symbolId = 1;
-+    required int64 timestamp = 2;
-+    required double value = 3;
-+    required int32 volume = 4;
-+}
-+
-+
-+message SIFMapperSymbolsStreamOutput {
-+    required string symbolId = 1;
-+    required int64 timestamp = 2;
-+    required double value = 3;
-+}
-+
-+message SIFMapperConfigurationStreamOutput {
-+    required string pairKey = 4;
-+    required string pairValue = 5;
-+}
-+
-+message SIFMapperResetWindowStreamOutput {
-+    required int64 windowStart = 6;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMismatchedFamily.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMismatchedFamily.proto
-new file mode 100644
-index 0000000..2da9659
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FMismatchedFamily.proto
-@@ -0,0 +1,15 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FMismatchedFamilyProtos";
-+
-+message SIFMismatchedFamilyMisStringInput {
-+    required string symbolTuple1 = 1;
-+    required int32 volume = 2;
-+}
-+
-+message SIFMismatchedFamilyMisStringOutput {
-+    required string streamID1 = 1;
-+    required int32 timestamp = 2;
-+    required double quote = 3;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FPreprocessor.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FPreprocessor.proto
-new file mode 100644
-index 0000000..459e2f6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FPreprocessor.proto
-@@ -0,0 +1,15 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FPreprocessorProtos";
-+
-+message SIFPreprocessorSpringStreamInput {
-+    required string symbolTuple = 1;
-+}
-+
-+message SIFPreprocessorPreprocessedStreamOutput {
-+    required string symbolId = 1;
-+    required int64 timestamp = 2;
-+    required double value = 3;
-+    required int32 volume = 4;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FRecommendations.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FRecommendations.proto
-new file mode 100644
-index 0000000..1422058
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FRecommendations.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FRecommendationsProtos";
-+
-+
-+message SIFRecommendationsRecommendationStreamOutput {
-+    required string recommendations = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSentimentAnalysis.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSentimentAnalysis.proto
-new file mode 100644
-index 0000000..dcffd03
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSentimentAnalysis.proto
-@@ -0,0 +1,12 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FSentimentAnalysisProtos";
-+
-+
-+message SIFSentimentAnalysisAnalyzedStreamOutput {
-+    required string symbolId = 1;
-+    required int64 timestamp = 2;
-+    required double value = 3;
-+    required int32 volume = 4;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSimpleRecommendations.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSimpleRecommendations.proto
-new file mode 100644
-index 0000000..5dba60d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSimpleRecommendations.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FSimpleRecommendationsProtos";
-+
-+
-+message SIFSimpleRecommendationsTwitterStreamOutput {
-+    required string recommendations = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamDetection.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamDetection.proto
-new file mode 100644
-index 0000000..1a320bc
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamDetection.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FSpamDetectionProtos";
-+
-+
-+message SIFSpamDetectionTwitterStreamOutput {
-+    required double spamPropability = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamRemoval.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamRemoval.proto
-new file mode 100644
-index 0000000..d5ecaa6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FSpamRemoval.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FSpamRemovalProtos";
-+
-+message SIFSpamRemovalTwitterStreamInput {
-+    required double spamPropability = 1;
-+}
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FStockParser.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FStockParser.proto
-new file mode 100644
-index 0000000..46da72f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FStockParser.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FStockParserProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraph.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraph.proto
-new file mode 100644
-index 0000000..599fb79
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraph.proto
-@@ -0,0 +1,29 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTimeGraphProtos";
-+
-+message SIFTimeGraphDataStreamInput {
-+    required bool isAddition = 1;
-+}
-+
-+message SIFTimeGraphSnapshotQueryStreamInput {
-+    required int64 start = 2;
-+    required int64 end = 3;
-+}
-+
-+message SIFTimeGraphPathQueryStreamInput {
-+    required int64 start = 4;
-+    required int64 end = 5;
-+    required string vertexA = 6;
-+    required string vertexB = 7;
-+    required string type = 8;
-+}
-+
-+message SIFTimeGraphSnapshotStreamOutput {
-+    required string snapshot = 1;
-+}
-+
-+message SIFTimeGraphPathStreamOutput {
-+    required string path = 2;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphIndexer.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphIndexer.proto
-new file mode 100644
-index 0000000..2f9e047
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphIndexer.proto
-@@ -0,0 +1,13 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTimeGraphIndexerProtos";
-+
-+message SIFTimeGraphIndexerDataStreamInput {
-+    required bool isAddition = 1;
-+}
-+
-+
-+
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphMapper.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphMapper.proto
-new file mode 100644
-index 0000000..0f15248
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphMapper.proto
-@@ -0,0 +1,12 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTimeGraphMapperProtos";
-+
-+message SIFTimeGraphMapperEdgeStreamInput {
-+    required string edge = 1;
-+}
-+
-+message SIFTimeGraphMapperDataStreamOutput {
-+    required bool isAddition = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphQueryExecutor.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphQueryExecutor.proto
-new file mode 100644
-index 0000000..0187184
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTimeGraphQueryExecutor.proto
-@@ -0,0 +1,28 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTimeGraphQueryExecutorProtos";
-+
-+message SIFTimeGraphQueryExecutorSnapshotQueryStreamInput {
-+    required int64 start = 1;
-+    required int64 end = 2;
-+}
-+
-+message SIFTimeGraphQueryExecutorPathQueryStreamInput {
-+    required int64 start = 3;
-+    required int64 end = 4;
-+    required string vertexA = 5;
-+    required string vertexB = 6;
-+    required string type = 7;
-+}
-+
-+
-+message SIFTimeGraphQueryExecutorSnapshotStreamOutput {
-+    required string snapshot = 1;
-+}
-+
-+message SIFTimeGraphQueryExecutorPathStreamOutput {
-+    required string path = 2;
-+}
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTransferEntropy.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTransferEntropy.proto
-new file mode 100644
-index 0000000..61d08d8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTransferEntropy.proto
-@@ -0,0 +1,19 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTransferEntropyProtos";
-+
-+message SIFTransferEntropyPreprocessedStreamInput {
-+    required string symbolId = 1;
-+    required int64 timestamp = 2;
-+    required double value = 3;
-+    required int32 volume = 4;
-+}
-+
-+
-+message SIFTransferEntropyPairwiseFinancialOutput {
-+    required string id0 = 1;
-+    required string id1 = 2;
-+    required string date = 3;
-+    required double value = 4;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTweetClassifier.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTweetClassifier.proto
-new file mode 100644
-index 0000000..910b204
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTweetClassifier.proto
-@@ -0,0 +1,7 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTweetClassifierProtos";
-+
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterCrawling.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterCrawling.proto
-new file mode 100644
-index 0000000..9692554
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterCrawling.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTwitterCrawlingProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventDetection.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventDetection.proto
-new file mode 100644
-index 0000000..4943f36
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventDetection.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTwitterEventDetectionProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventPrediction.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventPrediction.proto
-new file mode 100644
-index 0000000..a07e2da
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterEventPrediction.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTwitterEventPredictionProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterStreamFiltering.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterStreamFiltering.proto
-new file mode 100644
-index 0000000..e29c421
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FTwitterStreamFiltering.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FTwitterStreamFilteringProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FixedRateSimulatedFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FixedRateSimulatedFinancialData.proto
-new file mode 100644
-index 0000000..df80f84
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FixedRateSimulatedFinancialData.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FixedRateSimulatedFinancialDataProtos";
-+
-+
-+message SFixedRateSimulatedFinancialDataSpringStreamOutput {
-+    required string symbolTuple = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusFincancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusFincancialData.proto
-new file mode 100644
-index 0000000..de297a0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusFincancialData.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FocusFincancialDataProtos";
-+
-+
-+message SFocusFincancialDataSpringStreamOutput {
-+    required string symbolTuple = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusSink.proto
-new file mode 100644
-index 0000000..aa65f52
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/FocusSink.proto
-@@ -0,0 +1,12 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "FocusSinkProtos";
-+
-+message SFocusSinkRecommendationStreamInput {
-+    required string recommendations = 1;
-+}
-+
-+message SFocusSinkEdgeStreamInput {
-+    required string edge = 2;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/MI_data_Sink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/MI_data_Sink.proto
-new file mode 100644
-index 0000000..2527f8a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/MI_data_Sink.proto
-@@ -0,0 +1,11 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "MI_data_SinkProtos";
-+
-+message SMI_data_SinkPairwiseFinancialInput {
-+    required string id0 = 1;
-+    required string id1 = 2;
-+    required string date = 3;
-+    required double value = 4;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/NewTwitterStreamDataSource.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/NewTwitterStreamDataSource.proto
-new file mode 100644
-index 0000000..031de52
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/NewTwitterStreamDataSource.proto
-@@ -0,0 +1,5 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "NewTwitterStreamDataSourceProtos";
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/PriorityDataSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/PriorityDataSink.proto
-new file mode 100644
-index 0000000..7db580f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/PriorityDataSink.proto
-@@ -0,0 +1,18 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "PriorityDataSinkProtos";
-+
-+message SPriorityDataSinkPairwiseFinancialInput {
-+    required string id0 = 1;
-+    required string id1 = 2;
-+    required string date = 3;
-+    required double value = 4;
-+}
-+
-+message SPriorityDataSinkAnalyzedStreamInput {
-+    required string symbolId = 5;
-+    required int64 timestamp = 6;
-+    required double value = 7;
-+    required int32 volume = 8;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomFamily.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomFamily.proto
-new file mode 100644
-index 0000000..8d74a1c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomFamily.proto
-@@ -0,0 +1,14 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "RandomFamilyProtos";
-+
-+message SIRandomFamilyRandomDataInput {
-+    required int32 randomInteger = 1;
-+    required int64 timestamp = 2;
-+}
-+
-+message SIRandomFamilyRandomDataOutput {
-+    required int32 randomInteger = 1;
-+    required int64 timestamp = 2;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSink.proto
-new file mode 100644
-index 0000000..0138943
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSink.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "RandomSinkProtos";
-+
-+message SRandomSinkRandomDataInput {
-+    required int32 randomInteger = 1;
-+    required int64 timestamp = 2;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSource.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSource.proto
-new file mode 100644
-index 0000000..d18c922
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/RandomSource.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "RandomSourceProtos";
-+
-+message SRandomSourceRandomDataOutput {
-+    required int32 randomInteger = 1;
-+    required int64 timestamp = 2;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFinancialData.proto
-new file mode 100644
-index 0000000..3064de1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFinancialData.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "SimulatedFinancialDataProtos";
-+
-+
-+message SSimulatedFinancialDataSpringStreamOutput {
-+    required string symbolTuple = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFocusFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFocusFinancialData.proto
-new file mode 100644
-index 0000000..6fe312d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedFocusFinancialData.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "SimulatedFocusFinancialDataProtos";
-+
-+
-+message SSimulatedFocusFinancialDataSpringStreamOutput {
-+    required string symbolTuple = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedGraphData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedGraphData.proto
-new file mode 100644
-index 0000000..dda873f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SimulatedGraphData.proto
-@@ -0,0 +1,8 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "SimulatedGraphDataProtos";
-+
-+message SSimulatedGraphDataEdgeStreamOutput {
-+    required string edge = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SpringFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SpringFinancialData.proto
-new file mode 100644
-index 0000000..d2f681e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SpringFinancialData.proto
-@@ -0,0 +1,9 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "SpringFinancialDataProtos";
-+
-+
-+message SSpringFinancialDataSpringStreamOutput {
-+    required string symbolTuple = 1;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SwitchFamily.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SwitchFamily.proto
-new file mode 100644
-index 0000000..1765c40
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/SwitchFamily.proto
-@@ -0,0 +1,14 @@
-+package eu.qualimaster.families.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "SwitchFamilyProtos";
-+
-+message SISwitchFamilyRandomDataInput {
-+    required int32 randomInteger = 1;
-+    required int64 timestamp = 2;
-+}
-+
-+message SISwitchFamilyRandomDataOutput {
-+    required int32 randomInteger = 1;
-+    required int64 timestamp = 2;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeGraphQueriesSource.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeGraphQueriesSource.proto
-new file mode 100644
-index 0000000..2b544cd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeGraphQueriesSource.proto
-@@ -0,0 +1,17 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "TimeGraphQueriesSourceProtos";
-+
-+message STimeGraphQueriesSourceSnapshotQueryStreamOutput {
-+    required int64 start = 1;
-+    required int64 end = 2;
-+}
-+
-+message STimeGraphQueriesSourcePathQueryStreamOutput {
-+    required int64 start = 3;
-+    required int64 end = 4;
-+    required string vertexA = 5;
-+    required string vertexB = 6;
-+    required string type = 7;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeTravelSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeTravelSink.proto
-new file mode 100644
-index 0000000..b9cf624
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TimeTravelSink.proto
-@@ -0,0 +1,12 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "TimeTravelSinkProtos";
-+
-+message STimeTravelSinkSnapshotStreamInput {
-+    required string snapshot = 1;
-+}
-+
-+message STimeTravelSinkPathStreamInput {
-+    required string path = 2;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TransferSink.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TransferSink.proto
-new file mode 100644
-index 0000000..938c3f0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TransferSink.proto
-@@ -0,0 +1,11 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "TransferSinkProtos";
-+
-+message STransferSinkPairwiseFinancialInput {
-+    required string id0 = 1;
-+    required string id1 = 2;
-+    required string date = 3;
-+    required double value = 4;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TwitterStreamData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TwitterStreamData.proto
-new file mode 100644
-index 0000000..2f8f0d8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/TwitterStreamData.proto
-@@ -0,0 +1,6 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "TwitterStreamDataProtos";
-+
-+
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/WindowedSpringFinancialData.proto b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/WindowedSpringFinancialData.proto
-new file mode 100644
-index 0000000..f8737a5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/if-gen/protobuf/WindowedSpringFinancialData.proto
-@@ -0,0 +1,14 @@
-+package eu.qualimaster.data.protobuf;
-+option java_package = "eu.qualimaster.protos";
-+option java_outer_classname = "WindowedSpringFinancialDataProtos";
-+
-+
-+message SWindowedSpringFinancialDataSpringStreamOutput {
-+    required string symbolTuple = 1;
-+}
-+
-+message SWindowedSpringFinancialDataResetWindowOutput {
-+    required int64 windowStart = 2;
-+    required int64 windowEnd = 3;
-+}
-+
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines.xml
-new file mode 100644
-index 0000000..ff6002d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines.xml
-@@ -0,0 +1,91 @@
-+<project name="pipelines" default="deploy" basedir=".">
-+
-+    <property file="${user.home}/global-build.properties"/>
-+    <property file="${user.home}/qualimaster-build.properties"/>
-+    <include file="${user.home}/macros.xml"/>
-+
-+    <!--
-+    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"/>
-+
-+    <path id="easyTaskDef.lib">
-+      <fileset dir="${home.base.dir}/${projects.standalone.dir}/build/generatedLibs.ex/dist">
-+        <include name="*.jar"/>
-+      </fileset>
-+    </path>
-+    -->
-+    <target name="deploy">
-+      <delete file="pipelines/eu/qualimaster/PriorityPip/target/PriorityPip-0.0.2-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/PriorityPip/target/PriorityPip-0.0.2-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/PriorityPip/target/PriorityPip-0.0.2-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/PriorityPip" pomFile="pipelines/eu/qualimaster/PriorityPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/PriorityPip/target" jarFile= "PriorityPip-0.0.2-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/RandomPip/target/RandomPip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/RandomPip/target/RandomPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/RandomPip/target/RandomPip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/RandomPip" pomFile="pipelines/eu/qualimaster/RandomPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/RandomPip/target" jarFile= "RandomPip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/SwitchPip/target/SwitchPip-0.0.2-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/SwitchPip/target/SwitchPip-0.0.2-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/SwitchPip/target/SwitchPip-0.0.2-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/SwitchPip" pomFile="pipelines/eu/qualimaster/SwitchPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/SwitchPip/target" jarFile= "SwitchPip-0.0.2-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/FocusPip/target/FocusPip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/FocusPip/target/FocusPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/FocusPip/target/FocusPip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/FocusPip" pomFile="pipelines/eu/qualimaster/FocusPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/FocusPip/target" jarFile= "FocusPip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/DynamicGraphPip/target/DynamicGraphPip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/DynamicGraphPip/target/DynamicGraphPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/DynamicGraphPip/target/DynamicGraphPip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/DynamicGraphPip" pomFile="pipelines/eu/qualimaster/DynamicGraphPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/DynamicGraphPip/target" jarFile= "DynamicGraphPip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/ReplayPip/target/ReplayPip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/ReplayPip/target/ReplayPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/ReplayPip/target/ReplayPip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/ReplayPip" pomFile="pipelines/eu/qualimaster/ReplayPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/ReplayPip/target" jarFile= "ReplayPip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/TimeTravelPip/target/TimeTravelPip-0.0.2-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/TimeTravelPip/target/TimeTravelPip-0.0.2-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/TimeTravelPip/target/TimeTravelPip-0.0.2-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/TimeTravelPip" pomFile="pipelines/eu/qualimaster/TimeTravelPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/TimeTravelPip/target" jarFile= "TimeTravelPip-0.0.2-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/TransferPip/target/TransferPip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/TransferPip/target/TransferPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/TransferPip/target/TransferPip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/TransferPip" pomFile="pipelines/eu/qualimaster/TransferPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/TransferPip/target" jarFile= "TransferPip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/ReflectiveRandomPip/target/ReflectiveRandomPip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/ReflectiveRandomPip/target/ReflectiveRandomPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/ReflectiveRandomPip/target/ReflectiveRandomPip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/ReflectiveRandomPip" pomFile="pipelines/eu/qualimaster/ReflectiveRandomPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/ReflectiveRandomPip/target" jarFile= "ReflectiveRandomPip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/PriorityFinancialPip/target/PriorityFinancialPip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/PriorityFinancialPip/target/PriorityFinancialPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/PriorityFinancialPip/target/PriorityFinancialPip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/PriorityFinancialPip" pomFile="pipelines/eu/qualimaster/PriorityFinancialPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/PriorityFinancialPip/target" jarFile= "PriorityFinancialPip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/PrioritySimulatePip/target/PrioritySimulatePip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/PrioritySimulatePip/target/PrioritySimulatePip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/PrioritySimulatePip/target/PrioritySimulatePip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/PrioritySimulatePip" pomFile="pipelines/eu/qualimaster/PrioritySimulatePip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/PrioritySimulatePip/target" jarFile= "PrioritySimulatePip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/TimeTravelSimPip/target/TimeTravelSimPip-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/TimeTravelSimPip/target/TimeTravelSimPip-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/TimeTravelSimPip/target/TimeTravelSimPip-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/TimeTravelSimPip" pomFile="pipelines/eu/qualimaster/TimeTravelSimPip/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/TimeTravelSimPip/target" jarFile= "TimeTravelSimPip-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/CorrelationSW/target/CorrelationSW-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/CorrelationSW/target/CorrelationSW-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/CorrelationSW/target/CorrelationSW-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/CorrelationSW" pomFile="pipelines/eu/qualimaster/CorrelationSW/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/CorrelationSW/target" jarFile= "CorrelationSW-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/RandomSubPipeline1/target/RandomSubPipeline1-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/RandomSubPipeline1/target/RandomSubPipeline1-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/RandomSubPipeline1/target/RandomSubPipeline1-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/RandomSubPipeline1" pomFile="pipelines/eu/qualimaster/RandomSubPipeline1/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/RandomSubPipeline1/target" jarFile= "RandomSubPipeline1-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/RandomSubPipeline2/target/RandomSubPipeline2-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/RandomSubPipeline2/target/RandomSubPipeline2-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/RandomSubPipeline2/target/RandomSubPipeline2-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/RandomSubPipeline2" pomFile="pipelines/eu/qualimaster/RandomSubPipeline2/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/RandomSubPipeline2/target" jarFile= "RandomSubPipeline2-0.0.1-SNAPSHOT.jar"/>
-+      <delete file="pipelines/eu/qualimaster/CorrelationSWAlternative/target/CorrelationSWAlternative-0.0.1-SNAPSHOT.jar"/>
-+      <rename src="pipelines/eu/qualimaster/CorrelationSWAlternative/target/CorrelationSWAlternative-0.0.1-SNAPSHOT-jar-with-dependencies.jar" dest="pipelines/eu/qualimaster/CorrelationSWAlternative/target/CorrelationSWAlternative-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="eu/qualimaster/CorrelationSWAlternative" pomFile="pipelines/eu/qualimaster/CorrelationSWAlternative/pom.xml" 
-+        jarFolder="pipelines/eu/qualimaster/CorrelationSWAlternative/target" jarFile= "CorrelationSWAlternative-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="if-gen" pomFile="if-gen/pom.xml" 
-+        jarFolder="if-gen/target" jarFile= "PriorityPipelineInterfaces-0.5.0-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial" pomFile="hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/pom.xml" 
-+        jarFolder="hardwareAlgorithms/eu/qualimaster/algorithms/GenTopoHardwareCorrelationFinancial/target" jarFile= "GenTopoHardwareCorrelationFinancial-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware" pomFile="hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/pom.xml" 
-+        jarFolder="hardwareAlgorithms/eu/qualimaster/algorithms/TransferEntropyHardware/target" jarFile= "TransferEntropyHardware-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware" pomFile="hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/pom.xml" 
-+        jarFolder="hardwareAlgorithms/eu/qualimaster/algorithms/MutualInformationHardware/target" jarFile= "MutualInformationHardware-0.0.1-SNAPSHOT.jar"/>
-+      <mvnDeploy folderName="model-gen" pomFile="model-gen/pom.xml" jarFolder="model-gen/target" jarFile="infrastructureModel-0.5.0-SNAPSHOT.jar" />
-+    </target>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/mapping.xml
-new file mode 100644
-index 0000000..95447b7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/mapping.xml
-@@ -0,0 +1,14 @@
-+<mapping>
-+  <pipeline name="CorrelationSW" class="eu.qualimaster.CorrelationSW.topology.Topology">
-+      <node name="Mapper" type="family">
-+          <component name="CorrelationSWMapper" container="CorrelationSW" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+      </node>
-+      <node name="HayashiYoshida" type="family">
-+          <component name="CorrelationSWHayashiYoshida" container="CorrelationSW" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </node>
-+      <algorithm name="Mapper" implName="Mapper" class="eu.qualimaster.algorithms.imp.correlation.Mapper"/>
-+      <algorithm name="HayashiYoshida" implName="HayashiYoshida" class="eu.qualimaster.algorithms.imp.correlation.HayashiYoshida"/>
-+      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/pom.xml
-new file mode 100644
-index 0000000..03077e1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/pom.xml
-@@ -0,0 +1,265 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>CorrelationSW</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-assembly-plugin</artifactId>
-+				<version>2.6</version>
-+            	<dependencies>
-+	                    <dependency>
-+	                        <groupId>eu.qualimaster</groupId>
-+	                        <artifactId>AlgorithmAssemblies</artifactId>
-+	                        <version>0.5.0-SNAPSHOT</version>
-+	                    </dependency>
-+	                </dependencies>
-+					<executions>
-+					<execution>
-+						<id>make-assembly</id>
-+						<phase>package</phase>
-+						<goals>
-+							<goal>single</goal>
-+						</goals>
-+					<configuration>
-+					<descriptorRefs>
-+						<descriptorRef>jar-with-dependencies</descriptorRef>
-+					</descriptorRefs>
-+					<dependencySets>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>runtime</scope>
-+						</dependencySet>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>provided</scope>
-+						</dependencySet>
-+					</dependencySets>
-+					<archive>
-+						<manifest>
-+						</manifest>
-+					</archive>
-+				</configuration>
-+					</execution>
-+				<execution>
-+                        <id>make-profilingAssembly</id>
-+                        <phase>package</phase>
-+                        <goals>
-+                            <goal>single</goal>
-+                        </goals>
-+                        <configuration>
-+                            <descriptorRefs>
-+                                <descriptorRef>profiling</descriptorRef>
-+                            </descriptorRefs>
-+                        </configuration>
-+                    </execution>
-+				</executions>
-+						</plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+	<dependency>
-+          <groupId>eu.qualimaster</groupId>
-+          <artifactId>AlgorithmAssemblies</artifactId>
-+          <version>0.5.0-SNAPSHOT</version>
-+      </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-mapper</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hayashi-yoshida</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/profiling/profile.ctl
-new file mode 100644
-index 0000000..d5609a9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/profiling/profile.ctl
-@@ -0,0 +1 @@
-+import eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/CorrelationSWSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/CorrelationSWSubTopology.java
-new file mode 100644
-index 0000000..23c75e9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/CorrelationSWSubTopology.java
-@@ -0,0 +1,85 @@
-+package eu.qualimaster.CorrelationSW.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.Config;
-+import backtype.storm.topology.TopologyBuilder;
-+import eu.qualimaster.base.algorithm.ITopologyCreate;
-+import eu.qualimaster.base.algorithm.SubTopologyOutput;
-+import backtype.storm.topology.BoltDeclarer;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.SignalException;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial;
-+
-+public class CorrelationSWSubTopology implements IFCorrelationFinancial, ITopologyCreate {
-+    final static Logger logger = Logger.getLogger(CorrelationSWSubTopology.class);
-+    private int windowSize;
-+    private transient State state;
-+
-+    public void switchState(State arg0) {
-+        this.state = arg0;	
-+    }
-+
-+    public Double getMeasurement(IObservable observable) {
-+        return null;
-+    }
-+
-+    public SubTopologyOutput createSubTopology(TopologyBuilder builder,
-+    			Config config, String prefix, String input, String streamId) {
-+        String namespace = "CorrelationSW";
-+        if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {
-+            namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);
-+        }
-+        // Declare a Bolt "Mapper"
-+
-+        BoltDeclarer SubTopology_FamilyElement0 =builder.setBolt(prefix+"Mapper", new SubTopology_FamilyElement0FamilyElement(prefix+"Mapper", namespace), 1);
-+        SubTopology_FamilyElement0.shuffleGrouping(input, streamId);
-+        // Declare a Bolt "HayashiYoshida"
-+
-+        BoltDeclarer SubTopology_FamilyElement1 =builder.setBolt(prefix+"HayashiYoshida", new SubTopology_FamilyElement1FamilyElement(prefix+"HayashiYoshida", namespace), 14);
-+        //SubTopology_FamilyElement1 subscribing streams:
-+        SubTopology_FamilyElement1.directGrouping(prefix+"Mapper", "MapperSymbolsStream");
-+        SubTopology_FamilyElement1.directGrouping(prefix+"Mapper", "MapperConfigurationStream");
-+        SubTopology_FamilyElement1.allGrouping(prefix+"Mapper", "MapperResetWindowStream");
-+        return new SubTopologyOutput(prefix+"HayashiYoshida", "HayashiYoshidaPairwiseFinancial", 4, 14); //TODO: consider PipelineOptions to change the parallelisms
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize". Note that the actual parameter change will be dynamically
-+     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
-+     * sub-topology.
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+        this.windowSize = windowSize;
-+        try {
-+            logger.info("sending new WindowSize signal " + value + "!");
-+            ParameterChangeSignal signal = new ParameterChangeSignal("CorrelationSW", 
-+                    "CorrelationSWMapper", "windowSize", value, null);
-+            signal.sendSignal();
-+        } catch (Exception e) {
-+            logger.error("Signal not sent!");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..e98b2ad
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement0FamilyElement.java
-@@ -0,0 +1,366 @@
-+package eu.qualimaster.CorrelationSW.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFMapper.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Mapper;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class SubTopology_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(SubTopology_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FMapper.IFMapperSymbolsStreamOutput symbolsStreamResult = new FMapper.IFMapperSymbolsStreamOutput();
-+    private transient FMapper.IFMapperConfigurationStreamOutput configurationStreamResult = new FMapper.IFMapperConfigurationStreamOutput();
-+    private transient FMapper.IFMapperResetWindowStreamOutput resetWindowStreamResult = new FMapper.IFMapperResetWindowStreamOutput();
-+    private transient IFMapper alg = null; 
-+    private transient List<Integer> taskIdHayashiYoshida;
-+    private int SubTopology_FamilyElement0TaskId;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput iTuplePreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput iTupleSymbolList = null;
-+    transient IIFMapperPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFMapperSymbolListInput inputSymbolList = null;
-+
-+    public SubTopology_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+        taskIdHayashiYoshida = topologyContext.getComponentTasks("CorrelationSWHayashiYoshida");
-+        logger.info("taskIdsHayashiYoshida = " + taskIdHayashiYoshida);
-+        SubTopology_FamilyElement0TaskId = topologyContext.getThisTaskId();
-+        logger.info("SubTopology_FamilyElement0TaskId = " + SubTopology_FamilyElement0TaskId);
-+
-+        symbolsStreamResult = new FMapper.IFMapperSymbolsStreamOutput();
-+        IItemEmitter<IIFMapperSymbolsStreamOutput> symbolsStreamEmitter = new IItemEmitter<IIFMapperSymbolsStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFMapperSymbolsStreamOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "MapperSymbolsStream", new Values(item));
-+            }
-+        };
-+        symbolsStreamResult.setEmitter(symbolsStreamEmitter);
-+
-+        configurationStreamResult = new FMapper.IFMapperConfigurationStreamOutput();
-+        IItemEmitter<IIFMapperConfigurationStreamOutput> configurationStreamEmitter = new IItemEmitter<IIFMapperConfigurationStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFMapperConfigurationStreamOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "MapperConfigurationStream", new Values(item));
-+            }
-+        };
-+        configurationStreamResult.setEmitter(configurationStreamEmitter);
-+
-+        resetWindowStreamResult = new FMapper.IFMapperResetWindowStreamOutput();
-+        IItemEmitter<IIFMapperResetWindowStreamOutput> resetWindowStreamEmitter = new IItemEmitter<IIFMapperResetWindowStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFMapperResetWindowStreamOutput item) {
-+                _collector.emit("MapperResetWindowStream", new Values(item));
-+            }
-+        };
-+        resetWindowStreamResult.setEmitter(resetWindowStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Mapper");
-+                    alg = (IFMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdHayashiYoshida, SubTopology_FamilyElement0TaskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                } catch (NoSuchMethodException e) {
-+                    e.printStackTrace();
-+                } catch (InvocationTargetException e) {
-+                    e.printStackTrace();
-+                }
-+                if (PipelineOptions.hasExecutorArgument(map, getName(), "windowSize")) {
-+                    alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 0));
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Mapper", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fMapper"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
-+            iTuplePreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tupleItem;
-+            inputPreprocessedStream = new FMapper.IFMapperPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, symbolsStreamResult, configurationStreamResult, resetWindowStreamResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                symbolsStreamResult.setSymbolId("");
-+                symbolsStreamResult.setTimestamp(0);
-+                symbolsStreamResult.setValue(0.0);
-+                configurationStreamResult.setPairKey("");
-+                configurationStreamResult.setPairValue("");
-+                resetWindowStreamResult.setWindowStart(0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFCorrelationFinancialSymbolListInput) {
-+            iTupleSymbolList = (IIFCorrelationFinancialSymbolListInput)tupleItem;
-+            inputSymbolList = new FMapper.IFMapperSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, symbolsStreamResult, configurationStreamResult, resetWindowStreamResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                symbolsStreamResult.setSymbolId("");
-+                symbolsStreamResult.setTimestamp(0);
-+                symbolsStreamResult.setValue(0.0);
-+                configurationStreamResult.setPairKey("");
-+                configurationStreamResult.setPairValue("");
-+                resetWindowStreamResult.setWindowStart(0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperSymbolsStreamOutput> iterSymbolsStream = symbolsStreamResult.iterator();
-+            iterSymbolsStream.reset();
-+            while (iterSymbolsStream.hasNext()) {
-+                IIFMapperSymbolsStreamOutput out = iterSymbolsStream.next();
-+                _collector.emitDirect(out.getTaskId(), "MapperSymbolsStream", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperConfigurationStreamOutput> iterConfigurationStream = configurationStreamResult.iterator();
-+            iterConfigurationStream.reset();
-+            while (iterConfigurationStream.hasNext()) {
-+                IIFMapperConfigurationStreamOutput out = iterConfigurationStream.next();
-+                _collector.emitDirect(out.getTaskId(), "MapperConfigurationStream", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperResetWindowStreamOutput> iterResetWindowStream = resetWindowStreamResult.iterator();
-+            iterResetWindowStream.reset();
-+            while (iterResetWindowStream.hasNext()) {
-+                IIFMapperResetWindowStreamOutput out = iterResetWindowStream.next();
-+                _collector.emit("MapperResetWindowStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Mapper":
-+                if (!algChange || !(alg instanceof Mapper)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Mapper");
-+                        alg = (IFMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdHayashiYoshida, SubTopology_FamilyElement0TaskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    } catch (NoSuchMethodException e) {
-+                        e.printStackTrace();
-+                    } catch (InvocationTargetException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterWindowSize(0);
-+                    sendAlgorithmChangeEvent("Mapper", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("MapperSymbolsStream", new Fields("MapperSymbolsStreamFields"));
-+        declarer.declareStream("MapperConfigurationStream", new Fields("MapperConfigurationStreamFields"));
-+        declarer.declareStream("MapperResetWindowStream", new Fields("MapperResetWindowStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..e0f9158
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSW/topology/SubTopology_FamilyElement1FamilyElement.java
-@@ -0,0 +1,321 @@
-+package eu.qualimaster.CorrelationSW.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.HayashiYoshida;
-+import eu.qualimaster.families.inf.IFMapper.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class SubTopology_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(SubTopology_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+int counter = 0;
-+long recordOutput = 0;
-+    private transient FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
-+    private transient IFHayashiYoshida alg = null; 
-+    transient IIFMapperSymbolsStreamOutput iTupleSymbolsStream = null;
-+    transient IIFMapperConfigurationStreamOutput iTupleConfigurationStream = null;
-+    transient IIFMapperResetWindowStreamOutput iTupleResetWindowStream = null;
-+    transient IIFHayashiYoshidaSymbolsStreamInput inputSymbolsStream = null;
-+    transient IIFHayashiYoshidaConfigurationStreamInput inputConfigurationStream = null;
-+    transient IIFHayashiYoshidaResetWindowStreamInput inputResetWindowStream = null;
-+
-+    public SubTopology_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+counter = 0;
-+
-+        pairwiseFinancialResult = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
-+        IItemEmitter<IIFHayashiYoshidaPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFHayashiYoshidaPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFHayashiYoshidaPairwiseFinancialOutput item) {
-+                _collector.emit("HayashiYoshidaPairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.HayashiYoshida");
-+                    alg = (IFHayashiYoshida) cls.getConstructor(int.class).newInstance(taskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("HayashiYoshida", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fHayashiYoshida"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+recordOutput = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFMapperSymbolsStreamOutput) {
-+            iTupleSymbolsStream = (IIFMapperSymbolsStreamOutput)tupleItem;
-+            inputSymbolsStream = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
-+            inputSymbolsStream.setSymbolId(iTupleSymbolsStream.getSymbolId());
-+            inputSymbolsStream.setTimestamp(iTupleSymbolsStream.getTimestamp());
-+            inputSymbolsStream.setValue(iTupleSymbolsStream.getValue());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolsStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFMapperConfigurationStreamOutput) {
-+            iTupleConfigurationStream = (IIFMapperConfigurationStreamOutput)tupleItem;
-+            inputConfigurationStream = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
-+            inputConfigurationStream.setPairKey(iTupleConfigurationStream.getPairKey());
-+            inputConfigurationStream.setPairValue(iTupleConfigurationStream.getPairValue());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputConfigurationStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFMapperResetWindowStreamOutput) {
-+            iTupleResetWindowStream = (IIFMapperResetWindowStreamOutput)tupleItem;
-+            inputResetWindowStream = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
-+            inputResetWindowStream.setWindowStart(iTupleResetWindowStream.getWindowStart());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputResetWindowStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFHayashiYoshidaPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+long nowOutput = System.currentTimeMillis();
-+if ((nowOutput - recordOutput) > 1000) {
-+recordOutput = nowOutput;
-+logger.error("The output rate at the time " + nowOutput + ":" + counter);
-+counter = 0;
-+} else {
-+counter++;
-+}
-+                IIFHayashiYoshidaPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("HayashiYoshidaPairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "HayashiYoshida":
-+                if (!algChange || !(alg instanceof HayashiYoshida)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.HayashiYoshida");
-+                        alg = (IFHayashiYoshida) cls.getConstructor(int.class).newInstance(taskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("HayashiYoshida", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("HayashiYoshidaPairwiseFinancial", new Fields("HayashiYoshidaPairwiseFinancialFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/mapping.xml
-new file mode 100644
-index 0000000..60394f8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/mapping.xml
-@@ -0,0 +1,14 @@
-+<mapping>
-+  <pipeline name="CorrelationSWAlternative" class="eu.qualimaster.CorrelationSWAlternative.topology.Topology">
-+      <node name="MP" type="family">
-+          <component name="CorrelationSWAlternativeMP" container="CorrelationSWAlternative" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+      </node>
-+      <node name="HY" type="family">
-+          <component name="CorrelationSWAlternativeHY" container="CorrelationSWAlternative" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </node>
-+      <algorithm name="Mapper" implName="Mapper" class="eu.qualimaster.algorithms.imp.correlation.Mapper"/>
-+      <algorithm name="HayashiYoshida" implName="HayashiYoshida" class="eu.qualimaster.algorithms.imp.correlation.HayashiYoshida"/>
-+      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/pom.xml
-new file mode 100644
-index 0000000..272b3f1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/pom.xml
-@@ -0,0 +1,265 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>CorrelationSWAlternative</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-assembly-plugin</artifactId>
-+				<version>2.6</version>
-+            	<dependencies>
-+	                    <dependency>
-+	                        <groupId>eu.qualimaster</groupId>
-+	                        <artifactId>AlgorithmAssemblies</artifactId>
-+	                        <version>0.5.0-SNAPSHOT</version>
-+	                    </dependency>
-+	                </dependencies>
-+					<executions>
-+					<execution>
-+						<id>make-assembly</id>
-+						<phase>package</phase>
-+						<goals>
-+							<goal>single</goal>
-+						</goals>
-+					<configuration>
-+					<descriptorRefs>
-+						<descriptorRef>jar-with-dependencies</descriptorRef>
-+					</descriptorRefs>
-+					<dependencySets>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>runtime</scope>
-+						</dependencySet>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>provided</scope>
-+						</dependencySet>
-+					</dependencySets>
-+					<archive>
-+						<manifest>
-+						</manifest>
-+					</archive>
-+				</configuration>
-+					</execution>
-+				<execution>
-+                        <id>make-profilingAssembly</id>
-+                        <phase>package</phase>
-+                        <goals>
-+                            <goal>single</goal>
-+                        </goals>
-+                        <configuration>
-+                            <descriptorRefs>
-+                                <descriptorRef>profiling</descriptorRef>
-+                            </descriptorRefs>
-+                        </configuration>
-+                    </execution>
-+				</executions>
-+						</plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+	<dependency>
-+          <groupId>eu.qualimaster</groupId>
-+          <artifactId>AlgorithmAssemblies</artifactId>
-+          <version>0.5.0-SNAPSHOT</version>
-+      </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-mapper</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hayashi-yoshida</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/profiling/profile.ctl
-new file mode 100644
-index 0000000..d5609a9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/profiling/profile.ctl
-@@ -0,0 +1 @@
-+import eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/CorrelationSWAlternativeSubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/CorrelationSWAlternativeSubTopology.java
-new file mode 100644
-index 0000000..594bad3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/CorrelationSWAlternativeSubTopology.java
-@@ -0,0 +1,85 @@
-+package eu.qualimaster.CorrelationSWAlternative.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.Config;
-+import backtype.storm.topology.TopologyBuilder;
-+import eu.qualimaster.base.algorithm.ITopologyCreate;
-+import eu.qualimaster.base.algorithm.SubTopologyOutput;
-+import backtype.storm.topology.BoltDeclarer;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.SignalException;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial;
-+
-+public class CorrelationSWAlternativeSubTopology implements IFCorrelationFinancial, ITopologyCreate {
-+    final static Logger logger = Logger.getLogger(CorrelationSWAlternativeSubTopology.class);
-+    private int windowSize;
-+    private transient State state;
-+
-+    public void switchState(State arg0) {
-+        this.state = arg0;	
-+    }
-+
-+    public Double getMeasurement(IObservable observable) {
-+        return null;
-+    }
-+
-+    public SubTopologyOutput createSubTopology(TopologyBuilder builder,
-+    			Config config, String prefix, String input, String streamId) {
-+        String namespace = "CorrelationSWAlternative";
-+        if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {
-+            namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);
-+        }
-+        // Declare a Bolt "MP"
-+
-+        BoltDeclarer SubPipelineVar_19_FamilyElement0 =builder.setBolt(prefix+"MP", new SubPipelineVar_19_FamilyElement0FamilyElement(prefix+"MP", namespace), 1);
-+        SubPipelineVar_19_FamilyElement0.shuffleGrouping(input, streamId);
-+        // Declare a Bolt "HY"
-+
-+        BoltDeclarer SubPipelineVar_19_FamilyElement1 =builder.setBolt(prefix+"HY", new SubPipelineVar_19_FamilyElement1FamilyElement(prefix+"HY", namespace), 14);
-+        //SubPipelineVar_19_FamilyElement1 subscribing streams:
-+        SubPipelineVar_19_FamilyElement1.directGrouping(prefix+"MP", "MPSymbolsStream");
-+        SubPipelineVar_19_FamilyElement1.directGrouping(prefix+"MP", "MPConfigurationStream");
-+        SubPipelineVar_19_FamilyElement1.allGrouping(prefix+"MP", "MPResetWindowStream");
-+        return new SubTopologyOutput(prefix+"HY", "HYPairwiseFinancial", 4, 14); //TODO: consider PipelineOptions to change the parallelisms
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationFinancialPreprocessedStreamInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIFCorrelationFinancialSymbolListInput input, IIFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult) {
-+    }
-+
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize". Note that the actual parameter change will be dynamically
-+     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
-+     * sub-topology.
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+        this.windowSize = windowSize;
-+        try {
-+            logger.info("sending new WindowSize signal " + value + "!");
-+            ParameterChangeSignal signal = new ParameterChangeSignal("CorrelationSWAlternative", 
-+                    "CorrelationSWAlternativeMP", "windowSize", value, null);
-+            signal.sendSignal();
-+        } catch (Exception e) {
-+            logger.error("Signal not sent!");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..4bc02f4
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement0FamilyElement.java
-@@ -0,0 +1,366 @@
-+package eu.qualimaster.CorrelationSWAlternative.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFMapper.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Mapper;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class SubPipelineVar_19_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(SubPipelineVar_19_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FMapper.IFMapperSymbolsStreamOutput symbolsStreamResult = new FMapper.IFMapperSymbolsStreamOutput();
-+    private transient FMapper.IFMapperConfigurationStreamOutput configurationStreamResult = new FMapper.IFMapperConfigurationStreamOutput();
-+    private transient FMapper.IFMapperResetWindowStreamOutput resetWindowStreamResult = new FMapper.IFMapperResetWindowStreamOutput();
-+    private transient IFMapper alg = null; 
-+    private transient List<Integer> taskIdHY;
-+    private int SubPipelineVar_19_FamilyElement0TaskId;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput iTuplePreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput iTupleSymbolList = null;
-+    transient IIFMapperPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFMapperSymbolListInput inputSymbolList = null;
-+
-+    public SubPipelineVar_19_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+        taskIdHY = topologyContext.getComponentTasks("CorrelationSWAlternativeHY");
-+        logger.info("taskIdsHY = " + taskIdHY);
-+        SubPipelineVar_19_FamilyElement0TaskId = topologyContext.getThisTaskId();
-+        logger.info("SubPipelineVar_19_FamilyElement0TaskId = " + SubPipelineVar_19_FamilyElement0TaskId);
-+
-+        symbolsStreamResult = new FMapper.IFMapperSymbolsStreamOutput();
-+        IItemEmitter<IIFMapperSymbolsStreamOutput> symbolsStreamEmitter = new IItemEmitter<IIFMapperSymbolsStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFMapperSymbolsStreamOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "MPSymbolsStream", new Values(item));
-+            }
-+        };
-+        symbolsStreamResult.setEmitter(symbolsStreamEmitter);
-+
-+        configurationStreamResult = new FMapper.IFMapperConfigurationStreamOutput();
-+        IItemEmitter<IIFMapperConfigurationStreamOutput> configurationStreamEmitter = new IItemEmitter<IIFMapperConfigurationStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFMapperConfigurationStreamOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "MPConfigurationStream", new Values(item));
-+            }
-+        };
-+        configurationStreamResult.setEmitter(configurationStreamEmitter);
-+
-+        resetWindowStreamResult = new FMapper.IFMapperResetWindowStreamOutput();
-+        IItemEmitter<IIFMapperResetWindowStreamOutput> resetWindowStreamEmitter = new IItemEmitter<IIFMapperResetWindowStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFMapperResetWindowStreamOutput item) {
-+                _collector.emit("MPResetWindowStream", new Values(item));
-+            }
-+        };
-+        resetWindowStreamResult.setEmitter(resetWindowStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Mapper");
-+                    alg = (IFMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdHY, SubPipelineVar_19_FamilyElement0TaskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                } catch (NoSuchMethodException e) {
-+                    e.printStackTrace();
-+                } catch (InvocationTargetException e) {
-+                    e.printStackTrace();
-+                }
-+                if (PipelineOptions.hasExecutorArgument(map, getName(), "windowSize")) {
-+                    alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 0));
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Mapper", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fMapper"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFCorrelationFinancialPreprocessedStreamInput) {
-+            iTuplePreprocessedStream = (IIFCorrelationFinancialPreprocessedStreamInput)tupleItem;
-+            inputPreprocessedStream = new FMapper.IFMapperPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, symbolsStreamResult, configurationStreamResult, resetWindowStreamResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                symbolsStreamResult.setSymbolId("");
-+                symbolsStreamResult.setTimestamp(0);
-+                symbolsStreamResult.setValue(0.0);
-+                configurationStreamResult.setPairKey("");
-+                configurationStreamResult.setPairValue("");
-+                resetWindowStreamResult.setWindowStart(0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFCorrelationFinancialSymbolListInput) {
-+            iTupleSymbolList = (IIFCorrelationFinancialSymbolListInput)tupleItem;
-+            inputSymbolList = new FMapper.IFMapperSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, symbolsStreamResult, configurationStreamResult, resetWindowStreamResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                symbolsStreamResult.setSymbolId("");
-+                symbolsStreamResult.setTimestamp(0);
-+                symbolsStreamResult.setValue(0.0);
-+                configurationStreamResult.setPairKey("");
-+                configurationStreamResult.setPairValue("");
-+                resetWindowStreamResult.setWindowStart(0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperSymbolsStreamOutput> iterSymbolsStream = symbolsStreamResult.iterator();
-+            iterSymbolsStream.reset();
-+            while (iterSymbolsStream.hasNext()) {
-+                IIFMapperSymbolsStreamOutput out = iterSymbolsStream.next();
-+                _collector.emitDirect(out.getTaskId(), "MPSymbolsStream", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperConfigurationStreamOutput> iterConfigurationStream = configurationStreamResult.iterator();
-+            iterConfigurationStream.reset();
-+            while (iterConfigurationStream.hasNext()) {
-+                IIFMapperConfigurationStreamOutput out = iterConfigurationStream.next();
-+                _collector.emitDirect(out.getTaskId(), "MPConfigurationStream", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFMapperResetWindowStreamOutput> iterResetWindowStream = resetWindowStreamResult.iterator();
-+            iterResetWindowStream.reset();
-+            while (iterResetWindowStream.hasNext()) {
-+                IIFMapperResetWindowStreamOutput out = iterResetWindowStream.next();
-+                _collector.emit("MPResetWindowStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Mapper":
-+                if (!algChange || !(alg instanceof Mapper)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Mapper");
-+                        alg = (IFMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdHY, SubPipelineVar_19_FamilyElement0TaskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    } catch (NoSuchMethodException e) {
-+                        e.printStackTrace();
-+                    } catch (InvocationTargetException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterWindowSize(0);
-+                    sendAlgorithmChangeEvent("Mapper", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("MPSymbolsStream", new Fields("MPSymbolsStreamFields"));
-+        declarer.declareStream("MPConfigurationStream", new Fields("MPConfigurationStreamFields"));
-+        declarer.declareStream("MPResetWindowStream", new Fields("MPResetWindowStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..df5801f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/CorrelationSWAlternative/topology/SubPipelineVar_19_FamilyElement1FamilyElement.java
-@@ -0,0 +1,321 @@
-+package eu.qualimaster.CorrelationSWAlternative.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.HayashiYoshida;
-+import eu.qualimaster.families.inf.IFMapper.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class SubPipelineVar_19_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(SubPipelineVar_19_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+int counter = 0;
-+long recordOutput = 0;
-+    private transient FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput pairwiseFinancialResult = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
-+    private transient IFHayashiYoshida alg = null; 
-+    transient IIFMapperSymbolsStreamOutput iTupleSymbolsStream = null;
-+    transient IIFMapperConfigurationStreamOutput iTupleConfigurationStream = null;
-+    transient IIFMapperResetWindowStreamOutput iTupleResetWindowStream = null;
-+    transient IIFHayashiYoshidaSymbolsStreamInput inputSymbolsStream = null;
-+    transient IIFHayashiYoshidaConfigurationStreamInput inputConfigurationStream = null;
-+    transient IIFHayashiYoshidaResetWindowStreamInput inputResetWindowStream = null;
-+
-+    public SubPipelineVar_19_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+counter = 0;
-+
-+        pairwiseFinancialResult = new FHayashiYoshida.IFHayashiYoshidaPairwiseFinancialOutput();
-+        IItemEmitter<IIFHayashiYoshidaPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFHayashiYoshidaPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFHayashiYoshidaPairwiseFinancialOutput item) {
-+                _collector.emit("HYPairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.HayashiYoshida");
-+                    alg = (IFHayashiYoshida) cls.getConstructor(int.class).newInstance(taskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("HayashiYoshida", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fHayashiYoshida"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+recordOutput = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFMapperSymbolsStreamOutput) {
-+            iTupleSymbolsStream = (IIFMapperSymbolsStreamOutput)tupleItem;
-+            inputSymbolsStream = new FHayashiYoshida.IFHayashiYoshidaSymbolsStreamInput();
-+            inputSymbolsStream.setSymbolId(iTupleSymbolsStream.getSymbolId());
-+            inputSymbolsStream.setTimestamp(iTupleSymbolsStream.getTimestamp());
-+            inputSymbolsStream.setValue(iTupleSymbolsStream.getValue());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolsStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFMapperConfigurationStreamOutput) {
-+            iTupleConfigurationStream = (IIFMapperConfigurationStreamOutput)tupleItem;
-+            inputConfigurationStream = new FHayashiYoshida.IFHayashiYoshidaConfigurationStreamInput();
-+            inputConfigurationStream.setPairKey(iTupleConfigurationStream.getPairKey());
-+            inputConfigurationStream.setPairValue(iTupleConfigurationStream.getPairValue());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputConfigurationStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFMapperResetWindowStreamOutput) {
-+            iTupleResetWindowStream = (IIFMapperResetWindowStreamOutput)tupleItem;
-+            inputResetWindowStream = new FHayashiYoshida.IFHayashiYoshidaResetWindowStreamInput();
-+            inputResetWindowStream.setWindowStart(iTupleResetWindowStream.getWindowStart());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputResetWindowStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setPairwiseCorrelationFinancial("");
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFHayashiYoshidaPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+long nowOutput = System.currentTimeMillis();
-+if ((nowOutput - recordOutput) > 1000) {
-+recordOutput = nowOutput;
-+logger.error("The output rate at the time " + nowOutput + ":" + counter);
-+counter = 0;
-+} else {
-+counter++;
-+}
-+                IIFHayashiYoshidaPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("HYPairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "HayashiYoshida":
-+                if (!algChange || !(alg instanceof HayashiYoshida)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.HayashiYoshida");
-+                        alg = (IFHayashiYoshida) cls.getConstructor(int.class).newInstance(taskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("HayashiYoshida", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("HYPairwiseFinancial", new Fields("HYPairwiseFinancialFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/mapping.xml
-new file mode 100644
-index 0000000..cafe50c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/mapping.xml
-@@ -0,0 +1,55 @@
-+<mapping>
-+  <pipeline name="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.Topology">
-+      <node name="FinancialDataSource" type="source">
-+          <component name="PipelineVar_8_Source0" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="preprocessor" type="family">
-+          <component name="PipelineVar_8_FamilyElement0" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
-+      </node>
-+      <node name="CorrelationComputation" type="family">
-+          <component name="PipelineVar_8_FamilyElement1" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
-+      </node>
-+      <node name="DynamicGraphCompilation" type="family">
-+          <component name="PipelineVar_8_FamilyElement2" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "DynamicGraphCompilation"/>
-+      </node>
-+      <node name="DynamicHubComputation" type="family">
-+          <component name="PipelineVar_8_FamilyElement3" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_FamilyElement3FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoDynamicHubComputation"/>
-+      </node>
-+      <node name="DynamicGraphSink" type="sink">
-+          <component name="PipelineVar_8_Sink0" container="DynamicGraphPip" class="eu.qualimaster.DynamicGraphPip.topology.PipelineVar_8_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
-+      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
-+      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
-+              <component name="CorrelationSWMapper" container="DynamicGraphPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWHayashiYoshida" container="DynamicGraphPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
-+          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
-+          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
-+              <component name="CorrelationSWAlternativeMP" container="DynamicGraphPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWAlternativeHY" container="DynamicGraphPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="DynamicGraphCompilation" implName="DynamicGraphCompilation" class="eu.qualimaster.dynamicgraph.DynamicGraphCompilation"/>
-+      <algorithm name="TopoDynamicHubComputation" implName="TopoDynamicHubComputation" class="eu.qualimaster.dynamicgraph.TopoDynamicHubComputation"/>
-+      <algorithm name="Spring Financial Data" implName="SpringClient" class="eu.qualimaster.algorithms.imp.correlation.SpringClient"/>
-+      <algorithm name="DynamicGraphSink" implName="DynamicGraphSinkAlgorithm" class="eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm"/>
-+      <parameter parameter="windowSize" name="CorrelationComputation" receiver="PipelineVar_8_FamilyElement1"/> 
-+      <parameter parameter="correlationThreshold" name="DynamicGraphCompilation" receiver="PipelineVar_8_FamilyElement2"/> 
-+      <parameter parameter="windowSize" name="DynamicHubComputation" receiver="PipelineVar_8_FamilyElement3"/> 
-+      <parameter parameter="hubListSize" name="DynamicHubComputation" receiver="PipelineVar_8_FamilyElement3"/> 
-+      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
-+      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/pom.xml
-new file mode 100644
-index 0000000..1785b4d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/pom.xml
-@@ -0,0 +1,295 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>DynamicGraphPip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>spring-client</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-preprocessor</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-correlation-financial-software</artifactId>
-+      <version>3.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSW</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TransferEntropyHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>MutualInformationHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSWAlternative</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>dynamic-graph-compilation</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>dynamic-hub-computation</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>dynamic-graph-sink</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/settings.xml
-new file mode 100644
-index 0000000..c2aa94f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/settings.xml
-@@ -0,0 +1,115 @@
-+<pipeline>
-+    <name>DynamicGraphPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changecorrelationThreshold</name>
-+			<request>
-+				<field sequence="0">changecorrelationThreshold</field>
-+				<field sequence="1">%newCorrelationThreshold%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changecorrelationThreshold_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newCorrelationThreshold%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changehubListSize</name>
-+			<request>
-+				<field sequence="0">changehubListSize</field>
-+				<field sequence="1">%newHubListSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changehubListSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newHubListSize%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..13bc369
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement0FamilyElement.java
-@@ -0,0 +1,250 @@
-+package eu.qualimaster.DynamicGraphPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_8_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_8_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+    private transient IFPreprocessor alg = null; 
-+    transient ISpringFinancialDataSpringStreamOutput iTupleSpringStream = null;
-+    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
-+
-+    public PipelineVar_8_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
-+                _collector.emit("PipelineVar_8_FamilyElement0PreprocessedStream", new Values(item));
-+            }
-+        };
-+        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                    alg = (IFPreprocessor) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Preprocessor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fPreprocessor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof ISpringFinancialDataSpringStreamOutput) {
-+        iTupleSpringStream = (ISpringFinancialDataSpringStreamOutput)tupleItem;
-+        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputSpringStream, preprocessedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            preprocessedStreamResult.setSymbolId("");
-+            preprocessedStreamResult.setTimestamp(0);
-+            preprocessedStreamResult.setValue(0.0);
-+            preprocessedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
-+            iterPreprocessedStream.reset();
-+            while (iterPreprocessedStream.hasNext()) {
-+                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
-+                _collector.emit("PipelineVar_8_FamilyElement0PreprocessedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Preprocessor":
-+                if (!algChange || !(alg instanceof Preprocessor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                        alg = (IFPreprocessor) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_8_FamilyElement0PreprocessedStream", new Fields("PipelineVar_8_FamilyElement0PreprocessedStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..b558b28
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement1FamilyElement.java
-@@ -0,0 +1,544 @@
-+package eu.qualimaster.DynamicGraphPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.common.hardware.*;
-+import com.google.protobuf.ByteString;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_8_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_8_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial";
-+    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+    private transient IFCorrelationFinancial alg = null; 
-+    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
-+    transient ISpringFinancialDataSymbolListOutput iTupleSymbolList = null;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+
-+    public PipelineVar_8_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
-+                _collector.emit("PipelineVar_8_FamilyElement1PairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                    alg = (IFCorrelationFinancial) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
-+            streamId = "PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fCorrelationFinancial"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
-+            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
-+            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputPreprocessedStream));
-+            }
-+        }
-+
-+        if(tupleItem instanceof ISpringFinancialDataSymbolListOutput) {
-+            iTupleSymbolList = (ISpringFinancialDataSymbolListOutput)tupleItem;
-+            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputSymbolList));
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("PipelineVar_8_FamilyElement1PairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TopoSoftwareCorrelationFinancial":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "GenTopoHardwareCorrelationFinancial":
-+            case "GenTopoHardwareCorrelationFinancialSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("DynamicGraphPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("DynamicGraphPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_8_FamilyElement1GenTopoHardwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSW":
-+            case "CorrelationSWSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_8_FamilyElement1CorrelationSW";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "TransferEntropyHardware":
-+            case "TransferEntropyHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("DynamicGraphPip",
-+                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("DynamicGraphPip",
-+                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_8_FamilyElement1TransferEntropyHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "MutualInformationHardware":
-+            case "MutualInformationHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("DynamicGraphPip",
-+                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("DynamicGraphPip",
-+                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_8_FamilyElement1MutualInformationHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSWAlternative":
-+            case "CorrelationSWAlternativeSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_8_FamilyElement1CorrelationSWAlternative";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_8_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_8_FamilyElement1PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_8_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_8_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_8_FamilyElement1CorrelationSW", new Fields("PipelineVar_8_FamilyElement1CorrelationSWFields"));
-+        declarer.declareStream("PipelineVar_8_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_8_FamilyElement1TransferEntropyHardwareFields"));
-+        declarer.declareStream("PipelineVar_8_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_8_FamilyElement1MutualInformationHardwareFields"));
-+        declarer.declareStream("PipelineVar_8_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_8_FamilyElement1CorrelationSWAlternativeFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement2FamilyElement.java
-new file mode 100644
-index 0000000..7d72886
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement2FamilyElement.java
-@@ -0,0 +1,281 @@
-+package eu.qualimaster.DynamicGraphPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_8_FamilyElement2FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_8_FamilyElement2FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+    private transient IFDynamicGraphCompilation alg = null; 
-+    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient IIFDynamicGraphCompilationPairwiseFinancialInput inputPairwiseFinancial = null;
-+
-+    public PipelineVar_8_FamilyElement2FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+        IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput> edgeStreamEmitter = new IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFDynamicGraphCompilationEdgeStreamOutput item) {
-+                _collector.emit("PipelineVar_8_FamilyElement2EdgeStream", new Values(item));
-+            }
-+        };
-+        edgeStreamResult.setEmitter(edgeStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
-+                    alg = (IFDynamicGraphCompilation) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (PipelineOptions.hasExecutorArgument(map, getName(), "correlationThreshold")) {
-+                    alg.setParameterCorrelationThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "correlationThreshold", 0.0));
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("DynamicGraphCompilation", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fDynamicGraphCompilation"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
-+        iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
-+        inputPairwiseFinancial = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
-+        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputPairwiseFinancial, edgeStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            edgeStreamResult.setEdge("");
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFDynamicGraphCompilationEdgeStreamOutput> iterEdgeStream = edgeStreamResult.iterator();
-+            iterEdgeStream.reset();
-+            while (iterEdgeStream.hasNext()) {
-+                IIFDynamicGraphCompilationEdgeStreamOutput out = iterEdgeStream.next();
-+                _collector.emit("PipelineVar_8_FamilyElement2EdgeStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "correlationThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal correlationThreshold");
-+                        alg.setParameterCorrelationThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("correlationThreshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "DynamicGraphCompilation":
-+                if (!algChange || !(alg instanceof DynamicGraphCompilation)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
-+                        alg = (IFDynamicGraphCompilation) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterCorrelationThreshold(0.0);
-+                    sendAlgorithmChangeEvent("DynamicGraphCompilation", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_8_FamilyElement2EdgeStream", new Fields("PipelineVar_8_FamilyElement2EdgeStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement3FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement3FamilyElement.java
-new file mode 100644
-index 0000000..419414b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_FamilyElement3FamilyElement.java
-@@ -0,0 +1,294 @@
-+package eu.qualimaster.DynamicGraphPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFDynamicHubComputation.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.dynamicgraph.TopoDynamicHubComputation;
-+import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_8_FamilyElement3FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_8_FamilyElement3FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_8_FamilyElement3TopoDynamicHubComputation";
-+    private transient FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput hubStreamResult = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
-+    private transient IFDynamicHubComputation alg = null; 
-+    transient IIFDynamicGraphCompilationEdgeStreamOutput iTupleEdgeStream = null;
-+    transient IIFDynamicHubComputationEdgeStreamInput inputEdgeStream = null;
-+
-+    public PipelineVar_8_FamilyElement3FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        hubStreamResult = new FDynamicHubComputation.IFDynamicHubComputationHubStreamOutput();
-+        IItemEmitter<IIFDynamicHubComputationHubStreamOutput> hubStreamEmitter = new IItemEmitter<IIFDynamicHubComputationHubStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFDynamicHubComputationHubStreamOutput item) {
-+                _collector.emit("PipelineVar_8_FamilyElement3HubStream", new Values(item));
-+            }
-+        };
-+        hubStreamResult.setEmitter(hubStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.dynamicgraph.TopoDynamicHubComputation");
-+                    alg = (IFDynamicHubComputation) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
-+                alg.setParameterHubListSize(PipelineOptions.getExecutorIntArgument(map, getName(), "hubListSize", 10));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TopoDynamicHubComputation", null);
-+            streamId = "PipelineVar_8_FamilyElement3TopoDynamicHubComputation";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fDynamicHubComputation"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFDynamicGraphCompilationEdgeStreamOutput) {
-+        iTupleEdgeStream = (IIFDynamicGraphCompilationEdgeStreamOutput)tupleItem;
-+        inputEdgeStream = new FDynamicHubComputation.IFDynamicHubComputationEdgeStreamInput();
-+        inputEdgeStream.setEdge(iTupleEdgeStream.getEdge());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputEdgeStream, hubStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            hubStreamResult.setHubList("");
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+        if(alg instanceof ITopologyCreate) {
-+            _collector.emit(streamId, new Values(inputEdgeStream));
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFDynamicHubComputationHubStreamOutput> iterHubStream = hubStreamResult.iterator();
-+            iterHubStream.reset();
-+            while (iterHubStream.hasNext()) {
-+                IIFDynamicHubComputationHubStreamOutput out = iterHubStream.next();
-+                _collector.emit("PipelineVar_8_FamilyElement3HubStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "hubListSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal hubListSize");
-+                        alg.setParameterHubListSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("hubListSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TopoDynamicHubComputation":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TopoDynamicHubComputation)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.dynamicgraph.TopoDynamicHubComputation");
-+                        alg = (IFDynamicHubComputation) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_8_FamilyElement3TopoDynamicHubComputation";
-+                    alg.setParameterWindowSize(30);
-+                    alg.setParameterHubListSize(10);
-+                    sendAlgorithmChangeEvent("TopoDynamicHubComputation", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_8_FamilyElement3HubStream", new Fields("PipelineVar_8_FamilyElement3HubStreamFields"));
-+        declarer.declareStream("PipelineVar_8_FamilyElement3TopoDynamicHubComputation", new Fields("PipelineVar_8_FamilyElement3TopoDynamicHubComputationFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Sink0Sink.java
-new file mode 100644
-index 0000000..4f8868a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Sink0Sink.java
-@@ -0,0 +1,132 @@
-+package eu.qualimaster.DynamicGraphPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IDynamicGraphSink;
-+import eu.qualimaster.data.inf.IDynamicGraphSink.*;
-+import eu.qualimaster.data.imp.DynamicGraphSink;
-+import eu.qualimaster.data.imp.DynamicGraphSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFDynamicHubComputation.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_8_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_8_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient IDynamicGraphSink sinkHandler;
-+private int counter = 0;
-+    transient IIFDynamicHubComputationHubStreamOutput iTupleHubStream = null;
-+    transient IDynamicGraphSinkHubStreamInput inputHubStream = null;
-+
-+	public PipelineVar_8_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+    if(tupleItem instanceof IIFDynamicHubComputationHubStreamOutput) {
-+        iTupleHubStream = (IIFDynamicHubComputationHubStreamOutput)tupleItem;
-+        inputHubStream = new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
-+        inputHubStream.setHubList(iTupleHubStream.getHubList());
-+        sinkHandler.postDataHubStream(inputHubStream);
-+        emitted(inputHubStream);
-+    }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new DynamicGraphSink.DynamicGraphSinkHubStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IDynamicGraphSink> cls = (Class<? extends IDynamicGraphSink>)Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("DynamicGraphSinkAlgorithm", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_8_Sink0HubStream", new Fields("PipelineVar_8_Sink0HubStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Source0Source.java
-new file mode 100644
-index 0000000..99ad86e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/PipelineVar_8_Source0Source.java
-@@ -0,0 +1,200 @@
-+package eu.qualimaster.DynamicGraphPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ISpringFinancialData;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.data.imp.SpringFinancialData;
-+import eu.qualimaster.algorithms.imp.correlation.SpringClient;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_8_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_8_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ISpringFinancialData sourceData;
-+
-+    public PipelineVar_8_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("DynamicGraphPip", "PipelineVar_8_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSymbolListOutput>(ISpringFinancialDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSpringStreamOutput>(ISpringFinancialDataSpringStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ISpringFinancialData> cls = (Class<? extends ISpringFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClient");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("SpringClient", null);
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("DynamicGraphPip", "PipelineVar_8_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_8_Source0StreamSymbolList".
-+        ISpringFinancialDataSymbolListOutput dataItemSymbolList = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PipelineVar_8_Source0SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PipelineVar_8_Source0SpringStream".
-+        ISpringFinancialDataSpringStreamOutput dataItemSpringStream = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
-+        try {
-+            dataItemSpringStream = sourceData.getSpringStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSpringStream.setSymbolTuple("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSpringStream!=null){
-+            _collector.emit("PipelineVar_8_Source0SpringStream", new Values(dataItemSpringStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_8_Source0SymbolList", new Fields("PipelineVar_8_Source0SymbolListFields"));
-+        declarer.declareStream("PipelineVar_8_Source0SpringStream", new Fields("PipelineVar_8_Source0SpringStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/Topology.java
-new file mode 100644
-index 0000000..770566b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/DynamicGraphPip/topology/Topology.java
-@@ -0,0 +1,171 @@
-+package eu.qualimaster.DynamicGraphPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
-+import eu.qualimaster.dynamicgraph.TopoDynamicHubComputation;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "DynamicGraphPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 18; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "FinancialDataSource"
-+
-+            builder.setSpout("PipelineVar_8_Source0", new PipelineVar_8_Source0Source("PipelineVar_8_Source0", "DynamicGraphPip"), 1);
-+            // Declare a Bolt "preprocessor"
-+
-+            BoltDeclarer PipelineVar_8_FamilyElement0=builder.setBolt("PipelineVar_8_FamilyElement0", new PipelineVar_8_FamilyElement0FamilyElement("PipelineVar_8_FamilyElement0", "DynamicGraphPip"), 1);
-+            PipelineVar_8_FamilyElement0.shuffleGrouping("PipelineVar_8_Source0", "PipelineVar_8_Source0SpringStream");
-+            // Declare a Bolt "CorrelationComputation"
-+
-+            BoltDeclarer PipelineVar_8_FamilyElement1=builder.setBolt("PipelineVar_8_FamilyElement1", new PipelineVar_8_FamilyElement1FamilyElement("PipelineVar_8_FamilyElement1", "DynamicGraphPip"), 1);
-+            PipelineVar_8_FamilyElement1.shuffleGrouping("PipelineVar_8_FamilyElement0", "PipelineVar_8_FamilyElement0PreprocessedStream");
-+            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
-+            }
-+            builder.startRecording("TopoSoftwareCorrelationFinancial");
-+            ITopologyCreate PipelineVar_8_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
-+            SubTopologyOutput PipelineVar_8_FamilyElement11SubOutput = PipelineVar_8_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1TopoSoftwareCorrelationFinancial");
-+            builder.endRecording(PipelineVar_8_FamilyElement11SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement11SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement11SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
-+            ITopologyCreate PipelineVar_8_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
-+            SubTopologyOutput PipelineVar_8_FamilyElement12SubOutput = PipelineVar_8_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1GenTopoHardwareCorrelationFinancial");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement12SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement12SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
-+            ITopologyCreate PipelineVar_8_FamilyElement13SubCreator = new CorrelationSWSubTopology();
-+            SubTopologyOutput PipelineVar_8_FamilyElement13SubOutput = PipelineVar_8_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1CorrelationSW");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement13SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement13SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
-+            ITopologyCreate PipelineVar_8_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_8_FamilyElement14SubOutput = PipelineVar_8_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1TransferEntropyHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement14SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement14SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
-+            ITopologyCreate PipelineVar_8_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_8_FamilyElement15SubOutput = PipelineVar_8_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1MutualInformationHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement15SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement15SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
-+            ITopologyCreate PipelineVar_8_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
-+            SubTopologyOutput PipelineVar_8_FamilyElement16SubOutput = PipelineVar_8_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_8_FamilyElement1", "PipelineVar_8_FamilyElement1CorrelationSWAlternative");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement16SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement16SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "DynamicGraphCompilation"
-+
-+            BoltDeclarer PipelineVar_8_FamilyElement2=builder.setBolt("PipelineVar_8_FamilyElement2", new PipelineVar_8_FamilyElement2FamilyElement("PipelineVar_8_FamilyElement2", "DynamicGraphPip"), 1);
-+            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement11SubOutput.getBoltName(), PipelineVar_8_FamilyElement11SubOutput.getStreamId());
-+            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement12SubOutput.getBoltName(), PipelineVar_8_FamilyElement12SubOutput.getStreamId());
-+            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement13SubOutput.getBoltName(), PipelineVar_8_FamilyElement13SubOutput.getStreamId());
-+            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement14SubOutput.getBoltName(), PipelineVar_8_FamilyElement14SubOutput.getStreamId());
-+            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement15SubOutput.getBoltName(), PipelineVar_8_FamilyElement15SubOutput.getStreamId());
-+            PipelineVar_8_FamilyElement2.shuffleGrouping(PipelineVar_8_FamilyElement16SubOutput.getBoltName(), PipelineVar_8_FamilyElement16SubOutput.getStreamId());
-+            // Declare a Bolt "DynamicHubComputation"
-+
-+            BoltDeclarer PipelineVar_8_FamilyElement3=builder.setBolt("PipelineVar_8_FamilyElement3", new PipelineVar_8_FamilyElement3FamilyElement("PipelineVar_8_FamilyElement3", "DynamicGraphPip"), 1);
-+            PipelineVar_8_FamilyElement3.shuffleGrouping("PipelineVar_8_FamilyElement2", "PipelineVar_8_FamilyElement2EdgeStream");
-+            //generate the Storm-based algorithm topology name:TopoDynamicHubComputation
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoDynamicHubComputation"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("TopoDynamicHubComputation"), 1);
-+            }
-+            builder.startRecording("TopoDynamicHubComputation");
-+            ITopologyCreate PipelineVar_8_FamilyElement31SubCreator = new TopoDynamicHubComputation();
-+            SubTopologyOutput PipelineVar_8_FamilyElement31SubOutput = PipelineVar_8_FamilyElement31SubCreator.createSubTopology(builder,config,"TopoDynamicHubComputation", "PipelineVar_8_FamilyElement3", "PipelineVar_8_FamilyElement3TopoDynamicHubComputation");
-+            builder.endRecording(PipelineVar_8_FamilyElement31SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_8_FamilyElement31SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_8_FamilyElement31SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "DynamicGraphSink"
-+
-+            BoltDeclarer PipelineVar_8_Sink0=builder.setBolt("PipelineVar_8_Sink0", new PipelineVar_8_Sink0Sink("PipelineVar_8_Sink0", "DynamicGraphPip"), 1);
-+            PipelineVar_8_Sink0.shuffleGrouping(PipelineVar_8_FamilyElement31SubOutput.getBoltName(), PipelineVar_8_FamilyElement31SubOutput.getStreamId());
-+            PipelineVar_8_FamilyElement1.shuffleGrouping("PipelineVar_8_Source0", "PipelineVar_8_Source0SymbolList");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/mapping.xml
-new file mode 100644
-index 0000000..53fc1fb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/mapping.xml
-@@ -0,0 +1,98 @@
-+<mapping>
-+  <pipeline name="FocusPip" class="eu.qualimaster.FocusPip.topology.Topology">
-+      <node name="TwitterDataSource" type="source">
-+          <component name="PipelineVar_7_Source0" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="SpamDetection" type="family">
-+          <component name="PipelineVar_7_FamilyElement0" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SpamDetection"/>
-+      </node>
-+      <node name="Spam Removal" type="family">
-+          <component name="PipelineVar_7_FamilyElement1" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SpamRemoval"/>
-+      </node>
-+      <node name="StockParser" type="family">
-+          <component name="PipelineVar_7_FamilyElement2" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "StockParser  "/>
-+      </node>
-+      <node name="EventDetection" type="family">
-+          <component name="PipelineVar_7_FamilyElement3" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement3FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "EventDetectionHardThreshold"/>
-+      </node>
-+      <node name="KeywordAnalyzer" type="family">
-+          <component name="PipelineVar_7_FamilyElement4" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement4FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "KeywordAnalyzer"/>
-+      </node>
-+      <node name="Recommendations" type="family">
-+          <component name="PipelineVar_7_FamilyElement5" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement5FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Recommendations"/>
-+      </node>
-+      <node name="FocusSink" type="sink">
-+          <component name="PipelineVar_7_Sink0" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="SpringDataSource" type="source">
-+          <component name="PipelineVar_7_Source1" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_Source1Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="preprocessor" type="family">
-+          <component name="PipelineVar_7_FamilyElement6" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement6FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
-+      </node>
-+      <node name="correlation" type="family">
-+          <component name="PipelineVar_7_FamilyElement7" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement7FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
-+      </node>
-+      <node name="DynamicGraphCompilation" type="family">
-+          <component name="PipelineVar_7_FamilyElement8" container="FocusPip" class="eu.qualimaster.FocusPip.topology.PipelineVar_7_FamilyElement8FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "DynamicGraphCompilation"/>
-+      </node>
-+      <algorithm name="SpamDetection" implName="SpamDetectionBolt" class="eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt"/>
-+      <algorithm name="SpamRemoval" implName="SpamRemovalBolt" class="eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt"/>
-+      <algorithm name="StockParser  " implName="StockParserAlgorithm" class="eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm"/>
-+      <algorithm name="EventDetectionHardThreshold" implName="EventDetectionHardThresholdAlgorithm" class="eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm"/>
-+      <algorithm name="KeywordAnalyzer" implName="BasicKeywordAnalyzerAlgorithm" class="eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm"/>
-+      <algorithm name="Recommendations" implName="RecommendationsAlgorithm" class="eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm"/>
-+      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
-+      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
-+      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
-+              <component name="CorrelationSWMapper" container="FocusPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWHayashiYoshida" container="FocusPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
-+          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
-+          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
-+              <component name="CorrelationSWAlternativeMP" container="FocusPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWAlternativeHY" container="FocusPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="DynamicGraphCompilation" implName="DynamicGraphCompilation" class="eu.qualimaster.dynamicgraph.DynamicGraphCompilation"/>
-+      <algorithm name="Twitter Stream Data" implName="TwitterFileStreaming" class="eu.qualimaster.data.stream.source.TwitterFileStreaming"/>
-+      <algorithm name="FocusFincancialData" implName="FocusedSpringClient" class="eu.qualimaster.focus.FocusedSpringClient"/>
-+      <algorithm name="FocusSink" implName="FocusSinkAlgorithm" class="eu.qualimaster.focus.FocusSinkAlgorithm"/>
-+      <parameter parameter="consumerKey" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="consumerSecret" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="accessToken" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="accessTokenSecret" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="queueSize" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="tweetDirectory" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="speedFactor" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="runLocally" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="adjustTimeToNow" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="realLoops" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="setAdditionalKeywords" name="TwitterDataSource" receiver="PipelineVar_7_Source0"/> 
-+      <parameter parameter="spamThreshold" name="Spam Removal" receiver="PipelineVar_7_FamilyElement1"/> 
-+      <parameter parameter="hardThreshold" name="EventDetection" receiver="PipelineVar_7_FamilyElement3"/> 
-+      <parameter parameter="percentageThreshold" name="EventDetection" receiver="PipelineVar_7_FamilyElement3"/> 
-+      <parameter parameter="lengthOfTimeWindow" name="EventDetection" receiver="PipelineVar_7_FamilyElement3"/> 
-+      <parameter parameter="frequenceOfCheckForEvent" name="EventDetection" receiver="PipelineVar_7_FamilyElement3"/> 
-+      <parameter parameter="threshold" name="KeywordAnalyzer" receiver="PipelineVar_7_FamilyElement4"/> 
-+      <parameter parameter="decay" name="KeywordAnalyzer" receiver="PipelineVar_7_FamilyElement4"/> 
-+      <parameter parameter="impactThreshold" name="Recommendations" receiver="PipelineVar_7_FamilyElement5"/> 
-+      <parameter parameter="stockCooccurrenceThreshold" name="Recommendations" receiver="PipelineVar_7_FamilyElement5"/> 
-+      <parameter parameter="playerList" name="SpringDataSource" receiver="PipelineVar_7_Source1"/> 
-+      <parameter parameter="windowSize" name="correlation" receiver="PipelineVar_7_FamilyElement7"/> 
-+      <parameter parameter="correlationThreshold" name="DynamicGraphCompilation" receiver="PipelineVar_7_FamilyElement8"/> 
-+      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
-+      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/pom.xml
-new file mode 100644
-index 0000000..4b679dd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/pom.xml
-@@ -0,0 +1,325 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>FocusPip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TwitterStreamDataSource</artifactId>
-+      <version>0.0.5-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>SpamDetectionAlgorithm</artifactId>
-+      <version>0.1.5-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>SpamRemovalAlgorithm</artifactId>
-+      <version>0.1.5-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>StockParser</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>EventDetectionHardThresholdAlgorithm</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>KeywordAnalyzer</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>Recommendations</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>focus-sink</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>focused-spring-client</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-preprocessor</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-correlation-financial-software</artifactId>
-+      <version>3.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSW</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TransferEntropyHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>MutualInformationHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSWAlternative</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>dynamic-graph-compilation</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/settings.xml
-new file mode 100644
-index 0000000..ba1016c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/settings.xml
-@@ -0,0 +1,102 @@
-+<pipeline>
-+    <name>FocusPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changeplayerList</name>
-+			<request>
-+				<field sequence="0">changeplayerList</field>
-+				<field sequence="1">%newPlayerList%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changeplayerList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newPlayerList%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changecorrelationThreshold</name>
-+			<request>
-+				<field sequence="0">changecorrelationThreshold</field>
-+				<field sequence="1">%newCorrelationThreshold%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changecorrelationThreshold_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newCorrelationThreshold%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..985f490
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement0FamilyElement.java
-@@ -0,0 +1,248 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFSpamDetection.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt;
-+import eu.qualimaster.data.inf.ITwitterStreamData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FSpamDetection.IFSpamDetectionTwitterStreamOutput twitterStreamResult = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
-+    private transient IFSpamDetection alg = null; 
-+    transient ITwitterStreamDataTwitterStreamOutput iTupleTwitterStream = null;
-+    transient IIFSpamDetectionTwitterStreamInput inputTwitterStream = null;
-+
-+    public PipelineVar_7_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        twitterStreamResult = new FSpamDetection.IFSpamDetectionTwitterStreamOutput();
-+        IItemEmitter<IIFSpamDetectionTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFSpamDetectionTwitterStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFSpamDetectionTwitterStreamOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement0TwitterStream", new Values(item));
-+            }
-+        };
-+        twitterStreamResult.setEmitter(twitterStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt");
-+                    alg = (IFSpamDetection) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("SpamDetectionBolt", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fSpamDetection"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof ITwitterStreamDataTwitterStreamOutput) {
-+        iTupleTwitterStream = (ITwitterStreamDataTwitterStreamOutput)tupleItem;
-+        inputTwitterStream = new FSpamDetection.IFSpamDetectionTwitterStreamInput();
-+        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputTwitterStream, twitterStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            twitterStreamResult.setStatus(null);
-+            twitterStreamResult.setSpamPropability(0.0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFSpamDetectionTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
-+            iterTwitterStream.reset();
-+            while (iterTwitterStream.hasNext()) {
-+                IIFSpamDetectionTwitterStreamOutput out = iterTwitterStream.next();
-+                _collector.emit("PipelineVar_7_FamilyElement0TwitterStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "SpamDetectionBolt":
-+                if (!algChange || !(alg instanceof SpamDetectionBolt)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt");
-+                        alg = (IFSpamDetection) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("SpamDetectionBolt", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement0TwitterStream", new Fields("PipelineVar_7_FamilyElement0TwitterStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..ee624fe
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement1FamilyElement.java
-@@ -0,0 +1,275 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFSpamRemoval.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt;
-+import eu.qualimaster.families.inf.IFSpamDetection.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FSpamRemoval.IFSpamRemovalTwitterStreamOutput twitterStreamResult = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
-+    private transient IFSpamRemoval alg = null; 
-+    transient IIFSpamDetectionTwitterStreamOutput iTupleTwitterStream = null;
-+    transient IIFSpamRemovalTwitterStreamInput inputTwitterStream = null;
-+
-+    public PipelineVar_7_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        twitterStreamResult = new FSpamRemoval.IFSpamRemovalTwitterStreamOutput();
-+        IItemEmitter<IIFSpamRemovalTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFSpamRemovalTwitterStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFSpamRemovalTwitterStreamOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement1TwitterStream", new Values(item));
-+            }
-+        };
-+        twitterStreamResult.setEmitter(twitterStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt");
-+                    alg = (IFSpamRemoval) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterSpamThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "spamThreshold", 0.5));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("SpamRemovalBolt", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fSpamRemoval"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFSpamDetectionTwitterStreamOutput) {
-+        iTupleTwitterStream = (IIFSpamDetectionTwitterStreamOutput)tupleItem;
-+        inputTwitterStream = new FSpamRemoval.IFSpamRemovalTwitterStreamInput();
-+        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
-+        inputTwitterStream.setSpamPropability(iTupleTwitterStream.getSpamPropability());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputTwitterStream, twitterStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            twitterStreamResult.setStatus(null);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFSpamRemovalTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
-+            iterTwitterStream.reset();
-+            while (iterTwitterStream.hasNext()) {
-+                IIFSpamRemovalTwitterStreamOutput out = iterTwitterStream.next();
-+                _collector.emit("PipelineVar_7_FamilyElement1TwitterStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "spamThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal spamThreshold");
-+                        alg.setParameterSpamThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("spamThreshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "SpamRemovalBolt":
-+                if (!algChange || !(alg instanceof SpamRemovalBolt)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt");
-+                        alg = (IFSpamRemoval) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterSpamThreshold(0.5);
-+                    sendAlgorithmChangeEvent("SpamRemovalBolt", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement1TwitterStream", new Fields("PipelineVar_7_FamilyElement1TwitterStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement2FamilyElement.java
-new file mode 100644
-index 0000000..bd78ea6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement2FamilyElement.java
-@@ -0,0 +1,248 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFStockParser.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm;
-+import eu.qualimaster.families.inf.IFSpamRemoval.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement2FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement2FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FStockParser.IFStockParserTwitterStreamOutput twitterStreamResult = new FStockParser.IFStockParserTwitterStreamOutput();
-+    private transient IFStockParser alg = null; 
-+    transient IIFSpamRemovalTwitterStreamOutput iTupleTwitterStream = null;
-+    transient IIFStockParserTwitterStreamInput inputTwitterStream = null;
-+
-+    public PipelineVar_7_FamilyElement2FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        twitterStreamResult = new FStockParser.IFStockParserTwitterStreamOutput();
-+        IItemEmitter<IIFStockParserTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFStockParserTwitterStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFStockParserTwitterStreamOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement2TwitterStream", new Values(item));
-+            }
-+        };
-+        twitterStreamResult.setEmitter(twitterStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm");
-+                    alg = (IFStockParser) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("StockParserAlgorithm", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fStockParser"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFSpamRemovalTwitterStreamOutput) {
-+        iTupleTwitterStream = (IIFSpamRemovalTwitterStreamOutput)tupleItem;
-+        inputTwitterStream = new FStockParser.IFStockParserTwitterStreamInput();
-+        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputTwitterStream, twitterStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            twitterStreamResult.setStatus(null);
-+            twitterStreamResult.setStocks(null);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFStockParserTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
-+            iterTwitterStream.reset();
-+            while (iterTwitterStream.hasNext()) {
-+                IIFStockParserTwitterStreamOutput out = iterTwitterStream.next();
-+                _collector.emit("PipelineVar_7_FamilyElement2TwitterStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "StockParserAlgorithm":
-+                if (!algChange || !(alg instanceof StockParserAlgorithm)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm");
-+                        alg = (IFStockParser) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("StockParserAlgorithm", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement2TwitterStream", new Fields("PipelineVar_7_FamilyElement2TwitterStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement3FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement3FamilyElement.java
-new file mode 100644
-index 0000000..4c4b4f2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement3FamilyElement.java
-@@ -0,0 +1,309 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFTwitterEventDetection.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm;
-+import eu.qualimaster.families.inf.IFStockParser.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement3FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement3FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput twitterStreamResult = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
-+    private transient IFTwitterEventDetection alg = null; 
-+    transient IIFStockParserTwitterStreamOutput iTupleTwitterStream = null;
-+    transient IIFTwitterEventDetectionTwitterStreamInput inputTwitterStream = null;
-+
-+    public PipelineVar_7_FamilyElement3FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        twitterStreamResult = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamOutput();
-+        IItemEmitter<IIFTwitterEventDetectionTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFTwitterEventDetectionTwitterStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTwitterEventDetectionTwitterStreamOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement3TwitterStream", new Values(item));
-+            }
-+        };
-+        twitterStreamResult.setEmitter(twitterStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm");
-+                    alg = (IFTwitterEventDetection) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterHardThreshold(PipelineOptions.getExecutorIntArgument(map, getName(), "hardThreshold", 1000));
-+                alg.setParameterPercentageThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "percentageThreshold", 0.5));
-+                alg.setParameterLengthOfTimeWindow(PipelineOptions.getExecutorIntArgument(map, getName(), "lengthOfTimeWindow", 86400));
-+                alg.setParameterFrequenceOfCheckForEvent(PipelineOptions.getExecutorIntArgument(map, getName(), "frequenceOfCheckForEvent", 1));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("EventDetectionHardThresholdAlgorithm", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fTwitterEventDetection"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFStockParserTwitterStreamOutput) {
-+        iTupleTwitterStream = (IIFStockParserTwitterStreamOutput)tupleItem;
-+        inputTwitterStream = new FTwitterEventDetection.IFTwitterEventDetectionTwitterStreamInput();
-+        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
-+        inputTwitterStream.setStocks(iTupleTwitterStream.getStocks());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputTwitterStream, twitterStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            twitterStreamResult.setEvents(null);
-+            twitterStreamResult.setStatus(null);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTwitterEventDetectionTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
-+            iterTwitterStream.reset();
-+            while (iterTwitterStream.hasNext()) {
-+                IIFTwitterEventDetectionTwitterStreamOutput out = iterTwitterStream.next();
-+                _collector.emit("PipelineVar_7_FamilyElement3TwitterStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "hardThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal hardThreshold");
-+                        alg.setParameterHardThreshold(para.getIntValue()); 
-+                        sendParameterChangeEvent("hardThreshold", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "percentageThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal percentageThreshold");
-+                        alg.setParameterPercentageThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("percentageThreshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "lengthOfTimeWindow" :
-+                    try {
-+                        System.out.println("Received parameter changing signal lengthOfTimeWindow");
-+                        alg.setParameterLengthOfTimeWindow(para.getIntValue()); 
-+                        sendParameterChangeEvent("lengthOfTimeWindow", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "frequenceOfCheckForEvent" :
-+                    try {
-+                        System.out.println("Received parameter changing signal frequenceOfCheckForEvent");
-+                        alg.setParameterFrequenceOfCheckForEvent(para.getIntValue()); 
-+                        sendParameterChangeEvent("frequenceOfCheckForEvent", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "EventDetectionHardThresholdAlgorithm":
-+                if (!algChange || !(alg instanceof EventDetectionHardThresholdAlgorithm)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm");
-+                        alg = (IFTwitterEventDetection) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterHardThreshold(1000);
-+                    alg.setParameterPercentageThreshold(0.5);
-+                    alg.setParameterLengthOfTimeWindow(86400);
-+                    alg.setParameterFrequenceOfCheckForEvent(1);
-+                    sendAlgorithmChangeEvent("EventDetectionHardThresholdAlgorithm", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement3TwitterStream", new Fields("PipelineVar_7_FamilyElement3TwitterStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement4FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement4FamilyElement.java
-new file mode 100644
-index 0000000..bf78078
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement4FamilyElement.java
-@@ -0,0 +1,287 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFKeywordAnalyzer.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm;
-+import eu.qualimaster.families.inf.IFTwitterEventDetection.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement4FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement4FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput twitterStreamResult = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
-+    private transient IFKeywordAnalyzer alg = null; 
-+    transient IIFTwitterEventDetectionTwitterStreamOutput iTupleTwitterStream = null;
-+    transient IIFKeywordAnalyzerTwitterStreamInput inputTwitterStream = null;
-+
-+    public PipelineVar_7_FamilyElement4FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        twitterStreamResult = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamOutput();
-+        IItemEmitter<IIFKeywordAnalyzerTwitterStreamOutput> twitterStreamEmitter = new IItemEmitter<IIFKeywordAnalyzerTwitterStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFKeywordAnalyzerTwitterStreamOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement4TwitterStream", new Values(item));
-+            }
-+        };
-+        twitterStreamResult.setEmitter(twitterStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm");
-+                    alg = (IFKeywordAnalyzer) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "threshold", 0.5));
-+                alg.setParameterDecay(PipelineOptions.getExecutorDoubleArgument(map, getName(), "decay", 0.5));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("BasicKeywordAnalyzerAlgorithm", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fKeywordAnalyzer"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFTwitterEventDetectionTwitterStreamOutput) {
-+        iTupleTwitterStream = (IIFTwitterEventDetectionTwitterStreamOutput)tupleItem;
-+        inputTwitterStream = new FKeywordAnalyzer.IFKeywordAnalyzerTwitterStreamInput();
-+        inputTwitterStream.setEvents(iTupleTwitterStream.getEvents());
-+        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputTwitterStream, twitterStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            twitterStreamResult.setEvents(null);
-+            twitterStreamResult.setStatus(null);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFKeywordAnalyzerTwitterStreamOutput> iterTwitterStream = twitterStreamResult.iterator();
-+            iterTwitterStream.reset();
-+            while (iterTwitterStream.hasNext()) {
-+                IIFKeywordAnalyzerTwitterStreamOutput out = iterTwitterStream.next();
-+                _collector.emit("PipelineVar_7_FamilyElement4TwitterStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "threshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal threshold");
-+                        alg.setParameterThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("threshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "decay" :
-+                    try {
-+                        System.out.println("Received parameter changing signal decay");
-+                        alg.setParameterDecay(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("decay", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "BasicKeywordAnalyzerAlgorithm":
-+                if (!algChange || !(alg instanceof BasicKeywordAnalyzerAlgorithm)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm");
-+                        alg = (IFKeywordAnalyzer) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterThreshold(0.5);
-+                    alg.setParameterDecay(0.5);
-+                    sendAlgorithmChangeEvent("BasicKeywordAnalyzerAlgorithm", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement4TwitterStream", new Fields("PipelineVar_7_FamilyElement4TwitterStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement5FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement5FamilyElement.java
-new file mode 100644
-index 0000000..7b309a3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement5FamilyElement.java
-@@ -0,0 +1,286 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFRecommendations.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm;
-+import eu.qualimaster.families.inf.IFKeywordAnalyzer.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement5FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement5FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FRecommendations.IFRecommendationsRecommendationStreamOutput recommendationStreamResult = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
-+    private transient IFRecommendations alg = null; 
-+    transient IIFKeywordAnalyzerTwitterStreamOutput iTupleTwitterStream = null;
-+    transient IIFRecommendationsTwitterStreamInput inputTwitterStream = null;
-+
-+    public PipelineVar_7_FamilyElement5FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        recommendationStreamResult = new FRecommendations.IFRecommendationsRecommendationStreamOutput();
-+        IItemEmitter<IIFRecommendationsRecommendationStreamOutput> recommendationStreamEmitter = new IItemEmitter<IIFRecommendationsRecommendationStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFRecommendationsRecommendationStreamOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement5RecommendationStream", new Values(item));
-+            }
-+        };
-+        recommendationStreamResult.setEmitter(recommendationStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm");
-+                    alg = (IFRecommendations) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterImpactThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "impactThreshold", 0.5));
-+                alg.setParameterStockCooccurrenceThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "stockCooccurrenceThreshold", 0.5));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("RecommendationsAlgorithm", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fRecommendations"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFKeywordAnalyzerTwitterStreamOutput) {
-+        iTupleTwitterStream = (IIFKeywordAnalyzerTwitterStreamOutput)tupleItem;
-+        inputTwitterStream = new FRecommendations.IFRecommendationsTwitterStreamInput();
-+        inputTwitterStream.setEvents(iTupleTwitterStream.getEvents());
-+        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputTwitterStream, recommendationStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            recommendationStreamResult.setRecommendations("");
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFRecommendationsRecommendationStreamOutput> iterRecommendationStream = recommendationStreamResult.iterator();
-+            iterRecommendationStream.reset();
-+            while (iterRecommendationStream.hasNext()) {
-+                IIFRecommendationsRecommendationStreamOutput out = iterRecommendationStream.next();
-+                _collector.emit("PipelineVar_7_FamilyElement5RecommendationStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "impactThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal impactThreshold");
-+                        alg.setParameterImpactThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("impactThreshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "stockCooccurrenceThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal stockCooccurrenceThreshold");
-+                        alg.setParameterStockCooccurrenceThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("stockCooccurrenceThreshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "RecommendationsAlgorithm":
-+                if (!algChange || !(alg instanceof RecommendationsAlgorithm)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm");
-+                        alg = (IFRecommendations) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterImpactThreshold(0.5);
-+                    alg.setParameterStockCooccurrenceThreshold(0.5);
-+                    sendAlgorithmChangeEvent("RecommendationsAlgorithm", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement5RecommendationStream", new Fields("PipelineVar_7_FamilyElement5RecommendationStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement6FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement6FamilyElement.java
-new file mode 100644
-index 0000000..e04cd59
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement6FamilyElement.java
-@@ -0,0 +1,250 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.data.inf.IFocusFincancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement6FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement6FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+    private transient IFPreprocessor alg = null; 
-+    transient IFocusFincancialDataSpringStreamOutput iTupleSpringStream = null;
-+    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
-+
-+    public PipelineVar_7_FamilyElement6FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement6PreprocessedStream", new Values(item));
-+            }
-+        };
-+        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                    alg = (IFPreprocessor) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Preprocessor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fPreprocessor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IFocusFincancialDataSpringStreamOutput) {
-+        iTupleSpringStream = (IFocusFincancialDataSpringStreamOutput)tupleItem;
-+        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputSpringStream, preprocessedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            preprocessedStreamResult.setSymbolId("");
-+            preprocessedStreamResult.setTimestamp(0);
-+            preprocessedStreamResult.setValue(0.0);
-+            preprocessedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
-+            iterPreprocessedStream.reset();
-+            while (iterPreprocessedStream.hasNext()) {
-+                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
-+                _collector.emit("PipelineVar_7_FamilyElement6PreprocessedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Preprocessor":
-+                if (!algChange || !(alg instanceof Preprocessor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                        alg = (IFPreprocessor) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement6PreprocessedStream", new Fields("PipelineVar_7_FamilyElement6PreprocessedStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement7FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement7FamilyElement.java
-new file mode 100644
-index 0000000..4df7af6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement7FamilyElement.java
-@@ -0,0 +1,544 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.data.inf.IFocusFincancialData.*;
-+import eu.qualimaster.common.hardware.*;
-+import com.google.protobuf.ByteString;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement7FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement7FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial";
-+    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+    private transient IFCorrelationFinancial alg = null; 
-+    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
-+    transient IFocusFincancialDataSymbolListOutput iTupleSymbolList = null;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+
-+    public PipelineVar_7_FamilyElement7FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement7PairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                    alg = (IFCorrelationFinancial) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
-+            streamId = "PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fCorrelationFinancial"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
-+            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
-+            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputPreprocessedStream));
-+            }
-+        }
-+
-+        if(tupleItem instanceof IFocusFincancialDataSymbolListOutput) {
-+            iTupleSymbolList = (IFocusFincancialDataSymbolListOutput)tupleItem;
-+            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputSymbolList));
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("PipelineVar_7_FamilyElement7PairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TopoSoftwareCorrelationFinancial":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "GenTopoHardwareCorrelationFinancial":
-+            case "GenTopoHardwareCorrelationFinancialSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("FocusPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("FocusPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_7_FamilyElement7GenTopoHardwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSW":
-+            case "CorrelationSWSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_7_FamilyElement7CorrelationSW";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "TransferEntropyHardware":
-+            case "TransferEntropyHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("FocusPip",
-+                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("FocusPip",
-+                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_7_FamilyElement7TransferEntropyHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "MutualInformationHardware":
-+            case "MutualInformationHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("FocusPip",
-+                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("FocusPip",
-+                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_7_FamilyElement7MutualInformationHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSWAlternative":
-+            case "CorrelationSWAlternativeSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_7_FamilyElement7CorrelationSWAlternative";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement7PairwiseFinancial", new Fields("PipelineVar_7_FamilyElement7PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_7_FamilyElement7GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_7_FamilyElement7GenTopoHardwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_7_FamilyElement7CorrelationSW", new Fields("PipelineVar_7_FamilyElement7CorrelationSWFields"));
-+        declarer.declareStream("PipelineVar_7_FamilyElement7TransferEntropyHardware", new Fields("PipelineVar_7_FamilyElement7TransferEntropyHardwareFields"));
-+        declarer.declareStream("PipelineVar_7_FamilyElement7MutualInformationHardware", new Fields("PipelineVar_7_FamilyElement7MutualInformationHardwareFields"));
-+        declarer.declareStream("PipelineVar_7_FamilyElement7CorrelationSWAlternative", new Fields("PipelineVar_7_FamilyElement7CorrelationSWAlternativeFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement8FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement8FamilyElement.java
-new file mode 100644
-index 0000000..85a10d6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_FamilyElement8FamilyElement.java
-@@ -0,0 +1,281 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_FamilyElement8FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_FamilyElement8FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+    private transient IFDynamicGraphCompilation alg = null; 
-+    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient IIFDynamicGraphCompilationPairwiseFinancialInput inputPairwiseFinancial = null;
-+
-+    public PipelineVar_7_FamilyElement8FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+        IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput> edgeStreamEmitter = new IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFDynamicGraphCompilationEdgeStreamOutput item) {
-+                _collector.emit("PipelineVar_7_FamilyElement8EdgeStream", new Values(item));
-+            }
-+        };
-+        edgeStreamResult.setEmitter(edgeStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
-+                    alg = (IFDynamicGraphCompilation) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (PipelineOptions.hasExecutorArgument(map, getName(), "correlationThreshold")) {
-+                    alg.setParameterCorrelationThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "correlationThreshold", 0.0));
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("DynamicGraphCompilation", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fDynamicGraphCompilation"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
-+        iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
-+        inputPairwiseFinancial = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
-+        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputPairwiseFinancial, edgeStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            edgeStreamResult.setEdge("");
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFDynamicGraphCompilationEdgeStreamOutput> iterEdgeStream = edgeStreamResult.iterator();
-+            iterEdgeStream.reset();
-+            while (iterEdgeStream.hasNext()) {
-+                IIFDynamicGraphCompilationEdgeStreamOutput out = iterEdgeStream.next();
-+                _collector.emit("PipelineVar_7_FamilyElement8EdgeStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "correlationThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal correlationThreshold");
-+                        alg.setParameterCorrelationThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("correlationThreshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "DynamicGraphCompilation":
-+                if (!algChange || !(alg instanceof DynamicGraphCompilation)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
-+                        alg = (IFDynamicGraphCompilation) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterCorrelationThreshold(0.0);
-+                    sendAlgorithmChangeEvent("DynamicGraphCompilation", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_FamilyElement8EdgeStream", new Fields("PipelineVar_7_FamilyElement8EdgeStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Sink0Sink.java
-new file mode 100644
-index 0000000..626d226
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Sink0Sink.java
-@@ -0,0 +1,145 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IFocusSink;
-+import eu.qualimaster.data.inf.IFocusSink.*;
-+import eu.qualimaster.data.imp.FocusSink;
-+import eu.qualimaster.data.imp.FocusSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFRecommendations.*;
-+import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient IFocusSink sinkHandler;
-+private int counter = 0;
-+    transient IIFRecommendationsRecommendationStreamOutput iTupleRecommendationStream = null;
-+    transient IIFDynamicGraphCompilationEdgeStreamOutput iTupleEdgeStream = null;
-+    transient IFocusSinkRecommendationStreamInput inputRecommendationStream = null;
-+    transient IFocusSinkEdgeStreamInput inputEdgeStream = null;
-+
-+	public PipelineVar_7_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+        if(tupleItem instanceof IIFRecommendationsRecommendationStreamOutput) {
-+            iTupleRecommendationStream = (IIFRecommendationsRecommendationStreamOutput)tupleItem;
-+            inputRecommendationStream = new FocusSink.FocusSinkRecommendationStreamInput();
-+            inputRecommendationStream.setRecommendations(iTupleRecommendationStream.getRecommendations());
-+            sinkHandler.postDataRecommendationStream(inputRecommendationStream);
-+            emitted(inputRecommendationStream);
-+        }
-+
-+        if(tupleItem instanceof IIFDynamicGraphCompilationEdgeStreamOutput) {
-+            iTupleEdgeStream = (IIFDynamicGraphCompilationEdgeStreamOutput)tupleItem;
-+            inputEdgeStream = new FocusSink.FocusSinkEdgeStreamInput();
-+            inputEdgeStream.setEdge(iTupleEdgeStream.getEdge());
-+            sinkHandler.postDataEdgeStream(inputEdgeStream);
-+            emitted(inputEdgeStream);
-+        }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new FocusSink.FocusSinkRecommendationStreamInput();
-+        new FocusSink.FocusSinkEdgeStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IFocusSink> cls = (Class<? extends IFocusSink>)Class.forName("eu.qualimaster.focus.FocusSinkAlgorithm");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("FocusSinkAlgorithm", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_Sink0RecommendationStream", new Fields("PipelineVar_7_Sink0RecommendationStreamFields"));
-+        declarer.declareStream("PipelineVar_7_Sink0EdgeStream", new Fields("PipelineVar_7_Sink0EdgeStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source0Source.java
-new file mode 100644
-index 0000000..5d84b7f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source0Source.java
-@@ -0,0 +1,286 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ITwitterStreamData;
-+import eu.qualimaster.data.inf.ITwitterStreamData.*;
-+import eu.qualimaster.data.imp.TwitterStreamData;
-+import eu.qualimaster.data.stream.source.TwitterFileStreaming;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ITwitterStreamData sourceData;
-+
-+    public PipelineVar_7_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("FocusPip", "PipelineVar_7_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITwitterStreamDataSymbolListOutput>(ITwitterStreamDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(ITwitterStreamDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITwitterStreamDataTwitterStreamOutput>(ITwitterStreamDataTwitterStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ITwitterStreamDataTwitterStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ITwitterStreamData> cls = (Class<? extends ITwitterStreamData>) Class.forName("eu.qualimaster.data.stream.source.TwitterFileStreaming");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("TwitterFileStreaming", null);
-+            sourceData.setParameterConsumerKey(PipelineOptions.getExecutorStringArgument(conf, getName(), "consumerKey", ""));
-+            sourceData.setParameterConsumerSecret(PipelineOptions.getExecutorStringArgument(conf, getName(), "consumerSecret", ""));
-+            sourceData.setParameterAccessToken(PipelineOptions.getExecutorStringArgument(conf, getName(), "accessToken", ""));
-+            sourceData.setParameterAccessTokenSecret(PipelineOptions.getExecutorStringArgument(conf, getName(), "accessTokenSecret", ""));
-+            sourceData.setParameterQueueSize(PipelineOptions.getExecutorIntArgument(conf, getName(), "queueSize", 0));
-+            sourceData.setParameterTweetDirectory(PipelineOptions.getExecutorStringArgument(conf, getName(), "tweetDirectory", "/user/storm/resultSymbols"));
-+            sourceData.setParameterSpeedFactor(PipelineOptions.getExecutorDoubleArgument(conf, getName(), "speedFactor", 0.0));
-+            sourceData.setParameterRunLocally(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "runLocally", false));
-+            sourceData.setParameterAdjustTimeToNow(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "adjustTimeToNow", false));
-+            sourceData.setParameterRealLoops(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "realLoops", false));
-+            sourceData.setParameterSetAdditionalKeywords(PipelineOptions.getExecutorStringArgument(conf, getName(), "setAdditionalKeywords", ""));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("FocusPip", "PipelineVar_7_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_7_Source0StreamSymbolList".
-+        ITwitterStreamDataSymbolListOutput dataItemSymbolList = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PipelineVar_7_Source0SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PipelineVar_7_Source0TwitterStream".
-+        ITwitterStreamDataTwitterStreamOutput dataItemTwitterStream = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
-+        try {
-+            dataItemTwitterStream = sourceData.getTwitterStream();
-+        } catch(DefaultModeException e) {
-+            dataItemTwitterStream.setStatus(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemTwitterStream!=null){
-+            _collector.emit("PipelineVar_7_Source0TwitterStream", new Values(dataItemTwitterStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "consumerKey" :
-+                    logger.info("Received the parameter consumerKey!");
-+                    sourceData.setParameterConsumerKey(para.getStringValue()); 
-+                    sendParameterChangeEvent("consumerKey", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "consumerSecret" :
-+                    logger.info("Received the parameter consumerSecret!");
-+                    sourceData.setParameterConsumerSecret(para.getStringValue()); 
-+                    sendParameterChangeEvent("consumerSecret", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "accessToken" :
-+                    logger.info("Received the parameter accessToken!");
-+                    sourceData.setParameterAccessToken(para.getStringValue()); 
-+                    sendParameterChangeEvent("accessToken", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "accessTokenSecret" :
-+                    logger.info("Received the parameter accessTokenSecret!");
-+                    sourceData.setParameterAccessTokenSecret(para.getStringValue()); 
-+                    sendParameterChangeEvent("accessTokenSecret", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "queueSize" :
-+                    try {
-+                        logger.info("Received the parameter queueSize!");
-+                        sourceData.setParameterQueueSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("queueSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "tweetDirectory" :
-+                    logger.info("Received the parameter tweetDirectory!");
-+                    sourceData.setParameterTweetDirectory(para.getStringValue()); 
-+                    sendParameterChangeEvent("tweetDirectory", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "speedFactor" :
-+                    try {
-+                        logger.info("Received the parameter speedFactor!");
-+                        sourceData.setParameterSpeedFactor(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("speedFactor", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "runLocally" :
-+                    try {
-+                        logger.info("Received the parameter runLocally!");
-+                        sourceData.setParameterRunLocally(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("runLocally", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "adjustTimeToNow" :
-+                    try {
-+                        logger.info("Received the parameter adjustTimeToNow!");
-+                        sourceData.setParameterAdjustTimeToNow(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("adjustTimeToNow", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "realLoops" :
-+                    try {
-+                        logger.info("Received the parameter realLoops!");
-+                        sourceData.setParameterRealLoops(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("realLoops", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "setAdditionalKeywords" :
-+                    logger.info("Received the parameter setAdditionalKeywords!");
-+                    sourceData.setParameterSetAdditionalKeywords(para.getStringValue()); 
-+                    sendParameterChangeEvent("setAdditionalKeywords", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_Source0SymbolList", new Fields("PipelineVar_7_Source0SymbolListFields"));
-+        declarer.declareStream("PipelineVar_7_Source0TwitterStream", new Fields("PipelineVar_7_Source0TwitterStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source1Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source1Source.java
-new file mode 100644
-index 0000000..26773c9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/PipelineVar_7_Source1Source.java
-@@ -0,0 +1,206 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.IFocusFincancialData;
-+import eu.qualimaster.data.inf.IFocusFincancialData.*;
-+import eu.qualimaster.data.imp.FocusFincancialData;
-+import eu.qualimaster.focus.FocusedSpringClient;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_7_Source1Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_7_Source1Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient IFocusFincancialData sourceData;
-+
-+    public PipelineVar_7_Source1Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("FocusPip", "PipelineVar_7_Source1", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFocusFincancialDataSymbolListOutput>(IFocusFincancialDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(IFocusFincancialDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFocusFincancialDataSpringStreamOutput>(IFocusFincancialDataSpringStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(IFocusFincancialDataSpringStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IFocusFincancialData> cls = (Class<? extends IFocusFincancialData>) Class.forName("eu.qualimaster.focus.FocusedSpringClient");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("FocusedSpringClient", null);
-+            sourceData.setParameterPlayerList(PipelineOptions.getExecutorStringArgument(conf, getName(), "playerList", ""));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("FocusPip", "PipelineVar_7_Source1", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_7_Source1StreamSymbolList".
-+        IFocusFincancialDataSymbolListOutput dataItemSymbolList = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PipelineVar_7_Source1SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PipelineVar_7_Source1SpringStream".
-+        IFocusFincancialDataSpringStreamOutput dataItemSpringStream = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
-+        try {
-+            dataItemSpringStream = sourceData.getSpringStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSpringStream.setSymbolTuple("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSpringStream!=null){
-+            _collector.emit("PipelineVar_7_Source1SpringStream", new Values(dataItemSpringStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "playerList" :
-+                    logger.info("Received the parameter playerList!");
-+                    sourceData.setParameterPlayerList(para.getStringValue()); 
-+                    sendParameterChangeEvent("playerList", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_7_Source1SymbolList", new Fields("PipelineVar_7_Source1SymbolListFields"));
-+        declarer.declareStream("PipelineVar_7_Source1SpringStream", new Fields("PipelineVar_7_Source1SpringStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/Topology.java
-new file mode 100644
-index 0000000..075df1c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/FocusPip/topology/Topology.java
-@@ -0,0 +1,190 @@
-+package eu.qualimaster.FocusPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt;
-+import eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt;
-+import eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm;
-+import eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm;
-+import eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm;
-+import eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "FocusPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 13; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "TwitterDataSource"
-+
-+            builder.setSpout("PipelineVar_7_Source0", new PipelineVar_7_Source0Source("PipelineVar_7_Source0", "FocusPip"), 1);
-+            // Declare a Bolt "SpamDetection"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement0=builder.setBolt("PipelineVar_7_FamilyElement0", new PipelineVar_7_FamilyElement0FamilyElement("PipelineVar_7_FamilyElement0", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement0.shuffleGrouping("PipelineVar_7_Source0", "PipelineVar_7_Source0TwitterStream");
-+            // Declare a Bolt "Spam Removal"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement1=builder.setBolt("PipelineVar_7_FamilyElement1", new PipelineVar_7_FamilyElement1FamilyElement("PipelineVar_7_FamilyElement1", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement1.shuffleGrouping("PipelineVar_7_FamilyElement0", "PipelineVar_7_FamilyElement0TwitterStream");
-+            // Declare a Bolt "StockParser"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement2=builder.setBolt("PipelineVar_7_FamilyElement2", new PipelineVar_7_FamilyElement2FamilyElement("PipelineVar_7_FamilyElement2", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement2.shuffleGrouping("PipelineVar_7_FamilyElement1", "PipelineVar_7_FamilyElement1TwitterStream");
-+            // Declare a Bolt "EventDetection"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement3=builder.setBolt("PipelineVar_7_FamilyElement3", new PipelineVar_7_FamilyElement3FamilyElement("PipelineVar_7_FamilyElement3", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement3.shuffleGrouping("PipelineVar_7_FamilyElement2", "PipelineVar_7_FamilyElement2TwitterStream");
-+            // Declare a Bolt "KeywordAnalyzer"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement4=builder.setBolt("PipelineVar_7_FamilyElement4", new PipelineVar_7_FamilyElement4FamilyElement("PipelineVar_7_FamilyElement4", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement4.shuffleGrouping("PipelineVar_7_FamilyElement3", "PipelineVar_7_FamilyElement3TwitterStream");
-+            // Declare a Bolt "Recommendations"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement5=builder.setBolt("PipelineVar_7_FamilyElement5", new PipelineVar_7_FamilyElement5FamilyElement("PipelineVar_7_FamilyElement5", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement5.shuffleGrouping("PipelineVar_7_FamilyElement4", "PipelineVar_7_FamilyElement4TwitterStream");
-+            // Declare a Bolt "FocusSink"
-+
-+            BoltDeclarer PipelineVar_7_Sink0=builder.setBolt("PipelineVar_7_Sink0", new PipelineVar_7_Sink0Sink("PipelineVar_7_Sink0", "FocusPip"), 1);
-+            PipelineVar_7_Sink0.shuffleGrouping("PipelineVar_7_FamilyElement5", "PipelineVar_7_FamilyElement5RecommendationStream");
-+            // Declare a Spout "SpringDataSource"
-+
-+            builder.setSpout("PipelineVar_7_Source1", new PipelineVar_7_Source1Source("PipelineVar_7_Source1", "FocusPip"), 1);
-+            // Declare a Bolt "preprocessor"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement6=builder.setBolt("PipelineVar_7_FamilyElement6", new PipelineVar_7_FamilyElement6FamilyElement("PipelineVar_7_FamilyElement6", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement6.shuffleGrouping("PipelineVar_7_Source1", "PipelineVar_7_Source1SpringStream");
-+            // Declare a Bolt "correlation"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement7=builder.setBolt("PipelineVar_7_FamilyElement7", new PipelineVar_7_FamilyElement7FamilyElement("PipelineVar_7_FamilyElement7", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement7.shuffleGrouping("PipelineVar_7_FamilyElement6", "PipelineVar_7_FamilyElement6PreprocessedStream");
-+            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
-+            }
-+            builder.startRecording("TopoSoftwareCorrelationFinancial");
-+            ITopologyCreate PipelineVar_7_FamilyElement71SubCreator = new TopoSoftwareCorrelationFinancial();
-+            SubTopologyOutput PipelineVar_7_FamilyElement71SubOutput = PipelineVar_7_FamilyElement71SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7TopoSoftwareCorrelationFinancial");
-+            builder.endRecording(PipelineVar_7_FamilyElement71SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement71SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement71SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
-+            ITopologyCreate PipelineVar_7_FamilyElement72SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
-+            SubTopologyOutput PipelineVar_7_FamilyElement72SubOutput = PipelineVar_7_FamilyElement72SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7GenTopoHardwareCorrelationFinancial");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement72SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement72SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
-+            ITopologyCreate PipelineVar_7_FamilyElement73SubCreator = new CorrelationSWSubTopology();
-+            SubTopologyOutput PipelineVar_7_FamilyElement73SubOutput = PipelineVar_7_FamilyElement73SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7CorrelationSW");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement73SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement73SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
-+            ITopologyCreate PipelineVar_7_FamilyElement74SubCreator = new TransferEntropyHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_7_FamilyElement74SubOutput = PipelineVar_7_FamilyElement74SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7TransferEntropyHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement74SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement74SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
-+            ITopologyCreate PipelineVar_7_FamilyElement75SubCreator = new MutualInformationHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_7_FamilyElement75SubOutput = PipelineVar_7_FamilyElement75SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7MutualInformationHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement75SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement75SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
-+            ITopologyCreate PipelineVar_7_FamilyElement76SubCreator = new CorrelationSWAlternativeSubTopology();
-+            SubTopologyOutput PipelineVar_7_FamilyElement76SubOutput = PipelineVar_7_FamilyElement76SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_7_FamilyElement7", "PipelineVar_7_FamilyElement7CorrelationSWAlternative");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_7_FamilyElement76SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_7_FamilyElement76SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "DynamicGraphCompilation"
-+
-+            BoltDeclarer PipelineVar_7_FamilyElement8=builder.setBolt("PipelineVar_7_FamilyElement8", new PipelineVar_7_FamilyElement8FamilyElement("PipelineVar_7_FamilyElement8", "FocusPip"), 1);
-+            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement71SubOutput.getBoltName(), PipelineVar_7_FamilyElement71SubOutput.getStreamId());
-+            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement72SubOutput.getBoltName(), PipelineVar_7_FamilyElement72SubOutput.getStreamId());
-+            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement73SubOutput.getBoltName(), PipelineVar_7_FamilyElement73SubOutput.getStreamId());
-+            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement74SubOutput.getBoltName(), PipelineVar_7_FamilyElement74SubOutput.getStreamId());
-+            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement75SubOutput.getBoltName(), PipelineVar_7_FamilyElement75SubOutput.getStreamId());
-+            PipelineVar_7_FamilyElement8.shuffleGrouping(PipelineVar_7_FamilyElement76SubOutput.getBoltName(), PipelineVar_7_FamilyElement76SubOutput.getStreamId());
-+            PipelineVar_7_Sink0.shuffleGrouping("PipelineVar_7_FamilyElement8", "PipelineVar_7_FamilyElement8EdgeStream");
-+            PipelineVar_7_FamilyElement7.shuffleGrouping("PipelineVar_7_Source1", "PipelineVar_7_Source1SymbolList");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/mapping.xml
-new file mode 100644
-index 0000000..dc2fe02
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/mapping.xml
-@@ -0,0 +1,45 @@
-+<mapping>
-+  <pipeline name="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.Topology">
-+      <node name="FinancialDataSource" type="source">
-+          <component name="PipelineVar_16_Source0" container="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.PipelineVar_16_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="Preprocessor" type="family">
-+          <component name="PipelineVar_16_FamilyElement0" container="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.PipelineVar_16_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
-+      </node>
-+      <node name="FinancialCorrelation" type="family">
-+          <component name="PipelineVar_16_FamilyElement1" container="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.PipelineVar_16_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
-+      </node>
-+      <node name="Sink" type="sink">
-+          <component name="PipelineVar_16_Sink0" container="PriorityFinancialPip" class="eu.qualimaster.PriorityFinancialPip.topology.PipelineVar_16_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
-+      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
-+      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
-+              <component name="CorrelationSWMapper" container="PriorityFinancialPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWHayashiYoshida" container="PriorityFinancialPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
-+          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
-+          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
-+              <component name="CorrelationSWAlternativeMP" container="PriorityFinancialPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWAlternativeHY" container="PriorityFinancialPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="SimulatedFinancialData" implName="SpringClientSimulator" class="eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator"/>
-+      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
-+      <parameter parameter="speedFactor" name="FinancialDataSource" receiver="PipelineVar_16_Source0"/> 
-+      <parameter parameter="windowSize" name="FinancialCorrelation" receiver="PipelineVar_16_FamilyElement1"/> 
-+      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
-+      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/pom.xml
-new file mode 100644
-index 0000000..3d641d7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/pom.xml
-@@ -0,0 +1,285 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityFinancialPip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>spring-client-simulator</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-preprocessor</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-correlation-financial-software</artifactId>
-+      <version>3.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSW</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TransferEntropyHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>MutualInformationHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSWAlternative</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-priority-data-sink</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/settings.xml
-new file mode 100644
-index 0000000..00cd188
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/settings.xml
-@@ -0,0 +1,89 @@
-+<pipeline>
-+    <name>PriorityFinancialPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changespeedFactor</name>
-+			<request>
-+				<field sequence="0">changespeedFactor</field>
-+				<field sequence="1">%newSpeedFactor%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changespeedFactor_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newSpeedFactor%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..2b92fcd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement0FamilyElement.java
-@@ -0,0 +1,250 @@
-+package eu.qualimaster.PriorityFinancialPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_16_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_16_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+    private transient IFPreprocessor alg = null; 
-+    transient ISimulatedFinancialDataSpringStreamOutput iTupleSpringStream = null;
-+    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
-+
-+    public PipelineVar_16_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
-+                _collector.emit("PipelineVar_16_FamilyElement0PreprocessedStream", new Values(item));
-+            }
-+        };
-+        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                    alg = (IFPreprocessor) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Preprocessor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fPreprocessor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof ISimulatedFinancialDataSpringStreamOutput) {
-+        iTupleSpringStream = (ISimulatedFinancialDataSpringStreamOutput)tupleItem;
-+        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputSpringStream, preprocessedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            preprocessedStreamResult.setSymbolId("");
-+            preprocessedStreamResult.setTimestamp(0);
-+            preprocessedStreamResult.setValue(0.0);
-+            preprocessedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
-+            iterPreprocessedStream.reset();
-+            while (iterPreprocessedStream.hasNext()) {
-+                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
-+                _collector.emit("PipelineVar_16_FamilyElement0PreprocessedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Preprocessor":
-+                if (!algChange || !(alg instanceof Preprocessor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                        alg = (IFPreprocessor) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_16_FamilyElement0PreprocessedStream", new Fields("PipelineVar_16_FamilyElement0PreprocessedStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..816ad92
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_FamilyElement1FamilyElement.java
-@@ -0,0 +1,544 @@
-+package eu.qualimaster.PriorityFinancialPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
-+import eu.qualimaster.common.hardware.*;
-+import com.google.protobuf.ByteString;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_16_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_16_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial";
-+    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+    private transient IFCorrelationFinancial alg = null; 
-+    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
-+    transient ISimulatedFinancialDataSymbolListOutput iTupleSymbolList = null;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+
-+    public PipelineVar_16_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
-+                _collector.emit("PipelineVar_16_FamilyElement1PairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                    alg = (IFCorrelationFinancial) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
-+            streamId = "PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fCorrelationFinancial"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
-+            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
-+            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputPreprocessedStream));
-+            }
-+        }
-+
-+        if(tupleItem instanceof ISimulatedFinancialDataSymbolListOutput) {
-+            iTupleSymbolList = (ISimulatedFinancialDataSymbolListOutput)tupleItem;
-+            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputSymbolList));
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("PipelineVar_16_FamilyElement1PairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TopoSoftwareCorrelationFinancial":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "GenTopoHardwareCorrelationFinancial":
-+            case "GenTopoHardwareCorrelationFinancialSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityFinancialPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityFinancialPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_16_FamilyElement1GenTopoHardwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSW":
-+            case "CorrelationSWSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_16_FamilyElement1CorrelationSW";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "TransferEntropyHardware":
-+            case "TransferEntropyHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityFinancialPip",
-+                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityFinancialPip",
-+                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_16_FamilyElement1TransferEntropyHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "MutualInformationHardware":
-+            case "MutualInformationHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityFinancialPip",
-+                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityFinancialPip",
-+                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_16_FamilyElement1MutualInformationHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSWAlternative":
-+            case "CorrelationSWAlternativeSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_16_FamilyElement1CorrelationSWAlternative";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_16_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_16_FamilyElement1PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_16_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_16_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_16_FamilyElement1CorrelationSW", new Fields("PipelineVar_16_FamilyElement1CorrelationSWFields"));
-+        declarer.declareStream("PipelineVar_16_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_16_FamilyElement1TransferEntropyHardwareFields"));
-+        declarer.declareStream("PipelineVar_16_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_16_FamilyElement1MutualInformationHardwareFields"));
-+        declarer.declareStream("PipelineVar_16_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_16_FamilyElement1CorrelationSWAlternativeFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Sink0Sink.java
-new file mode 100644
-index 0000000..68623de
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Sink0Sink.java
-@@ -0,0 +1,140 @@
-+package eu.qualimaster.PriorityFinancialPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IPriorityDataSink;
-+import eu.qualimaster.data.inf.IPriorityDataSink.*;
-+import eu.qualimaster.data.imp.PriorityDataSink;
-+import eu.qualimaster.data.imp.PriorityDataSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_16_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_16_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient IPriorityDataSink sinkHandler;
-+private int counter = 0;
-+    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
-+    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
-+
-+	public PipelineVar_16_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
-+            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
-+            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+            sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
-+            emitted(inputPairwiseFinancial);
-+        }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_16_Sink0PairwiseFinancial", new Fields("PipelineVar_16_Sink0PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_16_Sink0AnalyzedStream", new Fields("PipelineVar_16_Sink0AnalyzedStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Source0Source.java
-new file mode 100644
-index 0000000..ae2e55a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/PipelineVar_16_Source0Source.java
-@@ -0,0 +1,210 @@
-+package eu.qualimaster.PriorityFinancialPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
-+import eu.qualimaster.data.imp.SimulatedFinancialData;
-+import eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_16_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_16_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ISimulatedFinancialData sourceData;
-+
-+    public PipelineVar_16_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("PriorityFinancialPip", "PipelineVar_16_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedFinancialDataSymbolListOutput>(ISimulatedFinancialDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISimulatedFinancialDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedFinancialDataSpringStreamOutput>(ISimulatedFinancialDataSpringStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISimulatedFinancialDataSpringStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ISimulatedFinancialData> cls = (Class<? extends ISimulatedFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("SpringClientSimulator", null);
-+            sourceData.setParameterSpeedFactor(PipelineOptions.getExecutorDoubleArgument(conf, getName(), "speedFactor", 1.0));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("PriorityFinancialPip", "PipelineVar_16_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_16_Source0StreamSymbolList".
-+        ISimulatedFinancialDataSymbolListOutput dataItemSymbolList = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null && isEnabled(dataItemSymbolList)){
-+            _collector.emit("PipelineVar_16_Source0SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PipelineVar_16_Source0SpringStream".
-+        ISimulatedFinancialDataSpringStreamOutput dataItemSpringStream = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
-+        try {
-+            dataItemSpringStream = sourceData.getSpringStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSpringStream.setSymbolTuple("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSpringStream!=null && isEnabled(dataItemSpringStream)){
-+            _collector.emit("PipelineVar_16_Source0SpringStream", new Values(dataItemSpringStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "speedFactor" :
-+                    try {
-+                        logger.info("Received the parameter speedFactor!");
-+                        sourceData.setParameterSpeedFactor(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("speedFactor", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_16_Source0SymbolList", new Fields("PipelineVar_16_Source0SymbolListFields"));
-+        declarer.declareStream("PipelineVar_16_Source0SpringStream", new Fields("PipelineVar_16_Source0SpringStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/Topology.java
-new file mode 100644
-index 0000000..bd4e220
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityFinancialPip/topology/Topology.java
-@@ -0,0 +1,151 @@
-+package eu.qualimaster.PriorityFinancialPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "PriorityFinancialPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 16; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "FinancialDataSource"
-+
-+            builder.setSpout("PipelineVar_16_Source0", new PipelineVar_16_Source0Source("PipelineVar_16_Source0", "PriorityFinancialPip"), 1);
-+            // Declare a Bolt "Preprocessor"
-+
-+            BoltDeclarer PipelineVar_16_FamilyElement0=builder.setBolt("PipelineVar_16_FamilyElement0", new PipelineVar_16_FamilyElement0FamilyElement("PipelineVar_16_FamilyElement0", "PriorityFinancialPip"), 1);
-+            PipelineVar_16_FamilyElement0.shuffleGrouping("PipelineVar_16_Source0", "PipelineVar_16_Source0SpringStream");
-+            // Declare a Bolt "FinancialCorrelation"
-+
-+            BoltDeclarer PipelineVar_16_FamilyElement1=builder.setBolt("PipelineVar_16_FamilyElement1", new PipelineVar_16_FamilyElement1FamilyElement("PipelineVar_16_FamilyElement1", "PriorityFinancialPip"), 1);
-+            PipelineVar_16_FamilyElement1.shuffleGrouping("PipelineVar_16_FamilyElement0", "PipelineVar_16_FamilyElement0PreprocessedStream");
-+            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
-+            }
-+            builder.startRecording("TopoSoftwareCorrelationFinancial");
-+            ITopologyCreate PipelineVar_16_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
-+            SubTopologyOutput PipelineVar_16_FamilyElement11SubOutput = PipelineVar_16_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1TopoSoftwareCorrelationFinancial");
-+            builder.endRecording(PipelineVar_16_FamilyElement11SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement11SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement11SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
-+            ITopologyCreate PipelineVar_16_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
-+            SubTopologyOutput PipelineVar_16_FamilyElement12SubOutput = PipelineVar_16_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1GenTopoHardwareCorrelationFinancial");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement12SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement12SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
-+            ITopologyCreate PipelineVar_16_FamilyElement13SubCreator = new CorrelationSWSubTopology();
-+            SubTopologyOutput PipelineVar_16_FamilyElement13SubOutput = PipelineVar_16_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1CorrelationSW");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement13SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement13SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
-+            ITopologyCreate PipelineVar_16_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_16_FamilyElement14SubOutput = PipelineVar_16_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1TransferEntropyHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement14SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement14SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
-+            ITopologyCreate PipelineVar_16_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_16_FamilyElement15SubOutput = PipelineVar_16_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1MutualInformationHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement15SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement15SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
-+            ITopologyCreate PipelineVar_16_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
-+            SubTopologyOutput PipelineVar_16_FamilyElement16SubOutput = PipelineVar_16_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_16_FamilyElement1", "PipelineVar_16_FamilyElement1CorrelationSWAlternative");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_16_FamilyElement16SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_16_FamilyElement16SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "Sink"
-+
-+            BoltDeclarer PipelineVar_16_Sink0=builder.setBolt("PipelineVar_16_Sink0", new PipelineVar_16_Sink0Sink("PipelineVar_16_Sink0", "PriorityFinancialPip"), 1);
-+            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement11SubOutput.getBoltName(), PipelineVar_16_FamilyElement11SubOutput.getStreamId());
-+            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement12SubOutput.getBoltName(), PipelineVar_16_FamilyElement12SubOutput.getStreamId());
-+            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement13SubOutput.getBoltName(), PipelineVar_16_FamilyElement13SubOutput.getStreamId());
-+            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement14SubOutput.getBoltName(), PipelineVar_16_FamilyElement14SubOutput.getStreamId());
-+            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement15SubOutput.getBoltName(), PipelineVar_16_FamilyElement15SubOutput.getStreamId());
-+            PipelineVar_16_Sink0.shuffleGrouping(PipelineVar_16_FamilyElement16SubOutput.getBoltName(), PipelineVar_16_FamilyElement16SubOutput.getStreamId());
-+            PipelineVar_16_FamilyElement1.shuffleGrouping("PipelineVar_16_Source0", "PipelineVar_16_Source0SymbolList");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/mapping.xml
-new file mode 100644
-index 0000000..8968bf1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/mapping.xml
-@@ -0,0 +1,70 @@
-+<mapping>
-+  <pipeline name="PriorityPip" class="eu.qualimaster.PriorityPip.topology.Topology">
-+      <node name="FinancialDataSource" type="source">
-+          <component name="PriorityPip_Source0" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="FinancialCorrelation" type="family">
-+          <component name="PriorityPip_FamilyElement0" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
-+      </node>
-+      <node name="Sink" type="sink">
-+          <component name="PriorityPip_Sink0" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="Preprocessor" type="family">
-+          <component name="PriorityPip_FamilyElement1" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
-+      </node>
-+      <node name="TwitterDataSource" type="source">
-+          <component name="PriorityPip_Source1" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_Source1Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="SentimentAnalysis" type="family">
-+          <component name="PriorityPip_FamilyElement2" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SentimentAnaylsisSentiWordNetTopology" alternative1 = "SentimentAnaylsisSVMTopology"/>
-+      </node>
-+      <node name="DataManagement" type="data_mgt">
-+          <component name="PriorityPip_DataManagementElement0" container="PriorityPip" class="eu.qualimaster.PriorityPip.topology.PriorityPip_DataManagementElement0DataManagementElement" receiver="true" thrift="false"/>
-+      </node>
-+      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
-+      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
-+              <component name="CorrelationSWMapper" container="PriorityPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWHayashiYoshida" container="PriorityPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
-+          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
-+          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
-+              <component name="CorrelationSWAlternativeMP" container="PriorityPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWAlternativeHY" container="PriorityPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
-+      <algorithm name="SentimentAnaylsisSentiWordNetTopology" implName="SentimentAnaylsisSentiWordNetTopology" class="eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology"/>
-+      <algorithm name="SentimentAnaylsisSVMTopology" implName="SentimentAnaylsisSVMTopology" class="eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology"/>
-+      <algorithm name="Spring Financial Data" implName="SpringClient" class="eu.qualimaster.algorithms.imp.correlation.SpringClient"/>
-+      <algorithm name="Twitter Stream Data" implName="TwitterFileStreaming" class="eu.qualimaster.data.stream.source.TwitterFileStreaming"/>
-+      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
-+      <parameter parameter="windowSize" name="FinancialCorrelation" receiver="PriorityPip_FamilyElement0"/> 
-+      <parameter parameter="consumerKey" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="consumerSecret" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="accessToken" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="accessTokenSecret" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="queueSize" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="tweetDirectory" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="speedFactor" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="runLocally" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="adjustTimeToNow" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="realLoops" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="setAdditionalKeywords" name="TwitterDataSource" receiver="PriorityPip_Source1"/> 
-+      <parameter parameter="timeSeriesGranularity" name="SentimentAnalysis" receiver="PriorityPip_FamilyElement2"/> 
-+      <parameter parameter="sentimentClass" name="SentimentAnalysis" receiver="PriorityPip_FamilyElement2"/> 
-+      <parameter parameter="classificationThreshold" name="SentimentAnalysis" receiver="PriorityPip_FamilyElement2"/> 
-+      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
-+      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/pom.xml
-new file mode 100644
-index 0000000..a1d468a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/pom.xml
-@@ -0,0 +1,300 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPip</artifactId>
-+  <version>0.0.2-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>spring-client</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-correlation-financial-software</artifactId>
-+      <version>3.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSW</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TransferEntropyHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>MutualInformationHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSWAlternative</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-priority-data-sink</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-preprocessor</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TwitterStreamDataSource</artifactId>
-+      <version>0.0.5-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>SentiWordnetSubTopology</artifactId>
-+      <version>0.0.5-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>SVMSubTopology</artifactId>
-+      <version>0.0.5-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/settings.xml
-new file mode 100644
-index 0000000..5d01f15
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/settings.xml
-@@ -0,0 +1,89 @@
-+<pipeline>
-+    <name>PriorityPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changeclassificationThreshold</name>
-+			<request>
-+				<field sequence="0">changeclassificationThreshold</field>
-+				<field sequence="1">%newClassificationThreshold%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changeclassificationThreshold_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newClassificationThreshold%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_DataManagementElement0DataManagementElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_DataManagementElement0DataManagementElement.java
-new file mode 100644
-index 0000000..87c9424
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_DataManagementElement0DataManagementElement.java
-@@ -0,0 +1,68 @@
-+package eu.qualimaster.PriorityPip.topology;
-+
-+import java.util.*;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.dataManagement.storage.AbstractStorageTable;
-+import eu.qualimaster.dataManagement.storage.support.IStorageSupport;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.families.inf.IFSentimentAnalysis.*;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PriorityPip_DataManagementElement0DataManagementElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PriorityPip_DataManagementElement0DataManagementElement.class);
-+    transient OutputCollector _collector;
-+    private static String streamId;
-+    private transient IStorageSupport support;
-+    transient IIFSentimentAnalysisAnalyzedStreamOutput iTupleAnalyzedStream = null;
-+
-+    public PriorityPip_DataManagementElement0DataManagementElement(String name, String namespace) {
-+        super(name, namespace);
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		 super.prepare(map, topologyContext, collector);
-+		 String pipelineName = "PriorityPip";
-+		 String location = "hBase-l3s";
-+		 IStorageStrategyDescriptor storageStrategy = FirstInFirstOutStorageStrategyDescriptor.INSTANCE;
-+		 AbstractStorageTable table = DataManager.INTERMEDIARY_STORAGE_MANAGER.getTable(pipelineName, location, storageStrategy);
-+         support = table.getStorageSupport();
-+         _collector = collector;
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void execute(Tuple tuple) {
-+        startMonitoring();
-+    if(tuple instanceof IIFSentimentAnalysisAnalyzedStreamOutput) {
-+        iTupleAnalyzedStream = (IIFSentimentAnalysisAnalyzedStreamOutput)tuple.getValue(0);
-+        streamId = "PriorityPip_DataManagementElement0StreamAnalyzedStream";
-+        //support.write(iTuple);
-+        //_collector.ack(tuple);
-+    }
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PriorityPip_DataManagementElement0StreamAnalyzedStream", new Fields("IIHBaseDataManagementOutput"));
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..cc0c2f3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement0FamilyElement.java
-@@ -0,0 +1,544 @@
-+package eu.qualimaster.PriorityPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.common.hardware.*;
-+import com.google.protobuf.ByteString;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PriorityPip_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PriorityPip_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial";
-+    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+    private transient IFCorrelationFinancial alg = null; 
-+    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
-+    transient ISpringFinancialDataSymbolListOutput iTupleSymbolList = null;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+
-+    public PriorityPip_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
-+                _collector.emit("PriorityPip_FamilyElement0PairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                    alg = (IFCorrelationFinancial) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
-+            streamId = "PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fCorrelationFinancial"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
-+            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
-+            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputPreprocessedStream));
-+            }
-+        }
-+
-+        if(tupleItem instanceof ISpringFinancialDataSymbolListOutput) {
-+            iTupleSymbolList = (ISpringFinancialDataSymbolListOutput)tupleItem;
-+            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputSymbolList));
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("PriorityPip_FamilyElement0PairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TopoSoftwareCorrelationFinancial":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "GenTopoHardwareCorrelationFinancial":
-+            case "GenTopoHardwareCorrelationFinancialSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PriorityPip_FamilyElement0GenTopoHardwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSW":
-+            case "CorrelationSWSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PriorityPip_FamilyElement0CorrelationSW";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "TransferEntropyHardware":
-+            case "TransferEntropyHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityPip",
-+                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityPip",
-+                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PriorityPip_FamilyElement0TransferEntropyHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "MutualInformationHardware":
-+            case "MutualInformationHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PriorityPip",
-+                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PriorityPip",
-+                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PriorityPip_FamilyElement0MutualInformationHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSWAlternative":
-+            case "CorrelationSWAlternativeSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PriorityPip_FamilyElement0CorrelationSWAlternative";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PriorityPip_FamilyElement0PairwiseFinancial", new Fields("PriorityPip_FamilyElement0PairwiseFinancialFields"));
-+        declarer.declareStream("PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial", new Fields("PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancialFields"));
-+        declarer.declareStream("PriorityPip_FamilyElement0GenTopoHardwareCorrelationFinancial", new Fields("PriorityPip_FamilyElement0GenTopoHardwareCorrelationFinancialFields"));
-+        declarer.declareStream("PriorityPip_FamilyElement0CorrelationSW", new Fields("PriorityPip_FamilyElement0CorrelationSWFields"));
-+        declarer.declareStream("PriorityPip_FamilyElement0TransferEntropyHardware", new Fields("PriorityPip_FamilyElement0TransferEntropyHardwareFields"));
-+        declarer.declareStream("PriorityPip_FamilyElement0MutualInformationHardware", new Fields("PriorityPip_FamilyElement0MutualInformationHardwareFields"));
-+        declarer.declareStream("PriorityPip_FamilyElement0CorrelationSWAlternative", new Fields("PriorityPip_FamilyElement0CorrelationSWAlternativeFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..e856c3e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement1FamilyElement.java
-@@ -0,0 +1,250 @@
-+package eu.qualimaster.PriorityPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PriorityPip_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PriorityPip_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+    private transient IFPreprocessor alg = null; 
-+    transient ISpringFinancialDataSpringStreamOutput iTupleSpringStream = null;
-+    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
-+
-+    public PriorityPip_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
-+                _collector.emit("PriorityPip_FamilyElement1PreprocessedStream", new Values(item));
-+            }
-+        };
-+        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                    alg = (IFPreprocessor) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Preprocessor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fPreprocessor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof ISpringFinancialDataSpringStreamOutput) {
-+        iTupleSpringStream = (ISpringFinancialDataSpringStreamOutput)tupleItem;
-+        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputSpringStream, preprocessedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            preprocessedStreamResult.setSymbolId("");
-+            preprocessedStreamResult.setTimestamp(0);
-+            preprocessedStreamResult.setValue(0.0);
-+            preprocessedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
-+            iterPreprocessedStream.reset();
-+            while (iterPreprocessedStream.hasNext()) {
-+                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
-+                _collector.emit("PriorityPip_FamilyElement1PreprocessedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Preprocessor":
-+                if (!algChange || !(alg instanceof Preprocessor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                        alg = (IFPreprocessor) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PriorityPip_FamilyElement1PreprocessedStream", new Fields("PriorityPip_FamilyElement1PreprocessedStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement2FamilyElement.java
-new file mode 100644
-index 0000000..e38bf2b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_FamilyElement2FamilyElement.java
-@@ -0,0 +1,338 @@
-+package eu.qualimaster.PriorityPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFSentimentAnalysis.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology;
-+import eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology;
-+import eu.qualimaster.data.inf.ITwitterStreamData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PriorityPip_FamilyElement2FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PriorityPip_FamilyElement2FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology";
-+    private transient FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput analyzedStreamResult = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
-+    private transient IFSentimentAnalysis alg = null; 
-+    transient ITwitterStreamDataTwitterStreamOutput iTupleTwitterStream = null;
-+    transient IIFSentimentAnalysisTwitterStreamInput inputTwitterStream = null;
-+
-+    public PriorityPip_FamilyElement2FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        analyzedStreamResult = new FSentimentAnalysis.IFSentimentAnalysisAnalyzedStreamOutput();
-+        IItemEmitter<IIFSentimentAnalysisAnalyzedStreamOutput> analyzedStreamEmitter = new IItemEmitter<IIFSentimentAnalysisAnalyzedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFSentimentAnalysisAnalyzedStreamOutput item) {
-+                _collector.emit("PriorityPip_FamilyElement2AnalyzedStream", new Values(item));
-+            }
-+        };
-+        analyzedStreamResult.setEmitter(analyzedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology");
-+                    alg = (IFSentimentAnalysis) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterTimeSeriesGranularity(PipelineOptions.getExecutorIntArgument(map, getName(), "timeSeriesGranularity", 60));
-+                alg.setParameterSentimentClass(PipelineOptions.getExecutorIntArgument(map, getName(), "sentimentClass", 10));
-+                alg.setParameterClassificationThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "classificationThreshold", 2.5));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("SentimentAnaylsisSentiWordNetTopology", null);
-+            streamId = "PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fSentimentAnalysis"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof ITwitterStreamDataTwitterStreamOutput) {
-+        iTupleTwitterStream = (ITwitterStreamDataTwitterStreamOutput)tupleItem;
-+        inputTwitterStream = new FSentimentAnalysis.IFSentimentAnalysisTwitterStreamInput();
-+        inputTwitterStream.setStatus(iTupleTwitterStream.getStatus());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputTwitterStream, analyzedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            analyzedStreamResult.setSymbolId("");
-+            analyzedStreamResult.setTimestamp(0);
-+            analyzedStreamResult.setValue(0.0);
-+            analyzedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+        if(alg instanceof ITopologyCreate) {
-+            _collector.emit(streamId, new Values(inputTwitterStream));
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFSentimentAnalysisAnalyzedStreamOutput> iterAnalyzedStream = analyzedStreamResult.iterator();
-+            iterAnalyzedStream.reset();
-+            while (iterAnalyzedStream.hasNext()) {
-+                IIFSentimentAnalysisAnalyzedStreamOutput out = iterAnalyzedStream.next();
-+                _collector.emit("PriorityPip_FamilyElement2AnalyzedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "timeSeriesGranularity" :
-+                    try {
-+                        System.out.println("Received parameter changing signal timeSeriesGranularity");
-+                        alg.setParameterTimeSeriesGranularity(para.getIntValue()); 
-+                        sendParameterChangeEvent("timeSeriesGranularity", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "sentimentClass" :
-+                    try {
-+                        System.out.println("Received parameter changing signal sentimentClass");
-+                        alg.setParameterSentimentClass(para.getIntValue()); 
-+                        sendParameterChangeEvent("sentimentClass", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "classificationThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal classificationThreshold");
-+                        alg.setParameterClassificationThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("classificationThreshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "SentimentAnaylsisSentiWordNetTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof SentimentAnaylsisSentiWordNetTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology");
-+                        alg = (IFSentimentAnalysis) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology";
-+                    alg.setParameterTimeSeriesGranularity(60);
-+                    alg.setParameterSentimentClass(10);
-+                    alg.setParameterClassificationThreshold(2.5);
-+                    sendAlgorithmChangeEvent("SentimentAnaylsisSentiWordNetTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "SentimentAnaylsisSVMTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof SentimentAnaylsisSVMTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology");
-+                        alg = (IFSentimentAnalysis) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PriorityPip_FamilyElement2SentimentAnaylsisSVMTopology";
-+                    alg.setParameterTimeSeriesGranularity(60);
-+                    alg.setParameterSentimentClass(10);
-+                    alg.setParameterClassificationThreshold(2.5);
-+                    sendAlgorithmChangeEvent("SentimentAnaylsisSVMTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PriorityPip_FamilyElement2AnalyzedStream", new Fields("PriorityPip_FamilyElement2AnalyzedStreamFields"));
-+        declarer.declareStream("PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology", new Fields("PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopologyFields"));
-+        declarer.declareStream("PriorityPip_FamilyElement2SentimentAnaylsisSVMTopology", new Fields("PriorityPip_FamilyElement2SentimentAnaylsisSVMTopologyFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Sink0Sink.java
-new file mode 100644
-index 0000000..a468a31
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Sink0Sink.java
-@@ -0,0 +1,153 @@
-+package eu.qualimaster.PriorityPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IPriorityDataSink;
-+import eu.qualimaster.data.inf.IPriorityDataSink.*;
-+import eu.qualimaster.data.imp.PriorityDataSink;
-+import eu.qualimaster.data.imp.PriorityDataSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFSentimentAnalysis.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PriorityPip_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PriorityPip_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient IPriorityDataSink sinkHandler;
-+private int counter = 0;
-+    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient IIFSentimentAnalysisAnalyzedStreamOutput iTupleAnalyzedStream = null;
-+    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
-+    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
-+
-+	public PriorityPip_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
-+            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
-+            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+            sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
-+            emitted(inputPairwiseFinancial);
-+        }
-+
-+        if(tupleItem instanceof IIFSentimentAnalysisAnalyzedStreamOutput) {
-+            iTupleAnalyzedStream = (IIFSentimentAnalysisAnalyzedStreamOutput)tupleItem;
-+            inputAnalyzedStream = new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+            inputAnalyzedStream.setSymbolId(iTupleAnalyzedStream.getSymbolId());
-+            inputAnalyzedStream.setTimestamp(iTupleAnalyzedStream.getTimestamp());
-+            inputAnalyzedStream.setValue(iTupleAnalyzedStream.getValue());
-+            inputAnalyzedStream.setVolume(iTupleAnalyzedStream.getVolume());
-+            sinkHandler.postDataAnalyzedStream(inputAnalyzedStream);
-+            emitted(inputAnalyzedStream);
-+        }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PriorityPip_Sink0PairwiseFinancial", new Fields("PriorityPip_Sink0PairwiseFinancialFields"));
-+        declarer.declareStream("PriorityPip_Sink0AnalyzedStream", new Fields("PriorityPip_Sink0AnalyzedStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source0Source.java
-new file mode 100644
-index 0000000..fd00709
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source0Source.java
-@@ -0,0 +1,200 @@
-+package eu.qualimaster.PriorityPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ISpringFinancialData;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.data.imp.SpringFinancialData;
-+import eu.qualimaster.algorithms.imp.correlation.SpringClient;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PriorityPip_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PriorityPip_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ISpringFinancialData sourceData;
-+
-+    public PriorityPip_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("PriorityPip", "PriorityPip_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSymbolListOutput>(ISpringFinancialDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSpringStreamOutput>(ISpringFinancialDataSpringStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ISpringFinancialData> cls = (Class<? extends ISpringFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClient");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("SpringClient", null);
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("PriorityPip", "PriorityPip_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PriorityPip_Source0StreamSymbolList".
-+        ISpringFinancialDataSymbolListOutput dataItemSymbolList = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PriorityPip_Source0SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PriorityPip_Source0SpringStream".
-+        ISpringFinancialDataSpringStreamOutput dataItemSpringStream = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
-+        try {
-+            dataItemSpringStream = sourceData.getSpringStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSpringStream.setSymbolTuple("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSpringStream!=null){
-+            _collector.emit("PriorityPip_Source0SpringStream", new Values(dataItemSpringStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PriorityPip_Source0SymbolList", new Fields("PriorityPip_Source0SymbolListFields"));
-+        declarer.declareStream("PriorityPip_Source0SpringStream", new Fields("PriorityPip_Source0SpringStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source1Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source1Source.java
-new file mode 100644
-index 0000000..c807f0b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/PriorityPip_Source1Source.java
-@@ -0,0 +1,286 @@
-+package eu.qualimaster.PriorityPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ITwitterStreamData;
-+import eu.qualimaster.data.inf.ITwitterStreamData.*;
-+import eu.qualimaster.data.imp.TwitterStreamData;
-+import eu.qualimaster.data.stream.source.TwitterFileStreaming;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PriorityPip_Source1Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PriorityPip_Source1Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ITwitterStreamData sourceData;
-+
-+    public PriorityPip_Source1Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("PriorityPip", "PriorityPip_Source1", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITwitterStreamDataSymbolListOutput>(ITwitterStreamDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(ITwitterStreamDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITwitterStreamDataTwitterStreamOutput>(ITwitterStreamDataTwitterStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ITwitterStreamDataTwitterStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ITwitterStreamData> cls = (Class<? extends ITwitterStreamData>) Class.forName("eu.qualimaster.data.stream.source.TwitterFileStreaming");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("TwitterFileStreaming", null);
-+            sourceData.setParameterConsumerKey(PipelineOptions.getExecutorStringArgument(conf, getName(), "consumerKey", ""));
-+            sourceData.setParameterConsumerSecret(PipelineOptions.getExecutorStringArgument(conf, getName(), "consumerSecret", ""));
-+            sourceData.setParameterAccessToken(PipelineOptions.getExecutorStringArgument(conf, getName(), "accessToken", ""));
-+            sourceData.setParameterAccessTokenSecret(PipelineOptions.getExecutorStringArgument(conf, getName(), "accessTokenSecret", ""));
-+            sourceData.setParameterQueueSize(PipelineOptions.getExecutorIntArgument(conf, getName(), "queueSize", 0));
-+            sourceData.setParameterTweetDirectory(PipelineOptions.getExecutorStringArgument(conf, getName(), "tweetDirectory", "/user/storm/resultSymbols"));
-+            sourceData.setParameterSpeedFactor(PipelineOptions.getExecutorDoubleArgument(conf, getName(), "speedFactor", 0.0));
-+            sourceData.setParameterRunLocally(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "runLocally", false));
-+            sourceData.setParameterAdjustTimeToNow(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "adjustTimeToNow", false));
-+            sourceData.setParameterRealLoops(PipelineOptions.getExecutorBooleanArgument(conf, getName(), "realLoops", false));
-+            sourceData.setParameterSetAdditionalKeywords(PipelineOptions.getExecutorStringArgument(conf, getName(), "setAdditionalKeywords", ""));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("PriorityPip", "PriorityPip_Source1", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PriorityPip_Source1StreamSymbolList".
-+        ITwitterStreamDataSymbolListOutput dataItemSymbolList = new TwitterStreamData.TwitterStreamDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PriorityPip_Source1SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PriorityPip_Source1TwitterStream".
-+        ITwitterStreamDataTwitterStreamOutput dataItemTwitterStream = new TwitterStreamData.TwitterStreamDataTwitterStreamOutput();
-+        try {
-+            dataItemTwitterStream = sourceData.getTwitterStream();
-+        } catch(DefaultModeException e) {
-+            dataItemTwitterStream.setStatus(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemTwitterStream!=null){
-+            _collector.emit("PriorityPip_Source1TwitterStream", new Values(dataItemTwitterStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "consumerKey" :
-+                    logger.info("Received the parameter consumerKey!");
-+                    sourceData.setParameterConsumerKey(para.getStringValue()); 
-+                    sendParameterChangeEvent("consumerKey", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "consumerSecret" :
-+                    logger.info("Received the parameter consumerSecret!");
-+                    sourceData.setParameterConsumerSecret(para.getStringValue()); 
-+                    sendParameterChangeEvent("consumerSecret", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "accessToken" :
-+                    logger.info("Received the parameter accessToken!");
-+                    sourceData.setParameterAccessToken(para.getStringValue()); 
-+                    sendParameterChangeEvent("accessToken", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "accessTokenSecret" :
-+                    logger.info("Received the parameter accessTokenSecret!");
-+                    sourceData.setParameterAccessTokenSecret(para.getStringValue()); 
-+                    sendParameterChangeEvent("accessTokenSecret", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "queueSize" :
-+                    try {
-+                        logger.info("Received the parameter queueSize!");
-+                        sourceData.setParameterQueueSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("queueSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "tweetDirectory" :
-+                    logger.info("Received the parameter tweetDirectory!");
-+                    sourceData.setParameterTweetDirectory(para.getStringValue()); 
-+                    sendParameterChangeEvent("tweetDirectory", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "speedFactor" :
-+                    try {
-+                        logger.info("Received the parameter speedFactor!");
-+                        sourceData.setParameterSpeedFactor(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("speedFactor", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "runLocally" :
-+                    try {
-+                        logger.info("Received the parameter runLocally!");
-+                        sourceData.setParameterRunLocally(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("runLocally", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "adjustTimeToNow" :
-+                    try {
-+                        logger.info("Received the parameter adjustTimeToNow!");
-+                        sourceData.setParameterAdjustTimeToNow(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("adjustTimeToNow", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "realLoops" :
-+                    try {
-+                        logger.info("Received the parameter realLoops!");
-+                        sourceData.setParameterRealLoops(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("realLoops", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "setAdditionalKeywords" :
-+                    logger.info("Received the parameter setAdditionalKeywords!");
-+                    sourceData.setParameterSetAdditionalKeywords(para.getStringValue()); 
-+                    sendParameterChangeEvent("setAdditionalKeywords", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PriorityPip_Source1SymbolList", new Fields("PriorityPip_Source1SymbolListFields"));
-+        declarer.declareStream("PriorityPip_Source1TwitterStream", new Fields("PriorityPip_Source1TwitterStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/Topology.java
-new file mode 100644
-index 0000000..21d9142
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PriorityPip/topology/Topology.java
-@@ -0,0 +1,187 @@
-+package eu.qualimaster.PriorityPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology;
-+import eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "PriorityPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 1; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "FinancialDataSource"
-+
-+            builder.setSpout("PriorityPip_Source0", new PriorityPip_Source0Source("PriorityPip_Source0", "PriorityPip"), 1);
-+            // Declare a Bolt "FinancialCorrelation"
-+
-+            BoltDeclarer PriorityPip_FamilyElement0=builder.setBolt("PriorityPip_FamilyElement0", new PriorityPip_FamilyElement0FamilyElement("PriorityPip_FamilyElement0", "PriorityPip"), 1);
-+            PriorityPip_FamilyElement0.shuffleGrouping("PriorityPip_Source0", "PriorityPip_Source0SymbolList");
-+            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
-+            }
-+            builder.startRecording("TopoSoftwareCorrelationFinancial");
-+            ITopologyCreate PriorityPip_FamilyElement01SubCreator = new TopoSoftwareCorrelationFinancial();
-+            SubTopologyOutput PriorityPip_FamilyElement01SubOutput = PriorityPip_FamilyElement01SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0TopoSoftwareCorrelationFinancial");
-+            builder.endRecording(PriorityPip_FamilyElement01SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement01SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement01SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
-+            ITopologyCreate PriorityPip_FamilyElement02SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
-+            SubTopologyOutput PriorityPip_FamilyElement02SubOutput = PriorityPip_FamilyElement02SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0GenTopoHardwareCorrelationFinancial");
-+            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement02SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement02SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
-+            ITopologyCreate PriorityPip_FamilyElement03SubCreator = new CorrelationSWSubTopology();
-+            SubTopologyOutput PriorityPip_FamilyElement03SubOutput = PriorityPip_FamilyElement03SubCreator.createSubTopology(builder,config,"CorrelationSW", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0CorrelationSW");
-+            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement03SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement03SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
-+            ITopologyCreate PriorityPip_FamilyElement04SubCreator = new TransferEntropyHardwareSubTopology();
-+            SubTopologyOutput PriorityPip_FamilyElement04SubOutput = PriorityPip_FamilyElement04SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0TransferEntropyHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement04SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement04SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
-+            ITopologyCreate PriorityPip_FamilyElement05SubCreator = new MutualInformationHardwareSubTopology();
-+            SubTopologyOutput PriorityPip_FamilyElement05SubOutput = PriorityPip_FamilyElement05SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0MutualInformationHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement05SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement05SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
-+            ITopologyCreate PriorityPip_FamilyElement06SubCreator = new CorrelationSWAlternativeSubTopology();
-+            SubTopologyOutput PriorityPip_FamilyElement06SubOutput = PriorityPip_FamilyElement06SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PriorityPip_FamilyElement0", "PriorityPip_FamilyElement0CorrelationSWAlternative");
-+            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement06SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement06SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "Sink"
-+
-+            BoltDeclarer PriorityPip_Sink0=builder.setBolt("PriorityPip_Sink0", new PriorityPip_Sink0Sink("PriorityPip_Sink0", "PriorityPip"), 1);
-+            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement01SubOutput.getBoltName(), PriorityPip_FamilyElement01SubOutput.getStreamId());
-+            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement02SubOutput.getBoltName(), PriorityPip_FamilyElement02SubOutput.getStreamId());
-+            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement03SubOutput.getBoltName(), PriorityPip_FamilyElement03SubOutput.getStreamId());
-+            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement04SubOutput.getBoltName(), PriorityPip_FamilyElement04SubOutput.getStreamId());
-+            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement05SubOutput.getBoltName(), PriorityPip_FamilyElement05SubOutput.getStreamId());
-+            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement06SubOutput.getBoltName(), PriorityPip_FamilyElement06SubOutput.getStreamId());
-+            // Declare a Bolt "Preprocessor"
-+
-+            BoltDeclarer PriorityPip_FamilyElement1=builder.setBolt("PriorityPip_FamilyElement1", new PriorityPip_FamilyElement1FamilyElement("PriorityPip_FamilyElement1", "PriorityPip"), 1);
-+            PriorityPip_FamilyElement1.shuffleGrouping("PriorityPip_Source0", "PriorityPip_Source0SpringStream");
-+            PriorityPip_FamilyElement0.shuffleGrouping("PriorityPip_FamilyElement1", "PriorityPip_FamilyElement1PreprocessedStream");
-+            // Declare a Spout "TwitterDataSource"
-+
-+            builder.setSpout("PriorityPip_Source1", new PriorityPip_Source1Source("PriorityPip_Source1", "PriorityPip"), 1);
-+            // Declare a Bolt "SentimentAnalysis"
-+
-+            BoltDeclarer PriorityPip_FamilyElement2=builder.setBolt("PriorityPip_FamilyElement2", new PriorityPip_FamilyElement2FamilyElement("PriorityPip_FamilyElement2", "PriorityPip"), 1);
-+            PriorityPip_FamilyElement2.shuffleGrouping("PriorityPip_Source1", "PriorityPip_Source1TwitterStream");
-+            //generate the Storm-based algorithm topology name:SentimentAnaylsisSentiWordNetTopology
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("SentimentAnaylsisSentiWordNetTopology"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("SentimentAnaylsisSentiWordNetTopology"), 1);
-+            }
-+            builder.startRecording("SentimentAnaylsisSentiWordNetTopology");
-+            ITopologyCreate PriorityPip_FamilyElement21SubCreator = new SentimentAnaylsisSentiWordNetTopology();
-+            SubTopologyOutput PriorityPip_FamilyElement21SubOutput = PriorityPip_FamilyElement21SubCreator.createSubTopology(builder,config,"SentimentAnaylsisSentiWordNetTopology", "PriorityPip_FamilyElement2", "PriorityPip_FamilyElement2SentimentAnaylsisSentiWordNetTopology");
-+            builder.endRecording(PriorityPip_FamilyElement21SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement21SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement21SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:SentimentAnaylsisSVMTopology
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("SentimentAnaylsisSVMTopology"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("SentimentAnaylsisSVMTopology"), 1);
-+            }
-+            builder.startRecording("SentimentAnaylsisSVMTopology");
-+            ITopologyCreate PriorityPip_FamilyElement22SubCreator = new SentimentAnaylsisSVMTopology();
-+            SubTopologyOutput PriorityPip_FamilyElement22SubOutput = PriorityPip_FamilyElement22SubCreator.createSubTopology(builder,config,"SentimentAnaylsisSVMTopology", "PriorityPip_FamilyElement2", "PriorityPip_FamilyElement2SentimentAnaylsisSVMTopology");
-+            builder.endRecording(PriorityPip_FamilyElement22SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PriorityPip_FamilyElement22SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PriorityPip_FamilyElement22SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "DataManagement"
-+
-+            BoltDeclarer PriorityPip_DataManagementElement0=builder.setBolt("PriorityPip_DataManagementElement0", new PriorityPip_DataManagementElement0DataManagementElement("PriorityPip_DataManagementElement0", "PriorityPip"), 1);
-+            PriorityPip_DataManagementElement0.shuffleGrouping(PriorityPip_FamilyElement21SubOutput.getBoltName(), PriorityPip_FamilyElement21SubOutput.getStreamId());
-+            PriorityPip_DataManagementElement0.shuffleGrouping(PriorityPip_FamilyElement22SubOutput.getBoltName(), PriorityPip_FamilyElement22SubOutput.getStreamId());
-+            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement21SubOutput.getBoltName(), PriorityPip_FamilyElement21SubOutput.getStreamId());
-+            PriorityPip_Sink0.shuffleGrouping(PriorityPip_FamilyElement22SubOutput.getBoltName(), PriorityPip_FamilyElement22SubOutput.getStreamId());
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/mapping.xml
-new file mode 100644
-index 0000000..94d17ea
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/mapping.xml
-@@ -0,0 +1,44 @@
-+<mapping>
-+  <pipeline name="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.Topology">
-+      <node name="FinancialSource" type="source">
-+          <component name="PipelineVar_17_Source0" container="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.PipelineVar_17_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="Preprocessor" type="family">
-+          <component name="PipelineVar_17_FamilyElement0" container="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.PipelineVar_17_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
-+      </node>
-+      <node name="CorrelationComputation" type="family">
-+          <component name="PipelineVar_17_FamilyElement1" container="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.PipelineVar_17_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
-+      </node>
-+      <node name="Sink" type="sink">
-+          <component name="PipelineVar_17_Sink0" container="PrioritySimulatePip" class="eu.qualimaster.PrioritySimulatePip.topology.PipelineVar_17_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
-+      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
-+      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
-+              <component name="CorrelationSWMapper" container="PrioritySimulatePip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWHayashiYoshida" container="PrioritySimulatePip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
-+          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
-+          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
-+              <component name="CorrelationSWAlternativeMP" container="PrioritySimulatePip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWAlternativeHY" container="PrioritySimulatePip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="FixedRateSimulatedFinancialData" implName="FixRateFinancialDataSource" class="eu.qualimaster.algorithm.FixRateFinancialDataSource"/>
-+      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
-+      <parameter parameter="windowSize" name="CorrelationComputation" receiver="PipelineVar_17_FamilyElement1"/> 
-+      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
-+      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/pom.xml
-new file mode 100644
-index 0000000..f3230ff
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/pom.xml
-@@ -0,0 +1,285 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PrioritySimulatePip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>DataSourceSimulator</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-preprocessor</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-correlation-financial-software</artifactId>
-+      <version>3.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSW</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TransferEntropyHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>MutualInformationHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSWAlternative</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-priority-data-sink</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/settings.xml
-new file mode 100644
-index 0000000..467ea1b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/settings.xml
-@@ -0,0 +1,76 @@
-+<pipeline>
-+    <name>PrioritySimulatePip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..eca0000
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement0FamilyElement.java
-@@ -0,0 +1,250 @@
-+package eu.qualimaster.PrioritySimulatePip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_17_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_17_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+    private transient IFPreprocessor alg = null; 
-+    transient IFixedRateSimulatedFinancialDataSpringStreamOutput iTupleSpringStream = null;
-+    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
-+
-+    public PipelineVar_17_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
-+                _collector.emit("PipelineVar_17_FamilyElement0PreprocessedStream", new Values(item));
-+            }
-+        };
-+        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                    alg = (IFPreprocessor) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Preprocessor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fPreprocessor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IFixedRateSimulatedFinancialDataSpringStreamOutput) {
-+        iTupleSpringStream = (IFixedRateSimulatedFinancialDataSpringStreamOutput)tupleItem;
-+        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputSpringStream, preprocessedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            preprocessedStreamResult.setSymbolId("");
-+            preprocessedStreamResult.setTimestamp(0);
-+            preprocessedStreamResult.setValue(0.0);
-+            preprocessedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
-+            iterPreprocessedStream.reset();
-+            while (iterPreprocessedStream.hasNext()) {
-+                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
-+                _collector.emit("PipelineVar_17_FamilyElement0PreprocessedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Preprocessor":
-+                if (!algChange || !(alg instanceof Preprocessor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                        alg = (IFPreprocessor) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_17_FamilyElement0PreprocessedStream", new Fields("PipelineVar_17_FamilyElement0PreprocessedStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..940bfa6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_FamilyElement1FamilyElement.java
-@@ -0,0 +1,544 @@
-+package eu.qualimaster.PrioritySimulatePip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData.*;
-+import eu.qualimaster.common.hardware.*;
-+import com.google.protobuf.ByteString;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_17_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_17_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial";
-+    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+    private transient IFCorrelationFinancial alg = null; 
-+    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
-+    transient IFixedRateSimulatedFinancialDataSymbolListOutput iTupleSymbolList = null;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+
-+    public PipelineVar_17_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
-+                _collector.emit("PipelineVar_17_FamilyElement1PairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                    alg = (IFCorrelationFinancial) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
-+            streamId = "PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fCorrelationFinancial"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
-+            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
-+            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputPreprocessedStream));
-+            }
-+        }
-+
-+        if(tupleItem instanceof IFixedRateSimulatedFinancialDataSymbolListOutput) {
-+            iTupleSymbolList = (IFixedRateSimulatedFinancialDataSymbolListOutput)tupleItem;
-+            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputSymbolList));
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("PipelineVar_17_FamilyElement1PairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TopoSoftwareCorrelationFinancial":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "GenTopoHardwareCorrelationFinancial":
-+            case "GenTopoHardwareCorrelationFinancialSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PrioritySimulatePip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PrioritySimulatePip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_17_FamilyElement1GenTopoHardwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSW":
-+            case "CorrelationSWSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_17_FamilyElement1CorrelationSW";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "TransferEntropyHardware":
-+            case "TransferEntropyHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PrioritySimulatePip",
-+                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PrioritySimulatePip",
-+                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_17_FamilyElement1TransferEntropyHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "MutualInformationHardware":
-+            case "MutualInformationHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("PrioritySimulatePip",
-+                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("PrioritySimulatePip",
-+                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_17_FamilyElement1MutualInformationHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSWAlternative":
-+            case "CorrelationSWAlternativeSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_17_FamilyElement1CorrelationSWAlternative";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_17_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_17_FamilyElement1PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_17_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_17_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_17_FamilyElement1CorrelationSW", new Fields("PipelineVar_17_FamilyElement1CorrelationSWFields"));
-+        declarer.declareStream("PipelineVar_17_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_17_FamilyElement1TransferEntropyHardwareFields"));
-+        declarer.declareStream("PipelineVar_17_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_17_FamilyElement1MutualInformationHardwareFields"));
-+        declarer.declareStream("PipelineVar_17_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_17_FamilyElement1CorrelationSWAlternativeFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Sink0Sink.java
-new file mode 100644
-index 0000000..caeef90
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Sink0Sink.java
-@@ -0,0 +1,140 @@
-+package eu.qualimaster.PrioritySimulatePip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IPriorityDataSink;
-+import eu.qualimaster.data.inf.IPriorityDataSink.*;
-+import eu.qualimaster.data.imp.PriorityDataSink;
-+import eu.qualimaster.data.imp.PriorityDataSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_17_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_17_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient IPriorityDataSink sinkHandler;
-+private int counter = 0;
-+    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
-+    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
-+
-+	public PipelineVar_17_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
-+            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
-+            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+            sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
-+            emitted(inputPairwiseFinancial);
-+        }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_17_Sink0PairwiseFinancial", new Fields("PipelineVar_17_Sink0PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_17_Sink0AnalyzedStream", new Fields("PipelineVar_17_Sink0AnalyzedStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Source0Source.java
-new file mode 100644
-index 0000000..609b1bd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/PipelineVar_17_Source0Source.java
-@@ -0,0 +1,200 @@
-+package eu.qualimaster.PrioritySimulatePip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData;
-+import eu.qualimaster.data.inf.IFixedRateSimulatedFinancialData.*;
-+import eu.qualimaster.data.imp.FixedRateSimulatedFinancialData;
-+import eu.qualimaster.algorithm.FixRateFinancialDataSource;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_17_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_17_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient IFixedRateSimulatedFinancialData sourceData;
-+
-+    public PipelineVar_17_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("PrioritySimulatePip", "PipelineVar_17_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFixedRateSimulatedFinancialDataSymbolListOutput>(IFixedRateSimulatedFinancialDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(IFixedRateSimulatedFinancialDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFixedRateSimulatedFinancialDataSpringStreamOutput>(IFixedRateSimulatedFinancialDataSpringStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(IFixedRateSimulatedFinancialDataSpringStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IFixedRateSimulatedFinancialData> cls = (Class<? extends IFixedRateSimulatedFinancialData>) Class.forName("eu.qualimaster.algorithm.FixRateFinancialDataSource");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, null);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("FixRateFinancialDataSource", null);
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("PrioritySimulatePip", "PipelineVar_17_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_17_Source0StreamSymbolList".
-+        IFixedRateSimulatedFinancialDataSymbolListOutput dataItemSymbolList = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PipelineVar_17_Source0SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PipelineVar_17_Source0SpringStream".
-+        IFixedRateSimulatedFinancialDataSpringStreamOutput dataItemSpringStream = new FixedRateSimulatedFinancialData.FixedRateSimulatedFinancialDataSpringStreamOutput();
-+        try {
-+            dataItemSpringStream = sourceData.getSpringStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSpringStream.setSymbolTuple("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSpringStream!=null){
-+            _collector.emit("PipelineVar_17_Source0SpringStream", new Values(dataItemSpringStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_17_Source0SymbolList", new Fields("PipelineVar_17_Source0SymbolListFields"));
-+        declarer.declareStream("PipelineVar_17_Source0SpringStream", new Fields("PipelineVar_17_Source0SpringStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/Topology.java
-new file mode 100644
-index 0000000..6bd4bf9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/PrioritySimulatePip/topology/Topology.java
-@@ -0,0 +1,151 @@
-+package eu.qualimaster.PrioritySimulatePip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "PrioritySimulatePip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 5; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "FinancialSource"
-+
-+            builder.setSpout("PipelineVar_17_Source0", new PipelineVar_17_Source0Source("PipelineVar_17_Source0", "PrioritySimulatePip"), 1);
-+            // Declare a Bolt "Preprocessor"
-+
-+            BoltDeclarer PipelineVar_17_FamilyElement0=builder.setBolt("PipelineVar_17_FamilyElement0", new PipelineVar_17_FamilyElement0FamilyElement("PipelineVar_17_FamilyElement0", "PrioritySimulatePip"), 1);
-+            PipelineVar_17_FamilyElement0.shuffleGrouping("PipelineVar_17_Source0", "PipelineVar_17_Source0SpringStream");
-+            // Declare a Bolt "CorrelationComputation"
-+
-+            BoltDeclarer PipelineVar_17_FamilyElement1=builder.setBolt("PipelineVar_17_FamilyElement1", new PipelineVar_17_FamilyElement1FamilyElement("PipelineVar_17_FamilyElement1", "PrioritySimulatePip"), 1);
-+            PipelineVar_17_FamilyElement1.shuffleGrouping("PipelineVar_17_FamilyElement0", "PipelineVar_17_FamilyElement0PreprocessedStream");
-+            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
-+            }
-+            builder.startRecording("TopoSoftwareCorrelationFinancial");
-+            ITopologyCreate PipelineVar_17_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
-+            SubTopologyOutput PipelineVar_17_FamilyElement11SubOutput = PipelineVar_17_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1TopoSoftwareCorrelationFinancial");
-+            builder.endRecording(PipelineVar_17_FamilyElement11SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement11SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement11SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
-+            ITopologyCreate PipelineVar_17_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
-+            SubTopologyOutput PipelineVar_17_FamilyElement12SubOutput = PipelineVar_17_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1GenTopoHardwareCorrelationFinancial");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement12SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement12SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
-+            ITopologyCreate PipelineVar_17_FamilyElement13SubCreator = new CorrelationSWSubTopology();
-+            SubTopologyOutput PipelineVar_17_FamilyElement13SubOutput = PipelineVar_17_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1CorrelationSW");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement13SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement13SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
-+            ITopologyCreate PipelineVar_17_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_17_FamilyElement14SubOutput = PipelineVar_17_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1TransferEntropyHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement14SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement14SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
-+            ITopologyCreate PipelineVar_17_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_17_FamilyElement15SubOutput = PipelineVar_17_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1MutualInformationHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement15SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement15SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
-+            ITopologyCreate PipelineVar_17_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
-+            SubTopologyOutput PipelineVar_17_FamilyElement16SubOutput = PipelineVar_17_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_17_FamilyElement1", "PipelineVar_17_FamilyElement1CorrelationSWAlternative");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_17_FamilyElement16SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_17_FamilyElement16SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "Sink"
-+
-+            BoltDeclarer PipelineVar_17_Sink0=builder.setBolt("PipelineVar_17_Sink0", new PipelineVar_17_Sink0Sink("PipelineVar_17_Sink0", "PrioritySimulatePip"), 1);
-+            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement11SubOutput.getBoltName(), PipelineVar_17_FamilyElement11SubOutput.getStreamId());
-+            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement12SubOutput.getBoltName(), PipelineVar_17_FamilyElement12SubOutput.getStreamId());
-+            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement13SubOutput.getBoltName(), PipelineVar_17_FamilyElement13SubOutput.getStreamId());
-+            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement14SubOutput.getBoltName(), PipelineVar_17_FamilyElement14SubOutput.getStreamId());
-+            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement15SubOutput.getBoltName(), PipelineVar_17_FamilyElement15SubOutput.getStreamId());
-+            PipelineVar_17_Sink0.shuffleGrouping(PipelineVar_17_FamilyElement16SubOutput.getBoltName(), PipelineVar_17_FamilyElement16SubOutput.getStreamId());
-+            PipelineVar_17_FamilyElement1.shuffleGrouping("PipelineVar_17_Source0", "PipelineVar_17_Source0SymbolList");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/mapping.xml
-new file mode 100644
-index 0000000..1a12445
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/mapping.xml
-@@ -0,0 +1,22 @@
-+<mapping>
-+  <pipeline name="RandomPip" class="eu.qualimaster.RandomPip.topology.Topology">
-+      <node name="src" type="source">
-+          <component name="PipelineVar_1_Source0" container="RandomPip" class="eu.qualimaster.RandomPip.topology.PipelineVar_1_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="processor" type="family">
-+          <component name="PipelineVar_1_FamilyElement0" container="RandomPip" class="eu.qualimaster.RandomPip.topology.PipelineVar_1_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "RandomProcessor1" alternative1 = "RandomProcessor2"/>
-+      </node>
-+      <node name="snk" type="sink">
-+          <component name="PipelineVar_1_Sink0" container="RandomPip" class="eu.qualimaster.RandomPip.topology.PipelineVar_1_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="RandomProcessor1" implName="RandomProcessor1" class="eu.qualimaster.algorithms.RandomProcessor1"/>
-+      <algorithm name="RandomProcessor2" implName="RandomProcessor2" class="eu.qualimaster.algorithms.RandomProcessor2"/>
-+      <algorithm name="Random Source" implName="RandomSourceAlg" class="eu.qualimaster.algorithms.RandomSourceAlg"/>
-+      <algorithm name="Random Sink" implName="RandomSinkAlg" class="eu.qualimaster.algorithms.RandomSinkAlg"/>
-+      <parameter parameter="delay" name="src" receiver="PipelineVar_1_Source0"/> 
-+      <parameter parameter="delay" name="processor" receiver="PipelineVar_1_FamilyElement0"/> 
-+      <parameter parameter="flag" name="processor" receiver="PipelineVar_1_FamilyElement0"/> 
-+      <parameter parameter="windowSize" name="processor" receiver="PipelineVar_1_FamilyElement0"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/pom.xml
-new file mode 100644
-index 0000000..bc24ee2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/pom.xml
-@@ -0,0 +1,260 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>RandomPip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomSourceAlg</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomProcessor1</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomProcessor2</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomSinkAlg</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/settings.xml
-new file mode 100644
-index 0000000..71a5595
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/settings.xml
-@@ -0,0 +1,63 @@
-+<pipeline>
-+    <name>RandomPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..d506530
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_FamilyElement0FamilyElement.java
-@@ -0,0 +1,337 @@
-+package eu.qualimaster.RandomPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IRandomFamily.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.RandomProcessor1;
-+import eu.qualimaster.algorithms.RandomProcessor2;
-+import eu.qualimaster.data.inf.IRandomSource.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_1_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_1_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_1_FamilyElement0RandomProcessor1";
-+    private transient RandomFamily.IRandomFamilyRandomDataOutput randomDataResult = new RandomFamily.IRandomFamilyRandomDataOutput();
-+    private transient IRandomFamily alg = null; 
-+    transient IRandomSourceRandomDataOutput iTupleRandomData = null;
-+    transient IIRandomFamilyRandomDataInput inputRandomData = null;
-+
-+    public PipelineVar_1_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        randomDataResult = new RandomFamily.IRandomFamilyRandomDataOutput();
-+        IItemEmitter<IIRandomFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IIRandomFamilyRandomDataOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIRandomFamilyRandomDataOutput item) {
-+                _collector.emit("PipelineVar_1_FamilyElement0RandomData", new Values(item));
-+            }
-+        };
-+        randomDataResult.setEmitter(randomDataEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor1");
-+                    alg = (IRandomFamily) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 5));
-+                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", false));
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("RandomProcessor1", null);
-+            streamId = "PipelineVar_1_FamilyElement0RandomProcessor1";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "randomFamily"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IRandomSourceRandomDataOutput) {
-+        iTupleRandomData = (IRandomSourceRandomDataOutput)tupleItem;
-+        inputRandomData = new RandomFamily.IRandomFamilyRandomDataInput();
-+        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
-+        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputRandomData, randomDataResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            randomDataResult.setRandomInteger(0);
-+            randomDataResult.setTimestamp(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+        if(alg instanceof ITopologyCreate) {
-+            _collector.emit(streamId, new Values(inputRandomData));
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIRandomFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
-+            iterRandomData.reset();
-+            while (iterRandomData.hasNext()) {
-+                IIRandomFamilyRandomDataOutput out = iterRandomData.next();
-+                _collector.emit("PipelineVar_1_FamilyElement0RandomData", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "delay" :
-+                    try {
-+                        System.out.println("Received parameter changing signal delay");
-+                        alg.setParameterDelay(para.getIntValue()); 
-+                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "flag" :
-+                    try {
-+                        System.out.println("Received parameter changing signal flag");
-+                        alg.setParameterFlag(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "RandomProcessor1":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof RandomProcessor1)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor1");
-+                        alg = (IRandomFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_1_FamilyElement0RandomProcessor1";
-+                    alg.setParameterDelay(5);
-+                    alg.setParameterFlag(false);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("RandomProcessor1", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "RandomProcessor2":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof RandomProcessor2)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor2");
-+                        alg = (IRandomFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_1_FamilyElement0RandomProcessor2";
-+                    alg.setParameterDelay(0);
-+                    alg.setParameterFlag(false);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("RandomProcessor2", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_1_FamilyElement0RandomData", new Fields("PipelineVar_1_FamilyElement0RandomDataFields"));
-+        declarer.declareStream("PipelineVar_1_FamilyElement0RandomProcessor1", new Fields("PipelineVar_1_FamilyElement0RandomProcessor1Fields"));
-+        declarer.declareStream("PipelineVar_1_FamilyElement0RandomProcessor2", new Fields("PipelineVar_1_FamilyElement0RandomProcessor2Fields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Sink0Sink.java
-new file mode 100644
-index 0000000..b0fc307
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Sink0Sink.java
-@@ -0,0 +1,133 @@
-+package eu.qualimaster.RandomPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IRandomSink;
-+import eu.qualimaster.data.inf.IRandomSink.*;
-+import eu.qualimaster.data.imp.RandomSink;
-+import eu.qualimaster.data.imp.RandomSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IRandomFamily.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_1_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_1_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient IRandomSink sinkHandler;
-+private int counter = 0;
-+    transient IIRandomFamilyRandomDataOutput iTupleRandomData = null;
-+    transient IRandomSinkRandomDataInput inputRandomData = null;
-+
-+	public PipelineVar_1_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+    if(tupleItem instanceof IIRandomFamilyRandomDataOutput) {
-+        iTupleRandomData = (IIRandomFamilyRandomDataOutput)tupleItem;
-+        inputRandomData = new RandomSink.RandomSinkRandomDataInput();
-+        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
-+        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
-+        sinkHandler.postDataRandomData(inputRandomData);
-+        emitted(inputRandomData);
-+    }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new RandomSink.RandomSinkRandomDataInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IRandomSink> cls = (Class<? extends IRandomSink>)Class.forName("eu.qualimaster.algorithms.RandomSinkAlg");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("RandomSinkAlg", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_1_Sink0RandomData", new Fields("PipelineVar_1_Sink0RandomDataFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Source0Source.java
-new file mode 100644
-index 0000000..46c60a0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/PipelineVar_1_Source0Source.java
-@@ -0,0 +1,192 @@
-+package eu.qualimaster.RandomPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.IRandomSource;
-+import eu.qualimaster.data.inf.IRandomSource.*;
-+import eu.qualimaster.data.imp.RandomSource;
-+import eu.qualimaster.algorithms.RandomSourceAlg;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_1_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_1_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient IRandomSource sourceData;
-+
-+    public PipelineVar_1_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("RandomPip", "PipelineVar_1_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IRandomSourceRandomDataOutput>(IRandomSourceRandomDataOutput.class) {
-+            @Override
-+            public String getAggregationKey(IRandomSourceRandomDataOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IRandomSource> cls = (Class<? extends IRandomSource>) Class.forName("eu.qualimaster.algorithms.RandomSourceAlg");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("RandomSourceAlg", null);
-+            sourceData.setParameterDelay(PipelineOptions.getExecutorIntArgument(conf, getName(), "delay", 0));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("RandomPip", "PipelineVar_1_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_1_Source0StreamRandomData".
-+        IRandomSourceRandomDataOutput dataItemRandomData = new RandomSource.RandomSourceRandomDataOutput();
-+        try {
-+            dataItemRandomData = sourceData.getRandomData();
-+        } catch(DefaultModeException e) {
-+            dataItemRandomData.setRandomInteger(0);
-+            dataItemRandomData.setTimestamp(0);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemRandomData!=null){
-+            _collector.emit("PipelineVar_1_Source0RandomData", new Values(dataItemRandomData));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "delay" :
-+                    try {
-+                        logger.info("Received the parameter delay!");
-+                        sourceData.setParameterDelay(para.getIntValue()); 
-+                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_1_Source0RandomData", new Fields("PipelineVar_1_Source0RandomDataFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/Topology.java
-new file mode 100644
-index 0000000..0bdf468
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomPip/topology/Topology.java
-@@ -0,0 +1,122 @@
-+package eu.qualimaster.RandomPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.RandomProcessor1;
-+import eu.qualimaster.algorithms.RandomProcessor2;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "RandomPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 1; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "src"
-+
-+            builder.setSpout("PipelineVar_1_Source0", new PipelineVar_1_Source0Source("PipelineVar_1_Source0", "RandomPip"), 1);
-+            // Declare a Bolt "processor"
-+
-+            BoltDeclarer PipelineVar_1_FamilyElement0=builder.setBolt("PipelineVar_1_FamilyElement0", new PipelineVar_1_FamilyElement0FamilyElement("PipelineVar_1_FamilyElement0", "RandomPip"), 1);
-+            PipelineVar_1_FamilyElement0.shuffleGrouping("PipelineVar_1_Source0", "PipelineVar_1_Source0RandomData");
-+            //generate the Storm-based algorithm topology name:RandomProcessor1
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("RandomProcessor1"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("RandomProcessor1"), 1);
-+            }
-+            builder.startRecording("RandomProcessor1");
-+            ITopologyCreate PipelineVar_1_FamilyElement01SubCreator = new RandomProcessor1();
-+            SubTopologyOutput PipelineVar_1_FamilyElement01SubOutput = PipelineVar_1_FamilyElement01SubCreator.createSubTopology(builder,config,"RandomProcessor1", "PipelineVar_1_FamilyElement0", "PipelineVar_1_FamilyElement0RandomProcessor1");
-+            builder.endRecording(PipelineVar_1_FamilyElement01SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_1_FamilyElement01SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_1_FamilyElement01SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:RandomProcessor2
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("RandomProcessor2"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("RandomProcessor2"), 1);
-+            }
-+            builder.startRecording("RandomProcessor2");
-+            ITopologyCreate PipelineVar_1_FamilyElement02SubCreator = new RandomProcessor2();
-+            SubTopologyOutput PipelineVar_1_FamilyElement02SubOutput = PipelineVar_1_FamilyElement02SubCreator.createSubTopology(builder,config,"RandomProcessor2", "PipelineVar_1_FamilyElement0", "PipelineVar_1_FamilyElement0RandomProcessor2");
-+            builder.endRecording(PipelineVar_1_FamilyElement02SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_1_FamilyElement02SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_1_FamilyElement02SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "snk"
-+
-+            BoltDeclarer PipelineVar_1_Sink0=builder.setBolt("PipelineVar_1_Sink0", new PipelineVar_1_Sink0Sink("PipelineVar_1_Sink0", "RandomPip"), 1);
-+            PipelineVar_1_Sink0.shuffleGrouping(PipelineVar_1_FamilyElement01SubOutput.getBoltName(), PipelineVar_1_FamilyElement01SubOutput.getStreamId());
-+            PipelineVar_1_Sink0.shuffleGrouping(PipelineVar_1_FamilyElement02SubOutput.getBoltName(), PipelineVar_1_FamilyElement02SubOutput.getStreamId());
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/mapping.xml
-new file mode 100644
-index 0000000..1335ee3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/mapping.xml
-@@ -0,0 +1,14 @@
-+<mapping>
-+  <pipeline name="RandomSubPipeline1" class="eu.qualimaster.RandomSubPipeline1.topology.Topology">
-+      <node name="dataProcessor" type="family">
-+          <component name="RandomSubPipelineAlgorithm1DataProcessor" container="RandomSubPipeline1" class="eu.qualimaster.RandomSubPipeline1.topology.SubPipelineVar_11_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SwitchProcessor1" alternative1 = "SwitchProcessor2"/>
-+      </node>
-+      <algorithm name="SwitchProcessor1" implName="SwitchProcessor1" class="eu.qualimaster.algorithms.SwitchProcessor1"/>
-+      <algorithm name="SwitchProcessor2" implName="SwitchProcessor2" class="eu.qualimaster.algorithms.SwitchProcessor2"/>
-+      <parameter parameter="aggregationFactor" name="dataProcessor" receiver="RandomSubPipelineAlgorithm1DataProcessor"/> 
-+      <parameter parameter="delay" name="dataProcessor" receiver="RandomSubPipelineAlgorithm1DataProcessor"/> 
-+      <parameter parameter="flag" name="dataProcessor" receiver="RandomSubPipelineAlgorithm1DataProcessor"/> 
-+      <parameter parameter="windowSize" name="dataProcessor" receiver="RandomSubPipelineAlgorithm1DataProcessor"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/pom.xml
-new file mode 100644
-index 0000000..f95e242
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/pom.xml
-@@ -0,0 +1,265 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>RandomSubPipeline1</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-assembly-plugin</artifactId>
-+				<version>2.6</version>
-+            	<dependencies>
-+	                    <dependency>
-+	                        <groupId>eu.qualimaster</groupId>
-+	                        <artifactId>AlgorithmAssemblies</artifactId>
-+	                        <version>0.5.0-SNAPSHOT</version>
-+	                    </dependency>
-+	                </dependencies>
-+					<executions>
-+					<execution>
-+						<id>make-assembly</id>
-+						<phase>package</phase>
-+						<goals>
-+							<goal>single</goal>
-+						</goals>
-+					<configuration>
-+					<descriptorRefs>
-+						<descriptorRef>jar-with-dependencies</descriptorRef>
-+					</descriptorRefs>
-+					<dependencySets>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>runtime</scope>
-+						</dependencySet>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>provided</scope>
-+						</dependencySet>
-+					</dependencySets>
-+					<archive>
-+						<manifest>
-+						</manifest>
-+					</archive>
-+				</configuration>
-+					</execution>
-+				<execution>
-+                        <id>make-profilingAssembly</id>
-+                        <phase>package</phase>
-+                        <goals>
-+                            <goal>single</goal>
-+                        </goals>
-+                        <configuration>
-+                            <descriptorRefs>
-+                                <descriptorRef>profiling</descriptorRef>
-+                            </descriptorRefs>
-+                        </configuration>
-+                    </execution>
-+				</executions>
-+						</plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+	<dependency>
-+          <groupId>eu.qualimaster</groupId>
-+          <artifactId>AlgorithmAssemblies</artifactId>
-+          <version>0.5.0-SNAPSHOT</version>
-+      </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>SwitchProcessor1</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>SwitchProcessor2</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/profiling/profile.ctl
-new file mode 100644
-index 0000000..d5609a9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/profiling/profile.ctl
-@@ -0,0 +1 @@
-+import eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/RandomSubPipeline1SubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/RandomSubPipeline1SubTopology.java
-new file mode 100644
-index 0000000..339b37c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/RandomSubPipeline1SubTopology.java
-@@ -0,0 +1,112 @@
-+package eu.qualimaster.RandomSubPipeline1.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.Config;
-+import backtype.storm.topology.TopologyBuilder;
-+import eu.qualimaster.base.algorithm.ITopologyCreate;
-+import eu.qualimaster.base.algorithm.SubTopologyOutput;
-+import backtype.storm.topology.BoltDeclarer;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.SignalException;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.families.inf.IRandomFamily;
-+
-+public class RandomSubPipeline1SubTopology implements IRandomFamily, ITopologyCreate {
-+    final static Logger logger = Logger.getLogger(RandomSubPipeline1SubTopology.class);
-+    private int delay;
-+    private boolean flag;
-+    private int windowSize;
-+    private transient State state;
-+
-+    public void switchState(State arg0) {
-+        this.state = arg0;	
-+    }
-+
-+    public Double getMeasurement(IObservable observable) {
-+        return null;
-+    }
-+
-+    public SubTopologyOutput createSubTopology(TopologyBuilder builder,
-+    			Config config, String prefix, String input, String streamId) {
-+        String namespace = "RandomSubPipeline1";
-+        if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {
-+            namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);
-+        }
-+        // Declare a Bolt "dataProcessor"
-+
-+        BoltDeclarer SubPipelineVar_11_FamilyElement0 =builder.setBolt(prefix+"DataProcessor", new SubPipelineVar_11_FamilyElement0FamilyElement(prefix+"DataProcessor", namespace), 1);
-+        SubPipelineVar_11_FamilyElement0.shuffleGrouping(input, streamId);
-+        return new SubTopologyOutput(prefix+"DataProcessor", "DataProcessorRandomData", 1, 1); //TODO: consider PipelineOptions to change the parallelisms
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIRandomFamilyRandomDataInput input, IIRandomFamilyRandomDataOutput randomDataResult) {
-+    }
-+
-+
-+    /**
-+     * Sets the algorithm parameter "delay". Note that the actual parameter change will be dynamically
-+     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
-+     * sub-topology.
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDelay(int value) {
-+        this.delay = delay;
-+        try {
-+            logger.info("sending new Delay signal " + value + "!");
-+            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline1", 
-+                    "RandomSubPipeline1DataProcessor", "delay", value, null);
-+            signal.sendSignal();
-+        } catch (Exception e) {
-+            logger.error("Signal not sent!");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "flag". Note that the actual parameter change will be dynamically
-+     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
-+     * sub-topology.
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterFlag(boolean value) {
-+        this.flag = flag;
-+        try {
-+            logger.info("sending new Flag signal " + value + "!");
-+            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline1", 
-+                    "RandomSubPipeline1DataProcessor", "flag", value, null);
-+            signal.sendSignal();
-+        } catch (Exception e) {
-+            logger.error("Signal not sent!");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize". Note that the actual parameter change will be dynamically
-+     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
-+     * sub-topology.
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+        this.windowSize = windowSize;
-+        try {
-+            logger.info("sending new WindowSize signal " + value + "!");
-+            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline1", 
-+                    "RandomSubPipeline1DataProcessor", "windowSize", value, null);
-+            signal.sendSignal();
-+        } catch (Exception e) {
-+            logger.error("Signal not sent!");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/SubPipelineVar_11_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/SubPipelineVar_11_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..e4f1284
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline1/topology/SubPipelineVar_11_FamilyElement0FamilyElement.java
-@@ -0,0 +1,336 @@
-+package eu.qualimaster.RandomSubPipeline1.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.ISwitchFamily.*;
-+import eu.qualimaster.families.inf.IRandomFamily.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.SwitchProcessor1;
-+import eu.qualimaster.algorithms.SwitchProcessor2;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class SubPipelineVar_11_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(SubPipelineVar_11_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient SwitchFamily.ISwitchFamilyRandomDataOutput randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+    private transient ISwitchFamily alg = null; 
-+    transient IIRandomFamilyRandomDataInput iTupleRandomData = null;
-+    transient IISwitchFamilyRandomDataInput inputRandomData = null;
-+
-+    public SubPipelineVar_11_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+        IItemEmitter<IISwitchFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IISwitchFamilyRandomDataOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IISwitchFamilyRandomDataOutput item) {
-+                _collector.emit("DataProcessorRandomData", new Values(item));
-+            }
-+        };
-+        randomDataResult.setEmitter(randomDataEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
-+                    alg = (ISwitchFamily) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterAggregationFactor(PipelineOptions.getExecutorIntArgument(map, getName(), "aggregationFactor", 0));
-+                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 0));
-+                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", true));
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("SwitchProcessor1", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "switchFamily"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIRandomFamilyRandomDataInput) {
-+        iTupleRandomData = (IIRandomFamilyRandomDataInput)tupleItem;
-+        inputRandomData = new SwitchFamily.ISwitchFamilyRandomDataInput();
-+        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
-+        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputRandomData, randomDataResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            randomDataResult.setRandomInteger(0);
-+            randomDataResult.setTimestamp(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IISwitchFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
-+            iterRandomData.reset();
-+            while (iterRandomData.hasNext()) {
-+                IISwitchFamilyRandomDataOutput out = iterRandomData.next();
-+                _collector.emit("DataProcessorRandomData", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "aggregationFactor" :
-+                    try {
-+                        System.out.println("Received parameter changing signal aggregationFactor");
-+                        alg.setParameterAggregationFactor(para.getIntValue()); 
-+                        sendParameterChangeEvent("aggregationFactor", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "delay" :
-+                    try {
-+                        System.out.println("Received parameter changing signal delay");
-+                        alg.setParameterDelay(para.getIntValue()); 
-+                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "flag" :
-+                    try {
-+                        System.out.println("Received parameter changing signal flag");
-+                        alg.setParameterFlag(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "SwitchProcessor1":
-+                if (!algChange || !(alg instanceof SwitchProcessor1)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
-+                        alg = (ISwitchFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterAggregationFactor(0);
-+                    alg.setParameterDelay(0);
-+                    alg.setParameterFlag(true);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("SwitchProcessor1", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+            case "SwitchProcessor2":
-+                if (!algChange || !(alg instanceof SwitchProcessor2)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor2");
-+                        alg = (ISwitchFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterAggregationFactor(0);
-+                    alg.setParameterDelay(0);
-+                    alg.setParameterFlag(true);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("SwitchProcessor2", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("DataProcessorRandomData", new Fields("DataProcessorRandomDataFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/mapping.xml
-new file mode 100644
-index 0000000..7d68cc1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/mapping.xml
-@@ -0,0 +1,14 @@
-+<mapping>
-+  <pipeline name="RandomSubPipeline2" class="eu.qualimaster.RandomSubPipeline2.topology.Topology">
-+      <node name="dataProcessor2" type="family">
-+          <component name="RandomSubPipelineAlgorithm2DataProcessor2" container="RandomSubPipeline2" class="eu.qualimaster.RandomSubPipeline2.topology.SubPipelineVar_15_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SwitchProcessor1" alternative1 = "SwitchProcessor2"/>
-+      </node>
-+      <algorithm name="SwitchProcessor1" implName="SwitchProcessor1" class="eu.qualimaster.algorithms.SwitchProcessor1"/>
-+      <algorithm name="SwitchProcessor2" implName="SwitchProcessor2" class="eu.qualimaster.algorithms.SwitchProcessor2"/>
-+      <parameter parameter="aggregationFactor" name="dataProcessor2" receiver="RandomSubPipelineAlgorithm2DataProcessor2"/> 
-+      <parameter parameter="delay" name="dataProcessor2" receiver="RandomSubPipelineAlgorithm2DataProcessor2"/> 
-+      <parameter parameter="flag" name="dataProcessor2" receiver="RandomSubPipelineAlgorithm2DataProcessor2"/> 
-+      <parameter parameter="windowSize" name="dataProcessor2" receiver="RandomSubPipelineAlgorithm2DataProcessor2"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/pom.xml
-new file mode 100644
-index 0000000..9205336
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/pom.xml
-@@ -0,0 +1,265 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>RandomSubPipeline2</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+				<groupId>org.apache.maven.plugins</groupId>
-+				<artifactId>maven-assembly-plugin</artifactId>
-+				<version>2.6</version>
-+            	<dependencies>
-+	                    <dependency>
-+	                        <groupId>eu.qualimaster</groupId>
-+	                        <artifactId>AlgorithmAssemblies</artifactId>
-+	                        <version>0.5.0-SNAPSHOT</version>
-+	                    </dependency>
-+	                </dependencies>
-+					<executions>
-+					<execution>
-+						<id>make-assembly</id>
-+						<phase>package</phase>
-+						<goals>
-+							<goal>single</goal>
-+						</goals>
-+					<configuration>
-+					<descriptorRefs>
-+						<descriptorRef>jar-with-dependencies</descriptorRef>
-+					</descriptorRefs>
-+					<dependencySets>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>runtime</scope>
-+						</dependencySet>
-+						<dependencySet>
-+							<unpack>false</unpack>
-+							<scope>provided</scope>
-+						</dependencySet>
-+					</dependencySets>
-+					<archive>
-+						<manifest>
-+						</manifest>
-+					</archive>
-+				</configuration>
-+					</execution>
-+				<execution>
-+                        <id>make-profilingAssembly</id>
-+                        <phase>package</phase>
-+                        <goals>
-+                            <goal>single</goal>
-+                        </goals>
-+                        <configuration>
-+                            <descriptorRefs>
-+                                <descriptorRef>profiling</descriptorRef>
-+                            </descriptorRefs>
-+                        </configuration>
-+                    </execution>
-+				</executions>
-+						</plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+	<dependency>
-+          <groupId>eu.qualimaster</groupId>
-+          <artifactId>AlgorithmAssemblies</artifactId>
-+          <version>0.5.0-SNAPSHOT</version>
-+      </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>SwitchProcessor1</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>SwitchProcessor2</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/profiling/profile.ctl b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/profiling/profile.ctl
-new file mode 100644
-index 0000000..d5609a9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/profiling/profile.ctl
-@@ -0,0 +1 @@
-+import eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/RandomSubPipeline2SubTopology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/RandomSubPipeline2SubTopology.java
-new file mode 100644
-index 0000000..4dcbb5c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/RandomSubPipeline2SubTopology.java
-@@ -0,0 +1,112 @@
-+package eu.qualimaster.RandomSubPipeline2.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.Config;
-+import backtype.storm.topology.TopologyBuilder;
-+import eu.qualimaster.base.algorithm.ITopologyCreate;
-+import eu.qualimaster.base.algorithm.SubTopologyOutput;
-+import backtype.storm.topology.BoltDeclarer;
-+import eu.qualimaster.common.signal.ParameterChangeSignal;
-+import eu.qualimaster.common.signal.SignalException;
-+import eu.qualimaster.observables.IObservable;
-+import eu.qualimaster.families.inf.IRandomFamily;
-+
-+public class RandomSubPipeline2SubTopology implements IRandomFamily, ITopologyCreate {
-+    final static Logger logger = Logger.getLogger(RandomSubPipeline2SubTopology.class);
-+    private int delay;
-+    private boolean flag;
-+    private int windowSize;
-+    private transient State state;
-+
-+    public void switchState(State arg0) {
-+        this.state = arg0;	
-+    }
-+
-+    public Double getMeasurement(IObservable observable) {
-+        return null;
-+    }
-+
-+    public SubTopologyOutput createSubTopology(TopologyBuilder builder,
-+    			Config config, String prefix, String input, String streamId) {
-+        String namespace = "RandomSubPipeline2";
-+        if(config.containsKey(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME)) {
-+            namespace = (String)config.get(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME);
-+        }
-+        // Declare a Bolt "dataProcessor2"
-+
-+        BoltDeclarer SubPipelineVar_15_FamilyElement0 =builder.setBolt(prefix+"DataProcessor2", new SubPipelineVar_15_FamilyElement0FamilyElement(prefix+"DataProcessor2", namespace), 1);
-+        SubPipelineVar_15_FamilyElement0.shuffleGrouping(input, streamId);
-+        return new SubTopologyOutput(prefix+"DataProcessor2", "DataProcessor2RandomData", 1, 1); //TODO: consider PipelineOptions to change the parallelisms
-+    }
-+
-+    /**
-+     * Calculates the actual <code>result</code> for <code>input</code>.
-+     *
-+     * @param input the algorithm input taken from the input stream
-+     * @param result the result calculated by the algorithm
-+     */
-+    public void calculate(IIRandomFamilyRandomDataInput input, IIRandomFamilyRandomDataOutput randomDataResult) {
-+    }
-+
-+
-+    /**
-+     * Sets the algorithm parameter "delay". Note that the actual parameter change will be dynamically
-+     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
-+     * sub-topology.
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterDelay(int value) {
-+        this.delay = delay;
-+        try {
-+            logger.info("sending new Delay signal " + value + "!");
-+            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline2", 
-+                    "RandomSubPipeline2DataProcessor2", "delay", value, null);
-+            signal.sendSignal();
-+        } catch (Exception e) {
-+            logger.error("Signal not sent!");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "flag". Note that the actual parameter change will be dynamically
-+     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
-+     * sub-topology.
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterFlag(boolean value) {
-+        this.flag = flag;
-+        try {
-+            logger.info("sending new Flag signal " + value + "!");
-+            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline2", 
-+                    "RandomSubPipeline2DataProcessor2", "flag", value, null);
-+            signal.sendSignal();
-+        } catch (Exception e) {
-+            logger.error("Signal not sent!");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    /**
-+     * Sets the algorithm parameter "windowSize". Note that the actual parameter change will be dynamically
-+     * handled by the infrastructure via parameter mapping. This method is only for the purpose of testing the
-+     * sub-topology.
-+     *
-+     * @param value the new value of the algorithm parameter
-+     */
-+    public void setParameterWindowSize(int value) {
-+        this.windowSize = windowSize;
-+        try {
-+            logger.info("sending new WindowSize signal " + value + "!");
-+            ParameterChangeSignal signal = new ParameterChangeSignal("RandomSubPipeline2", 
-+                    "RandomSubPipeline2DataProcessor2", "windowSize", value, null);
-+            signal.sendSignal();
-+        } catch (Exception e) {
-+            logger.error("Signal not sent!");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/SubPipelineVar_15_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/SubPipelineVar_15_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..0674ea9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/RandomSubPipeline2/topology/SubPipelineVar_15_FamilyElement0FamilyElement.java
-@@ -0,0 +1,336 @@
-+package eu.qualimaster.RandomSubPipeline2.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.ISwitchFamily.*;
-+import eu.qualimaster.families.inf.IRandomFamily.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.SwitchProcessor1;
-+import eu.qualimaster.algorithms.SwitchProcessor2;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class SubPipelineVar_15_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(SubPipelineVar_15_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient SwitchFamily.ISwitchFamilyRandomDataOutput randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+    private transient ISwitchFamily alg = null; 
-+    transient IIRandomFamilyRandomDataInput iTupleRandomData = null;
-+    transient IISwitchFamilyRandomDataInput inputRandomData = null;
-+
-+    public SubPipelineVar_15_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+        IItemEmitter<IISwitchFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IISwitchFamilyRandomDataOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IISwitchFamilyRandomDataOutput item) {
-+                _collector.emit("DataProcessor2RandomData", new Values(item));
-+            }
-+        };
-+        randomDataResult.setEmitter(randomDataEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
-+                    alg = (ISwitchFamily) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterAggregationFactor(PipelineOptions.getExecutorIntArgument(map, getName(), "aggregationFactor", 0));
-+                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 0));
-+                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", true));
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("SwitchProcessor1", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "switchFamily"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIRandomFamilyRandomDataInput) {
-+        iTupleRandomData = (IIRandomFamilyRandomDataInput)tupleItem;
-+        inputRandomData = new SwitchFamily.ISwitchFamilyRandomDataInput();
-+        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
-+        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputRandomData, randomDataResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            randomDataResult.setRandomInteger(0);
-+            randomDataResult.setTimestamp(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IISwitchFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
-+            iterRandomData.reset();
-+            while (iterRandomData.hasNext()) {
-+                IISwitchFamilyRandomDataOutput out = iterRandomData.next();
-+                _collector.emit("DataProcessor2RandomData", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "aggregationFactor" :
-+                    try {
-+                        System.out.println("Received parameter changing signal aggregationFactor");
-+                        alg.setParameterAggregationFactor(para.getIntValue()); 
-+                        sendParameterChangeEvent("aggregationFactor", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "delay" :
-+                    try {
-+                        System.out.println("Received parameter changing signal delay");
-+                        alg.setParameterDelay(para.getIntValue()); 
-+                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "flag" :
-+                    try {
-+                        System.out.println("Received parameter changing signal flag");
-+                        alg.setParameterFlag(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "SwitchProcessor1":
-+                if (!algChange || !(alg instanceof SwitchProcessor1)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
-+                        alg = (ISwitchFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterAggregationFactor(0);
-+                    alg.setParameterDelay(0);
-+                    alg.setParameterFlag(true);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("SwitchProcessor1", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+            case "SwitchProcessor2":
-+                if (!algChange || !(alg instanceof SwitchProcessor2)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor2");
-+                        alg = (ISwitchFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterAggregationFactor(0);
-+                    alg.setParameterDelay(0);
-+                    alg.setParameterFlag(true);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("SwitchProcessor2", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("DataProcessor2RandomData", new Fields("DataProcessor2RandomDataFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/mapping.xml
-new file mode 100644
-index 0000000..eee90bc
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/mapping.xml
-@@ -0,0 +1,22 @@
-+<mapping>
-+  <pipeline name="ReflectiveRandomPip" class="eu.qualimaster.ReflectiveRandomPip.topology.Topology">
-+      <node name="src" type="source">
-+          <component name="PipelineVar_14_Source0" container="ReflectiveRandomPip" class="eu.qualimaster.ReflectiveRandomPip.topology.PipelineVar_14_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="processor" type="family">
-+          <component name="PipelineVar_14_FamilyElement0" container="ReflectiveRandomPip" class="eu.qualimaster.ReflectiveRandomPip.topology.PipelineVar_14_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "RandomProcessor1" alternative1 = "RandomProcessor2"/>
-+      </node>
-+      <node name="snk" type="sink">
-+          <component name="PipelineVar_14_Sink0" container="ReflectiveRandomPip" class="eu.qualimaster.ReflectiveRandomPip.topology.PipelineVar_14_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="RandomProcessor1" implName="RandomProcessor1" class="eu.qualimaster.algorithms.RandomProcessor1"/>
-+      <algorithm name="RandomProcessor2" implName="RandomProcessor2" class="eu.qualimaster.algorithms.RandomProcessor2"/>
-+      <algorithm name="Random Source" implName="RandomSourceAlg" class="eu.qualimaster.algorithms.RandomSourceAlg"/>
-+      <algorithm name="Random Sink" implName="RandomSinkAlg" class="eu.qualimaster.algorithms.RandomSinkAlg"/>
-+      <parameter parameter="delay" name="src" receiver="PipelineVar_14_Source0"/> 
-+      <parameter parameter="delay" name="processor" receiver="PipelineVar_14_FamilyElement0"/> 
-+      <parameter parameter="flag" name="processor" receiver="PipelineVar_14_FamilyElement0"/> 
-+      <parameter parameter="windowSize" name="processor" receiver="PipelineVar_14_FamilyElement0"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/pom.xml
-new file mode 100644
-index 0000000..ef86ed3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/pom.xml
-@@ -0,0 +1,260 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>ReflectiveRandomPip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomSourceAlg</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomProcessor1</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomProcessor2</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomSinkAlg</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/settings.xml
-new file mode 100644
-index 0000000..19d3649
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/settings.xml
-@@ -0,0 +1,115 @@
-+<pipeline>
-+    <name>ReflectiveRandomPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changedelay</name>
-+			<request>
-+				<field sequence="0">changedelay</field>
-+				<field sequence="1">%newDelay%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changedelay_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newDelay%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changeflag</name>
-+			<request>
-+				<field sequence="0">changeflag</field>
-+				<field sequence="1">%newFlag%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changeflag_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newFlag%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changedelay</name>
-+			<request>
-+				<field sequence="0">changedelay</field>
-+				<field sequence="1">%newDelay%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changedelay_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newDelay%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..2abba14
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_FamilyElement0FamilyElement.java
-@@ -0,0 +1,337 @@
-+package eu.qualimaster.ReflectiveRandomPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IRandomFamily.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.RandomProcessor1;
-+import eu.qualimaster.algorithms.RandomProcessor2;
-+import eu.qualimaster.data.inf.IRandomSource.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_14_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_14_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_14_FamilyElement0RandomProcessor1";
-+    private transient RandomFamily.IRandomFamilyRandomDataOutput randomDataResult = new RandomFamily.IRandomFamilyRandomDataOutput();
-+    private transient IRandomFamily alg = null; 
-+    transient IRandomSourceRandomDataOutput iTupleRandomData = null;
-+    transient IIRandomFamilyRandomDataInput inputRandomData = null;
-+
-+    public PipelineVar_14_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        randomDataResult = new RandomFamily.IRandomFamilyRandomDataOutput();
-+        IItemEmitter<IIRandomFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IIRandomFamilyRandomDataOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIRandomFamilyRandomDataOutput item) {
-+                _collector.emit("PipelineVar_14_FamilyElement0RandomData", new Values(item));
-+            }
-+        };
-+        randomDataResult.setEmitter(randomDataEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor1");
-+                    alg = (IRandomFamily) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 5));
-+                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", false));
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("RandomProcessor1", null);
-+            streamId = "PipelineVar_14_FamilyElement0RandomProcessor1";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "randomFamily"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IRandomSourceRandomDataOutput) {
-+        iTupleRandomData = (IRandomSourceRandomDataOutput)tupleItem;
-+        inputRandomData = new RandomFamily.IRandomFamilyRandomDataInput();
-+        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
-+        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputRandomData, randomDataResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            randomDataResult.setRandomInteger(0);
-+            randomDataResult.setTimestamp(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+        if(alg instanceof ITopologyCreate) {
-+            _collector.emit(streamId, new Values(inputRandomData));
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIRandomFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
-+            iterRandomData.reset();
-+            while (iterRandomData.hasNext()) {
-+                IIRandomFamilyRandomDataOutput out = iterRandomData.next();
-+                _collector.emit("PipelineVar_14_FamilyElement0RandomData", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "delay" :
-+                    try {
-+                        System.out.println("Received parameter changing signal delay");
-+                        alg.setParameterDelay(para.getIntValue()); 
-+                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "flag" :
-+                    try {
-+                        System.out.println("Received parameter changing signal flag");
-+                        alg.setParameterFlag(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "RandomProcessor1":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof RandomProcessor1)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor1");
-+                        alg = (IRandomFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_14_FamilyElement0RandomProcessor1";
-+                    alg.setParameterDelay(5);
-+                    alg.setParameterFlag(false);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("RandomProcessor1", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "RandomProcessor2":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof RandomProcessor2)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.RandomProcessor2");
-+                        alg = (IRandomFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_14_FamilyElement0RandomProcessor2";
-+                    alg.setParameterDelay(0);
-+                    alg.setParameterFlag(false);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("RandomProcessor2", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_14_FamilyElement0RandomData", new Fields("PipelineVar_14_FamilyElement0RandomDataFields"));
-+        declarer.declareStream("PipelineVar_14_FamilyElement0RandomProcessor1", new Fields("PipelineVar_14_FamilyElement0RandomProcessor1Fields"));
-+        declarer.declareStream("PipelineVar_14_FamilyElement0RandomProcessor2", new Fields("PipelineVar_14_FamilyElement0RandomProcessor2Fields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Sink0Sink.java
-new file mode 100644
-index 0000000..aedf477
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Sink0Sink.java
-@@ -0,0 +1,133 @@
-+package eu.qualimaster.ReflectiveRandomPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IRandomSink;
-+import eu.qualimaster.data.inf.IRandomSink.*;
-+import eu.qualimaster.data.imp.RandomSink;
-+import eu.qualimaster.data.imp.RandomSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IRandomFamily.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_14_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_14_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient IRandomSink sinkHandler;
-+private int counter = 0;
-+    transient IIRandomFamilyRandomDataOutput iTupleRandomData = null;
-+    transient IRandomSinkRandomDataInput inputRandomData = null;
-+
-+	public PipelineVar_14_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+    if(tupleItem instanceof IIRandomFamilyRandomDataOutput) {
-+        iTupleRandomData = (IIRandomFamilyRandomDataOutput)tupleItem;
-+        inputRandomData = new RandomSink.RandomSinkRandomDataInput();
-+        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
-+        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
-+        sinkHandler.postDataRandomData(inputRandomData);
-+        emitted(inputRandomData);
-+    }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new RandomSink.RandomSinkRandomDataInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IRandomSink> cls = (Class<? extends IRandomSink>)Class.forName("eu.qualimaster.algorithms.RandomSinkAlg");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("RandomSinkAlg", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_14_Sink0RandomData", new Fields("PipelineVar_14_Sink0RandomDataFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Source0Source.java
-new file mode 100644
-index 0000000..c943c31
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/PipelineVar_14_Source0Source.java
-@@ -0,0 +1,192 @@
-+package eu.qualimaster.ReflectiveRandomPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.IRandomSource;
-+import eu.qualimaster.data.inf.IRandomSource.*;
-+import eu.qualimaster.data.imp.RandomSource;
-+import eu.qualimaster.algorithms.RandomSourceAlg;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_14_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_14_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient IRandomSource sourceData;
-+
-+    public PipelineVar_14_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("ReflectiveRandomPip", "PipelineVar_14_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IRandomSourceRandomDataOutput>(IRandomSourceRandomDataOutput.class) {
-+            @Override
-+            public String getAggregationKey(IRandomSourceRandomDataOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IRandomSource> cls = (Class<? extends IRandomSource>) Class.forName("eu.qualimaster.algorithms.RandomSourceAlg");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("RandomSourceAlg", null);
-+            sourceData.setParameterDelay(PipelineOptions.getExecutorIntArgument(conf, getName(), "delay", 0));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("ReflectiveRandomPip", "PipelineVar_14_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_14_Source0StreamRandomData".
-+        IRandomSourceRandomDataOutput dataItemRandomData = new RandomSource.RandomSourceRandomDataOutput();
-+        try {
-+            dataItemRandomData = sourceData.getRandomData();
-+        } catch(DefaultModeException e) {
-+            dataItemRandomData.setRandomInteger(0);
-+            dataItemRandomData.setTimestamp(0);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemRandomData!=null){
-+            _collector.emit("PipelineVar_14_Source0RandomData", new Values(dataItemRandomData));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "delay" :
-+                    try {
-+                        logger.info("Received the parameter delay!");
-+                        sourceData.setParameterDelay(para.getIntValue()); 
-+                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_14_Source0RandomData", new Fields("PipelineVar_14_Source0RandomDataFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/Topology.java
-new file mode 100644
-index 0000000..715bcf6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReflectiveRandomPip/topology/Topology.java
-@@ -0,0 +1,122 @@
-+package eu.qualimaster.ReflectiveRandomPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.RandomProcessor1;
-+import eu.qualimaster.algorithms.RandomProcessor2;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "ReflectiveRandomPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 1; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "src"
-+
-+            builder.setSpout("PipelineVar_14_Source0", new PipelineVar_14_Source0Source("PipelineVar_14_Source0", "ReflectiveRandomPip"), 1);
-+            // Declare a Bolt "processor"
-+
-+            BoltDeclarer PipelineVar_14_FamilyElement0=builder.setBolt("PipelineVar_14_FamilyElement0", new PipelineVar_14_FamilyElement0FamilyElement("PipelineVar_14_FamilyElement0", "ReflectiveRandomPip"), 1);
-+            PipelineVar_14_FamilyElement0.shuffleGrouping("PipelineVar_14_Source0", "PipelineVar_14_Source0RandomData");
-+            //generate the Storm-based algorithm topology name:RandomProcessor1
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("RandomProcessor1"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("RandomProcessor1"), 1);
-+            }
-+            builder.startRecording("RandomProcessor1");
-+            ITopologyCreate PipelineVar_14_FamilyElement01SubCreator = new RandomProcessor1();
-+            SubTopologyOutput PipelineVar_14_FamilyElement01SubOutput = PipelineVar_14_FamilyElement01SubCreator.createSubTopology(builder,config,"RandomProcessor1", "PipelineVar_14_FamilyElement0", "PipelineVar_14_FamilyElement0RandomProcessor1");
-+            builder.endRecording(PipelineVar_14_FamilyElement01SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_14_FamilyElement01SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_14_FamilyElement01SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:RandomProcessor2
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("RandomProcessor2"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("RandomProcessor2"), 1);
-+            }
-+            builder.startRecording("RandomProcessor2");
-+            ITopologyCreate PipelineVar_14_FamilyElement02SubCreator = new RandomProcessor2();
-+            SubTopologyOutput PipelineVar_14_FamilyElement02SubOutput = PipelineVar_14_FamilyElement02SubCreator.createSubTopology(builder,config,"RandomProcessor2", "PipelineVar_14_FamilyElement0", "PipelineVar_14_FamilyElement0RandomProcessor2");
-+            builder.endRecording(PipelineVar_14_FamilyElement02SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_14_FamilyElement02SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_14_FamilyElement02SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "snk"
-+
-+            BoltDeclarer PipelineVar_14_Sink0=builder.setBolt("PipelineVar_14_Sink0", new PipelineVar_14_Sink0Sink("PipelineVar_14_Sink0", "ReflectiveRandomPip"), 1);
-+            PipelineVar_14_Sink0.shuffleGrouping(PipelineVar_14_FamilyElement01SubOutput.getBoltName(), PipelineVar_14_FamilyElement01SubOutput.getStreamId());
-+            PipelineVar_14_Sink0.shuffleGrouping(PipelineVar_14_FamilyElement02SubOutput.getBoltName(), PipelineVar_14_FamilyElement02SubOutput.getStreamId());
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/mapping.xml
-new file mode 100644
-index 0000000..61a8eaf
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/mapping.xml
-@@ -0,0 +1,48 @@
-+<mapping>
-+  <pipeline name="ReplayPip" class="eu.qualimaster.ReplayPip.topology.Topology">
-+      <node name="FinancialDataSource" type="source">
-+          <component name="PipelineVar_9_Source0" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="Preprocessor" type="family">
-+          <component name="PipelineVar_9_FamilyElement0" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
-+      </node>
-+      <node name="FinancialCorrelation" type="family">
-+          <component name="PipelineVar_9_FamilyElement1" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
-+      </node>
-+      <node name="ReplaySink" type="replaySink">
-+          <component name="PipelineVar_9_ReplaySink0" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_ReplaySink0ReplaySink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="Sink" type="sink">
-+          <component name="PipelineVar_9_Sink1" container="ReplayPip" class="eu.qualimaster.ReplayPip.topology.PipelineVar_9_Sink1Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
-+      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
-+      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
-+              <component name="CorrelationSWMapper" container="ReplayPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWHayashiYoshida" container="ReplayPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
-+          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
-+          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
-+              <component name="CorrelationSWAlternativeMP" container="ReplayPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWAlternativeHY" container="ReplayPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="Spring Financial Data" implName="SpringClient" class="eu.qualimaster.algorithms.imp.correlation.SpringClient"/>
-+      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
-+      <algorithm name="Priority Data Sink" implName="PriorityDataSinkForFinancialAndTwitter" class="eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter"/>
-+      <parameter parameter="windowSize" name="FinancialCorrelation" receiver="PipelineVar_9_FamilyElement1"/> 
-+      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
-+      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/pom.xml
-new file mode 100644
-index 0000000..20339bd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/pom.xml
-@@ -0,0 +1,285 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>ReplayPip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>spring-client</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-preprocessor</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-correlation-financial-software</artifactId>
-+      <version>3.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSW</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TransferEntropyHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>MutualInformationHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSWAlternative</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-priority-data-sink</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/settings.xml
-new file mode 100644
-index 0000000..cf267ed
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/settings.xml
-@@ -0,0 +1,76 @@
-+<pipeline>
-+    <name>ReplayPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..500116e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement0FamilyElement.java
-@@ -0,0 +1,250 @@
-+package eu.qualimaster.ReplayPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_9_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_9_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+    private transient IFPreprocessor alg = null; 
-+    transient ISpringFinancialDataSpringStreamOutput iTupleSpringStream = null;
-+    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
-+
-+    public PipelineVar_9_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
-+                _collector.emit("PipelineVar_9_FamilyElement0PreprocessedStream", new Values(item));
-+            }
-+        };
-+        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                    alg = (IFPreprocessor) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Preprocessor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fPreprocessor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof ISpringFinancialDataSpringStreamOutput) {
-+        iTupleSpringStream = (ISpringFinancialDataSpringStreamOutput)tupleItem;
-+        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputSpringStream, preprocessedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            preprocessedStreamResult.setSymbolId("");
-+            preprocessedStreamResult.setTimestamp(0);
-+            preprocessedStreamResult.setValue(0.0);
-+            preprocessedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
-+            iterPreprocessedStream.reset();
-+            while (iterPreprocessedStream.hasNext()) {
-+                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
-+                _collector.emit("PipelineVar_9_FamilyElement0PreprocessedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Preprocessor":
-+                if (!algChange || !(alg instanceof Preprocessor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                        alg = (IFPreprocessor) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_9_FamilyElement0PreprocessedStream", new Fields("PipelineVar_9_FamilyElement0PreprocessedStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..7b4e9e8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_FamilyElement1FamilyElement.java
-@@ -0,0 +1,544 @@
-+package eu.qualimaster.ReplayPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.common.hardware.*;
-+import com.google.protobuf.ByteString;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_9_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_9_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial";
-+    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+    private transient IFCorrelationFinancial alg = null; 
-+    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
-+    transient ISpringFinancialDataSymbolListOutput iTupleSymbolList = null;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+
-+    public PipelineVar_9_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
-+                _collector.emit("PipelineVar_9_FamilyElement1PairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                    alg = (IFCorrelationFinancial) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
-+            streamId = "PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fCorrelationFinancial"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
-+            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
-+            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputPreprocessedStream));
-+            }
-+        }
-+
-+        if(tupleItem instanceof ISpringFinancialDataSymbolListOutput) {
-+            iTupleSymbolList = (ISpringFinancialDataSymbolListOutput)tupleItem;
-+            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputSymbolList));
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("PipelineVar_9_FamilyElement1PairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TopoSoftwareCorrelationFinancial":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "GenTopoHardwareCorrelationFinancial":
-+            case "GenTopoHardwareCorrelationFinancialSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("ReplayPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("ReplayPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_9_FamilyElement1GenTopoHardwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSW":
-+            case "CorrelationSWSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_9_FamilyElement1CorrelationSW";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "TransferEntropyHardware":
-+            case "TransferEntropyHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("ReplayPip",
-+                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("ReplayPip",
-+                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_9_FamilyElement1TransferEntropyHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "MutualInformationHardware":
-+            case "MutualInformationHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("ReplayPip",
-+                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("ReplayPip",
-+                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_9_FamilyElement1MutualInformationHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSWAlternative":
-+            case "CorrelationSWAlternativeSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_9_FamilyElement1CorrelationSWAlternative";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_9_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_9_FamilyElement1PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_9_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_9_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_9_FamilyElement1CorrelationSW", new Fields("PipelineVar_9_FamilyElement1CorrelationSWFields"));
-+        declarer.declareStream("PipelineVar_9_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_9_FamilyElement1TransferEntropyHardwareFields"));
-+        declarer.declareStream("PipelineVar_9_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_9_FamilyElement1MutualInformationHardwareFields"));
-+        declarer.declareStream("PipelineVar_9_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_9_FamilyElement1CorrelationSWAlternativeFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_ReplaySink0ReplaySink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_ReplaySink0ReplaySink.java
-new file mode 100644
-index 0000000..20bb7e0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_ReplaySink0ReplaySink.java
-@@ -0,0 +1,171 @@
-+package eu.qualimaster.ReplayPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IPriorityDataSink;
-+import eu.qualimaster.data.inf.IPriorityDataSink.*;
-+import eu.qualimaster.data.imp.PriorityDataSink;
-+import eu.qualimaster.data.imp.PriorityDataSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_9_ReplaySink0ReplaySink extends AbstractReplaySink {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_9_ReplaySink0ReplaySink.class);
-+    transient OutputCollector _collector;
-+    transient IPriorityDataSink sinkHandler;
-+private int counter = 0;
-+    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
-+    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
-+
-+	public PipelineVar_9_ReplaySink0ReplaySink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    public class IPriorityDataSinkPairwiseFinancialInputEmitter<IPriorityDataSinkPairwiseFinancialInput> implements AbstractReplaySink.ITupleEmitter<IPriorityDataSinkPairwiseFinancialInput> {
-+        @Override
-+        public void emit(int ticket, IPriorityDataSinkPairwiseFinancialInput tuple) {
-+            //call from sink implementation
-+            sinkHandler.emit(ticket, (IPriorityDataSink.IPriorityDataSinkPairwiseFinancialInput)tuple);
-+        }
-+    }
-+    public class IPriorityDataSinkAnalyzedStreamInputEmitter<IPriorityDataSinkAnalyzedStreamInput> implements AbstractReplaySink.ITupleEmitter<IPriorityDataSinkAnalyzedStreamInput> {
-+        @Override
-+        public void emit(int ticket, IPriorityDataSinkAnalyzedStreamInput tuple) {
-+            //call from sink implementation
-+            sinkHandler.emit(ticket, (IPriorityDataSink.IPriorityDataSinkAnalyzedStreamInput)tuple);
-+        }
-+    }
-+    @Override
-+    protected void registerHandlers(Map conf, TopologyContext context) {
-+        eu.qualimaster.dataManagement.common.replay.Tuple schema;
-+        schema = new eu.qualimaster.dataManagement.common.replay.Tuple("pairwiseFinancial");
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("id0", String.class, true, false));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("id1", String.class, true, false));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("date", String.class, false, true));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("value", double.class, false, false));
-+        addTupleHandler(PriorityDataSinkPairwiseFinancialInput.class, schema, "output/prior", NoStorageStrategyDescriptor.INSTANCE, new IPriorityDataSinkPairwiseFinancialInputEmitter());
-+        schema = new eu.qualimaster.dataManagement.common.replay.Tuple("analyzedStream");
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("symbolId", String.class, false, false));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("timestamp", long.class, false, false));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("value", double.class, false, false));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("volume", int.class, false, false));
-+        addTupleHandler(PriorityDataSinkAnalyzedStreamInput.class, schema, "output/prior", NoStorageStrategyDescriptor.INSTANCE, new IPriorityDataSinkAnalyzedStreamInputEmitter());
-+}
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
-+            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
-+            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+            store(inputPairwiseFinancial);
-+            emitted(inputPairwiseFinancial);
-+        }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_9_ReplaySink0PairwiseFinancial", new Fields("PipelineVar_9_ReplaySink0PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_9_ReplaySink0AnalyzedStream", new Fields("PipelineVar_9_ReplaySink0AnalyzedStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Sink1Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Sink1Sink.java
-new file mode 100644
-index 0000000..323fae9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Sink1Sink.java
-@@ -0,0 +1,140 @@
-+package eu.qualimaster.ReplayPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IPriorityDataSink;
-+import eu.qualimaster.data.inf.IPriorityDataSink.*;
-+import eu.qualimaster.data.imp.PriorityDataSink;
-+import eu.qualimaster.data.imp.PriorityDataSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_9_Sink1Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_9_Sink1Sink.class);
-+    transient OutputCollector _collector;
-+    transient IPriorityDataSink sinkHandler;
-+private int counter = 0;
-+    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient IPriorityDataSinkPairwiseFinancialInput inputPairwiseFinancial = null;
-+    transient IPriorityDataSinkAnalyzedStreamInput inputAnalyzedStream = null;
-+
-+	public PipelineVar_9_Sink1Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+        if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
-+            iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
-+            inputPairwiseFinancial = new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+            inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+            inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+            inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+            inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+            sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
-+            emitted(inputPairwiseFinancial);
-+        }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new PriorityDataSink.PriorityDataSinkPairwiseFinancialInput();
-+        new PriorityDataSink.PriorityDataSinkAnalyzedStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IPriorityDataSink> cls = (Class<? extends IPriorityDataSink>)Class.forName("eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("PriorityDataSinkForFinancialAndTwitter", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_9_Sink1PairwiseFinancial", new Fields("PipelineVar_9_Sink1PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_9_Sink1AnalyzedStream", new Fields("PipelineVar_9_Sink1AnalyzedStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Source0Source.java
-new file mode 100644
-index 0000000..4f4e42a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/PipelineVar_9_Source0Source.java
-@@ -0,0 +1,200 @@
-+package eu.qualimaster.ReplayPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ISpringFinancialData;
-+import eu.qualimaster.data.inf.ISpringFinancialData.*;
-+import eu.qualimaster.data.imp.SpringFinancialData;
-+import eu.qualimaster.algorithms.imp.correlation.SpringClient;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_9_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_9_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ISpringFinancialData sourceData;
-+
-+    public PipelineVar_9_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("ReplayPip", "PipelineVar_9_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSymbolListOutput>(ISpringFinancialDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISpringFinancialDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISpringFinancialDataSpringStreamOutput>(ISpringFinancialDataSpringStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISpringFinancialDataSpringStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ISpringFinancialData> cls = (Class<? extends ISpringFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClient");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("SpringClient", null);
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("ReplayPip", "PipelineVar_9_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_9_Source0StreamSymbolList".
-+        ISpringFinancialDataSymbolListOutput dataItemSymbolList = new SpringFinancialData.SpringFinancialDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PipelineVar_9_Source0SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PipelineVar_9_Source0SpringStream".
-+        ISpringFinancialDataSpringStreamOutput dataItemSpringStream = new SpringFinancialData.SpringFinancialDataSpringStreamOutput();
-+        try {
-+            dataItemSpringStream = sourceData.getSpringStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSpringStream.setSymbolTuple("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSpringStream!=null){
-+            _collector.emit("PipelineVar_9_Source0SpringStream", new Values(dataItemSpringStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_9_Source0SymbolList", new Fields("PipelineVar_9_Source0SymbolListFields"));
-+        declarer.declareStream("PipelineVar_9_Source0SpringStream", new Fields("PipelineVar_9_Source0SpringStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/Topology.java
-new file mode 100644
-index 0000000..b0c84e4
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/ReplayPip/topology/Topology.java
-@@ -0,0 +1,160 @@
-+package eu.qualimaster.ReplayPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "ReplayPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 1; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "FinancialDataSource"
-+
-+            builder.setSpout("PipelineVar_9_Source0", new PipelineVar_9_Source0Source("PipelineVar_9_Source0", "ReplayPip"), 1);
-+            // Declare a Bolt "Preprocessor"
-+
-+            BoltDeclarer PipelineVar_9_FamilyElement0=builder.setBolt("PipelineVar_9_FamilyElement0", new PipelineVar_9_FamilyElement0FamilyElement("PipelineVar_9_FamilyElement0", "ReplayPip"), 1);
-+            PipelineVar_9_FamilyElement0.shuffleGrouping("PipelineVar_9_Source0", "PipelineVar_9_Source0SpringStream");
-+            // Declare a Bolt "FinancialCorrelation"
-+
-+            BoltDeclarer PipelineVar_9_FamilyElement1=builder.setBolt("PipelineVar_9_FamilyElement1", new PipelineVar_9_FamilyElement1FamilyElement("PipelineVar_9_FamilyElement1", "ReplayPip"), 1);
-+            PipelineVar_9_FamilyElement1.shuffleGrouping("PipelineVar_9_FamilyElement0", "PipelineVar_9_FamilyElement0PreprocessedStream");
-+            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
-+            }
-+            builder.startRecording("TopoSoftwareCorrelationFinancial");
-+            ITopologyCreate PipelineVar_9_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
-+            SubTopologyOutput PipelineVar_9_FamilyElement11SubOutput = PipelineVar_9_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1TopoSoftwareCorrelationFinancial");
-+            builder.endRecording(PipelineVar_9_FamilyElement11SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement11SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement11SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
-+            ITopologyCreate PipelineVar_9_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
-+            SubTopologyOutput PipelineVar_9_FamilyElement12SubOutput = PipelineVar_9_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1GenTopoHardwareCorrelationFinancial");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement12SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement12SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
-+            ITopologyCreate PipelineVar_9_FamilyElement13SubCreator = new CorrelationSWSubTopology();
-+            SubTopologyOutput PipelineVar_9_FamilyElement13SubOutput = PipelineVar_9_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1CorrelationSW");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement13SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement13SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
-+            ITopologyCreate PipelineVar_9_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_9_FamilyElement14SubOutput = PipelineVar_9_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1TransferEntropyHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement14SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement14SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
-+            ITopologyCreate PipelineVar_9_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_9_FamilyElement15SubOutput = PipelineVar_9_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1MutualInformationHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement15SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement15SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
-+            ITopologyCreate PipelineVar_9_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
-+            SubTopologyOutput PipelineVar_9_FamilyElement16SubOutput = PipelineVar_9_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_9_FamilyElement1", "PipelineVar_9_FamilyElement1CorrelationSWAlternative");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_9_FamilyElement16SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_9_FamilyElement16SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "ReplaySink"
-+
-+            BoltDeclarer PipelineVar_9_ReplaySink0=builder.setBolt("PipelineVar_9_ReplaySink0", new PipelineVar_9_ReplaySink0ReplaySink("PipelineVar_9_ReplaySink0", "ReplayPip"), 1);
-+            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement11SubOutput.getBoltName(), PipelineVar_9_FamilyElement11SubOutput.getStreamId());
-+            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement12SubOutput.getBoltName(), PipelineVar_9_FamilyElement12SubOutput.getStreamId());
-+            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement13SubOutput.getBoltName(), PipelineVar_9_FamilyElement13SubOutput.getStreamId());
-+            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement14SubOutput.getBoltName(), PipelineVar_9_FamilyElement14SubOutput.getStreamId());
-+            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement15SubOutput.getBoltName(), PipelineVar_9_FamilyElement15SubOutput.getStreamId());
-+            PipelineVar_9_ReplaySink0.shuffleGrouping(PipelineVar_9_FamilyElement16SubOutput.getBoltName(), PipelineVar_9_FamilyElement16SubOutput.getStreamId());
-+            // Declare a Bolt "Sink"
-+
-+            BoltDeclarer PipelineVar_9_Sink1=builder.setBolt("PipelineVar_9_Sink1", new PipelineVar_9_Sink1Sink("PipelineVar_9_Sink1", "ReplayPip"), 1);
-+            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement11SubOutput.getBoltName(), PipelineVar_9_FamilyElement11SubOutput.getStreamId());
-+            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement12SubOutput.getBoltName(), PipelineVar_9_FamilyElement12SubOutput.getStreamId());
-+            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement13SubOutput.getBoltName(), PipelineVar_9_FamilyElement13SubOutput.getStreamId());
-+            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement14SubOutput.getBoltName(), PipelineVar_9_FamilyElement14SubOutput.getStreamId());
-+            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement15SubOutput.getBoltName(), PipelineVar_9_FamilyElement15SubOutput.getStreamId());
-+            PipelineVar_9_Sink1.shuffleGrouping(PipelineVar_9_FamilyElement16SubOutput.getBoltName(), PipelineVar_9_FamilyElement16SubOutput.getStreamId());
-+            PipelineVar_9_FamilyElement1.shuffleGrouping("PipelineVar_9_Source0", "PipelineVar_9_Source0SymbolList");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/mapping.xml
-new file mode 100644
-index 0000000..fb4ca52
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/mapping.xml
-@@ -0,0 +1,23 @@
-+<mapping>
-+  <pipeline name="SwitchPip" class="eu.qualimaster.SwitchPip.topology.Topology">
-+      <node name="src" type="source">
-+          <component name="PipelineVar_2_Source0" container="SwitchPip" class="eu.qualimaster.SwitchPip.topology.PipelineVar_2_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="processor" type="family">
-+          <component name="PipelineVar_2_FamilyElement0" container="SwitchPip" class="eu.qualimaster.SwitchPip.topology.PipelineVar_2_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "SwitchProcessor1" alternative1 = "SwitchProcessor2"/>
-+      </node>
-+      <node name="snk" type="sink">
-+          <component name="PipelineVar_2_Sink0" container="SwitchPip" class="eu.qualimaster.SwitchPip.topology.PipelineVar_2_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="SwitchProcessor1" implName="SwitchProcessor1" class="eu.qualimaster.algorithms.SwitchProcessor1"/>
-+      <algorithm name="SwitchProcessor2" implName="SwitchProcessor2" class="eu.qualimaster.algorithms.SwitchProcessor2"/>
-+      <algorithm name="Random Source" implName="RandomSourceAlg" class="eu.qualimaster.algorithms.RandomSourceAlg"/>
-+      <algorithm name="Random Sink" implName="RandomSinkAlg" class="eu.qualimaster.algorithms.RandomSinkAlg"/>
-+      <parameter parameter="delay" name="src" receiver="PipelineVar_2_Source0"/> 
-+      <parameter parameter="aggregationFactor" name="processor" receiver="PipelineVar_2_FamilyElement0"/> 
-+      <parameter parameter="delay" name="processor" receiver="PipelineVar_2_FamilyElement0"/> 
-+      <parameter parameter="flag" name="processor" receiver="PipelineVar_2_FamilyElement0"/> 
-+      <parameter parameter="windowSize" name="processor" receiver="PipelineVar_2_FamilyElement0"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/pom.xml
-new file mode 100644
-index 0000000..2326046
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/pom.xml
-@@ -0,0 +1,260 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster.test</groupId>
-+  <artifactId>SwitchPip</artifactId>
-+  <version>0.0.2-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomSourceAlg</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>SwitchProcessor1</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>SwitchProcessor2</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster.test</groupId>
-+      <artifactId>RandomSinkAlg</artifactId>
-+      <version>0.0.2-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/settings.xml
-new file mode 100644
-index 0000000..e98f352
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/settings.xml
-@@ -0,0 +1,63 @@
-+<pipeline>
-+    <name>SwitchPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..3e0d743
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_FamilyElement0FamilyElement.java
-@@ -0,0 +1,336 @@
-+package eu.qualimaster.SwitchPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.ISwitchFamily.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.SwitchProcessor1;
-+import eu.qualimaster.algorithms.SwitchProcessor2;
-+import eu.qualimaster.data.inf.IRandomSource.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_2_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_2_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient SwitchFamily.ISwitchFamilyRandomDataOutput randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+    private transient ISwitchFamily alg = null; 
-+    transient IRandomSourceRandomDataOutput iTupleRandomData = null;
-+    transient IISwitchFamilyRandomDataInput inputRandomData = null;
-+
-+    public PipelineVar_2_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        randomDataResult = new SwitchFamily.ISwitchFamilyRandomDataOutput();
-+        IItemEmitter<IISwitchFamilyRandomDataOutput> randomDataEmitter = new IItemEmitter<IISwitchFamilyRandomDataOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IISwitchFamilyRandomDataOutput item) {
-+                _collector.emit("PipelineVar_2_FamilyElement0RandomData", new Values(item));
-+            }
-+        };
-+        randomDataResult.setEmitter(randomDataEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
-+                    alg = (ISwitchFamily) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterAggregationFactor(PipelineOptions.getExecutorIntArgument(map, getName(), "aggregationFactor", 0));
-+                alg.setParameterDelay(PipelineOptions.getExecutorIntArgument(map, getName(), "delay", 0));
-+                alg.setParameterFlag(PipelineOptions.getExecutorBooleanArgument(map, getName(), "flag", true));
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 10));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("SwitchProcessor1", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "switchFamily"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IRandomSourceRandomDataOutput) {
-+        iTupleRandomData = (IRandomSourceRandomDataOutput)tupleItem;
-+        inputRandomData = new SwitchFamily.ISwitchFamilyRandomDataInput();
-+        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
-+        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputRandomData, randomDataResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            randomDataResult.setRandomInteger(0);
-+            randomDataResult.setTimestamp(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IISwitchFamilyRandomDataOutput> iterRandomData = randomDataResult.iterator();
-+            iterRandomData.reset();
-+            while (iterRandomData.hasNext()) {
-+                IISwitchFamilyRandomDataOutput out = iterRandomData.next();
-+                _collector.emit("PipelineVar_2_FamilyElement0RandomData", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "aggregationFactor" :
-+                    try {
-+                        System.out.println("Received parameter changing signal aggregationFactor");
-+                        alg.setParameterAggregationFactor(para.getIntValue()); 
-+                        sendParameterChangeEvent("aggregationFactor", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "delay" :
-+                    try {
-+                        System.out.println("Received parameter changing signal delay");
-+                        alg.setParameterDelay(para.getIntValue()); 
-+                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "flag" :
-+                    try {
-+                        System.out.println("Received parameter changing signal flag");
-+                        alg.setParameterFlag(para.getBooleanValue()); 
-+                        sendParameterChangeEvent("flag", para.getBooleanValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "SwitchProcessor1":
-+                if (!algChange || !(alg instanceof SwitchProcessor1)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor1");
-+                        alg = (ISwitchFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterAggregationFactor(0);
-+                    alg.setParameterDelay(0);
-+                    alg.setParameterFlag(true);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("SwitchProcessor1", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+            case "SwitchProcessor2":
-+                if (!algChange || !(alg instanceof SwitchProcessor2)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.SwitchProcessor2");
-+                        alg = (ISwitchFamily) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterAggregationFactor(0);
-+                    alg.setParameterDelay(0);
-+                    alg.setParameterFlag(true);
-+                    alg.setParameterWindowSize(10);
-+                    sendAlgorithmChangeEvent("SwitchProcessor2", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_2_FamilyElement0RandomData", new Fields("PipelineVar_2_FamilyElement0RandomDataFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Sink0Sink.java
-new file mode 100644
-index 0000000..7b36d6f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Sink0Sink.java
-@@ -0,0 +1,133 @@
-+package eu.qualimaster.SwitchPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.IRandomSink;
-+import eu.qualimaster.data.inf.IRandomSink.*;
-+import eu.qualimaster.data.imp.RandomSink;
-+import eu.qualimaster.data.imp.RandomSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.ISwitchFamily.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_2_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_2_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient IRandomSink sinkHandler;
-+private int counter = 0;
-+    transient IISwitchFamilyRandomDataOutput iTupleRandomData = null;
-+    transient IRandomSinkRandomDataInput inputRandomData = null;
-+
-+	public PipelineVar_2_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+    if(tupleItem instanceof IISwitchFamilyRandomDataOutput) {
-+        iTupleRandomData = (IISwitchFamilyRandomDataOutput)tupleItem;
-+        inputRandomData = new RandomSink.RandomSinkRandomDataInput();
-+        inputRandomData.setRandomInteger(iTupleRandomData.getRandomInteger());
-+        inputRandomData.setTimestamp(iTupleRandomData.getTimestamp());
-+        sinkHandler.postDataRandomData(inputRandomData);
-+        emitted(inputRandomData);
-+    }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new RandomSink.RandomSinkRandomDataInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IRandomSink> cls = (Class<? extends IRandomSink>)Class.forName("eu.qualimaster.algorithms.RandomSinkAlg");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("RandomSinkAlg", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_2_Sink0RandomData", new Fields("PipelineVar_2_Sink0RandomDataFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Source0Source.java
-new file mode 100644
-index 0000000..d20956c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/PipelineVar_2_Source0Source.java
-@@ -0,0 +1,192 @@
-+package eu.qualimaster.SwitchPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.IRandomSource;
-+import eu.qualimaster.data.inf.IRandomSource.*;
-+import eu.qualimaster.data.imp.RandomSource;
-+import eu.qualimaster.algorithms.RandomSourceAlg;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_2_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_2_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient IRandomSource sourceData;
-+
-+    public PipelineVar_2_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("SwitchPip", "PipelineVar_2_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IRandomSourceRandomDataOutput>(IRandomSourceRandomDataOutput.class) {
-+            @Override
-+            public String getAggregationKey(IRandomSourceRandomDataOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IRandomSource> cls = (Class<? extends IRandomSource>) Class.forName("eu.qualimaster.algorithms.RandomSourceAlg");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("RandomSourceAlg", null);
-+            sourceData.setParameterDelay(PipelineOptions.getExecutorIntArgument(conf, getName(), "delay", 0));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("SwitchPip", "PipelineVar_2_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_2_Source0StreamRandomData".
-+        IRandomSourceRandomDataOutput dataItemRandomData = new RandomSource.RandomSourceRandomDataOutput();
-+        try {
-+            dataItemRandomData = sourceData.getRandomData();
-+        } catch(DefaultModeException e) {
-+            dataItemRandomData.setRandomInteger(0);
-+            dataItemRandomData.setTimestamp(0);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemRandomData!=null){
-+            _collector.emit("PipelineVar_2_Source0RandomData", new Values(dataItemRandomData));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "delay" :
-+                    try {
-+                        logger.info("Received the parameter delay!");
-+                        sourceData.setParameterDelay(para.getIntValue()); 
-+                        sendParameterChangeEvent("delay", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_2_Source0RandomData", new Fields("PipelineVar_2_Source0RandomDataFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/Topology.java
-new file mode 100644
-index 0000000..6fdf542
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/SwitchPip/topology/Topology.java
-@@ -0,0 +1,101 @@
-+package eu.qualimaster.SwitchPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.SwitchProcessor1;
-+import eu.qualimaster.algorithms.SwitchProcessor2;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "SwitchPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 1; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "src"
-+
-+            builder.setSpout("PipelineVar_2_Source0", new PipelineVar_2_Source0Source("PipelineVar_2_Source0", "SwitchPip"), 1);
-+            // Declare a Bolt "processor"
-+
-+            BoltDeclarer PipelineVar_2_FamilyElement0=builder.setBolt("PipelineVar_2_FamilyElement0", new PipelineVar_2_FamilyElement0FamilyElement("PipelineVar_2_FamilyElement0", "SwitchPip"), 1);
-+            PipelineVar_2_FamilyElement0.shuffleGrouping("PipelineVar_2_Source0", "PipelineVar_2_Source0RandomData");
-+            // Declare a Bolt "snk"
-+
-+            BoltDeclarer PipelineVar_2_Sink0=builder.setBolt("PipelineVar_2_Sink0", new PipelineVar_2_Sink0Sink("PipelineVar_2_Sink0", "SwitchPip"), 1);
-+            PipelineVar_2_Sink0.shuffleGrouping("PipelineVar_2_FamilyElement0", "PipelineVar_2_FamilyElement0RandomData");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/mapping.xml
-new file mode 100644
-index 0000000..a0f2837
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/mapping.xml
-@@ -0,0 +1,68 @@
-+<mapping>
-+  <pipeline name="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.Topology">
-+      <node name="FinancialDataSource" type="source">
-+          <component name="PipelineVar_10_Source0" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="Preprocessor" type="family">
-+          <component name="PipelineVar_10_FamilyElement0" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
-+      </node>
-+      <node name="FinancialCorrelation" type="family">
-+          <component name="PipelineVar_10_FamilyElement1" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TopoSoftwareCorrelationFinancial" alternative1 = "GenTopoHardwareCorrelationFinancial" alternative2 = "CorrelationSW" alternative3 = "TransferEntropyHardware" alternative4 = "MutualInformationHardware" alternative5 = "CorrelationSWAlternative"/>
-+      </node>
-+      <node name="DynamicGraphCompilation" type="family">
-+          <component name="PipelineVar_10_FamilyElement2" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "DynamicGraphCompilation"/>
-+      </node>
-+      <node name="TimeGraphMapper" type="family">
-+          <component name="PipelineVar_10_FamilyElement3" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement3FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphMapper"/>
-+      </node>
-+      <node name="TimeGraphIndexer" type="family">
-+          <component name="PipelineVar_10_FamilyElement4" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement4FamilyElement" receiver="true" thrift="false" tasks="5" alternative0 = "TimeGraphIndexer"/>
-+      </node>
-+      <node name="TimeGraphQueryExecutor" type="family">
-+          <component name="PipelineVar_10_FamilyElement5" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_FamilyElement5FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphQueryExecutor"/>
-+      </node>
-+      <node name="TimeTravelSink" type="sink">
-+          <component name="PipelineVar_10_Sink0" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="queries" type="source">
-+          <component name="PipelineVar_10_Source1" container="TimeTravelPip" class="eu.qualimaster.TimeTravelPip.topology.PipelineVar_10_Source1Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
-+      <algorithm name="TopoSoftwareCorrelationFinancial" implName="TopoSoftwareCorrelationFinancial" class="eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial"/>
-+      <algorithm name="GenTopoHardwareCorrelationFinancial" implName="GenTopoHardwareCorrelationFinancialSubTopology" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology">
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionBolt" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="GenTopoHardwareCorrelationFinancialHardwareConnectionSpout" container="GenTopoHardwareCorrelationFinancial" class="eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.HardwareConnectionSpout" receiver="true" thrift="false" tasks="12" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSW" implName="CorrelationSWSubTopology" class="eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology">
-+              <component name="CorrelationSWMapper" container="TimeTravelPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWHayashiYoshida" container="TimeTravelPip" class="eu.qualimaster.CorrelationSW.topology.SubTopology_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="TransferEntropyHardware" implName="TransferEntropyHardwareSubTopology" class="eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology">
-+          <component name="TransferEntropyHardwareHardwareConnectionBolt" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="TransferEntropyHardwareHardwareConnectionSpout" container="TransferEntropyHardware" class="eu.qualimaster.algorithms.TransferEntropyHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="MutualInformationHardware" implName="MutualInformationHardwareSubTopology" class="eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology">
-+          <component name="MutualInformationHardwareHardwareConnectionBolt" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionBolt" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+          <component name="MutualInformationHardwareHardwareConnectionSpout" container="MutualInformationHardware" class="eu.qualimaster.algorithms.MutualInformationHardware.HardwareConnectionSpout" receiver="true" thrift="false" tasks="1" type="HARDWARE"/>
-+      </algorithm>
-+      <algorithm name="CorrelationSWAlternative" implName="CorrelationSWAlternativeSubTopology" class="eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology">
-+              <component name="CorrelationSWAlternativeMP" container="TimeTravelPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Mapper"/>
-+              <component name="CorrelationSWAlternativeHY" container="TimeTravelPip" class="eu.qualimaster.CorrelationSWAlternative.topology.SubPipelineVar_19_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="14" alternative0 = "HayashiYoshida"/>
-+      </algorithm>
-+      <algorithm name="DynamicGraphCompilation" implName="DynamicGraphCompilation" class="eu.qualimaster.dynamicgraph.DynamicGraphCompilation"/>
-+      <algorithm name="TimeGraphMapper" implName="TimeGraphMapper" class="eu.qualimaster.timegraph.TimeGraphMapper"/>
-+      <algorithm name="TimeGraphIndexer" implName="TimeGraphIndexer" class="eu.qualimaster.timegraph.TimeGraphIndexer"/>
-+      <algorithm name="TimeGraphQueryExecutor" implName="TimeGraphQueryExecutor" class="eu.qualimaster.timegraph.TimeGraphQueryExecutor"/>
-+      <algorithm name="SimulatedFinancialData" implName="SpringClientSimulator" class="eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator"/>
-+      <algorithm name="TimeGraphQueriesSource" implName="QueriesSource" class="eu.qualimaster.timegraph.QueriesSource"/>
-+      <algorithm name="TimeTravelSink" implName="TimeTravelSink" class="eu.qualimaster.timegraph.TimeTravelSink"/>
-+      <parameter parameter="speedFactor" name="FinancialDataSource" receiver="PipelineVar_10_Source0"/> 
-+      <parameter parameter="windowSize" name="FinancialCorrelation" receiver="PipelineVar_10_FamilyElement1"/> 
-+      <parameter parameter="correlationThreshold" name="DynamicGraphCompilation" receiver="PipelineVar_10_FamilyElement2"/> 
-+      <parameter parameter="snapshotQuery" name="queries" receiver="PipelineVar_10_Source1"/> 
-+      <parameter parameter="pathQuery" name="queries" receiver="PipelineVar_10_Source1"/> 
-+      <parameter parameter="windowSize" name="Mapper" receiver="CorrelationSWMapper"/> 
-+      <parameter parameter="windowSize" name="MP" receiver="CorrelationSWAlternativeMP"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/pom.xml
-new file mode 100644
-index 0000000..d63aac6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/pom.xml
-@@ -0,0 +1,305 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>TimeTravelPip</artifactId>
-+  <version>0.0.2-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>spring-client-simulator</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-preprocessor</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-correlation-financial-software</artifactId>
-+      <version>3.2-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>GenTopoHardwareCorrelationFinancial</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSW</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>TransferEntropyHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>MutualInformationHardware</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>CorrelationSWAlternative</artifactId>
-+      <version>0.0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>dynamic-graph-compilation</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>time-graph</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>time-graph-external</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>time-travel-sink</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>time-graph-spout</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/settings.xml
-new file mode 100644
-index 0000000..031fb2d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/settings.xml
-@@ -0,0 +1,128 @@
-+<pipeline>
-+    <name>TimeTravelPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changespeedFactor</name>
-+			<request>
-+				<field sequence="0">changespeedFactor</field>
-+				<field sequence="1">%newSpeedFactor%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changespeedFactor_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newSpeedFactor%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changecorrelationThreshold</name>
-+			<request>
-+				<field sequence="0">changecorrelationThreshold</field>
-+				<field sequence="1">%newCorrelationThreshold%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changecorrelationThreshold_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newCorrelationThreshold%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changesnapshotQuery</name>
-+			<request>
-+				<field sequence="0">changesnapshotQuery</field>
-+				<field sequence="1">%newSnapshotQuery%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changesnapshotQuery_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newSnapshotQuery%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changepathQuery</name>
-+			<request>
-+				<field sequence="0">changepathQuery</field>
-+				<field sequence="1">%newPathQuery%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changepathQuery_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newPathQuery%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..6dc0c65
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement0FamilyElement.java
-@@ -0,0 +1,250 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+    private transient IFPreprocessor alg = null; 
-+    transient ISimulatedFinancialDataSpringStreamOutput iTupleSpringStream = null;
-+    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
-+
-+    public PipelineVar_10_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
-+                _collector.emit("PipelineVar_10_FamilyElement0PreprocessedStream", new Values(item));
-+            }
-+        };
-+        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                    alg = (IFPreprocessor) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Preprocessor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fPreprocessor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof ISimulatedFinancialDataSpringStreamOutput) {
-+        iTupleSpringStream = (ISimulatedFinancialDataSpringStreamOutput)tupleItem;
-+        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputSpringStream, preprocessedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            preprocessedStreamResult.setSymbolId("");
-+            preprocessedStreamResult.setTimestamp(0);
-+            preprocessedStreamResult.setValue(0.0);
-+            preprocessedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
-+            iterPreprocessedStream.reset();
-+            while (iterPreprocessedStream.hasNext()) {
-+                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
-+                _collector.emit("PipelineVar_10_FamilyElement0PreprocessedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Preprocessor":
-+                if (!algChange || !(alg instanceof Preprocessor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                        alg = (IFPreprocessor) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_FamilyElement0PreprocessedStream", new Fields("PipelineVar_10_FamilyElement0PreprocessedStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..b72defe
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement1FamilyElement.java
-@@ -0,0 +1,544 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
-+import eu.qualimaster.common.hardware.*;
-+import com.google.protobuf.ByteString;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private String streamId = "PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial";
-+    private transient FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+    private transient IFCorrelationFinancial alg = null; 
-+    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
-+    transient ISimulatedFinancialDataSymbolListOutput iTupleSymbolList = null;
-+    transient IIFCorrelationFinancialPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFCorrelationFinancialSymbolListInput inputSymbolList = null;
-+
-+    public PipelineVar_10_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        pairwiseFinancialResult = new FCorrelationFinancial.IFCorrelationFinancialPairwiseFinancialOutput();
-+        IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFCorrelationFinancialPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFCorrelationFinancialPairwiseFinancialOutput item) {
-+                _collector.emit("PipelineVar_10_FamilyElement1PairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                    alg = (IFCorrelationFinancial) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 30));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", null);
-+            streamId = "PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fCorrelationFinancial"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
-+            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
-+            inputPreprocessedStream = new FCorrelationFinancial.IFCorrelationFinancialPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputPreprocessedStream));
-+            }
-+        }
-+
-+        if(tupleItem instanceof ISimulatedFinancialDataSymbolListOutput) {
-+            iTupleSymbolList = (ISimulatedFinancialDataSymbolListOutput)tupleItem;
-+            inputSymbolList = new FCorrelationFinancial.IFCorrelationFinancialSymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+            if(alg instanceof ITopologyCreate) {
-+                _collector.emit(streamId, new Values(inputSymbolList));
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFCorrelationFinancialPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+                IIFCorrelationFinancialPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("PipelineVar_10_FamilyElement1PairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TopoSoftwareCorrelationFinancial":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TopoSoftwareCorrelationFinancial)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TopoSoftwareCorrelationFinancial", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "GenTopoHardwareCorrelationFinancial":
-+            case "GenTopoHardwareCorrelationFinancialSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof GenTopoHardwareCorrelationFinancialSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.13");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("GenTopoHardwareCorrelationFinancial", 12, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("TimeTravelPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("TimeTravelPip",
-+                                            "GenTopoHardwareCorrelationFinancialHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_10_FamilyElement1GenTopoHardwareCorrelationFinancial";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("GenTopoHardwareCorrelationFinancialSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSW":
-+            case "CorrelationSWSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_10_FamilyElement1CorrelationSW";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "TransferEntropyHardware":
-+            case "TransferEntropyHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof TransferEntropyHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("TransferEntropyHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("TimeTravelPip",
-+                                            "TransferEntropyHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("TimeTravelPip",
-+                                            "TransferEntropyHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_10_FamilyElement1TransferEntropyHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("TransferEntropyHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "MutualInformationHardware":
-+            case "MutualInformationHardwareSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof MutualInformationHardwareSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    try {
-+                        String host = signal.getStringParameter(AlgorithmChangeParameter.COPROCESSOR_HOST, "147.27.39.12");
-+                        int sendingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_REQUEST_PORT, 2400);
-+                        int receivingPort = signal.getIntParameter(AlgorithmChangeParameter.CONTROL_RESPONSE_PORT, 2401);
-+                        String url = signal.getStringParameter(AlgorithmChangeParameter.IMPLEMENTING_ARTIFACT, null);
-+                        HardwareControlConnection hardwareConnection = new HardwareControlConnection(host, sendingPort, receivingPort);
-+                        ByteString executable = ByteString.copyFromUtf8(url);
-+                        UploadMessageOut msg = hardwareConnection.uploadAlgorithm("MutualInformationHardware", 1, executable);
-+                        ParameterChangeSignal signalForBolt= new ParameterChangeSignal("TimeTravelPip",
-+                                            "MutualInformationHardwareHardwareConnectionBolt", "port", msg.getPortIn(), null);
-+                        sendSignal(signalForBolt);
-+                        String ports = "";
-+                        ports = ports + msg.getPortOut(0);
-+                        for (int i=1; i<msg.getPortOutCount(); i++) {
-+                            ports = ports + "," + msg.getPortOut(i);
-+                        }
-+                        ParameterChangeSignal signalForSpout= new ParameterChangeSignal("TimeTravelPip",
-+                                            "MutualInformationHardwareHardwareConnectionSpout", "port", ports, null);
-+                        sendSignal(signalForSpout);
-+                    } catch (IOException e) {
-+                        e.printStackTrace();
-+                    } catch (SignalException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_10_FamilyElement1MutualInformationHardware";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("MutualInformationHardwareSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+            case "CorrelationSWAlternative":
-+            case "CorrelationSWAlternativeSubTopology":
-+                logger.info("Is it the first change? " + algChange);
-+                if(!algChange || !(alg instanceof CorrelationSWAlternativeSubTopology)) {
-+                    logger.info("Changing to the algorithm: " + signal.getAlgorithm());
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology");
-+                        alg = (IFCorrelationFinancial) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    streamId = "PipelineVar_10_FamilyElement1CorrelationSWAlternative";
-+                    alg.setParameterWindowSize(30);
-+                    sendAlgorithmChangeEvent("CorrelationSWAlternativeSubTopology", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                    algChange = true;
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_10_FamilyElement1PairwiseFinancialFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial", new Fields("PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement1GenTopoHardwareCorrelationFinancial", new Fields("PipelineVar_10_FamilyElement1GenTopoHardwareCorrelationFinancialFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement1CorrelationSW", new Fields("PipelineVar_10_FamilyElement1CorrelationSWFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement1TransferEntropyHardware", new Fields("PipelineVar_10_FamilyElement1TransferEntropyHardwareFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement1MutualInformationHardware", new Fields("PipelineVar_10_FamilyElement1MutualInformationHardwareFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement1CorrelationSWAlternative", new Fields("PipelineVar_10_FamilyElement1CorrelationSWAlternativeFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement2FamilyElement.java
-new file mode 100644
-index 0000000..68494a8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement2FamilyElement.java
-@@ -0,0 +1,281 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
-+import eu.qualimaster.families.inf.IFCorrelationFinancial.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.families.inf.IFHayashiYoshida.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_FamilyElement2FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement2FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+    private transient IFDynamicGraphCompilation alg = null; 
-+    transient IIFCorrelationFinancialPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient IIFDynamicGraphCompilationPairwiseFinancialInput inputPairwiseFinancial = null;
-+
-+    public PipelineVar_10_FamilyElement2FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        edgeStreamResult = new FDynamicGraphCompilation.IFDynamicGraphCompilationEdgeStreamOutput();
-+        IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput> edgeStreamEmitter = new IItemEmitter<IIFDynamicGraphCompilationEdgeStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFDynamicGraphCompilationEdgeStreamOutput item) {
-+                _collector.emit("PipelineVar_10_FamilyElement2EdgeStream", new Values(item));
-+            }
-+        };
-+        edgeStreamResult.setEmitter(edgeStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
-+                    alg = (IFDynamicGraphCompilation) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (PipelineOptions.hasExecutorArgument(map, getName(), "correlationThreshold")) {
-+                    alg.setParameterCorrelationThreshold(PipelineOptions.getExecutorDoubleArgument(map, getName(), "correlationThreshold", 0.0));
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("DynamicGraphCompilation", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fDynamicGraphCompilation"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFCorrelationFinancialPairwiseFinancialOutput) {
-+        iTuplePairwiseFinancial = (IIFCorrelationFinancialPairwiseFinancialOutput)tupleItem;
-+        inputPairwiseFinancial = new FDynamicGraphCompilation.IFDynamicGraphCompilationPairwiseFinancialInput();
-+        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputPairwiseFinancial, edgeStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            edgeStreamResult.setEdge("");
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFDynamicGraphCompilationEdgeStreamOutput> iterEdgeStream = edgeStreamResult.iterator();
-+            iterEdgeStream.reset();
-+            while (iterEdgeStream.hasNext()) {
-+                IIFDynamicGraphCompilationEdgeStreamOutput out = iterEdgeStream.next();
-+                _collector.emit("PipelineVar_10_FamilyElement2EdgeStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "correlationThreshold" :
-+                    try {
-+                        System.out.println("Received parameter changing signal correlationThreshold");
-+                        alg.setParameterCorrelationThreshold(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("correlationThreshold", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "DynamicGraphCompilation":
-+                if (!algChange || !(alg instanceof DynamicGraphCompilation)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.dynamicgraph.DynamicGraphCompilation");
-+                        alg = (IFDynamicGraphCompilation) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterCorrelationThreshold(0.0);
-+                    sendAlgorithmChangeEvent("DynamicGraphCompilation", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_FamilyElement2EdgeStream", new Fields("PipelineVar_10_FamilyElement2EdgeStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement3FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement3FamilyElement.java
-new file mode 100644
-index 0000000..a6dfcdd
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement3FamilyElement.java
-@@ -0,0 +1,262 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFTimeGraphMapper.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.timegraph.TimeGraphMapper;
-+import eu.qualimaster.families.inf.IFDynamicGraphCompilation.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_FamilyElement3FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement3FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput dataStreamResult = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
-+    private transient IFTimeGraphMapper alg = null; 
-+    private transient List<Integer> taskIdTimeGraphIndexer;
-+    private int PipelineVar_10_FamilyElement3TaskId;
-+    transient IIFDynamicGraphCompilationEdgeStreamOutput iTupleEdgeStream = null;
-+    transient IIFTimeGraphMapperEdgeStreamInput inputEdgeStream = null;
-+
-+    public PipelineVar_10_FamilyElement3FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_10_FamilyElement4");
-+        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
-+        PipelineVar_10_FamilyElement3TaskId = topologyContext.getThisTaskId();
-+        logger.info("PipelineVar_10_FamilyElement3TaskId = " + PipelineVar_10_FamilyElement3TaskId);
-+
-+        dataStreamResult = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
-+        IItemEmitter<IIFTimeGraphMapperDataStreamOutput> dataStreamEmitter = new IItemEmitter<IIFTimeGraphMapperDataStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphMapperDataStreamOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "PipelineVar_10_FamilyElement3DataStream", new Values(item));
-+            }
-+        };
-+        dataStreamResult.setEmitter(dataStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphMapper");
-+                    alg = (IFTimeGraphMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_10_FamilyElement3TaskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                } catch (NoSuchMethodException e) {
-+                    e.printStackTrace();
-+                } catch (InvocationTargetException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TimeGraphMapper", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fTimeGraphMapper"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IIFDynamicGraphCompilationEdgeStreamOutput) {
-+        iTupleEdgeStream = (IIFDynamicGraphCompilationEdgeStreamOutput)tupleItem;
-+        inputEdgeStream = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
-+        inputEdgeStream.setEdge(iTupleEdgeStream.getEdge());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputEdgeStream, dataStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            dataStreamResult.setUpdate(null);
-+            dataStreamResult.setIsAddition(false);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphMapperDataStreamOutput> iterDataStream = dataStreamResult.iterator();
-+            iterDataStream.reset();
-+            while (iterDataStream.hasNext()) {
-+                IIFTimeGraphMapperDataStreamOutput out = iterDataStream.next();
-+                _collector.emitDirect(out.getTaskId(), "PipelineVar_10_FamilyElement3DataStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TimeGraphMapper":
-+                if (!algChange || !(alg instanceof TimeGraphMapper)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphMapper");
-+                        alg = (IFTimeGraphMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_10_FamilyElement3TaskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    } catch (NoSuchMethodException e) {
-+                        e.printStackTrace();
-+                    } catch (InvocationTargetException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("TimeGraphMapper", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_FamilyElement3DataStream", new Fields("PipelineVar_10_FamilyElement3DataStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement4FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement4FamilyElement.java
-new file mode 100644
-index 0000000..ca2fae3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement4FamilyElement.java
-@@ -0,0 +1,375 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.timegraph.TimeGraphIndexer;
-+import eu.qualimaster.families.inf.IFTimeGraphMapper.*;
-+import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
-+import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_FamilyElement4FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement4FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput externalResponsesResult = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
-+    private transient FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput internalRequestsResult = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
-+    private transient IFTimeGraphIndexer alg = null; 
-+    private transient List<Integer> taskIdTimeGraphIndexer;
-+    private transient List<Integer> taskIdTimeGraphQueryExecutor;
-+    private int PipelineVar_10_FamilyElement4TaskId;
-+    transient IIFTimeGraphMapperDataStreamOutput iTupleDataStream = null;
-+    transient IIFTimeGraphIndexerInternalRequestsOutput iTupleInternalRequests = null;
-+    transient IIFTimeGraphQueryExecutorUnicastRequestsOutput iTupleUnicastRequests = null;
-+    transient IIFTimeGraphQueryExecutorBroadcastRequestsOutput iTupleBroadcastRequests = null;
-+    transient IIFTimeGraphIndexerDataStreamInput inputDataStream = null;
-+    transient IIFTimeGraphIndexerInternalRequestsInput inputInternalRequests = null;
-+    transient IIFTimeGraphIndexerUnicastRequestsInput inputUnicastRequests = null;
-+    transient IIFTimeGraphIndexerBroadcastRequestsInput inputBroadcastRequests = null;
-+
-+    public PipelineVar_10_FamilyElement4FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_10_FamilyElement4");
-+        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
-+        taskIdTimeGraphQueryExecutor = topologyContext.getComponentTasks("PipelineVar_10_FamilyElement5");
-+        logger.info("taskIdsTimeGraphQueryExecutor = " + taskIdTimeGraphQueryExecutor);
-+        PipelineVar_10_FamilyElement4TaskId = topologyContext.getThisTaskId();
-+        logger.info("PipelineVar_10_FamilyElement4TaskId = " + PipelineVar_10_FamilyElement4TaskId);
-+
-+        externalResponsesResult = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
-+        IItemEmitter<IIFTimeGraphIndexerExternalResponsesOutput> externalResponsesEmitter = new IItemEmitter<IIFTimeGraphIndexerExternalResponsesOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphIndexerExternalResponsesOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "PipelineVar_10_FamilyElement4ExternalResponses", new Values(item));
-+            }
-+        };
-+        externalResponsesResult.setEmitter(externalResponsesEmitter);
-+
-+        internalRequestsResult = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
-+        IItemEmitter<IIFTimeGraphIndexerInternalRequestsOutput> internalRequestsEmitter = new IItemEmitter<IIFTimeGraphIndexerInternalRequestsOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphIndexerInternalRequestsOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "PipelineVar_10_FamilyElement4InternalRequests", new Values(item));
-+            }
-+        };
-+        internalRequestsResult.setEmitter(internalRequestsEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphIndexer");
-+                    alg = (IFTimeGraphIndexer) cls.getConstructor(List.class, List.class, int.class).newInstance(taskIdTimeGraphIndexer, taskIdTimeGraphQueryExecutor, PipelineVar_10_FamilyElement4TaskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                } catch (NoSuchMethodException e) {
-+                    e.printStackTrace();
-+                } catch (InvocationTargetException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TimeGraphIndexer", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fTimeGraphIndexer"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFTimeGraphMapperDataStreamOutput) {
-+            iTupleDataStream = (IIFTimeGraphMapperDataStreamOutput)tupleItem;
-+            inputDataStream = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
-+            inputDataStream.setUpdate(iTupleDataStream.getUpdate());
-+            inputDataStream.setIsAddition(iTupleDataStream.getIsAddition());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputDataStream, externalResponsesResult, internalRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                externalResponsesResult.setExternalResponse(null);
-+                internalRequestsResult.setInternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphIndexerInternalRequestsOutput) {
-+            iTupleInternalRequests = (IIFTimeGraphIndexerInternalRequestsOutput)tupleItem;
-+            inputInternalRequests = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
-+            inputInternalRequests.setInternalRequest(iTupleInternalRequests.getInternalRequest());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputInternalRequests, externalResponsesResult, internalRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                externalResponsesResult.setExternalResponse(null);
-+                internalRequestsResult.setInternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphQueryExecutorUnicastRequestsOutput) {
-+            iTupleUnicastRequests = (IIFTimeGraphQueryExecutorUnicastRequestsOutput)tupleItem;
-+            inputUnicastRequests = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
-+            inputUnicastRequests.setUnicastExternalRequest(iTupleUnicastRequests.getUnicastExternalRequest());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputUnicastRequests, externalResponsesResult, internalRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                externalResponsesResult.setExternalResponse(null);
-+                internalRequestsResult.setInternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphQueryExecutorBroadcastRequestsOutput) {
-+            iTupleBroadcastRequests = (IIFTimeGraphQueryExecutorBroadcastRequestsOutput)tupleItem;
-+            inputBroadcastRequests = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
-+            inputBroadcastRequests.setBroadcastExternalRequest(iTupleBroadcastRequests.getBroadcastExternalRequest());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputBroadcastRequests, externalResponsesResult, internalRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                externalResponsesResult.setExternalResponse(null);
-+                internalRequestsResult.setInternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphIndexerExternalResponsesOutput> iterExternalResponses = externalResponsesResult.iterator();
-+            iterExternalResponses.reset();
-+            while (iterExternalResponses.hasNext()) {
-+                IIFTimeGraphIndexerExternalResponsesOutput out = iterExternalResponses.next();
-+                _collector.emitDirect(out.getTaskId(), "PipelineVar_10_FamilyElement4ExternalResponses", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphIndexerInternalRequestsOutput> iterInternalRequests = internalRequestsResult.iterator();
-+            iterInternalRequests.reset();
-+            while (iterInternalRequests.hasNext()) {
-+                IIFTimeGraphIndexerInternalRequestsOutput out = iterInternalRequests.next();
-+                _collector.emitDirect(out.getTaskId(), "PipelineVar_10_FamilyElement4InternalRequests", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TimeGraphIndexer":
-+                if (!algChange || !(alg instanceof TimeGraphIndexer)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphIndexer");
-+                        alg = (IFTimeGraphIndexer) cls.getConstructor(List.class, List.class, int.class).newInstance(taskIdTimeGraphIndexer, taskIdTimeGraphQueryExecutor, PipelineVar_10_FamilyElement4TaskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    } catch (NoSuchMethodException e) {
-+                        e.printStackTrace();
-+                    } catch (InvocationTargetException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("TimeGraphIndexer", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_FamilyElement4ExternalResponses", new Fields("PipelineVar_10_FamilyElement4ExternalResponsesFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement4InternalRequests", new Fields("PipelineVar_10_FamilyElement4InternalRequestsFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement5FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement5FamilyElement.java
-new file mode 100644
-index 0000000..4ed0e03
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_FamilyElement5FamilyElement.java
-@@ -0,0 +1,385 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.timegraph.TimeGraphQueryExecutor;
-+import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
-+import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_FamilyElement5FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_FamilyElement5FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
-+    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput pathStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
-+    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
-+    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
-+    private transient IFTimeGraphQueryExecutor alg = null; 
-+    private transient List<Integer> taskIdTimeGraphIndexer;
-+    private int PipelineVar_10_FamilyElement5TaskId;
-+    transient ITimeGraphQueriesSourceSnapshotQueryStreamOutput iTupleSnapshotQueryStream = null;
-+    transient ITimeGraphQueriesSourcePathQueryStreamOutput iTuplePathQueryStream = null;
-+    transient IIFTimeGraphIndexerExternalResponsesOutput iTupleExternalResponses = null;
-+    transient IIFTimeGraphQueryExecutorSnapshotQueryStreamInput inputSnapshotQueryStream = null;
-+    transient IIFTimeGraphQueryExecutorPathQueryStreamInput inputPathQueryStream = null;
-+    transient IIFTimeGraphQueryExecutorExternalResponsesInput inputExternalResponses = null;
-+
-+    public PipelineVar_10_FamilyElement5FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_10_FamilyElement4");
-+        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
-+        PipelineVar_10_FamilyElement5TaskId = topologyContext.getThisTaskId();
-+        logger.info("PipelineVar_10_FamilyElement5TaskId = " + PipelineVar_10_FamilyElement5TaskId);
-+
-+        snapshotStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
-+        IItemEmitter<IIFTimeGraphQueryExecutorSnapshotStreamOutput> snapshotStreamEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorSnapshotStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorSnapshotStreamOutput item) {
-+                _collector.emit("PipelineVar_10_FamilyElement5SnapshotStream", new Values(item));
-+            }
-+        };
-+        snapshotStreamResult.setEmitter(snapshotStreamEmitter);
-+
-+        pathStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
-+        IItemEmitter<IIFTimeGraphQueryExecutorPathStreamOutput> pathStreamEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorPathStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorPathStreamOutput item) {
-+                _collector.emit("PipelineVar_10_FamilyElement5PathStream", new Values(item));
-+            }
-+        };
-+        pathStreamResult.setEmitter(pathStreamEmitter);
-+
-+        unicastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
-+        IItemEmitter<IIFTimeGraphQueryExecutorUnicastRequestsOutput> unicastRequestsEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorUnicastRequestsOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorUnicastRequestsOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "PipelineVar_10_FamilyElement5UnicastRequests", new Values(item));
-+            }
-+        };
-+        unicastRequestsResult.setEmitter(unicastRequestsEmitter);
-+
-+        broadcastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
-+        IItemEmitter<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> broadcastRequestsEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorBroadcastRequestsOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorBroadcastRequestsOutput item) {
-+                _collector.emit("PipelineVar_10_FamilyElement5BroadcastRequests", new Values(item));
-+            }
-+        };
-+        broadcastRequestsResult.setEmitter(broadcastRequestsEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphQueryExecutor");
-+                    alg = (IFTimeGraphQueryExecutor) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_10_FamilyElement5TaskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                } catch (NoSuchMethodException e) {
-+                    e.printStackTrace();
-+                } catch (InvocationTargetException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TimeGraphQueryExecutor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fTimeGraphQueryExecutor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof ITimeGraphQueriesSourceSnapshotQueryStreamOutput) {
-+            iTupleSnapshotQueryStream = (ITimeGraphQueriesSourceSnapshotQueryStreamOutput)tupleItem;
-+            inputSnapshotQueryStream = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
-+            inputSnapshotQueryStream.setStart(iTupleSnapshotQueryStream.getStart());
-+            inputSnapshotQueryStream.setEnd(iTupleSnapshotQueryStream.getEnd());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSnapshotQueryStream, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                snapshotStreamResult.setSnapshot("");
-+                pathStreamResult.setPath("");
-+                unicastRequestsResult.setUnicastExternalRequest(null);
-+                broadcastRequestsResult.setBroadcastExternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof ITimeGraphQueriesSourcePathQueryStreamOutput) {
-+            iTuplePathQueryStream = (ITimeGraphQueriesSourcePathQueryStreamOutput)tupleItem;
-+            inputPathQueryStream = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
-+            inputPathQueryStream.setStart(iTuplePathQueryStream.getStart());
-+            inputPathQueryStream.setEnd(iTuplePathQueryStream.getEnd());
-+            inputPathQueryStream.setVertexA(iTuplePathQueryStream.getVertexA());
-+            inputPathQueryStream.setVertexB(iTuplePathQueryStream.getVertexB());
-+            inputPathQueryStream.setType(iTuplePathQueryStream.getType());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPathQueryStream, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                snapshotStreamResult.setSnapshot("");
-+                pathStreamResult.setPath("");
-+                unicastRequestsResult.setUnicastExternalRequest(null);
-+                broadcastRequestsResult.setBroadcastExternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphIndexerExternalResponsesOutput) {
-+            iTupleExternalResponses = (IIFTimeGraphIndexerExternalResponsesOutput)tupleItem;
-+            inputExternalResponses = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
-+            inputExternalResponses.setExternalResponse(iTupleExternalResponses.getExternalResponse());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputExternalResponses, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                snapshotStreamResult.setSnapshot("");
-+                pathStreamResult.setPath("");
-+                unicastRequestsResult.setUnicastExternalRequest(null);
-+                broadcastRequestsResult.setBroadcastExternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorSnapshotStreamOutput> iterSnapshotStream = snapshotStreamResult.iterator();
-+            iterSnapshotStream.reset();
-+            while (iterSnapshotStream.hasNext()) {
-+                IIFTimeGraphQueryExecutorSnapshotStreamOutput out = iterSnapshotStream.next();
-+                _collector.emit("PipelineVar_10_FamilyElement5SnapshotStream", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorPathStreamOutput> iterPathStream = pathStreamResult.iterator();
-+            iterPathStream.reset();
-+            while (iterPathStream.hasNext()) {
-+                IIFTimeGraphQueryExecutorPathStreamOutput out = iterPathStream.next();
-+                _collector.emit("PipelineVar_10_FamilyElement5PathStream", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorUnicastRequestsOutput> iterUnicastRequests = unicastRequestsResult.iterator();
-+            iterUnicastRequests.reset();
-+            while (iterUnicastRequests.hasNext()) {
-+                IIFTimeGraphQueryExecutorUnicastRequestsOutput out = iterUnicastRequests.next();
-+                _collector.emitDirect(out.getTaskId(), "PipelineVar_10_FamilyElement5UnicastRequests", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> iterBroadcastRequests = broadcastRequestsResult.iterator();
-+            iterBroadcastRequests.reset();
-+            while (iterBroadcastRequests.hasNext()) {
-+                IIFTimeGraphQueryExecutorBroadcastRequestsOutput out = iterBroadcastRequests.next();
-+                _collector.emit("PipelineVar_10_FamilyElement5BroadcastRequests", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TimeGraphQueryExecutor":
-+                if (!algChange || !(alg instanceof TimeGraphQueryExecutor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphQueryExecutor");
-+                        alg = (IFTimeGraphQueryExecutor) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_10_FamilyElement5TaskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    } catch (NoSuchMethodException e) {
-+                        e.printStackTrace();
-+                    } catch (InvocationTargetException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("TimeGraphQueryExecutor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_FamilyElement5SnapshotStream", new Fields("PipelineVar_10_FamilyElement5SnapshotStreamFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement5PathStream", new Fields("PipelineVar_10_FamilyElement5PathStreamFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement5UnicastRequests", new Fields("PipelineVar_10_FamilyElement5UnicastRequestsFields"));
-+        declarer.declareStream("PipelineVar_10_FamilyElement5BroadcastRequests", new Fields("PipelineVar_10_FamilyElement5BroadcastRequestsFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Sink0Sink.java
-new file mode 100644
-index 0000000..44df1e5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Sink0Sink.java
-@@ -0,0 +1,144 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.ITimeTravelSink;
-+import eu.qualimaster.data.inf.ITimeTravelSink.*;
-+import eu.qualimaster.data.imp.TimeTravelSink;
-+import eu.qualimaster.data.imp.TimeTravelSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient ITimeTravelSink sinkHandler;
-+private int counter = 0;
-+    transient IIFTimeGraphQueryExecutorSnapshotStreamOutput iTupleSnapshotStream = null;
-+    transient IIFTimeGraphQueryExecutorPathStreamOutput iTuplePathStream = null;
-+    transient ITimeTravelSinkSnapshotStreamInput inputSnapshotStream = null;
-+    transient ITimeTravelSinkPathStreamInput inputPathStream = null;
-+
-+	public PipelineVar_10_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+        if(tupleItem instanceof IIFTimeGraphQueryExecutorSnapshotStreamOutput) {
-+            iTupleSnapshotStream = (IIFTimeGraphQueryExecutorSnapshotStreamOutput)tupleItem;
-+            inputSnapshotStream = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
-+            inputSnapshotStream.setSnapshot(iTupleSnapshotStream.getSnapshot());
-+            sinkHandler.postDataSnapshotStream(inputSnapshotStream);
-+            emitted(inputSnapshotStream);
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphQueryExecutorPathStreamOutput) {
-+            iTuplePathStream = (IIFTimeGraphQueryExecutorPathStreamOutput)tupleItem;
-+            inputPathStream = new TimeTravelSink.TimeTravelSinkPathStreamInput();
-+            inputPathStream.setPath(iTuplePathStream.getPath());
-+            sinkHandler.postDataPathStream(inputPathStream);
-+            emitted(inputPathStream);
-+        }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
-+        new TimeTravelSink.TimeTravelSinkPathStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ITimeTravelSink> cls = (Class<? extends ITimeTravelSink>)Class.forName("eu.qualimaster.timegraph.TimeTravelSink");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("TimeTravelSink", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_Sink0SnapshotStream", new Fields("PipelineVar_10_Sink0SnapshotStreamFields"));
-+        declarer.declareStream("PipelineVar_10_Sink0PathStream", new Fields("PipelineVar_10_Sink0PathStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source0Source.java
-new file mode 100644
-index 0000000..d45cd96
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source0Source.java
-@@ -0,0 +1,210 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData;
-+import eu.qualimaster.data.inf.ISimulatedFinancialData.*;
-+import eu.qualimaster.data.imp.SimulatedFinancialData;
-+import eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ISimulatedFinancialData sourceData;
-+
-+    public PipelineVar_10_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("TimeTravelPip", "PipelineVar_10_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedFinancialDataSymbolListOutput>(ISimulatedFinancialDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISimulatedFinancialDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedFinancialDataSpringStreamOutput>(ISimulatedFinancialDataSpringStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISimulatedFinancialDataSpringStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ISimulatedFinancialData> cls = (Class<? extends ISimulatedFinancialData>) Class.forName("eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("SpringClientSimulator", null);
-+            sourceData.setParameterSpeedFactor(PipelineOptions.getExecutorDoubleArgument(conf, getName(), "speedFactor", 1.0));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("TimeTravelPip", "PipelineVar_10_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_10_Source0StreamSymbolList".
-+        ISimulatedFinancialDataSymbolListOutput dataItemSymbolList = new SimulatedFinancialData.SimulatedFinancialDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PipelineVar_10_Source0SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PipelineVar_10_Source0SpringStream".
-+        ISimulatedFinancialDataSpringStreamOutput dataItemSpringStream = new SimulatedFinancialData.SimulatedFinancialDataSpringStreamOutput();
-+        try {
-+            dataItemSpringStream = sourceData.getSpringStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSpringStream.setSymbolTuple("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSpringStream!=null){
-+            _collector.emit("PipelineVar_10_Source0SpringStream", new Values(dataItemSpringStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "speedFactor" :
-+                    try {
-+                        logger.info("Received the parameter speedFactor!");
-+                        sourceData.setParameterSpeedFactor(para.getDoubleValue()); 
-+                        sendParameterChangeEvent("speedFactor", para.getDoubleValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_Source0SymbolList", new Fields("PipelineVar_10_Source0SymbolListFields"));
-+        declarer.declareStream("PipelineVar_10_Source0SpringStream", new Fields("PipelineVar_10_Source0SpringStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source1Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source1Source.java
-new file mode 100644
-index 0000000..6489f05
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/PipelineVar_10_Source1Source.java
-@@ -0,0 +1,221 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ITimeGraphQueriesSource;
-+import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
-+import eu.qualimaster.data.imp.TimeGraphQueriesSource;
-+import eu.qualimaster.timegraph.QueriesSource;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_10_Source1Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_10_Source1Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ITimeGraphQueriesSource sourceData;
-+
-+    public PipelineVar_10_Source1Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("TimeTravelPip", "PipelineVar_10_Source1", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITimeGraphQueriesSourceSnapshotQueryStreamOutput>(ITimeGraphQueriesSourceSnapshotQueryStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ITimeGraphQueriesSourceSnapshotQueryStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITimeGraphQueriesSourcePathQueryStreamOutput>(ITimeGraphQueriesSourcePathQueryStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ITimeGraphQueriesSourcePathQueryStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ITimeGraphQueriesSource> cls = (Class<? extends ITimeGraphQueriesSource>) Class.forName("eu.qualimaster.timegraph.QueriesSource");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("QueriesSource", null);
-+            if (PipelineOptions.hasExecutorArgument(conf, getName(), "snapshotQuery")) {
-+                sourceData.setParameterSnapshotQuery(PipelineOptions.getExecutorStringArgument(conf, getName(), "snapshotQuery", ""));
-+            }
-+            if (PipelineOptions.hasExecutorArgument(conf, getName(), "pathQuery")) {
-+                sourceData.setParameterPathQuery(PipelineOptions.getExecutorStringArgument(conf, getName(), "pathQuery", ""));
-+            }
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("TimeTravelPip", "PipelineVar_10_Source1", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_10_Source1StreamSnapshotQueryStream".
-+        ITimeGraphQueriesSourceSnapshotQueryStreamOutput dataItemSnapshotQueryStream = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
-+        try {
-+            dataItemSnapshotQueryStream = sourceData.getSnapshotQueryStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSnapshotQueryStream.setStart(0);
-+            dataItemSnapshotQueryStream.setEnd(0);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSnapshotQueryStream!=null){
-+            _collector.emit("PipelineVar_10_Source1SnapshotQueryStream", new Values(dataItemSnapshotQueryStream));
-+        }
-+
-+        // Emitting stream "PipelineVar_10_Source1PathQueryStream".
-+        ITimeGraphQueriesSourcePathQueryStreamOutput dataItemPathQueryStream = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
-+        try {
-+            dataItemPathQueryStream = sourceData.getPathQueryStream();
-+        } catch(DefaultModeException e) {
-+            dataItemPathQueryStream.setStart(0);
-+            dataItemPathQueryStream.setEnd(0);
-+            dataItemPathQueryStream.setVertexA("");
-+            dataItemPathQueryStream.setVertexB("");
-+            dataItemPathQueryStream.setType("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemPathQueryStream!=null){
-+            _collector.emit("PipelineVar_10_Source1PathQueryStream", new Values(dataItemPathQueryStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "snapshotQuery" :
-+                    logger.info("Received the parameter snapshotQuery!");
-+                    sourceData.setParameterSnapshotQuery(para.getStringValue()); 
-+                    sendParameterChangeEvent("snapshotQuery", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "pathQuery" :
-+                    logger.info("Received the parameter pathQuery!");
-+                    sourceData.setParameterPathQuery(para.getStringValue()); 
-+                    sendParameterChangeEvent("pathQuery", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_10_Source1SnapshotQueryStream", new Fields("PipelineVar_10_Source1SnapshotQueryStreamFields"));
-+        declarer.declareStream("PipelineVar_10_Source1PathQueryStream", new Fields("PipelineVar_10_Source1PathQueryStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/Topology.java
-new file mode 100644
-index 0000000..bb668f6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelPip/topology/Topology.java
-@@ -0,0 +1,180 @@
-+package eu.qualimaster.TimeTravelPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial;
-+import eu.qualimaster.algorithms.GenTopoHardwareCorrelationFinancial.GenTopoHardwareCorrelationFinancialSubTopology;
-+import eu.qualimaster.CorrelationSW.topology.CorrelationSWSubTopology;
-+import eu.qualimaster.algorithms.TransferEntropyHardware.TransferEntropyHardwareSubTopology;
-+import eu.qualimaster.algorithms.MutualInformationHardware.MutualInformationHardwareSubTopology;
-+import eu.qualimaster.CorrelationSWAlternative.topology.CorrelationSWAlternativeSubTopology;
-+import eu.qualimaster.dynamicgraph.DynamicGraphCompilation;
-+import eu.qualimaster.timegraph.TimeGraphMapper;
-+import eu.qualimaster.timegraph.TimeGraphIndexer;
-+import eu.qualimaster.timegraph.TimeGraphQueryExecutor;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "TimeTravelPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 18; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "FinancialDataSource"
-+
-+            builder.setSpout("PipelineVar_10_Source0", new PipelineVar_10_Source0Source("PipelineVar_10_Source0", "TimeTravelPip"), 1);
-+            // Declare a Bolt "Preprocessor"
-+
-+            BoltDeclarer PipelineVar_10_FamilyElement0=builder.setBolt("PipelineVar_10_FamilyElement0", new PipelineVar_10_FamilyElement0FamilyElement("PipelineVar_10_FamilyElement0", "TimeTravelPip"), 1);
-+            PipelineVar_10_FamilyElement0.shuffleGrouping("PipelineVar_10_Source0", "PipelineVar_10_Source0SpringStream");
-+            // Declare a Bolt "FinancialCorrelation"
-+
-+            BoltDeclarer PipelineVar_10_FamilyElement1=builder.setBolt("PipelineVar_10_FamilyElement1", new PipelineVar_10_FamilyElement1FamilyElement("PipelineVar_10_FamilyElement1", "TimeTravelPip"), 1);
-+            PipelineVar_10_FamilyElement1.shuffleGrouping("PipelineVar_10_FamilyElement0", "PipelineVar_10_FamilyElement0PreprocessedStream");
-+            //generate the Storm-based algorithm topology name:TopoSoftwareCorrelationFinancial
-+            if (!config.containsKey(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"))) {
-+                config.put(PipelineOptions.getExecutorParallelismKey("TopoSoftwareCorrelationFinancial"), 14);
-+            }
-+            builder.startRecording("TopoSoftwareCorrelationFinancial");
-+            ITopologyCreate PipelineVar_10_FamilyElement11SubCreator = new TopoSoftwareCorrelationFinancial();
-+            SubTopologyOutput PipelineVar_10_FamilyElement11SubOutput = PipelineVar_10_FamilyElement11SubCreator.createSubTopology(builder,config,"TopoSoftwareCorrelationFinancial", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1TopoSoftwareCorrelationFinancial");
-+            builder.endRecording(PipelineVar_10_FamilyElement11SubCreator);
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement11SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement11SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:GenTopoHardwareCorrelationFinancialSubTopology
-+            ITopologyCreate PipelineVar_10_FamilyElement12SubCreator = new GenTopoHardwareCorrelationFinancialSubTopology();
-+            SubTopologyOutput PipelineVar_10_FamilyElement12SubOutput = PipelineVar_10_FamilyElement12SubCreator.createSubTopology(builder,config,"GenTopoHardwareCorrelationFinancial", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1GenTopoHardwareCorrelationFinancial");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement12SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement12SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWSubTopology
-+            ITopologyCreate PipelineVar_10_FamilyElement13SubCreator = new CorrelationSWSubTopology();
-+            SubTopologyOutput PipelineVar_10_FamilyElement13SubOutput = PipelineVar_10_FamilyElement13SubCreator.createSubTopology(builder,config,"CorrelationSW", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1CorrelationSW");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement13SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement13SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:TransferEntropyHardwareSubTopology
-+            ITopologyCreate PipelineVar_10_FamilyElement14SubCreator = new TransferEntropyHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_10_FamilyElement14SubOutput = PipelineVar_10_FamilyElement14SubCreator.createSubTopology(builder,config,"TransferEntropyHardware", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1TransferEntropyHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement14SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement14SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:MutualInformationHardwareSubTopology
-+            ITopologyCreate PipelineVar_10_FamilyElement15SubCreator = new MutualInformationHardwareSubTopology();
-+            SubTopologyOutput PipelineVar_10_FamilyElement15SubOutput = PipelineVar_10_FamilyElement15SubCreator.createSubTopology(builder,config,"MutualInformationHardware", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1MutualInformationHardware");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement15SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement15SubOutput.getMaxTaskParallelism());
-+            //generate the Storm-based algorithm topology name:CorrelationSWAlternativeSubTopology
-+            ITopologyCreate PipelineVar_10_FamilyElement16SubCreator = new CorrelationSWAlternativeSubTopology();
-+            SubTopologyOutput PipelineVar_10_FamilyElement16SubOutput = PipelineVar_10_FamilyElement16SubCreator.createSubTopology(builder,config,"CorrelationSWAlternative", "PipelineVar_10_FamilyElement1", "PipelineVar_10_FamilyElement1CorrelationSWAlternative");
-+            maxNumWorkers = Math.max(maxNumWorkers, PipelineVar_10_FamilyElement16SubOutput.getNumWorkers());
-+            maxTaskParallelism = Math.max(maxTaskParallelism, PipelineVar_10_FamilyElement16SubOutput.getMaxTaskParallelism());
-+            // Declare a Bolt "DynamicGraphCompilation"
-+
-+            BoltDeclarer PipelineVar_10_FamilyElement2=builder.setBolt("PipelineVar_10_FamilyElement2", new PipelineVar_10_FamilyElement2FamilyElement("PipelineVar_10_FamilyElement2", "TimeTravelPip"), 1);
-+            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement11SubOutput.getBoltName(), PipelineVar_10_FamilyElement11SubOutput.getStreamId());
-+            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement12SubOutput.getBoltName(), PipelineVar_10_FamilyElement12SubOutput.getStreamId());
-+            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement13SubOutput.getBoltName(), PipelineVar_10_FamilyElement13SubOutput.getStreamId());
-+            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement14SubOutput.getBoltName(), PipelineVar_10_FamilyElement14SubOutput.getStreamId());
-+            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement15SubOutput.getBoltName(), PipelineVar_10_FamilyElement15SubOutput.getStreamId());
-+            PipelineVar_10_FamilyElement2.shuffleGrouping(PipelineVar_10_FamilyElement16SubOutput.getBoltName(), PipelineVar_10_FamilyElement16SubOutput.getStreamId());
-+            // Declare a Bolt "TimeGraphMapper"
-+
-+            BoltDeclarer PipelineVar_10_FamilyElement3=builder.setBolt("PipelineVar_10_FamilyElement3", new PipelineVar_10_FamilyElement3FamilyElement("PipelineVar_10_FamilyElement3", "TimeTravelPip"), 1);
-+            PipelineVar_10_FamilyElement3.shuffleGrouping("PipelineVar_10_FamilyElement2", "PipelineVar_10_FamilyElement2EdgeStream");
-+            // Declare a Bolt "TimeGraphIndexer"
-+
-+            BoltDeclarer PipelineVar_10_FamilyElement4=builder.setBolt("PipelineVar_10_FamilyElement4", new PipelineVar_10_FamilyElement4FamilyElement("PipelineVar_10_FamilyElement4", "TimeTravelPip"), 5);
-+            PipelineVar_10_FamilyElement4.directGrouping("PipelineVar_10_FamilyElement3", "PipelineVar_10_FamilyElement3DataStream");
-+            PipelineVar_10_FamilyElement4.directGrouping("PipelineVar_10_FamilyElement4", "PipelineVar_10_FamilyElement4InternalRequests");
-+            // Declare a Bolt "TimeGraphQueryExecutor"
-+
-+            BoltDeclarer PipelineVar_10_FamilyElement5=builder.setBolt("PipelineVar_10_FamilyElement5", new PipelineVar_10_FamilyElement5FamilyElement("PipelineVar_10_FamilyElement5", "TimeTravelPip"), 1);
-+            PipelineVar_10_FamilyElement5.directGrouping("PipelineVar_10_FamilyElement4", "PipelineVar_10_FamilyElement4ExternalResponses");
-+            PipelineVar_10_FamilyElement4.allGrouping("PipelineVar_10_FamilyElement5", "PipelineVar_10_FamilyElement5BroadcastRequests");
-+            PipelineVar_10_FamilyElement4.directGrouping("PipelineVar_10_FamilyElement5", "PipelineVar_10_FamilyElement5UnicastRequests");
-+            // Declare a Bolt "TimeTravelSink"
-+
-+            BoltDeclarer PipelineVar_10_Sink0=builder.setBolt("PipelineVar_10_Sink0", new PipelineVar_10_Sink0Sink("PipelineVar_10_Sink0", "TimeTravelPip"), 1);
-+            PipelineVar_10_Sink0.shuffleGrouping("PipelineVar_10_FamilyElement5", "PipelineVar_10_FamilyElement5SnapshotStream");
-+            PipelineVar_10_Sink0.shuffleGrouping("PipelineVar_10_FamilyElement5", "PipelineVar_10_FamilyElement5PathStream");
-+            PipelineVar_10_FamilyElement1.shuffleGrouping("PipelineVar_10_Source0", "PipelineVar_10_Source0SymbolList");
-+            // Declare a Spout "queries"
-+
-+            builder.setSpout("PipelineVar_10_Source1", new PipelineVar_10_Source1Source("PipelineVar_10_Source1", "TimeTravelPip"), 1);
-+            PipelineVar_10_FamilyElement5.shuffleGrouping("PipelineVar_10_Source1", "PipelineVar_10_Source1SnapshotQueryStream");
-+            PipelineVar_10_FamilyElement5.shuffleGrouping("PipelineVar_10_Source1", "PipelineVar_10_Source1PathQueryStream");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/mapping.xml
-new file mode 100644
-index 0000000..d215fee
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/mapping.xml
-@@ -0,0 +1,31 @@
-+<mapping>
-+  <pipeline name="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.Topology">
-+      <node name="GraphDataSource" type="source">
-+          <component name="PipelineVar_18_Source0" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="TimeGraphMapper" type="family">
-+          <component name="PipelineVar_18_FamilyElement0" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphMapper"/>
-+      </node>
-+      <node name="TimeGraphIndexer" type="family">
-+          <component name="PipelineVar_18_FamilyElement1" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphIndexer"/>
-+      </node>
-+      <node name="TimeGraphQueryExecutor" type="family">
-+          <component name="PipelineVar_18_FamilyElement2" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_FamilyElement2FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TimeGraphQueryExecutor"/>
-+      </node>
-+      <node name="TimeTravelSink" type="sink">
-+          <component name="PipelineVar_18_Sink0" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="queries" type="source">
-+          <component name="PipelineVar_18_Source1" container="TimeTravelSimPip" class="eu.qualimaster.TimeTravelSimPip.topology.PipelineVar_18_Source1Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="TimeGraphMapper" implName="TimeGraphMapper" class="eu.qualimaster.timegraph.TimeGraphMapper"/>
-+      <algorithm name="TimeGraphIndexer" implName="TimeGraphIndexer" class="eu.qualimaster.timegraph.TimeGraphIndexer"/>
-+      <algorithm name="TimeGraphQueryExecutor" implName="TimeGraphQueryExecutor" class="eu.qualimaster.timegraph.TimeGraphQueryExecutor"/>
-+      <algorithm name="SimulatedGraphData" implName="SimulatedGraphDataAlgorithm" class="eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm"/>
-+      <algorithm name="TimeGraphQueriesSource" implName="QueriesSource" class="eu.qualimaster.timegraph.QueriesSource"/>
-+      <algorithm name="TimeTravelSink" implName="TimeTravelSink" class="eu.qualimaster.timegraph.TimeTravelSink"/>
-+      <parameter parameter="snapshotQuery" name="queries" receiver="PipelineVar_18_Source1"/> 
-+      <parameter parameter="pathQuery" name="queries" receiver="PipelineVar_18_Source1"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/pom.xml
-new file mode 100644
-index 0000000..6cbcd7b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/pom.xml
-@@ -0,0 +1,260 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>TimeTravelSimPip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>time-graph-spout</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>time-graph</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>time-graph-external</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>time-travel-sink</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/settings.xml
-new file mode 100644
-index 0000000..bb27d5f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/settings.xml
-@@ -0,0 +1,89 @@
-+<pipeline>
-+    <name>TimeTravelSimPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changepathQuery</name>
-+			<request>
-+				<field sequence="0">changepathQuery</field>
-+				<field sequence="1">%newPathQuery%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changepathQuery_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newPathQuery%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changesnapshotQuery</name>
-+			<request>
-+				<field sequence="0">changesnapshotQuery</field>
-+				<field sequence="1">%newSnapshotQuery%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changesnapshotQuery_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newSnapshotQuery%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..2252d23
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement0FamilyElement.java
-@@ -0,0 +1,262 @@
-+package eu.qualimaster.TimeTravelSimPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFTimeGraphMapper.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.timegraph.TimeGraphMapper;
-+import eu.qualimaster.data.inf.ISimulatedGraphData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_18_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_18_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput dataStreamResult = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
-+    private transient IFTimeGraphMapper alg = null; 
-+    private transient List<Integer> taskIdTimeGraphIndexer;
-+    private int PipelineVar_18_FamilyElement0TaskId;
-+    transient ISimulatedGraphDataEdgeStreamOutput iTupleEdgeStream = null;
-+    transient IIFTimeGraphMapperEdgeStreamInput inputEdgeStream = null;
-+
-+    public PipelineVar_18_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_18_FamilyElement1");
-+        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
-+        PipelineVar_18_FamilyElement0TaskId = topologyContext.getThisTaskId();
-+        logger.info("PipelineVar_18_FamilyElement0TaskId = " + PipelineVar_18_FamilyElement0TaskId);
-+
-+        dataStreamResult = new FTimeGraphMapper.IFTimeGraphMapperDataStreamOutput();
-+        IItemEmitter<IIFTimeGraphMapperDataStreamOutput> dataStreamEmitter = new IItemEmitter<IIFTimeGraphMapperDataStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphMapperDataStreamOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "PipelineVar_18_FamilyElement0DataStream", new Values(item));
-+            }
-+        };
-+        dataStreamResult.setEmitter(dataStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphMapper");
-+                    alg = (IFTimeGraphMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_18_FamilyElement0TaskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                } catch (NoSuchMethodException e) {
-+                    e.printStackTrace();
-+                } catch (InvocationTargetException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TimeGraphMapper", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fTimeGraphMapper"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof ISimulatedGraphDataEdgeStreamOutput) {
-+        iTupleEdgeStream = (ISimulatedGraphDataEdgeStreamOutput)tupleItem;
-+        inputEdgeStream = new FTimeGraphMapper.IFTimeGraphMapperEdgeStreamInput();
-+        inputEdgeStream.setEdge(iTupleEdgeStream.getEdge());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputEdgeStream, dataStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            dataStreamResult.setUpdate(null);
-+            dataStreamResult.setIsAddition(false);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphMapperDataStreamOutput> iterDataStream = dataStreamResult.iterator();
-+            iterDataStream.reset();
-+            while (iterDataStream.hasNext()) {
-+                IIFTimeGraphMapperDataStreamOutput out = iterDataStream.next();
-+                _collector.emitDirect(out.getTaskId(), "PipelineVar_18_FamilyElement0DataStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TimeGraphMapper":
-+                if (!algChange || !(alg instanceof TimeGraphMapper)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphMapper");
-+                        alg = (IFTimeGraphMapper) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_18_FamilyElement0TaskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    } catch (NoSuchMethodException e) {
-+                        e.printStackTrace();
-+                    } catch (InvocationTargetException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("TimeGraphMapper", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_18_FamilyElement0DataStream", new Fields("PipelineVar_18_FamilyElement0DataStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..45a1187
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement1FamilyElement.java
-@@ -0,0 +1,375 @@
-+package eu.qualimaster.TimeTravelSimPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.timegraph.TimeGraphIndexer;
-+import eu.qualimaster.families.inf.IFTimeGraphMapper.*;
-+import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
-+import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_18_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_18_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput externalResponsesResult = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
-+    private transient FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput internalRequestsResult = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
-+    private transient IFTimeGraphIndexer alg = null; 
-+    private transient List<Integer> taskIdTimeGraphIndexer;
-+    private transient List<Integer> taskIdTimeGraphQueryExecutor;
-+    private int PipelineVar_18_FamilyElement1TaskId;
-+    transient IIFTimeGraphMapperDataStreamOutput iTupleDataStream = null;
-+    transient IIFTimeGraphIndexerInternalRequestsOutput iTupleInternalRequests = null;
-+    transient IIFTimeGraphQueryExecutorUnicastRequestsOutput iTupleUnicastRequests = null;
-+    transient IIFTimeGraphQueryExecutorBroadcastRequestsOutput iTupleBroadcastRequests = null;
-+    transient IIFTimeGraphIndexerDataStreamInput inputDataStream = null;
-+    transient IIFTimeGraphIndexerInternalRequestsInput inputInternalRequests = null;
-+    transient IIFTimeGraphIndexerUnicastRequestsInput inputUnicastRequests = null;
-+    transient IIFTimeGraphIndexerBroadcastRequestsInput inputBroadcastRequests = null;
-+
-+    public PipelineVar_18_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_18_FamilyElement1");
-+        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
-+        taskIdTimeGraphQueryExecutor = topologyContext.getComponentTasks("PipelineVar_18_FamilyElement2");
-+        logger.info("taskIdsTimeGraphQueryExecutor = " + taskIdTimeGraphQueryExecutor);
-+        PipelineVar_18_FamilyElement1TaskId = topologyContext.getThisTaskId();
-+        logger.info("PipelineVar_18_FamilyElement1TaskId = " + PipelineVar_18_FamilyElement1TaskId);
-+
-+        externalResponsesResult = new FTimeGraphIndexer.IFTimeGraphIndexerExternalResponsesOutput();
-+        IItemEmitter<IIFTimeGraphIndexerExternalResponsesOutput> externalResponsesEmitter = new IItemEmitter<IIFTimeGraphIndexerExternalResponsesOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphIndexerExternalResponsesOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "PipelineVar_18_FamilyElement1ExternalResponses", new Values(item));
-+            }
-+        };
-+        externalResponsesResult.setEmitter(externalResponsesEmitter);
-+
-+        internalRequestsResult = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsOutput();
-+        IItemEmitter<IIFTimeGraphIndexerInternalRequestsOutput> internalRequestsEmitter = new IItemEmitter<IIFTimeGraphIndexerInternalRequestsOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphIndexerInternalRequestsOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "PipelineVar_18_FamilyElement1InternalRequests", new Values(item));
-+            }
-+        };
-+        internalRequestsResult.setEmitter(internalRequestsEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphIndexer");
-+                    alg = (IFTimeGraphIndexer) cls.getConstructor(List.class, List.class, int.class).newInstance(taskIdTimeGraphIndexer, taskIdTimeGraphQueryExecutor, PipelineVar_18_FamilyElement1TaskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                } catch (NoSuchMethodException e) {
-+                    e.printStackTrace();
-+                } catch (InvocationTargetException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TimeGraphIndexer", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fTimeGraphIndexer"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFTimeGraphMapperDataStreamOutput) {
-+            iTupleDataStream = (IIFTimeGraphMapperDataStreamOutput)tupleItem;
-+            inputDataStream = new FTimeGraphIndexer.IFTimeGraphIndexerDataStreamInput();
-+            inputDataStream.setUpdate(iTupleDataStream.getUpdate());
-+            inputDataStream.setIsAddition(iTupleDataStream.getIsAddition());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputDataStream, externalResponsesResult, internalRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                externalResponsesResult.setExternalResponse(null);
-+                internalRequestsResult.setInternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphIndexerInternalRequestsOutput) {
-+            iTupleInternalRequests = (IIFTimeGraphIndexerInternalRequestsOutput)tupleItem;
-+            inputInternalRequests = new FTimeGraphIndexer.IFTimeGraphIndexerInternalRequestsInput();
-+            inputInternalRequests.setInternalRequest(iTupleInternalRequests.getInternalRequest());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputInternalRequests, externalResponsesResult, internalRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                externalResponsesResult.setExternalResponse(null);
-+                internalRequestsResult.setInternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphQueryExecutorUnicastRequestsOutput) {
-+            iTupleUnicastRequests = (IIFTimeGraphQueryExecutorUnicastRequestsOutput)tupleItem;
-+            inputUnicastRequests = new FTimeGraphIndexer.IFTimeGraphIndexerUnicastRequestsInput();
-+            inputUnicastRequests.setUnicastExternalRequest(iTupleUnicastRequests.getUnicastExternalRequest());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputUnicastRequests, externalResponsesResult, internalRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                externalResponsesResult.setExternalResponse(null);
-+                internalRequestsResult.setInternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphQueryExecutorBroadcastRequestsOutput) {
-+            iTupleBroadcastRequests = (IIFTimeGraphQueryExecutorBroadcastRequestsOutput)tupleItem;
-+            inputBroadcastRequests = new FTimeGraphIndexer.IFTimeGraphIndexerBroadcastRequestsInput();
-+            inputBroadcastRequests.setBroadcastExternalRequest(iTupleBroadcastRequests.getBroadcastExternalRequest());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputBroadcastRequests, externalResponsesResult, internalRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                externalResponsesResult.setExternalResponse(null);
-+                internalRequestsResult.setInternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphIndexerExternalResponsesOutput> iterExternalResponses = externalResponsesResult.iterator();
-+            iterExternalResponses.reset();
-+            while (iterExternalResponses.hasNext()) {
-+                IIFTimeGraphIndexerExternalResponsesOutput out = iterExternalResponses.next();
-+                _collector.emitDirect(out.getTaskId(), "PipelineVar_18_FamilyElement1ExternalResponses", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphIndexerInternalRequestsOutput> iterInternalRequests = internalRequestsResult.iterator();
-+            iterInternalRequests.reset();
-+            while (iterInternalRequests.hasNext()) {
-+                IIFTimeGraphIndexerInternalRequestsOutput out = iterInternalRequests.next();
-+                _collector.emitDirect(out.getTaskId(), "PipelineVar_18_FamilyElement1InternalRequests", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TimeGraphIndexer":
-+                if (!algChange || !(alg instanceof TimeGraphIndexer)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphIndexer");
-+                        alg = (IFTimeGraphIndexer) cls.getConstructor(List.class, List.class, int.class).newInstance(taskIdTimeGraphIndexer, taskIdTimeGraphQueryExecutor, PipelineVar_18_FamilyElement1TaskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    } catch (NoSuchMethodException e) {
-+                        e.printStackTrace();
-+                    } catch (InvocationTargetException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("TimeGraphIndexer", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_18_FamilyElement1ExternalResponses", new Fields("PipelineVar_18_FamilyElement1ExternalResponsesFields"));
-+        declarer.declareStream("PipelineVar_18_FamilyElement1InternalRequests", new Fields("PipelineVar_18_FamilyElement1InternalRequestsFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement2FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement2FamilyElement.java
-new file mode 100644
-index 0000000..3b6049b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_FamilyElement2FamilyElement.java
-@@ -0,0 +1,385 @@
-+package eu.qualimaster.TimeTravelSimPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.timegraph.TimeGraphQueryExecutor;
-+import eu.qualimaster.families.inf.IFTimeGraphIndexer.*;
-+import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_18_FamilyElement2FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_18_FamilyElement2FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput snapshotStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
-+    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput pathStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
-+    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput unicastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
-+    private transient FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput broadcastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
-+    private transient IFTimeGraphQueryExecutor alg = null; 
-+    private transient List<Integer> taskIdTimeGraphIndexer;
-+    private int PipelineVar_18_FamilyElement2TaskId;
-+    transient ITimeGraphQueriesSourceSnapshotQueryStreamOutput iTupleSnapshotQueryStream = null;
-+    transient ITimeGraphQueriesSourcePathQueryStreamOutput iTuplePathQueryStream = null;
-+    transient IIFTimeGraphIndexerExternalResponsesOutput iTupleExternalResponses = null;
-+    transient IIFTimeGraphQueryExecutorSnapshotQueryStreamInput inputSnapshotQueryStream = null;
-+    transient IIFTimeGraphQueryExecutorPathQueryStreamInput inputPathQueryStream = null;
-+    transient IIFTimeGraphQueryExecutorExternalResponsesInput inputExternalResponses = null;
-+
-+    public PipelineVar_18_FamilyElement2FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+        taskIdTimeGraphIndexer = topologyContext.getComponentTasks("PipelineVar_18_FamilyElement1");
-+        logger.info("taskIdsTimeGraphIndexer = " + taskIdTimeGraphIndexer);
-+        PipelineVar_18_FamilyElement2TaskId = topologyContext.getThisTaskId();
-+        logger.info("PipelineVar_18_FamilyElement2TaskId = " + PipelineVar_18_FamilyElement2TaskId);
-+
-+        snapshotStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotStreamOutput();
-+        IItemEmitter<IIFTimeGraphQueryExecutorSnapshotStreamOutput> snapshotStreamEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorSnapshotStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorSnapshotStreamOutput item) {
-+                _collector.emit("PipelineVar_18_FamilyElement2SnapshotStream", new Values(item));
-+            }
-+        };
-+        snapshotStreamResult.setEmitter(snapshotStreamEmitter);
-+
-+        pathStreamResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathStreamOutput();
-+        IItemEmitter<IIFTimeGraphQueryExecutorPathStreamOutput> pathStreamEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorPathStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorPathStreamOutput item) {
-+                _collector.emit("PipelineVar_18_FamilyElement2PathStream", new Values(item));
-+            }
-+        };
-+        pathStreamResult.setEmitter(pathStreamEmitter);
-+
-+        unicastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorUnicastRequestsOutput();
-+        IItemEmitter<IIFTimeGraphQueryExecutorUnicastRequestsOutput> unicastRequestsEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorUnicastRequestsOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorUnicastRequestsOutput item) {
-+                _collector.emitDirect(item.getTaskId(), "PipelineVar_18_FamilyElement2UnicastRequests", new Values(item));
-+            }
-+        };
-+        unicastRequestsResult.setEmitter(unicastRequestsEmitter);
-+
-+        broadcastRequestsResult = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorBroadcastRequestsOutput();
-+        IItemEmitter<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> broadcastRequestsEmitter = new IItemEmitter<IIFTimeGraphQueryExecutorBroadcastRequestsOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTimeGraphQueryExecutorBroadcastRequestsOutput item) {
-+                _collector.emit("PipelineVar_18_FamilyElement2BroadcastRequests", new Values(item));
-+            }
-+        };
-+        broadcastRequestsResult.setEmitter(broadcastRequestsEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphQueryExecutor");
-+                    alg = (IFTimeGraphQueryExecutor) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_18_FamilyElement2TaskId);
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                } catch (NoSuchMethodException e) {
-+                    e.printStackTrace();
-+                } catch (InvocationTargetException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TimeGraphQueryExecutor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fTimeGraphQueryExecutor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof ITimeGraphQueriesSourceSnapshotQueryStreamOutput) {
-+            iTupleSnapshotQueryStream = (ITimeGraphQueriesSourceSnapshotQueryStreamOutput)tupleItem;
-+            inputSnapshotQueryStream = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorSnapshotQueryStreamInput();
-+            inputSnapshotQueryStream.setStart(iTupleSnapshotQueryStream.getStart());
-+            inputSnapshotQueryStream.setEnd(iTupleSnapshotQueryStream.getEnd());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSnapshotQueryStream, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                snapshotStreamResult.setSnapshot("");
-+                pathStreamResult.setPath("");
-+                unicastRequestsResult.setUnicastExternalRequest(null);
-+                broadcastRequestsResult.setBroadcastExternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof ITimeGraphQueriesSourcePathQueryStreamOutput) {
-+            iTuplePathQueryStream = (ITimeGraphQueriesSourcePathQueryStreamOutput)tupleItem;
-+            inputPathQueryStream = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorPathQueryStreamInput();
-+            inputPathQueryStream.setStart(iTuplePathQueryStream.getStart());
-+            inputPathQueryStream.setEnd(iTuplePathQueryStream.getEnd());
-+            inputPathQueryStream.setVertexA(iTuplePathQueryStream.getVertexA());
-+            inputPathQueryStream.setVertexB(iTuplePathQueryStream.getVertexB());
-+            inputPathQueryStream.setType(iTuplePathQueryStream.getType());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPathQueryStream, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                snapshotStreamResult.setSnapshot("");
-+                pathStreamResult.setPath("");
-+                unicastRequestsResult.setUnicastExternalRequest(null);
-+                broadcastRequestsResult.setBroadcastExternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphIndexerExternalResponsesOutput) {
-+            iTupleExternalResponses = (IIFTimeGraphIndexerExternalResponsesOutput)tupleItem;
-+            inputExternalResponses = new FTimeGraphQueryExecutor.IFTimeGraphQueryExecutorExternalResponsesInput();
-+            inputExternalResponses.setExternalResponse(iTupleExternalResponses.getExternalResponse());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputExternalResponses, snapshotStreamResult, pathStreamResult, unicastRequestsResult, broadcastRequestsResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                snapshotStreamResult.setSnapshot("");
-+                pathStreamResult.setPath("");
-+                unicastRequestsResult.setUnicastExternalRequest(null);
-+                broadcastRequestsResult.setBroadcastExternalRequest(null);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorSnapshotStreamOutput> iterSnapshotStream = snapshotStreamResult.iterator();
-+            iterSnapshotStream.reset();
-+            while (iterSnapshotStream.hasNext()) {
-+                IIFTimeGraphQueryExecutorSnapshotStreamOutput out = iterSnapshotStream.next();
-+                _collector.emit("PipelineVar_18_FamilyElement2SnapshotStream", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorPathStreamOutput> iterPathStream = pathStreamResult.iterator();
-+            iterPathStream.reset();
-+            while (iterPathStream.hasNext()) {
-+                IIFTimeGraphQueryExecutorPathStreamOutput out = iterPathStream.next();
-+                _collector.emit("PipelineVar_18_FamilyElement2PathStream", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorUnicastRequestsOutput> iterUnicastRequests = unicastRequestsResult.iterator();
-+            iterUnicastRequests.reset();
-+            while (iterUnicastRequests.hasNext()) {
-+                IIFTimeGraphQueryExecutorUnicastRequestsOutput out = iterUnicastRequests.next();
-+                _collector.emitDirect(out.getTaskId(), "PipelineVar_18_FamilyElement2UnicastRequests", new Values(out));
-+            }
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTimeGraphQueryExecutorBroadcastRequestsOutput> iterBroadcastRequests = broadcastRequestsResult.iterator();
-+            iterBroadcastRequests.reset();
-+            while (iterBroadcastRequests.hasNext()) {
-+                IIFTimeGraphQueryExecutorBroadcastRequestsOutput out = iterBroadcastRequests.next();
-+                _collector.emit("PipelineVar_18_FamilyElement2BroadcastRequests", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TimeGraphQueryExecutor":
-+                if (!algChange || !(alg instanceof TimeGraphQueryExecutor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.timegraph.TimeGraphQueryExecutor");
-+                        alg = (IFTimeGraphQueryExecutor) cls.getConstructor(List.class, int.class).newInstance(taskIdTimeGraphIndexer, PipelineVar_18_FamilyElement2TaskId);
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    } catch (NoSuchMethodException e) {
-+                        e.printStackTrace();
-+                    } catch (InvocationTargetException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("TimeGraphQueryExecutor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_18_FamilyElement2SnapshotStream", new Fields("PipelineVar_18_FamilyElement2SnapshotStreamFields"));
-+        declarer.declareStream("PipelineVar_18_FamilyElement2PathStream", new Fields("PipelineVar_18_FamilyElement2PathStreamFields"));
-+        declarer.declareStream("PipelineVar_18_FamilyElement2UnicastRequests", new Fields("PipelineVar_18_FamilyElement2UnicastRequestsFields"));
-+        declarer.declareStream("PipelineVar_18_FamilyElement2BroadcastRequests", new Fields("PipelineVar_18_FamilyElement2BroadcastRequestsFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Sink0Sink.java
-new file mode 100644
-index 0000000..872455f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Sink0Sink.java
-@@ -0,0 +1,144 @@
-+package eu.qualimaster.TimeTravelSimPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.ITimeTravelSink;
-+import eu.qualimaster.data.inf.ITimeTravelSink.*;
-+import eu.qualimaster.data.imp.TimeTravelSink;
-+import eu.qualimaster.data.imp.TimeTravelSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFTimeGraphQueryExecutor.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_18_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_18_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient ITimeTravelSink sinkHandler;
-+private int counter = 0;
-+    transient IIFTimeGraphQueryExecutorSnapshotStreamOutput iTupleSnapshotStream = null;
-+    transient IIFTimeGraphQueryExecutorPathStreamOutput iTuplePathStream = null;
-+    transient ITimeTravelSinkSnapshotStreamInput inputSnapshotStream = null;
-+    transient ITimeTravelSinkPathStreamInput inputPathStream = null;
-+
-+	public PipelineVar_18_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+        if(tupleItem instanceof IIFTimeGraphQueryExecutorSnapshotStreamOutput) {
-+            iTupleSnapshotStream = (IIFTimeGraphQueryExecutorSnapshotStreamOutput)tupleItem;
-+            inputSnapshotStream = new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
-+            inputSnapshotStream.setSnapshot(iTupleSnapshotStream.getSnapshot());
-+            sinkHandler.postDataSnapshotStream(inputSnapshotStream);
-+            emitted(inputSnapshotStream);
-+        }
-+
-+        if(tupleItem instanceof IIFTimeGraphQueryExecutorPathStreamOutput) {
-+            iTuplePathStream = (IIFTimeGraphQueryExecutorPathStreamOutput)tupleItem;
-+            inputPathStream = new TimeTravelSink.TimeTravelSinkPathStreamInput();
-+            inputPathStream.setPath(iTuplePathStream.getPath());
-+            sinkHandler.postDataPathStream(inputPathStream);
-+            emitted(inputPathStream);
-+        }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new TimeTravelSink.TimeTravelSinkSnapshotStreamInput();
-+        new TimeTravelSink.TimeTravelSinkPathStreamInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ITimeTravelSink> cls = (Class<? extends ITimeTravelSink>)Class.forName("eu.qualimaster.timegraph.TimeTravelSink");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("TimeTravelSink", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_18_Sink0SnapshotStream", new Fields("PipelineVar_18_Sink0SnapshotStreamFields"));
-+        declarer.declareStream("PipelineVar_18_Sink0PathStream", new Fields("PipelineVar_18_Sink0PathStreamFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source0Source.java
-new file mode 100644
-index 0000000..f8679fe
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source0Source.java
-@@ -0,0 +1,171 @@
-+package eu.qualimaster.TimeTravelSimPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ISimulatedGraphData;
-+import eu.qualimaster.data.inf.ISimulatedGraphData.*;
-+import eu.qualimaster.data.imp.SimulatedGraphData;
-+import eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_18_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_18_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ISimulatedGraphData sourceData;
-+
-+    public PipelineVar_18_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("TimeTravelSimPip", "PipelineVar_18_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ISimulatedGraphDataEdgeStreamOutput>(ISimulatedGraphDataEdgeStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ISimulatedGraphDataEdgeStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ISimulatedGraphData> cls = (Class<? extends ISimulatedGraphData>) Class.forName("eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("SimulatedGraphDataAlgorithm", null);
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("TimeTravelSimPip", "PipelineVar_18_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_18_Source0StreamEdgeStream".
-+        ISimulatedGraphDataEdgeStreamOutput dataItemEdgeStream = new SimulatedGraphData.SimulatedGraphDataEdgeStreamOutput();
-+        try {
-+            dataItemEdgeStream = sourceData.getEdgeStream();
-+        } catch(DefaultModeException e) {
-+            dataItemEdgeStream.setEdge("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemEdgeStream!=null){
-+            _collector.emit("PipelineVar_18_Source0EdgeStream", new Values(dataItemEdgeStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_18_Source0EdgeStream", new Fields("PipelineVar_18_Source0EdgeStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source1Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source1Source.java
-new file mode 100644
-index 0000000..760017c
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/PipelineVar_18_Source1Source.java
-@@ -0,0 +1,221 @@
-+package eu.qualimaster.TimeTravelSimPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.ITimeGraphQueriesSource;
-+import eu.qualimaster.data.inf.ITimeGraphQueriesSource.*;
-+import eu.qualimaster.data.imp.TimeGraphQueriesSource;
-+import eu.qualimaster.timegraph.QueriesSource;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_18_Source1Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_18_Source1Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient ITimeGraphQueriesSource sourceData;
-+
-+    public PipelineVar_18_Source1Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("TimeTravelSimPip", "PipelineVar_18_Source1", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITimeGraphQueriesSourceSnapshotQueryStreamOutput>(ITimeGraphQueriesSourceSnapshotQueryStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ITimeGraphQueriesSourceSnapshotQueryStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<ITimeGraphQueriesSourcePathQueryStreamOutput>(ITimeGraphQueriesSourcePathQueryStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(ITimeGraphQueriesSourcePathQueryStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ITimeGraphQueriesSource> cls = (Class<? extends ITimeGraphQueriesSource>) Class.forName("eu.qualimaster.timegraph.QueriesSource");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("QueriesSource", null);
-+            if (PipelineOptions.hasExecutorArgument(conf, getName(), "snapshotQuery")) {
-+                sourceData.setParameterSnapshotQuery(PipelineOptions.getExecutorStringArgument(conf, getName(), "snapshotQuery", ""));
-+            }
-+            if (PipelineOptions.hasExecutorArgument(conf, getName(), "pathQuery")) {
-+                sourceData.setParameterPathQuery(PipelineOptions.getExecutorStringArgument(conf, getName(), "pathQuery", ""));
-+            }
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("TimeTravelSimPip", "PipelineVar_18_Source1", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_18_Source1StreamSnapshotQueryStream".
-+        ITimeGraphQueriesSourceSnapshotQueryStreamOutput dataItemSnapshotQueryStream = new TimeGraphQueriesSource.TimeGraphQueriesSourceSnapshotQueryStreamOutput();
-+        try {
-+            dataItemSnapshotQueryStream = sourceData.getSnapshotQueryStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSnapshotQueryStream.setStart(0);
-+            dataItemSnapshotQueryStream.setEnd(0);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSnapshotQueryStream!=null){
-+            _collector.emit("PipelineVar_18_Source1SnapshotQueryStream", new Values(dataItemSnapshotQueryStream));
-+        }
-+
-+        // Emitting stream "PipelineVar_18_Source1PathQueryStream".
-+        ITimeGraphQueriesSourcePathQueryStreamOutput dataItemPathQueryStream = new TimeGraphQueriesSource.TimeGraphQueriesSourcePathQueryStreamOutput();
-+        try {
-+            dataItemPathQueryStream = sourceData.getPathQueryStream();
-+        } catch(DefaultModeException e) {
-+            dataItemPathQueryStream.setStart(0);
-+            dataItemPathQueryStream.setEnd(0);
-+            dataItemPathQueryStream.setVertexA("");
-+            dataItemPathQueryStream.setVertexB("");
-+            dataItemPathQueryStream.setType("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemPathQueryStream!=null){
-+            _collector.emit("PipelineVar_18_Source1PathQueryStream", new Values(dataItemPathQueryStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "snapshotQuery" :
-+                    logger.info("Received the parameter snapshotQuery!");
-+                    sourceData.setParameterSnapshotQuery(para.getStringValue()); 
-+                    sendParameterChangeEvent("snapshotQuery", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+                case "pathQuery" :
-+                    logger.info("Received the parameter pathQuery!");
-+                    sourceData.setParameterPathQuery(para.getStringValue()); 
-+                    sendParameterChangeEvent("pathQuery", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_18_Source1SnapshotQueryStream", new Fields("PipelineVar_18_Source1SnapshotQueryStreamFields"));
-+        declarer.declareStream("PipelineVar_18_Source1PathQueryStream", new Fields("PipelineVar_18_Source1PathQueryStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/Topology.java
-new file mode 100644
-index 0000000..19e6d6a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TimeTravelSimPip/topology/Topology.java
-@@ -0,0 +1,119 @@
-+package eu.qualimaster.TimeTravelSimPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.timegraph.TimeGraphMapper;
-+import eu.qualimaster.timegraph.TimeGraphIndexer;
-+import eu.qualimaster.timegraph.TimeGraphQueryExecutor;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "TimeTravelSimPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 18; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "GraphDataSource"
-+
-+            builder.setSpout("PipelineVar_18_Source0", new PipelineVar_18_Source0Source("PipelineVar_18_Source0", "TimeTravelSimPip"), 1);
-+            // Declare a Bolt "TimeGraphMapper"
-+
-+            BoltDeclarer PipelineVar_18_FamilyElement0=builder.setBolt("PipelineVar_18_FamilyElement0", new PipelineVar_18_FamilyElement0FamilyElement("PipelineVar_18_FamilyElement0", "TimeTravelSimPip"), 1);
-+            PipelineVar_18_FamilyElement0.shuffleGrouping("PipelineVar_18_Source0", "PipelineVar_18_Source0EdgeStream");
-+            // Declare a Bolt "TimeGraphIndexer"
-+
-+            BoltDeclarer PipelineVar_18_FamilyElement1=builder.setBolt("PipelineVar_18_FamilyElement1", new PipelineVar_18_FamilyElement1FamilyElement("PipelineVar_18_FamilyElement1", "TimeTravelSimPip"), 1);
-+            PipelineVar_18_FamilyElement1.directGrouping("PipelineVar_18_FamilyElement0", "PipelineVar_18_FamilyElement0DataStream");
-+            PipelineVar_18_FamilyElement1.directGrouping("PipelineVar_18_FamilyElement1", "PipelineVar_18_FamilyElement1InternalRequests");
-+            // Declare a Bolt "TimeGraphQueryExecutor"
-+
-+            BoltDeclarer PipelineVar_18_FamilyElement2=builder.setBolt("PipelineVar_18_FamilyElement2", new PipelineVar_18_FamilyElement2FamilyElement("PipelineVar_18_FamilyElement2", "TimeTravelSimPip"), 1);
-+            PipelineVar_18_FamilyElement2.directGrouping("PipelineVar_18_FamilyElement1", "PipelineVar_18_FamilyElement1ExternalResponses");
-+            PipelineVar_18_FamilyElement1.directGrouping("PipelineVar_18_FamilyElement2", "PipelineVar_18_FamilyElement2UnicastRequests");
-+            // Declare a Bolt "TimeTravelSink"
-+
-+            BoltDeclarer PipelineVar_18_Sink0=builder.setBolt("PipelineVar_18_Sink0", new PipelineVar_18_Sink0Sink("PipelineVar_18_Sink0", "TimeTravelSimPip"), 1);
-+            PipelineVar_18_Sink0.shuffleGrouping("PipelineVar_18_FamilyElement2", "PipelineVar_18_FamilyElement2SnapshotStream");
-+            PipelineVar_18_Sink0.shuffleGrouping("PipelineVar_18_FamilyElement2", "PipelineVar_18_FamilyElement2PathStream");
-+            PipelineVar_18_FamilyElement1.allGrouping("PipelineVar_18_FamilyElement2", "PipelineVar_18_FamilyElement2BroadcastRequests");
-+            // Declare a Spout "queries"
-+
-+            builder.setSpout("PipelineVar_18_Source1", new PipelineVar_18_Source1Source("PipelineVar_18_Source1", "TimeTravelSimPip"), 1);
-+            PipelineVar_18_FamilyElement2.shuffleGrouping("PipelineVar_18_Source1", "PipelineVar_18_Source1SnapshotQueryStream");
-+            PipelineVar_18_FamilyElement2.shuffleGrouping("PipelineVar_18_Source1", "PipelineVar_18_Source1PathQueryStream");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/mapping.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/mapping.xml
-new file mode 100644
-index 0000000..2bd4279
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/mapping.xml
-@@ -0,0 +1,29 @@
-+<mapping>
-+  <pipeline name="TransferPip" class="eu.qualimaster.TransferPip.topology.Topology">
-+      <node name="SpringDataSource" type="source">
-+          <component name="PipelineVar_13_Source0" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_Source0Source" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="Preprocessor" type="family">
-+          <component name="PipelineVar_13_FamilyElement0" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_FamilyElement0FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "Preprocessor"/>
-+      </node>
-+      <node name="TransferEntropyCalculation" type="family">
-+          <component name="PipelineVar_13_FamilyElement1" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_FamilyElement1FamilyElement" receiver="true" thrift="false" tasks="1" alternative0 = "TransferEntropySoftware"/>
-+      </node>
-+      <node name="Sink" type="sink">
-+          <component name="PipelineVar_13_Sink0" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_Sink0Sink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <node name="ReplaySink" type="replaySink">
-+          <component name="PipelineVar_13_ReplaySink1" container="TransferPip" class="eu.qualimaster.TransferPip.topology.PipelineVar_13_ReplaySink1ReplaySink" receiver="true" thrift="false" tasks="1"/>
-+      </node>
-+      <algorithm name="Preprocessor" implName="Preprocessor" class="eu.qualimaster.algorithms.imp.correlation.Preprocessor"/>
-+      <algorithm name="TransferEntropySoftware" implName="TransferEntropy" class="eu.qualimaster.algorithms.imp.TransferEntropy"/>
-+      <algorithm name="FocusFincancialData" implName="FocusedSpringClient" class="eu.qualimaster.focus.FocusedSpringClient"/>
-+      <algorithm name="TransferSink" implName="TransferSink" class="eu.qualimaster.algorithms.imp.TransferSink"/>
-+      <algorithm name="TransferSink" implName="TransferSink" class="eu.qualimaster.algorithms.imp.TransferSink"/>
-+      <parameter parameter="playerList" name="SpringDataSource" receiver="PipelineVar_13_Source0"/> 
-+      <parameter parameter="windowSize" name="TransferEntropyCalculation" receiver="PipelineVar_13_FamilyElement1"/> 
-+      <parameter parameter="windowAdvance" name="TransferEntropyCalculation" receiver="PipelineVar_13_FamilyElement1"/> 
-+      <parameter parameter="densitySize" name="TransferEntropyCalculation" receiver="PipelineVar_13_FamilyElement1"/> 
-+  </pipeline>
-+
-+</mapping>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/pom.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/pom.xml
-new file mode 100644
-index 0000000..4c68527
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/pom.xml
-@@ -0,0 +1,260 @@
-+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-+  <modelVersion>4.0.0</modelVersion>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>TransferPip</artifactId>
-+  <version>0.0.1-SNAPSHOT</version>
-+  <packaging>jar</packaging>
-+
-+  <properties>
-+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-+  </properties>
-+  <repositories>
-+    <repository>
-+      <id>qm.eu</id>
-+      <name>qm.eu</name>
-+      <url>https://projects.sse.uni-hildesheim.de/qm/maven/</url>
-+    </repository>
-+  </repositories>
-+  <build>
-+    <sourceDirectory>${basedir}/topology</sourceDirectory>
-+        <plugins>
-+            <plugin>
-+          <groupId>org.apache.maven.plugins</groupId>
-+          <artifactId>maven-shade-plugin</artifactId>
-+          <version>2.3</version>
-+          <executions>
-+            <execution>
-+            <phase>package</phase>
-+            <goals>
-+                <goal>shade</goal>
-+            </goals>
-+            <configuration>
-+            <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
-+            <filters>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSW</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline1</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:RandomSubPipeline2</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+                <filter>
-+                    <artifact>eu.qualimaster:CorrelationSWAlternative</artifact>
-+                    <excludes>
-+                      <exclude>mapping.xml</exclude>
-+                    </excludes>
-+                </filter>
-+            </filters>
-+            </configuration>
-+              </execution>
-+          </executions>
-+        </plugin>
-+            <plugin>
-+				<artifactId>maven-install-plugin</artifactId>
-+				<version>2.3.1</version>
-+				<configuration>
-+					<createChecksum>true</createChecksum>
-+				</configuration>
-+			</plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-compiler-plugin</artifactId>
-+                <version>3.0</version>
-+                <configuration>
-+                    <source>1.7</source>
-+                    <target>1.7</target>
-+                </configuration>              
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-jar-plugin</artifactId>
-+                <version>2.4</version>
-+                <configuration>
-+                    <useDefaultManifestFile>true</useDefaultManifestFile>
-+					<archive>
-+						<manifest>
-+							<addClasspath>true</addClasspath>
-+							<mainClass>TestFramework</mainClass>
-+						</manifest>
-+					</archive>
-+                </configuration>
-+            </plugin>
-+            <plugin>
-+                <groupId>org.apache.maven.plugins</groupId>
-+                <artifactId>maven-source-plugin</artifactId>
-+                <version>2.2.1</version>
-+                <executions>
-+                    <execution>
-+                        <id>attach-sources</id>
-+                        <phase>verify</phase>
-+                        <goals>
-+                            <goal>jar</goal>
-+                        </goals>
-+                    </execution>
-+                </executions>
-+            </plugin>
-+            <plugin>
-+		        <groupId>org.codehaus.mojo</groupId>
-+		        <artifactId>exec-maven-plugin</artifactId>
-+		        <version>1.3</version>
-+		        <executions>
-+		          <execution>
-+		            <goals>
-+		              <goal>exec</goal>
-+		            </goals>
-+		          </execution>
-+		        </executions>
-+		        <configuration>
-+		          <executable>java</executable>
-+		          <includeProjectDependencies>true</includeProjectDependencies>
-+		          <includePluginDependencies>false</includePluginDependencies>
-+		          <classpathScope>compile</classpathScope>
-+		          <mainClass>${storm.topology}</mainClass>
-+		        </configuration>
-+		    </plugin>
-+            <plugin>
-+					<groupId>org.eclipse.m2e</groupId>
-+					<artifactId>lifecycle-mapping</artifactId>
-+					<version>1.0.0</version>
-+					<configuration>
-+						<lifecycleMappingMetadata>
-+							<pluginExecutions>
-+								<pluginExecution>
-+									<pluginExecutionFilter>
-+										<groupId>org.apache.maven.plugins</groupId>
-+										<artifactId>maven-dependency-plugin</artifactId>
-+										<versionRange>[2.0,)</versionRange>
-+										<goals>
-+											<goal>copy-dependencies</goal>
-+										</goals>
-+									</pluginExecutionFilter>
-+									<action>
-+										<execute />
-+									</action>
-+								</pluginExecution>
-+							</pluginExecutions>
-+						</lifecycleMappingMetadata>
-+					</configuration>
-+				</plugin>
-+        </plugins>
-+    <resources>
-+        <resource>
-+            <directory>${basedir}/</directory>
-+            <filtering>false</filtering>
-+            <includes>
-+            <include>mapping.xml</include>
-+			<include>settings.xml</include>
-+            </includes>
-+        </resource>
-+    </resources>
-+  </build>
-+
-+
-+<dependencyManagement>
-+    <dependencies>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>InfrastructureDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>
-+        <dependency>
-+            <groupId>eu.qualimaster</groupId>
-+            <artifactId>PipelineDependencies</artifactId>
-+            <version>0.5.0-SNAPSHOT</version>
-+            <type>pom</type>
-+            <scope>import</scope>
-+        </dependency>            
-+    </dependencies>
-+</dependencyManagement>
-+  <dependencies>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>StormCommons</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>DataManagementLayer</artifactId>
-+   </dependency>
-+   <dependency>
-+     <groupId>eu.qualimaster</groupId>
-+     <artifactId>QualiMaster.Events</artifactId>
-+   </dependency>
-+    <dependency>
-+  <groupId>eu.qualimaster</groupId>
-+  <artifactId>PriorityPipelineInterfaces</artifactId>
-+  <version>0.5.0-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>      
-+      <groupId>org.apache.storm</groupId>
-+      <artifactId>storm-core</artifactId>
-+    </dependency>
-+   <dependency>
-+     <groupId>com.github.ptgoetz</groupId>
-+     <artifactId>storm-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-hdfs</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hadoop</groupId>
-+     <artifactId>hadoop-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-common</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-protocol</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+   <dependency>
-+     <groupId>org.apache.hbase</groupId>
-+     <artifactId>hbase-client</artifactId>
-+	 <scope>compile</scope>
-+   </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>focused-spring-client</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>hy-preprocessor</artifactId>
-+      <version>3.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>transfer-entropy</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+    <dependency>
-+      <groupId>eu.qualimaster</groupId>
-+      <artifactId>transfer-sink</artifactId>
-+      <version>0.1-SNAPSHOT</version>
-+    </dependency>
-+  </dependencies>
-+</project>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/settings.xml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/settings.xml
-new file mode 100644
-index 0000000..a0f932f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/settings.xml
-@@ -0,0 +1,115 @@
-+<pipeline>
-+    <name>TransferPip</name>
-+    <external_service_settings>
-+        <packet_delimiter>!</packet_delimiter>
-+        <main_delimiter>,</main_delimiter>
-+        <secondary_delimiter>|</secondary_delimiter>
-+        <line_delimiter>"Lf"</line_delimiter>
-+    </external_service_settings>
-+    <commands>
-+        <command>
-+			<name>login</name>
-+			<request>
-+				<field sequence="0">login</field>
-+				<field sequence="1">%username%</field>
-+				<field sequence="2">%password%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">login_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>logout</name>
-+			<request>
-+				<field sequence="0">logout</field>
-+			</request>
-+			<response>
-+				<field sequence="0">logout_response</field>
-+				<field sequence= "1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>quoteList</name>
-+			<request>
-+				<field sequence="0">quoteList</field>
-+			</request>
-+			<response>
-+				<field sequence="0">quoteList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+		
-+		<command>
-+			<name>requestHistoricalSentiment</name>
-+			<request>
-+				<field sequence="0">requestHistoricalSentiment</field>
-+				<field sequence="1">%startDate%</field>
-+				<field sequence="2">%endDate%</field>
-+				<field sequence="3">%listOfIds%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">historicalSentiment_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%result%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changeplayerList</name>
-+			<request>
-+				<field sequence="0">changeplayerList</field>
-+				<field sequence="1">%newPlayerList%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changeplayerList_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newPlayerList%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changedensitySize</name>
-+			<request>
-+				<field sequence="0">changedensitySize</field>
-+				<field sequence="1">%newDensitySize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changedensitySize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newDensitySize%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowSize</name>
-+			<request>
-+				<field sequence="0">changewindowSize</field>
-+				<field sequence="1">%newWindowSize%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowSize_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowSize%</field>
-+			</response>
-+		</command>
-+        <!--This is generated based on the configuration of permissible parameters from the pipeline-->
-+        <command>									
-+			<name>changewindowAdvance</name>
-+			<request>
-+				<field sequence="0">changewindowAdvance</field>
-+				<field sequence="1">%newWindowAdvance%</field>
-+			</request>
-+			<response>
-+				<field sequence="0">changewindowAdvance_response</field>
-+				<field sequence="1">%status%</field>
-+				<field sequence="2">%newWindowAdvance%</field>
-+			</response>
-+		</command>
-+    </commands>
-+</pipeline>
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement0FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement0FamilyElement.java
-new file mode 100644
-index 0000000..cb87ecf
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement0FamilyElement.java
-@@ -0,0 +1,250 @@
-+package eu.qualimaster.TransferPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.data.inf.IFocusFincancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_13_FamilyElement0FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_13_FamilyElement0FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FPreprocessor.IFPreprocessorPreprocessedStreamOutput preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+    private transient IFPreprocessor alg = null; 
-+    transient IFocusFincancialDataSpringStreamOutput iTupleSpringStream = null;
-+    transient IIFPreprocessorSpringStreamInput inputSpringStream = null;
-+
-+    public PipelineVar_13_FamilyElement0FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        preprocessedStreamResult = new FPreprocessor.IFPreprocessorPreprocessedStreamOutput();
-+        IItemEmitter<IIFPreprocessorPreprocessedStreamOutput> preprocessedStreamEmitter = new IItemEmitter<IIFPreprocessorPreprocessedStreamOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFPreprocessorPreprocessedStreamOutput item) {
-+                _collector.emit("PipelineVar_13_FamilyElement0PreprocessedStream", new Values(item));
-+            }
-+        };
-+        preprocessedStreamResult.setEmitter(preprocessedStreamEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                    alg = (IFPreprocessor) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("Preprocessor", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fPreprocessor"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+    if(tupleItem instanceof IFocusFincancialDataSpringStreamOutput) {
-+        iTupleSpringStream = (IFocusFincancialDataSpringStreamOutput)tupleItem;
-+        inputSpringStream = new FPreprocessor.IFPreprocessorSpringStreamInput();
-+        inputSpringStream.setSymbolTuple(iTupleSpringStream.getSymbolTuple());
-+        try {
-+            if(alg != null) {
-+                alg.calculate(inputSpringStream, preprocessedStreamResult);
-+            } else {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                logger.error("Algorithm is not assigned!");
-+                record = now;
-+            }
-+            }
-+        } catch(Throwable e) {
-+            long now = System.currentTimeMillis();
-+            if ((now - record) > 1000) {//print this error log once per second
-+                e.printStackTrace();
-+                record = now;
-+            }
-+            preprocessedStreamResult.setSymbolId("");
-+            preprocessedStreamResult.setTimestamp(0);
-+            preprocessedStreamResult.setValue(0.0);
-+            preprocessedStreamResult.setVolume(0);
-+            if (e instanceof DefaultModeException) {
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFPreprocessorPreprocessedStreamOutput> iterPreprocessedStream = preprocessedStreamResult.iterator();
-+            iterPreprocessedStream.reset();
-+            while (iterPreprocessedStream.hasNext()) {
-+                IIFPreprocessorPreprocessedStreamOutput out = iterPreprocessedStream.next();
-+                _collector.emit("PipelineVar_13_FamilyElement0PreprocessedStream", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "Preprocessor":
-+                if (!algChange || !(alg instanceof Preprocessor)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.correlation.Preprocessor");
-+                        alg = (IFPreprocessor) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    sendAlgorithmChangeEvent("Preprocessor", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_13_FamilyElement0PreprocessedStream", new Fields("PipelineVar_13_FamilyElement0PreprocessedStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement1FamilyElement.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement1FamilyElement.java
-new file mode 100644
-index 0000000..87a469b
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_FamilyElement1FamilyElement.java
-@@ -0,0 +1,335 @@
-+package eu.qualimaster.TransferPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.lang.NoSuchMethodException;
-+import java.lang.reflect.InvocationTargetException;
-+import java.io.OutputStream;
-+import java.io.Serializable;
-+import java.net.Socket;
-+import java.io.PrintWriter;
-+import eu.qualimaster.common.logging.DataLogger;
-+import java.net.UnknownHostException;
-+import com.esotericsoftware.kryo.io.Output;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.families.inf.*;
-+import eu.qualimaster.families.inf.IFTransferEntropy.*;
-+import eu.qualimaster.families.imp.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.base.algorithm.IFamily.State;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.base.serializer.KryoSwitchTupleSerializer;
-+import backtype.storm.Config;
-+import eu.qualimaster.base.pipeline.CollectingTopologyInfo;
-+import eu.qualimaster.pipeline.AlgorithmChangeParameter;
-+import eu.qualimaster.algorithms.imp.TransferEntropy;
-+import eu.qualimaster.families.inf.IFPreprocessor.*;
-+import eu.qualimaster.data.inf.IFocusFincancialData.*;
-+import eu.qualimaster.base.algorithm.IItemEmitter;
-+
-+/**
-+* Defines the FamilyElment in the pipeline(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_13_FamilyElement1FamilyElement extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_13_FamilyElement1FamilyElement.class);
-+    transient OutputCollector _collector;
-+    private boolean algChange = false;
-+    private boolean firstTuple = false;
-+    private long record = 0;
-+    private int taskId;
-+    private transient FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput pairwiseFinancialResult = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
-+    private transient IFTransferEntropy alg = null; 
-+    transient IIFPreprocessorPreprocessedStreamOutput iTuplePreprocessedStream = null;
-+    transient IFocusFincancialDataSymbolListOutput iTupleSymbolList = null;
-+    transient IIFTransferEntropyPreprocessedStreamInput inputPreprocessedStream = null;
-+    transient IIFTransferEntropySymbolListInput inputSymbolList = null;
-+
-+    public PipelineVar_13_FamilyElement1FamilyElement(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent(getPipeline(), getName(), parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent(getPipeline(), getName(), exceptionCase));
-+    }
-+
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+        super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        taskId = topologyContext.getThisTaskId();
-+        algChange = false;
-+
-+        pairwiseFinancialResult = new FTransferEntropy.IFTransferEntropyPairwiseFinancialOutput();
-+        IItemEmitter<IIFTransferEntropyPairwiseFinancialOutput> pairwiseFinancialEmitter = new IItemEmitter<IIFTransferEntropyPairwiseFinancialOutput>() {
-+            @Override
-+            public void emitDirect(String streamId, IIFTransferEntropyPairwiseFinancialOutput item) {
-+                _collector.emit("PipelineVar_13_FamilyElement1PairwiseFinancial", new Values(item));
-+            }
-+        };
-+        pairwiseFinancialResult.setEmitter(pairwiseFinancialEmitter);
-+
-+        if("STATIC".equals(map.get(Constants.CONFIG_KEY_INIT_MODE))) {
-+            try {
-+                try {
-+                    Class cls = Class.forName("eu.qualimaster.algorithms.imp.TransferEntropy");
-+                    alg = (IFTransferEntropy) cls.newInstance();
-+                } catch (ClassNotFoundException e) {
-+                    e.printStackTrace();
-+                } catch (InstantiationException e) {
-+                    e.printStackTrace();
-+                } catch (IllegalAccessException e) {
-+                    e.printStackTrace();
-+                }
-+                alg.setParameterWindowSize(PipelineOptions.getExecutorIntArgument(map, getName(), "windowSize", 300));
-+                alg.setParameterWindowAdvance(PipelineOptions.getExecutorIntArgument(map, getName(), "windowAdvance", 1));
-+                alg.setParameterDensitySize(PipelineOptions.getExecutorIntArgument(map, getName(), "densitySize", 128));
-+                if (alg != null) {
-+            	alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                }
-+		    	sendAlgorithmChangeEvent("TransferEntropy", null);
-+                algChange = true;
-+            } catch (Throwable e) {
-+                if (e instanceof DefaultModeException) {
-+                    logger.error("Throwable caught - turning to default mode");
-+                    e.printStackTrace();
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+        initMonitor();
-+
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        // delegate to family "fTransferEntropy"
-+        if (!firstTuple) {//the first tuple arrived
-+            firstTuple = true;
-+            record = System.currentTimeMillis();
-+        }
-+        if(tupleItem instanceof IIFPreprocessorPreprocessedStreamOutput) {
-+            iTuplePreprocessedStream = (IIFPreprocessorPreprocessedStreamOutput)tupleItem;
-+            inputPreprocessedStream = new FTransferEntropy.IFTransferEntropyPreprocessedStreamInput();
-+            inputPreprocessedStream.setSymbolId(iTuplePreprocessedStream.getSymbolId());
-+            inputPreprocessedStream.setTimestamp(iTuplePreprocessedStream.getTimestamp());
-+            inputPreprocessedStream.setValue(iTuplePreprocessedStream.getValue());
-+            inputPreprocessedStream.setVolume(iTuplePreprocessedStream.getVolume());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputPreprocessedStream, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(tupleItem instanceof IFocusFincancialDataSymbolListOutput) {
-+            iTupleSymbolList = (IFocusFincancialDataSymbolListOutput)tupleItem;
-+            inputSymbolList = new FTransferEntropy.IFTransferEntropySymbolListInput();
-+            inputSymbolList.setAllSymbols(iTupleSymbolList.getAllSymbols());
-+            try {
-+                if(alg != null) {
-+                    alg.calculate(inputSymbolList, pairwiseFinancialResult);
-+                } else {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    logger.error("Algorithm is not assigned!");
-+                    record = now;
-+                }
-+                }
-+            } catch(Throwable e) {
-+                long now = System.currentTimeMillis();
-+                if ((now - record) > 1000) {//print this error log once per second
-+                    e.printStackTrace();
-+                    record = now;
-+                }
-+                pairwiseFinancialResult.setId0("");
-+                pairwiseFinancialResult.setId1("");
-+                pairwiseFinancialResult.setDate("");
-+                pairwiseFinancialResult.setValue(0.0);
-+                if (e instanceof DefaultModeException) {
-+                    sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+                }
-+            }
-+        }
-+
-+        if(!(alg instanceof ITopologyCreate)) {
-+            eu.qualimaster.base.algorithm.IOutputItemIterator<IIFTransferEntropyPairwiseFinancialOutput> iterPairwiseFinancial = pairwiseFinancialResult.iterator();
-+            iterPairwiseFinancial.reset();
-+            while (iterPairwiseFinancial.hasNext()) {
-+                IIFTransferEntropyPairwiseFinancialOutput out = iterPairwiseFinancial.next();
-+                _collector.emit("PipelineVar_13_FamilyElement1PairwiseFinancial", new Values(out));
-+            }
-+        }
-+//		 _collector.ack(tuple);
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+        try {
-+        for(int i = 0; alg!=null && i < signal.getChangeCount(); i++) {
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "windowSize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowSize");
-+                        alg.setParameterWindowSize(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowSize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "windowAdvance" :
-+                    try {
-+                        System.out.println("Received parameter changing signal windowAdvance");
-+                        alg.setParameterWindowAdvance(para.getIntValue()); 
-+                        sendParameterChangeEvent("windowAdvance", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+                case "densitySize" :
-+                    try {
-+                        System.out.println("Received parameter changing signal densitySize");
-+                        alg.setParameterDensitySize(para.getIntValue()); 
-+                        sendParameterChangeEvent("densitySize", para.getIntValue(), signal.getCauseMessageId());
-+                    } catch (ValueFormatException e) {
-+                        e.printStackTrace();
-+                    }
-+                    break;
-+            }
-+        }
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+        logger.info("Received algorithm switching signal " + signal.getAlgorithm());
-+        try {
-+        switch (signal.getAlgorithm()) {
-+            case "TransferEntropy":
-+                if (!algChange || !(alg instanceof TransferEntropy)) {
-+                    algChange = true;
-+                    if(alg != null) {
-+                        alg.switchState(State.PASSIVATE); //passivate the previous algorithm
-+                    }
-+                    try {
-+                        Class cls = Class.forName("eu.qualimaster.algorithms.imp.TransferEntropy");
-+                        alg = (IFTransferEntropy) cls.newInstance();
-+                    } catch (ClassNotFoundException e) {
-+                        e.printStackTrace();
-+                    } catch (InstantiationException e) {
-+                        e.printStackTrace();
-+                    } catch (IllegalAccessException e) {
-+                        e.printStackTrace();
-+                    }
-+                    alg.setParameterWindowSize(300);
-+                    alg.setParameterWindowAdvance(1);
-+                    alg.setParameterDensitySize(128);
-+                    sendAlgorithmChangeEvent("TransferEntropy", signal.getCauseMessageId());
-+                    if(alg != null) {
-+                        alg.switchState(State.ACTIVATE); //activate the current algorithm
-+                    }
-+                }
-+                break;
-+        }
-+        super.notifyAlgorithmChange(signal);
-+        } catch (Throwable e) {
-+            if (e instanceof DefaultModeException) {
-+                logger.error("Throwable caught - turning to default mode");
-+                e.printStackTrace();
-+                sendDefaultModeMonitoringEvent((DefaultModeException) e);
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_13_FamilyElement1PairwiseFinancial", new Fields("PipelineVar_13_FamilyElement1PairwiseFinancialFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        if(alg != null) {
-+            alg.switchState(State.TERMINATING);
-+        }
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_ReplaySink1ReplaySink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_ReplaySink1ReplaySink.java
-new file mode 100644
-index 0000000..b4b1702
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_ReplaySink1ReplaySink.java
-@@ -0,0 +1,153 @@
-+package eu.qualimaster.TransferPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.ITransferSink;
-+import eu.qualimaster.data.inf.ITransferSink.*;
-+import eu.qualimaster.data.imp.TransferSink;
-+import eu.qualimaster.data.imp.TransferSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFTransferEntropy.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_13_ReplaySink1ReplaySink extends AbstractReplaySink {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_13_ReplaySink1ReplaySink.class);
-+    transient OutputCollector _collector;
-+    transient ITransferSink sinkHandler;
-+private int counter = 0;
-+    transient IIFTransferEntropyPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient ITransferSinkPairwiseFinancialInput inputPairwiseFinancial = null;
-+
-+	public PipelineVar_13_ReplaySink1ReplaySink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+    public class ITransferSinkPairwiseFinancialInputEmitter<ITransferSinkPairwiseFinancialInput> implements AbstractReplaySink.ITupleEmitter<ITransferSinkPairwiseFinancialInput> {
-+        @Override
-+        public void emit(int ticket, ITransferSinkPairwiseFinancialInput tuple) {
-+            //call from sink implementation
-+            sinkHandler.emit(ticket, (ITransferSink.ITransferSinkPairwiseFinancialInput)tuple);
-+        }
-+    }
-+    @Override
-+    protected void registerHandlers(Map conf, TopologyContext context) {
-+        eu.qualimaster.dataManagement.common.replay.Tuple schema;
-+        schema = new eu.qualimaster.dataManagement.common.replay.Tuple("pairwiseFinancial");
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("id0", String.class, true, false));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("id1", String.class, true, false));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("date", String.class, false, true));
-+        schema.addField(new eu.qualimaster.dataManagement.common.replay.Field("value", double.class, false, false));
-+        addTupleHandler(TransferSinkPairwiseFinancialInput.class, schema, "output/prior", NoStorageStrategyDescriptor.INSTANCE, new ITransferSinkPairwiseFinancialInputEmitter());
-+}
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+    if(tupleItem instanceof IIFTransferEntropyPairwiseFinancialOutput) {
-+        iTuplePairwiseFinancial = (IIFTransferEntropyPairwiseFinancialOutput)tupleItem;
-+        inputPairwiseFinancial = new TransferSink.TransferSinkPairwiseFinancialInput();
-+        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+        store(inputPairwiseFinancial);
-+        emitted(inputPairwiseFinancial);
-+    }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new TransferSink.TransferSinkPairwiseFinancialInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ITransferSink> cls = (Class<? extends ITransferSink>)Class.forName("eu.qualimaster.algorithms.imp.TransferSink");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("TransferSink", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_13_ReplaySink1PairwiseFinancial", new Fields("PipelineVar_13_ReplaySink1PairwiseFinancialFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Sink0Sink.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Sink0Sink.java
-new file mode 100644
-index 0000000..4b63545
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Sink0Sink.java
-@@ -0,0 +1,135 @@
-+package eu.qualimaster.TransferPip.topology;
-+
-+import java.util.*;
-+import java.io.IOException;
-+import java.net.InetAddress;
-+import java.net.UnknownHostException;
-+import org.apache.log4j.Logger;
-+import backtype.storm.tuple.*;
-+import backtype.storm.task.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.data.inf.ITransferSink;
-+import eu.qualimaster.data.inf.ITransferSink.*;
-+import eu.qualimaster.data.imp.TransferSink;
-+import eu.qualimaster.data.imp.TransferSink.*;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+import eu.qualimaster.families.inf.IFTransferEntropy.*;
-+
-+/**
-+* Defines the Sink class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_13_Sink0Sink extends BaseSignalBolt {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_13_Sink0Sink.class);
-+    transient OutputCollector _collector;
-+    transient ITransferSink sinkHandler;
-+private int counter = 0;
-+    transient IIFTransferEntropyPairwiseFinancialOutput iTuplePairwiseFinancial = null;
-+    transient ITransferSinkPairwiseFinancialInput inputPairwiseFinancial = null;
-+
-+	public PipelineVar_13_Sink0Sink(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    public void forwardTuple(Object tupleItem) {
-+        startMonitoring();
-+        //for now, sink just emits the tuple that get from last familyelement
-+    if(tupleItem instanceof IIFTransferEntropyPairwiseFinancialOutput) {
-+        iTuplePairwiseFinancial = (IIFTransferEntropyPairwiseFinancialOutput)tupleItem;
-+        inputPairwiseFinancial = new TransferSink.TransferSinkPairwiseFinancialInput();
-+        inputPairwiseFinancial.setId0(iTuplePairwiseFinancial.getId0());
-+        inputPairwiseFinancial.setId1(iTuplePairwiseFinancial.getId1());
-+        inputPairwiseFinancial.setDate(iTuplePairwiseFinancial.getDate());
-+        inputPairwiseFinancial.setValue(iTuplePairwiseFinancial.getValue());
-+        sinkHandler.postDataPairwiseFinancial(inputPairwiseFinancial);
-+        emitted(inputPairwiseFinancial);
-+    }
-+
-+        endMonitoring();
-+    }
-+
-+    @Override
-+    public void execute(Tuple tuple) {
-+        forwardTuple(tuple.getValue(0));
-+    }
-+
-+    @Override
-+    public void prepare(Map map, TopologyContext topologyContext, OutputCollector collector) {
-+		super.prepare(map, topologyContext, collector);
-+        _collector = collector;
-+        new TransferSink.TransferSinkPairwiseFinancialInput();
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends ITransferSink> cls = (Class<? extends ITransferSink>)Class.forName("eu.qualimaster.algorithms.imp.TransferSink");
-+			boolean autoConnect = "true".equals(map.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sinkHandler = DataManager.DATA_SINK_MANAGER.createDataSink(getPipeline(), cls, NoStorageStrategyDescriptor.INSTANCE);
-+			} else {
-+            	sinkHandler = cls.newInstance();
-+			}
-+			if (!autoConnect) {
-+		    	sinkHandler.connect();
-+			}
-+		    sendAlgorithmChangeEvent("TransferSink", null);
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the prepare method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringPrepare() {
-+        return false;
-+    }
-+
-+    @Override
-+    public void cleanup() {
-+        super.cleanup();
-+		 sinkHandler.disconnect();
-+    }
-+
-+    @Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_13_Sink0PairwiseFinancial", new Fields("PipelineVar_13_Sink0PairwiseFinancialFields"));
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sinkHandler.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Source0Source.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Source0Source.java
-new file mode 100644
-index 0000000..9051b65
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/PipelineVar_13_Source0Source.java
-@@ -0,0 +1,206 @@
-+package eu.qualimaster.TransferPip.topology;
-+
-+import java.util.*;
-+import java.io.Serializable;
-+import org.apache.log4j.Logger;
-+import backtype.storm.topology.*;
-+import backtype.storm.task.*;
-+import backtype.storm.spout.*;
-+import backtype.storm.tuple.*;
-+import eu.qualimaster.data.inf.IFocusFincancialData;
-+import eu.qualimaster.data.inf.IFocusFincancialData.*;
-+import eu.qualimaster.data.imp.FocusFincancialData;
-+import eu.qualimaster.focus.FocusedSpringClient;
-+import eu.qualimaster.common.signal.*;
-+import eu.qualimaster.events.EventManager;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.pipeline.DefaultModeException;
-+import eu.qualimaster.pipeline.DefaultModeMonitoringEvent;
-+import eu.qualimaster.monitoring.events.AlgorithmChangedMonitoringEvent;
-+import eu.qualimaster.monitoring.events.ParameterChangedMonitoringEvent;
-+import eu.qualimaster.dataManagement.sources.*;
-+import eu.qualimaster.dataManagement.events.HistoricalDataProviderRegistrationEvent;
-+import eu.qualimaster.dataManagement.strategies.*;
-+import eu.qualimaster.dataManagement.DataManager;
-+
-+/**
-+* Define the source Spout class(GEN).
-+**/
-+@SuppressWarnings({ "rawtypes", "serial" })
-+public class PipelineVar_13_Source0Source extends BaseSignalSourceSpout implements IDataSourceListener {
-+
-+    final static Logger logger = Logger.getLogger(PipelineVar_13_Source0Source.class);
-+    transient SpoutOutputCollector _collector;
-+    transient IFocusFincancialData sourceData;
-+
-+    public PipelineVar_13_Source0Source(String name, String namespace) {
-+        super(name, namespace, true);
-+    }
-+
-+
-+    /**
-+     * Sends an algorithm change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param algorithm the new algorithm
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private void sendAlgorithmChangeEvent(String algorithm, String causeMsgId) {
-+        EventManager.send(new AlgorithmChangedMonitoringEvent(getPipeline(), getName(), algorithm, causeMsgId));
-+    }
-+
-+
-+    /**
-+     * Sends an parameter change event and considers whether the coordination layer shall be bypassed for direct
-+     * testing.
-+     * @param parameter the parameter to be changed
-+     * @param value the new value
-+     * @param causeMsgId the message id of the causing message (may be empty or null)
-+     */
-+    private static void sendParameterChangeEvent(String parameter, Serializable value, String causeMsgId) {
-+        EventManager.send(new ParameterChangedMonitoringEvent("TransferPip", "PipelineVar_13_Source0", parameter, value, causeMsgId));
-+    }
-+
-+    /**
-+     * Sends an event for registering the historical data provider of a data source.
-+     * @param source the data source
-+     */
-+    private void sendHistoricalDataProviderRegistrationEvent(IDataSource source) {
-+        EventManager.send(new HistoricalDataProviderRegistrationEvent(getNamespace(), getName(), source.getHistoricalDataProvider(), source.getIdsNamesMap()));
-+    }
-+
-+    protected void configure(SourceMonitor monitor) {
-+        monitor.setAggregationInterval(60000);
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFocusFincancialDataSymbolListOutput>(IFocusFincancialDataSymbolListOutput.class) {
-+            @Override
-+            public String getAggregationKey(IFocusFincancialDataSymbolListOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+        monitor.registerAggregationKeyProvider(new AggregationKeyProvider<IFocusFincancialDataSpringStreamOutput>(IFocusFincancialDataSpringStreamOutput.class) {
-+            @Override
-+            public String getAggregationKey(IFocusFincancialDataSpringStreamOutput tuple) {
-+                return sourceData.getAggregationKey(tuple);
-+            }
-+        });
-+    }
-+
-+    @Override
-+    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-+		 super.open(conf, context, collector);
-+        _collector = collector;
-+        try {
-+            @SuppressWarnings("unchecked")
-+            Class<? extends IFocusFincancialData> cls = (Class<? extends IFocusFincancialData>) Class.forName("eu.qualimaster.focus.FocusedSpringClient");
-+			boolean autoConnect = "true".equals(conf.get(Constants.CONFIG_KEY_SOURCE_AUTOCONNECT));
-+			if(autoConnect) {
-+            	sourceData = DataManager.DATA_SOURCE_MANAGER.createDataSource(getPipeline(), cls, new LeastRecentlyUsedStorageStrategyDescriptor(1000));
-+			} else {
-+            	sourceData = cls.newInstance();
-+			}
-+			sendHistoricalDataProviderRegistrationEvent(sourceData);
-+		    sendAlgorithmChangeEvent("FocusedSpringClient", null);
-+            sourceData.setParameterPlayerList(PipelineOptions.getExecutorStringArgument(conf, getName(), "playerList", ""));
-+			if(!autoConnect) {
-+		    	sourceData.connect();
-+			}
-+        } catch (ClassNotFoundException e) {
-+            e.printStackTrace();
-+        } catch (InstantiationException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        } catch (ClassCastException e) {
-+            e.printStackTrace();
-+        }
-+        initMonitor();
-+        logger.info("The end of the open method.");
-+    }
-+
-+    @Override
-+    protected boolean initMonitorDuringOpen() {
-+        return false;
-+    }
-+
-+    /**
-+     * Sends an a default mode monitoring event with a DefaultModeException case.
-+     * @param exceptionCase the DefaultModeException case
-+     */
-+    private static void sendDefaultModeMonitoringEvent(DefaultModeException exceptionCase) {
-+        EventManager.send(new DefaultModeMonitoringEvent("TransferPip", "PipelineVar_13_Source0", exceptionCase));
-+    }
-+    @Override
-+    public void nextTuple() {
-+        startMonitoring();
-+        // Emitting stream "PipelineVar_13_Source0StreamSymbolList".
-+        IFocusFincancialDataSymbolListOutput dataItemSymbolList = new FocusFincancialData.FocusFincancialDataSymbolListOutput();
-+        try {
-+            dataItemSymbolList = sourceData.getSymbolList();
-+        } catch(DefaultModeException e) {
-+            dataItemSymbolList.setAllSymbols(null);
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSymbolList!=null){
-+            _collector.emit("PipelineVar_13_Source0SymbolList", new Values(dataItemSymbolList));
-+        }
-+
-+        // Emitting stream "PipelineVar_13_Source0SpringStream".
-+        IFocusFincancialDataSpringStreamOutput dataItemSpringStream = new FocusFincancialData.FocusFincancialDataSpringStreamOutput();
-+        try {
-+            dataItemSpringStream = sourceData.getSpringStream();
-+        } catch(DefaultModeException e) {
-+            dataItemSpringStream.setSymbolTuple("");
-+            sendDefaultModeMonitoringEvent(e);
-+        }
-+        if(dataItemSpringStream!=null){
-+            _collector.emit("PipelineVar_13_Source0SpringStream", new Values(dataItemSpringStream));
-+        }
-+
-+        endMonitoring();
-+        
-+    }
-+
-+    @Override
-+    public void notifyAlgorithmChange(AlgorithmChangeSignal signal) {
-+    sendAlgorithmChangeEvent(signal.getAlgorithm(), signal.getCauseMessageId());
-+    super.notifyAlgorithmChange(signal);
-+}
-+    @Override
-+    public void notifyParameterChange(ParameterChangeSignal signal) {
-+    logger.info("Received the parameter change signal!");
-+        for(int i = 0; i < signal.getChangeCount(); i++) {
-+        logger.info("For-loop: Checking each parameter!");
-+            ParameterChange para = signal.getChange(i);
-+            switch (para.getName()) {
-+                case "playerList" :
-+                    logger.info("Received the parameter playerList!");
-+                    sourceData.setParameterPlayerList(para.getStringValue()); 
-+                    sendParameterChangeEvent("playerList", para.getStringValue(), signal.getCauseMessageId());
-+                    break;
-+            }
-+        }
-+    }
-+
-+    @Override
-+    public void notifyIdsNamesMapChanged() {
-+        sendHistoricalDataProviderRegistrationEvent(sourceData);
-+    }
-+
-+    @Override
-+    public void close() {
-+        super.close();
-+		 sourceData.disconnect();
-+    }
-+
-+	@Override
-+    public void declareOutputFields(OutputFieldsDeclarer declarer) {
-+        declarer.declareStream("PipelineVar_13_Source0SymbolList", new Fields("PipelineVar_13_Source0SymbolListFields"));
-+        declarer.declareStream("PipelineVar_13_Source0SpringStream", new Fields("PipelineVar_13_Source0SpringStreamFields"));
-+    }
-+
-+    @Override
-+    protected void prepareShutdown(ShutdownSignal signal) {
-+        super.prepareShutdown(signal);
-+        sourceData.disconnect();
-+    }
-+
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/Topology.java b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/Topology.java
-new file mode 100644
-index 0000000..8559430
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/expected/pipelines/eu/qualimaster/TransferPip/topology/Topology.java
-@@ -0,0 +1,110 @@
-+package eu.qualimaster.TransferPip.topology;
-+
-+import org.apache.log4j.Logger;
-+import backtype.storm.*;
-+import backtype.storm.topology.*;
-+import eu.qualimaster.Configuration;
-+import eu.qualimaster.base.algorithm.*;
-+import eu.qualimaster.infrastructure.PipelineOptions;
-+import eu.qualimaster.base.pipeline.RecordingTopologyBuilder;
-+import eu.qualimaster.algorithms.imp.correlation.Preprocessor;
-+import eu.qualimaster.algorithms.imp.TransferEntropy;
-+
-+/**
-+* Define the main topology class(GEN).
-+**/
-+public class Topology{
-+    final static Logger logger = Logger.getLogger(Topology.class);
-+    static final String TOPOLOGY_NAME = "TransferPip";
-+    private static int maxNumWorkers = 1; //initialized by default value
-+    private static int maxTaskParallelism = 1; //initialized by default value
-+    private static PipelineOptions options = null; //initialized by default value
-+
-+    /**
-+     * Define a class for creating the main topology.
-+     */
-+    public static class MainTopologyCreator implements IMainTopologyCreate {
-+        /**
-+         * Create a main topology.
-+         * @return a TopologyOutput carring the storm config and TopologyBuilder information
-+         */
-+        public TopologyOutput createMainTopology() {
-+            int numWorkers = 5; //initialized by the pipeline configuration
-+            Config config = new Config();
-+            config.setMessageTimeoutSecs(100);
-+            config.setDebug(false);
-+            config.put("windowSize", 1 * 30);  // Window size (in secs)
-+            config.put("windowAdvance", 1);  // Advance of the window (in secs)
-+            if(options.isSubPipeline()) {
-+                config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, options.getMainPipeline());
-+            } else {
-+            config.put(eu.qualimaster.common.signal.Constants.CONFIG_KEY_SUBPIPELINE_NAME, TOPOLOGY_NAME); //sub-pipeline namespace
-+            }
-+			//The settings to optimize the storm performance.
-+			config.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE, 8);
-+			config.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32);
-+			config.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);
-+			config.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE, 16384);
-+            config.put(Configuration.HOST_EVENT, Configuration.getEventHost());
-+            config.put(Configuration.PORT_EVENT, Configuration.getEventPort());
-+            config.put(Configuration.EVENT_DISABLE_LOGGING, Configuration.getEventDisableLogging());
-+			 config.put(Configuration.PIPELINE_INTERCONN_PORTS, Configuration.getPipelinePorts());
-+            options.toConf(config);
-+
-+            RecordingTopologyBuilder builder = new RecordingTopologyBuilder(options);
-+            // Declare a Spout "SpringDataSource"
-+
-+            builder.setSpout("PipelineVar_13_Source0", new PipelineVar_13_Source0Source("PipelineVar_13_Source0", "TransferPip"), 1);
-+            // Declare a Bolt "Preprocessor"
-+
-+            BoltDeclarer PipelineVar_13_FamilyElement0=builder.setBolt("PipelineVar_13_FamilyElement0", new PipelineVar_13_FamilyElement0FamilyElement("PipelineVar_13_FamilyElement0", "TransferPip"), 1);
-+            PipelineVar_13_FamilyElement0.shuffleGrouping("PipelineVar_13_Source0", "PipelineVar_13_Source0SpringStream");
-+            // Declare a Bolt "TransferEntropyCalculation"
-+
-+            BoltDeclarer PipelineVar_13_FamilyElement1=builder.setBolt("PipelineVar_13_FamilyElement1", new PipelineVar_13_FamilyElement1FamilyElement("PipelineVar_13_FamilyElement1", "TransferPip"), 1);
-+            PipelineVar_13_FamilyElement1.shuffleGrouping("PipelineVar_13_FamilyElement0", "PipelineVar_13_FamilyElement0PreprocessedStream");
-+            // Declare a Bolt "Sink"
-+
-+            BoltDeclarer PipelineVar_13_Sink0=builder.setBolt("PipelineVar_13_Sink0", new PipelineVar_13_Sink0Sink("PipelineVar_13_Sink0", "TransferPip"), 1);
-+            PipelineVar_13_Sink0.shuffleGrouping("PipelineVar_13_FamilyElement1", "PipelineVar_13_FamilyElement1PairwiseFinancial");
-+            // Declare a Bolt "ReplaySink"
-+
-+            BoltDeclarer PipelineVar_13_ReplaySink1=builder.setBolt("PipelineVar_13_ReplaySink1", new PipelineVar_13_ReplaySink1ReplaySink("PipelineVar_13_ReplaySink1", "TransferPip"), 1);
-+            PipelineVar_13_ReplaySink1.shuffleGrouping("PipelineVar_13_FamilyElement1", "PipelineVar_13_FamilyElement1PairwiseFinancial");
-+            PipelineVar_13_FamilyElement1.shuffleGrouping("PipelineVar_13_Source0", "PipelineVar_13_Source0SymbolList");
-+            builder.close(TOPOLOGY_NAME, config);
-+            return new TopologyOutput(config, builder, numWorkers);
-+        }
-+
-+    }
-+    /**
-+     * Main method.
-+     */
-+    public static void main(String[] args) throws Exception {
-+        //create the main topology.
-+        options = new PipelineOptions(args);
-+        MainTopologyCreator topoCreator = new MainTopologyCreator();
-+        TopologyOutput topo = topoCreator.createMainTopology();
-+        //get the topology information
-+        Config config = topo.getConfig();
-+        TopologyBuilder builder = topo.getBuilder();
-+        int defNumWorkers = topo.getNumWorkers();
-+        int numWorkers = options.getNumberOfWorkers(defNumWorkers);
-+
-+        //submit the topology in the real cluster
-+        if (args != null && args.length > 0) {
-+            if(!options.isInProfilingMode()) {
-+                if(maxNumWorkers > numWorkers) {
-+                    logger.warn("WARNING: the number of workers in sub-topology is larger than in the main topology!");
-+                }
-+            }
-+            config.setNumWorkers(numWorkers);
-+            StormSubmitter.submitTopology(args[0], config, builder.createTopology());
-+        }
-+        else{ //submit the topology locally
-+           config.setMaxTaskParallelism(maxTaskParallelism);
-+           final LocalCluster cluster = new LocalCluster();
-+           cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
-+        }
-+    }
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_1.ivml
-new file mode 100644
-index 0000000..db876c1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_1.ivml
-@@ -0,0 +1,679 @@
-+project AlgorithmsCfg {
-+
-+	import ReconfigurableHardware;
-+	import ReconfigurableHardwareCfg;
-+	import Algorithms;
-+	import BasicsCfg;
-+	import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+	algorithms = {
-+		refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+	};
-+	algorithms.bindingTime = BindingTime.compile;
-+	swPreprocessor = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+		algTopologyClass = null, 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "Preprocessor", 
-+		input = {
-+			Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+		algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+		scalable = true, 
-+		parallelism = 14, 
-+		minParallelism = 4, 
-+		minNumtasks = 1, 
-+		name = "TopoSoftwareCorrelationFinancial", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items < 850
-+		}, 
-+		isValid = true
-+	};
-+	GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+		hwNode = refBy(cluster2), 
-+		scalable = false, 
-+		senderParallelism = 1, 
-+		receiverParallelism = 12, 
-+		name = "GenTopoHardwareCorrelationFinancial", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items >= 850
-+		}, 
-+		isValid = true
-+	};
-+	topoSentiWord = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+		algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SentimentAnaylsisSentiWordNetTopology", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 60, 
-+				name = "timeSeriesGranularity"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "sentimentClass"
-+			}, RealParameter {
-+				defaultValue = 2.5, 
-+				name = "classificationThreshold"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	topoSVM = SoftwareAlgorithm {
-+		class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+		algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+		scalable = false, 
-+		parallelism = 1, 
-+		minParallelism = 1, 
-+		minNumtasks = 1, 
-+		name = "SentimentAnaylsisSVMTopology", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 60, 
-+				name = "timeSeriesGranularity"
-+			}, IntegerParameter {
-+				defaultValue = 10, 
-+				name = "sentimentClass"
-+			}, RealParameter {
-+				defaultValue = 2.5, 
-+				name = "classificationThreshold"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+	correlationSW = SubPipelineAlgorithm {
-+		subPipeline = refBy(SubTopology), 
-+		name = "CorrelationSW", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType)
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType)
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType)
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+		successor = null, 
-+		constraints = {
-+			family_Items == 0 or family_Items < 850
-+		}, 
-+		isValid = true
-+	};
-+	HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+		hwNode = refBy(cluster1), 
-+		scalable = false, 
-+		senderParallelism = 1, 
-+		receiverParallelism = 1, 
-+		name = "TransferEntropyHardware", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+		hwNode = refBy(cluster1), 
-+		scalable = false, 
-+		senderParallelism = 1, 
-+		receiverParallelism = 1, 
-+		name = "MutualInformationHardware", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				defaultValue = 30, 
-+				name = "windowSize"
-+			}
-+		}, 
-+		artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+		successor = null, 
-+		isValid = true
-+	};
-+	freeze {
-+		algorithms;
-+		swPreprocessor;
-+		SWTopoCorrelationFinancial;
-+		GenHWTopoCorrelationFinancial;
-+		topoSentiWord;
-+		topoSVM;
-+        aMapper;
-+        aHayashiYoshida;
-+		correlationSW;
-+		HardwareAlgorithmVar_30;
-+		HardwareAlgorithmVar_31;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_10.ivml
-new file mode 100644
-index 0000000..751866f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_10.ivml
-@@ -0,0 +1,1589 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm AlgorithmVar_26;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_33;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_34;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_35;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_36;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_26 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+        algTopologyClass = "TopoDynamicHubComputation", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TopoDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TransferEntropySoftware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        AlgorithmVar_26;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+        SoftwareAlgorithmVar_33;
-+        SoftwareAlgorithmVar_34;
-+        SoftwareAlgorithmVar_35;
-+        SoftwareAlgorithmVar_36;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_11.ivml
-new file mode 100644
-index 0000000..751866f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_11.ivml
-@@ -0,0 +1,1589 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm AlgorithmVar_26;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_33;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_34;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_35;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_36;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_26 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+        algTopologyClass = "TopoDynamicHubComputation", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TopoDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TransferEntropySoftware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        AlgorithmVar_26;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+        SoftwareAlgorithmVar_33;
-+        SoftwareAlgorithmVar_34;
-+        SoftwareAlgorithmVar_35;
-+        SoftwareAlgorithmVar_36;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_12.ivml
-new file mode 100644
-index 0000000..751866f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_12.ivml
-@@ -0,0 +1,1589 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm AlgorithmVar_26;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_33;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_34;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_35;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_36;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_26 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+        algTopologyClass = "TopoDynamicHubComputation", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TopoDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TransferEntropySoftware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        AlgorithmVar_26;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+        SoftwareAlgorithmVar_33;
-+        SoftwareAlgorithmVar_34;
-+        SoftwareAlgorithmVar_35;
-+        SoftwareAlgorithmVar_36;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_2.ivml
-new file mode 100644
-index 0000000..af6b970
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_2.ivml
-@@ -0,0 +1,795 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_3.ivml
-new file mode 100644
-index 0000000..8275bf1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_3.ivml
-@@ -0,0 +1,917 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_4.ivml
-new file mode 100644
-index 0000000..4d92076
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_4.ivml
-@@ -0,0 +1,1253 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_5.ivml
-new file mode 100644
-index 0000000..e479d58
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_5.ivml
-@@ -0,0 +1,1299 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm AlgorithmVar_26;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_26 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+        algTopologyClass = "TopoDynamicHubComputation", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TopoDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        AlgorithmVar_26;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_6.ivml
-new file mode 100644
-index 0000000..e479d58
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_6.ivml
-@@ -0,0 +1,1299 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm AlgorithmVar_26;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_26 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+        algTopologyClass = "TopoDynamicHubComputation", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TopoDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        AlgorithmVar_26;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_7.ivml
-new file mode 100644
-index 0000000..dc6cef7
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_7.ivml
-@@ -0,0 +1,1505 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm AlgorithmVar_26;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_34;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_35;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_36;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_26 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+        algTopologyClass = "TopoDynamicHubComputation", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TopoDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        AlgorithmVar_26;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+        SoftwareAlgorithmVar_34;
-+        SoftwareAlgorithmVar_35;
-+        SoftwareAlgorithmVar_36;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_8.ivml
-new file mode 100644
-index 0000000..751866f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_8.ivml
-@@ -0,0 +1,1589 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm AlgorithmVar_26;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_33;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_34;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_35;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_36;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_26 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+        algTopologyClass = "TopoDynamicHubComputation", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TopoDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TransferEntropySoftware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        AlgorithmVar_26;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+        SoftwareAlgorithmVar_33;
-+        SoftwareAlgorithmVar_34;
-+        SoftwareAlgorithmVar_35;
-+        SoftwareAlgorithmVar_36;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_9.ivml
-new file mode 100644
-index 0000000..751866f
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/AlgorithmsCfg_9.ivml
-@@ -0,0 +1,1589 @@
-+project AlgorithmsCfg {
-+
-+    import ReconfigurableHardware;
-+    import ReconfigurableHardwareCfg;
-+    import Algorithms;
-+    import BasicsCfg;
-+    import PipelinesCfg;
-+    SoftwareAlgorithm swPreprocessor;
-+    SoftwareAlgorithm SWTopoCorrelationFinancial;
-+    HardwareAlgorithm GenHWTopoCorrelationFinancial;
-+    SoftwareAlgorithm topoSentiWord;
-+    SoftwareAlgorithm topoSVM;
-+    SoftwareAlgorithm randomAlg1;
-+    SoftwareAlgorithm randomAlg2;
-+    SoftwareAlgorithm switchAlg1;
-+    SoftwareAlgorithm switchAlg2;
-+    SoftwareAlgorithm AlgorithmVar_22;
-+    SoftwareAlgorithm AlgorithmVar_24;
-+    SoftwareAlgorithm AlgorithmVar_26;
-+    SoftwareAlgorithm recommendations;
-+    SoftwareAlgorithm keywordAnalyzer;
-+    SoftwareAlgorithm spamRemoval;
-+    SoftwareAlgorithm spamDetection;
-+    SoftwareAlgorithm AlgorithmVar_25;
-+    SoftwareAlgorithm aMapper;
-+    SoftwareAlgorithm aHayashiYoshida;
-+    SubPipelineAlgorithm correlationSW;
-+    HardwareAlgorithm HardwareAlgorithmVar_30;
-+    HardwareAlgorithm HardwareAlgorithmVar_31;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_33;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_34;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_35;
-+    SoftwareAlgorithm SoftwareAlgorithmVar_36;
-+    algorithms = {
-+        refBy(swPreprocessor), refBy(SWTopoCorrelationFinancial), refBy(topoSentiWord), refBy(topoSVM), refBy(randomAlg1), refBy(randomAlg2), refBy(switchAlg1), refBy(switchAlg2), refBy(AlgorithmVar_22), refBy(AlgorithmVar_24), refBy(AlgorithmVar_26), refBy(AlgorithmVar_25), refBy(recommendations), refBy(keywordAnalyzer), refBy(spamRemoval), refBy(spamDetection), refBy(aMapper), refBy(aHayashiYoshida), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31), refBy(SoftwareAlgorithmVar_33), refBy(SoftwareAlgorithmVar_34), refBy(SoftwareAlgorithmVar_35), refBy(SoftwareAlgorithmVar_36)
-+    };
-+    algorithms.bindingTime = BindingTime.compile;
-+    swPreprocessor = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Preprocessor", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Preprocessor", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-preprocessor:3.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SWTopoCorrelationFinancial = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.softwaresubtopology.TopoSoftwareCorrelationFinancial", 
-+        algTopologyClass = "TopoSoftwareCorrelationFinancial", 
-+        scalable = true, 
-+        parallelism = 14, 
-+        minParallelism = 4, 
-+        minNumtasks = 1, 
-+        name = "TopoSoftwareCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    GenHWTopoCorrelationFinancial = HardwareAlgorithm {
-+        hwNode = refBy(cluster2), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 12, 
-+        name = "GenTopoHardwareCorrelationFinancial", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 850
-+        }, 
-+        isValid = true
-+    };
-+    topoSentiWord = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSentiWordNetTopology", 
-+        algTopologyClass = "SentimentAnaylsisSentiWordNetTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSentiWordNetTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SentiWordnetSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    topoSVM = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.sentiment.topology.impl.SentimentAnaylsisSVMTopology", 
-+        algTopologyClass = "SentimentAnaylsisSVMTopology", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SentimentAnaylsisSVMTopology", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 60, 
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                defaultValue = 2.5, 
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SVMSubTopology:0.0.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    randomAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor1", 
-+        algTopologyClass = "RandomProcessor1", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 5, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor1:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    randomAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.RandomProcessor2", 
-+        algTopologyClass = "RandomProcessor2", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "RandomProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = false, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:RandomProcessor2:0.0.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg1 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor1", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor1", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor1:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 500
-+        }, 
-+        isValid = true
-+    };
-+    switchAlg2 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.SwitchProcessor2", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SwitchProcessor2", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }, BooleanParameter {
-+                defaultValue = true, 
-+                name = "flag"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.test:SwitchProcessor2:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items >= 500
-+        }, 
-+        isValid = true
-+    };
-+    keywordAnalyzer = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.keywordAnalyzer.correlation.BasicKeywordAnalyzerAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "KeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:KeywordAnalyzer:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamRemoval = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamRemovalBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamRemovalAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    spamDetection = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.spam.SpamDetectionBolt", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "SpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:SpamDetectionAlgorithm:0.1.5-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_22 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stockParser.family.impl.StockParserAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "StockParser  ", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:StockParser:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_24 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.stream.eventdetection.family.impl.EventDetectionHardThresholdAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "EventDetectionHardThreshold", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:EventDetectionHardThresholdAlgorithm:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_25 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.DynamicGraphCompilation", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "DynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-graph-compilation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    AlgorithmVar_26 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.dynamicgraph.TopoDynamicHubComputation", 
-+        algTopologyClass = "TopoDynamicHubComputation", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TopoDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:dynamic-hub-computation:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    recommendations = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.recommendations.family.impl.RecommendationsAlgorithm", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Recommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:Recommendations:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aMapper = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.Mapper", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "Mapper", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-mapper:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    aHayashiYoshida = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.correlation.HayashiYoshida", 
-+        algTopologyClass = null, 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "HayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hayashi-yoshida:0.0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    correlationSW = SubPipelineAlgorithm {
-+        subPipeline = refBy(SubTopology), 
-+        name = "CorrelationSW", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType)
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:hy-correlation-financial-software:3.2-SNAPSHOT", 
-+        successor = null, 
-+        constraints = {
-+            family_Items == 0 or family_Items < 850
-+        }, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_30 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "TransferEntropyHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    HardwareAlgorithmVar_31 = HardwareAlgorithm {
-+        hwNode = refBy(cluster1), 
-+        scalable = false, 
-+        senderParallelism = 1, 
-+        receiverParallelism = 1, 
-+        name = "MutualInformationHardware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster.hardware:hyHwProcessor:0.2.0-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_33 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.algorithms.imp.TransferEntropy", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TransferEntropySoftware", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:transfer-entropy:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_34 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphMapper", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_35 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphIndexer", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    SoftwareAlgorithmVar_36 = SoftwareAlgorithm {
-+        class = "eu.qualimaster.timegraph.TimeGraphQueryExecutor", 
-+        algTopologyClass = "", 
-+        scalable = false, 
-+        parallelism = 1, 
-+        minParallelism = 1, 
-+        minNumtasks = 1, 
-+        name = "TimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        artifact = "eu.qualimaster:time-graph-external:0.1-SNAPSHOT", 
-+        successor = null, 
-+        isValid = true
-+    };
-+    freeze {
-+        algorithms;
-+        swPreprocessor;
-+        SWTopoCorrelationFinancial;
-+        GenHWTopoCorrelationFinancial;
-+        topoSentiWord;
-+        topoSVM;
-+        randomAlg1;
-+        randomAlg2;
-+        switchAlg1;
-+        switchAlg2;
-+        AlgorithmVar_22;
-+        AlgorithmVar_24;
-+        AlgorithmVar_25;
-+        AlgorithmVar_26;
-+        recommendations;
-+        keywordAnalyzer;
-+        spamRemoval;
-+        spamDetection;
-+        aMapper;
-+        aHayashiYoshida;
-+        correlationSW;
-+        HardwareAlgorithmVar_30;
-+        HardwareAlgorithmVar_31;
-+        SoftwareAlgorithmVar_33;
-+        SoftwareAlgorithmVar_34;
-+        SoftwareAlgorithmVar_35;
-+        SoftwareAlgorithmVar_36;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_1.ivml
-new file mode 100644
-index 0000000..b4d7e79
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_1.ivml
-@@ -0,0 +1,193 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSink priorSnk;
-+    PersistentDataElement hBaseDataManagement;
-+	dataSources = {
-+		refBy(spring), refBy(twitter)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+		priorSnk;
-+		hBaseDataManagement;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_10.ivml
-new file mode 100644
-index 0000000..19f6c58
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_10.ivml
-@@ -0,0 +1,505 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_2;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+    DataSource DataSourceVar_7;
-+    DataSource DataSourceVar_9;
-+    DataSink DataSinkVar_5;
-+    DataSink DataSinkVar_6;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_2 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+        isValid = true, 
-+        name = "DynamicGraphSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_5 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
-+        isValid = true, 
-+        name = "TimeTravelSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_6 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
-+        isValid = true, 
-+        name = "TransferSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	DataSourceVar_7 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 1.0, 
-+                name = "speedFactor"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "SimulatedFinancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+    DataSourceVar_9 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                name = "snapshotQuery"
-+            }, StringParameter {
-+                name = "pathQuery"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "TimeGraphQueriesSource", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+        storageLocation = "input/query", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_2;
-+        DataSinkVar_3;
-+        DataSinkVar_5;
-+        DataSinkVar_6;
-+        DataSourceVar_6;
-+        DataSourceVar_7;
-+        DataSourceVar_9;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_11.ivml
-new file mode 100644
-index 0000000..3a60719
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_11.ivml
-@@ -0,0 +1,538 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_2;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+    DataSource DataSourceVar_7;
-+    DataSource DataSourceVar_9;
-+    DataSource DataSourceVar_10;
-+    DataSink DataSinkVar_5;
-+    DataSink DataSinkVar_6;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9), refBy(DataSourceVar_10)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_2 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+        isValid = true, 
-+        name = "DynamicGraphSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_5 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
-+        isValid = true, 
-+        name = "TimeTravelSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_6 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
-+        isValid = true, 
-+        name = "TransferSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	DataSourceVar_7 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 1.0, 
-+                name = "speedFactor"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "SimulatedFinancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+    DataSourceVar_9 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                name = "snapshotQuery"
-+            }, StringParameter {
-+                name = "pathQuery"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "TimeGraphQueriesSource", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+        storageLocation = "input/query", 
-+        strategy = DataManagementStrategy.None
-+    };
-+    DataSourceVar_10 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {}, 
-+        sourceCls = "eu.qualimaster.algorithm.FixRateFinancialDataSource", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FixedRateSimulatedFinancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:DataSourceSimulator:0.0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_2;
-+        DataSinkVar_3;
-+        DataSinkVar_5;
-+        DataSinkVar_6;
-+        DataSourceVar_6;
-+        DataSourceVar_7;
-+        DataSourceVar_9;
-+        DataSourceVar_10;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_12.ivml
-new file mode 100644
-index 0000000..0e1719d
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_12.ivml
-@@ -0,0 +1,563 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_2;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+    DataSource DataSourceVar_7;
-+    DataSource DataSourceVar_9;
-+    DataSource DataSourceVar_10;
-+    DataSource DataSourceVar_11;
-+    DataSink DataSinkVar_5;
-+    DataSink DataSinkVar_6;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9), refBy(DataSourceVar_10), refBy(DataSourceVar_11)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_2 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+        isValid = true, 
-+        name = "DynamicGraphSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_5 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
-+        isValid = true, 
-+        name = "TimeTravelSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_6 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
-+        isValid = true, 
-+        name = "TransferSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	DataSourceVar_7 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 1.0, 
-+                name = "speedFactor"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "SimulatedFinancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+    DataSourceVar_9 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                name = "snapshotQuery"
-+            }, StringParameter {
-+                name = "pathQuery"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "TimeGraphQueriesSource", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+        storageLocation = "input/query", 
-+        strategy = DataManagementStrategy.None
-+    };
-+    DataSourceVar_10 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {}, 
-+        sourceCls = "eu.qualimaster.algorithm.FixRateFinancialDataSource", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FixedRateSimulatedFinancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:DataSourceSimulator:0.0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed
-+    };
-+    DataSourceVar_11 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.timegraph.SimulatedGraphDataAlgorithm", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "SimulatedGraphData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+        storageLocation = "input/simulatedGraphData", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_2;
-+        DataSinkVar_3;
-+        DataSinkVar_5;
-+        DataSinkVar_6;
-+        DataSourceVar_6;
-+        DataSourceVar_7;
-+        DataSourceVar_9;
-+        DataSourceVar_10;
-+        DataSourceVar_11;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_2.ivml
-new file mode 100644
-index 0000000..824a17a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_2.ivml
-@@ -0,0 +1,252 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_3.ivml
-new file mode 100644
-index 0000000..824a17a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_3.ivml
-@@ -0,0 +1,252 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_4.ivml
-new file mode 100644
-index 0000000..5781953
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_4.ivml
-@@ -0,0 +1,323 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_3)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_3;
-+        DataSourceVar_6;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_5.ivml
-new file mode 100644
-index 0000000..287d721
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_5.ivml
-@@ -0,0 +1,347 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_2;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_2 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+        isValid = true, 
-+        name = "DynamicGraphSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_2;
-+        DataSinkVar_3;
-+        DataSourceVar_6;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_6.ivml
-new file mode 100644
-index 0000000..287d721
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_6.ivml
-@@ -0,0 +1,347 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_2;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_2 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+        isValid = true, 
-+        name = "DynamicGraphSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_2;
-+        DataSinkVar_3;
-+        DataSourceVar_6;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_7.ivml
-new file mode 100644
-index 0000000..f6b8241
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_7.ivml
-@@ -0,0 +1,471 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_2;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+    DataSource DataSourceVar_7;
-+    DataSource DataSourceVar_9;
-+    DataSink DataSinkVar_5;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_2 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+        isValid = true, 
-+        name = "DynamicGraphSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_5 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
-+        isValid = true, 
-+        name = "TimeTravelSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	DataSourceVar_7 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 1.0, 
-+                name = "speedFactor"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "SimulatedFinancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+    DataSourceVar_9 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                name = "snapshotQuery"
-+            }, StringParameter {
-+                name = "pathQuery"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "TimeGraphQueriesSource", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+        storageLocation = "input/query", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_2;
-+        DataSinkVar_3;
-+        DataSinkVar_5;
-+        DataSourceVar_6;
-+        DataSourceVar_7;
-+        DataSourceVar_9;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_8.ivml
-new file mode 100644
-index 0000000..19f6c58
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_8.ivml
-@@ -0,0 +1,505 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_2;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+    DataSource DataSourceVar_7;
-+    DataSource DataSourceVar_9;
-+    DataSink DataSinkVar_5;
-+    DataSink DataSinkVar_6;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_2 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+        isValid = true, 
-+        name = "DynamicGraphSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_5 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
-+        isValid = true, 
-+        name = "TimeTravelSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_6 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
-+        isValid = true, 
-+        name = "TransferSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	DataSourceVar_7 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 1.0, 
-+                name = "speedFactor"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "SimulatedFinancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+    DataSourceVar_9 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                name = "snapshotQuery"
-+            }, StringParameter {
-+                name = "pathQuery"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "TimeGraphQueriesSource", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+        storageLocation = "input/query", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_2;
-+        DataSinkVar_3;
-+        DataSinkVar_5;
-+        DataSinkVar_6;
-+        DataSourceVar_6;
-+        DataSourceVar_7;
-+        DataSourceVar_9;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_9.ivml
-new file mode 100644
-index 0000000..19f6c58
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/DataManagementCfg_9.ivml
-@@ -0,0 +1,505 @@
-+project DataManagementCfg {
-+
-+	import DataManagement;
-+	import BasicsCfg;
-+    DataSource spring;
-+    DataSource twitter;
-+    DataSource randomSource;
-+    DataSink priorSnk;
-+    DataSink randomSink;
-+    PersistentDataElement hBaseDataManagement;
-+    DataSink DataSinkVar_2;
-+    DataSink DataSinkVar_3;
-+    DataSource DataSourceVar_6;
-+    DataSource DataSourceVar_7;
-+    DataSource DataSourceVar_9;
-+    DataSink DataSinkVar_5;
-+    DataSink DataSinkVar_6;
-+	dataSources = {
-+		refBy(spring), refBy(twitter), refBy(randomSource), refBy(DataSourceVar_6), refBy(DataSourceVar_7), refBy(DataSourceVar_9)
-+	};
-+	dataSources.userVisible = true;
-+	dataSources.bindingTime = BindingTime.compile;
-+	dataSinks = {
-+		refBy(priorSnk), refBy(randomSink), refBy(DataSinkVar_2), refBy(DataSinkVar_3), refBy(DataSinkVar_5), refBy(DataSinkVar_6)
-+	};
-+	dataSinks.userVisible = true;
-+	dataSinks.bindingTime = BindingTime.compile;
-+	persistentDataElements = {
-+		refBy(hBaseDataManagement)
-+	};
-+	persistentDataElements.userVisible = true;
-+	persistentDataElements.bindingTime = BindingTime.compile;
-+	spring = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {}, 
-+		sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClient", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Spring Financial Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:spring-client:3.1-SNAPSHOT", 
-+		storageLocation = "input/spring", 
-+		strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+		timeLine = 1000
-+	};
-+	twitter = DataSource {
-+		input = {
-+			Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType)
-+					}
-+				}
-+			}, Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16)
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			StringParameter {
-+				defaultValue = "", 
-+				name = "consumerKey"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "consumerSecret"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessToken"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "accessTokenSecret"
-+			}, IntegerParameter {
-+				defaultValue = 0, 
-+				name = "queueSize"
-+			}, StringParameter {
-+				defaultValue = "/user/storm/resultSymbols", 
-+				name = "tweetDirectory"
-+			}, RealParameter {
-+				defaultValue = 0.0, 
-+				name = "speedFactor"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "runLocally"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "adjustTimeToNow"
-+			}, BooleanParameter {
-+				defaultValue = false, 
-+				name = "realLoops"
-+			}, StringParameter {
-+				defaultValue = "", 
-+				name = "setAdditionalKeywords"
-+			}
-+		}, 
-+		sourceCls = "eu.qualimaster.data.stream.source.TwitterFileStreaming", 
-+		aggregationFrequency = 60000, 
-+		profilingSource = false, 
-+		isValid = true, 
-+		name = "Twitter Stream Data", 
-+		description = "", 
-+		artifact = "eu.qualimaster:TwitterStreamDataSource:0.0.5-SNAPSHOT", 
-+		storageLocation = "input/twitter", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSource = DataSource {
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType)
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 0, 
-+                name = "delay"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.RandomSourceAlg", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "Random Source", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSourceAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	priorSnk = DataSink {
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = true
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		sinkCls = "eu.qualimaster.algorithms.imp.correlation.PriorityDataSinkForFinancialAndTwitter", 
-+		isValid = true, 
-+		name = "Priority Data Sink", 
-+		description = "", 
-+		artifact = "eu.qualimaster:hy-priority-data-sink:3.1-SNAPSHOT", 
-+		storageLocation = "output/prior", 
-+		strategy = DataManagementStrategy.None, 
-+		timeLine = 0
-+	};
-+    randomSink = DataSink {
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.RandomSinkAlg", 
-+        isValid = true, 
-+        name = "Random Sink", 
-+        description = "", 
-+        artifact = "eu.qualimaster.test:RandomSinkAlg:0.0.2-SNAPSHOT", 
-+        storageLocation = "random", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	hBaseDataManagement = PersistentDataElement {
-+		name = "hBase DataManagement", 
-+		storageLocation = "hBase-l3s", 
-+		strategy = DataManagementStrategy.FirstInFirstOut, 
-+		timeLine = 0
-+	};
-+    DataSinkVar_2 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.dynamicgraph.DynamicGraphSinkAlgorithm", 
-+        isValid = true, 
-+        name = "DynamicGraphSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:dynamic-graph-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_3 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.focus.FocusSinkAlgorithm", 
-+        isValid = true, 
-+        name = "FocusSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focus-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_5 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.timegraph.TimeTravelSink", 
-+        isValid = true, 
-+        name = "TimeTravelSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-travel-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSinkVar_6 = DataSink {
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = true
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        sinkCls = "eu.qualimaster.algorithms.imp.TransferSink", 
-+        isValid = true, 
-+        name = "TransferSink", 
-+        description = "", 
-+        artifact = "eu.qualimaster:transfer-sink:0.1-SNAPSHOT", 
-+        storageLocation = "output/prior", 
-+        strategy = DataManagementStrategy.None, 
-+        timeLine = 0
-+    };
-+    DataSourceVar_6 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                defaultValue = "", 
-+                name = "playerList"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.focus.FocusedSpringClient", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "FocusFincancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:focused-spring-client:0.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+	DataSourceVar_7 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 1.0, 
-+                name = "speedFactor"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.algorithms.imp.correlation.SpringClientSimulator", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "SimulatedFinancialData", 
-+        description = "", 
-+        artifact = "eu.qualimaster:spring-client-simulator:3.1-SNAPSHOT", 
-+        storageLocation = "input/spring", 
-+        strategy = DataManagementStrategy.LeastRecentlyUsed, 
-+        timeLine = 1000
-+    };
-+    DataSourceVar_9 = DataSource {
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            StringParameter {
-+                name = "snapshotQuery"
-+            }, StringParameter {
-+                name = "pathQuery"
-+            }
-+        }, 
-+        sourceCls = "eu.qualimaster.timegraph.QueriesSource", 
-+        aggregationFrequency = 60000, 
-+        profilingSource = false, 
-+        isValid = true, 
-+        name = "TimeGraphQueriesSource", 
-+        description = "", 
-+        artifact = "eu.qualimaster:time-graph-spout:0.1-SNAPSHOT", 
-+        storageLocation = "input/query", 
-+        strategy = DataManagementStrategy.None
-+    };
-+	freeze {
-+		dataSources;
-+		dataSinks;
-+		persistentDataElements;
-+		spring;
-+		twitter;
-+        randomSource;
-+		priorSnk;
-+        randomSink;
-+		hBaseDataManagement;
-+        DataSinkVar_2;
-+        DataSinkVar_3;
-+        DataSinkVar_5;
-+        DataSinkVar_6;
-+        DataSourceVar_6;
-+        DataSourceVar_7;
-+        DataSourceVar_9;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_1.ivml
-new file mode 100644
-index 0000000..1a600e4
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_1.ivml
-@@ -0,0 +1,336 @@
-+project FamiliesCfg {
-+
-+	import ReconfigurableHardware;
-+	import Families;
-+	import AlgorithmsCfg;
-+	import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+	families = {
-+		refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(fMapper), refBy(fHayashiYoshida)
-+	};
-+	families.bindingTime = BindingTime.compile;
-+	fPreprocessor = Family {
-+		name = "fPreprocessor", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "springStream", 
-+				fields = {
-+					Field {
-+						name = "symbolTuple", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		members = {
-+			refBy(swPreprocessor)
-+		}
-+	};
-+	fCorrelationFinancial = Family {
-+		name = "fCorrelationFinancial", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "preprocessedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}, Tuple {
-+				name = "symbolList", 
-+				fields = {
-+					Field {
-+						name = "allSymbols", 
-+						type = refBy(StringListType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "pairwiseFinancial", 
-+				fields = {
-+					Field {
-+						name = "id0", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "id1", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "date", 
-+						type = refBy(StringTimeStampType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(DoubleType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "windowSize"
-+			}
-+		}, 
-+		members = {
-+			//refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+			refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+		}
-+	};
-+	fSentimentAnalysis = Family {
-+		name = "fSentimentAnalysis", 
-+		description = "", 
-+		input = {
-+			Tuple {
-+				name = "twitterStream", 
-+				fields = {
-+					Field {
-+						name = "status", 
-+						type = refBy(FieldTypeVar_16), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		output = {
-+			Tuple {
-+				name = "analyzedStream", 
-+				fields = {
-+					Field {
-+						name = "symbolId", 
-+						type = refBy(StringType), 
-+						keyPart = false
-+					}, Field {
-+						name = "timestamp", 
-+						type = refBy(LongType), 
-+						keyPart = false
-+					}, Field {
-+						name = "value", 
-+						type = refBy(RealType), 
-+						keyPart = false
-+					}, Field {
-+						name = "volume", 
-+						type = refBy(IntegerType), 
-+						keyPart = false
-+					}
-+				}
-+			}
-+		}, 
-+		parameters = {
-+			IntegerParameter {
-+				name = "timeSeriesGranularity"
-+			}, IntegerParameter {
-+				name = "sentimentClass"
-+			}, RealParameter {
-+				name = "classificationThreshold"
-+			}
-+		}, 
-+		members = {
-+			refBy(topoSentiWord), refBy(topoSVM)
-+		}
-+	};
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+	freeze {
-+		families;
-+		fPreprocessor;
-+		fCorrelationFinancial;
-+		fSentimentAnalysis;
-+        fMapper;
-+        fHayashiYoshida;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_10.ivml
-new file mode 100644
-index 0000000..966d50a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_10.ivml
-@@ -0,0 +1,1038 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family FamilyVar_23;
-+    Family FamilyVar_24;
-+    Family FamilyVar_26;
-+    Family FamilyVar_27;
-+    Family FamilyVar_28;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    FamilyVar_23 = Family {
-+        name = "fDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_26)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    FamilyVar_24 = Family {
-+        name = "fTransferEntropy", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_33)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    FamilyVar_26 = Family {
-+        name = "fTimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_34)
-+        }
-+    };
-+    FamilyVar_27 = Family {
-+        name = "fTimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_35)
-+        }
-+    };
-+    FamilyVar_28 = Family {
-+        name = "fTimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_36)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        FamilyVar_24;
-+        FamilyVar_26;
-+        FamilyVar_27;
-+        FamilyVar_28;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_11.ivml
-new file mode 100644
-index 0000000..966d50a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_11.ivml
-@@ -0,0 +1,1038 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family FamilyVar_23;
-+    Family FamilyVar_24;
-+    Family FamilyVar_26;
-+    Family FamilyVar_27;
-+    Family FamilyVar_28;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    FamilyVar_23 = Family {
-+        name = "fDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_26)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    FamilyVar_24 = Family {
-+        name = "fTransferEntropy", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_33)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    FamilyVar_26 = Family {
-+        name = "fTimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_34)
-+        }
-+    };
-+    FamilyVar_27 = Family {
-+        name = "fTimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_35)
-+        }
-+    };
-+    FamilyVar_28 = Family {
-+        name = "fTimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_36)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        FamilyVar_24;
-+        FamilyVar_26;
-+        FamilyVar_27;
-+        FamilyVar_28;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_12.ivml
-new file mode 100644
-index 0000000..966d50a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_12.ivml
-@@ -0,0 +1,1038 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family FamilyVar_23;
-+    Family FamilyVar_24;
-+    Family FamilyVar_26;
-+    Family FamilyVar_27;
-+    Family FamilyVar_28;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    FamilyVar_23 = Family {
-+        name = "fDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_26)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    FamilyVar_24 = Family {
-+        name = "fTransferEntropy", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_33)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    FamilyVar_26 = Family {
-+        name = "fTimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_34)
-+        }
-+    };
-+    FamilyVar_27 = Family {
-+        name = "fTimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_35)
-+        }
-+    };
-+    FamilyVar_28 = Family {
-+        name = "fTimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_36)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        FamilyVar_24;
-+        FamilyVar_26;
-+        FamilyVar_27;
-+        FamilyVar_28;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_2.ivml
-new file mode 100644
-index 0000000..f6df4e3
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_2.ivml
-@@ -0,0 +1,384 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_3.ivml
-new file mode 100644
-index 0000000..b7039f9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_3.ivml
-@@ -0,0 +1,434 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_4.ivml
-new file mode 100644
-index 0000000..d3b192e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_4.ivml
-@@ -0,0 +1,731 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_5.ivml
-new file mode 100644
-index 0000000..46f1beb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_5.ivml
-@@ -0,0 +1,772 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family FamilyVar_23;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    FamilyVar_23 = Family {
-+        name = "fDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_26)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_6.ivml
-new file mode 100644
-index 0000000..46f1beb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_6.ivml
-@@ -0,0 +1,772 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family FamilyVar_23;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    FamilyVar_23 = Family {
-+        name = "fDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_26)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_7.ivml
-new file mode 100644
-index 0000000..3daca71
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_7.ivml
-@@ -0,0 +1,960 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family FamilyVar_23;
-+    Family FamilyVar_26;
-+    Family FamilyVar_27;
-+    Family FamilyVar_28;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    FamilyVar_23 = Family {
-+        name = "fDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_26)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    FamilyVar_26 = Family {
-+        name = "fTimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_34)
-+        }
-+    };
-+    FamilyVar_27 = Family {
-+        name = "fTimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_35)
-+        }
-+    };
-+    FamilyVar_28 = Family {
-+        name = "fTimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_36)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        FamilyVar_26;
-+        FamilyVar_27;
-+        FamilyVar_28;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_8.ivml
-new file mode 100644
-index 0000000..966d50a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_8.ivml
-@@ -0,0 +1,1038 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family FamilyVar_23;
-+    Family FamilyVar_24;
-+    Family FamilyVar_26;
-+    Family FamilyVar_27;
-+    Family FamilyVar_28;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    FamilyVar_23 = Family {
-+        name = "fDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_26)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    FamilyVar_24 = Family {
-+        name = "fTransferEntropy", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_33)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    FamilyVar_26 = Family {
-+        name = "fTimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_34)
-+        }
-+    };
-+    FamilyVar_27 = Family {
-+        name = "fTimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_35)
-+        }
-+    };
-+    FamilyVar_28 = Family {
-+        name = "fTimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_36)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        FamilyVar_24;
-+        FamilyVar_26;
-+        FamilyVar_27;
-+        FamilyVar_28;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_9.ivml
-new file mode 100644
-index 0000000..966d50a
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/FamiliesCfg_9.ivml
-@@ -0,0 +1,1038 @@
-+project FamiliesCfg {
-+
-+    import ReconfigurableHardware;
-+    import Families;
-+    import AlgorithmsCfg;
-+    import BasicsCfg;
-+    Family fPreprocessor;
-+    Family fCorrelationFinancial;
-+    Family fSentimentAnalysis;
-+    Family randomFamily;
-+    Family switchFamily;
-+    Family fTwitterEventDetection;
-+    Family FamilyVar_14;
-+    Family FamilyVar_15;
-+    Family FamilyVar_17;
-+    Family FamilyVar_19;
-+    Family FamilyVar_21;
-+    Family FamilyVar_22;
-+    Family FamilyVar_23;
-+    Family FamilyVar_24;
-+    Family FamilyVar_26;
-+    Family FamilyVar_27;
-+    Family FamilyVar_28;
-+    Family fMapper;
-+    Family fHayashiYoshida;
-+    families = {
-+        refBy(fPreprocessor), refBy(fCorrelationFinancial), refBy(fSentimentAnalysis), refBy(randomFamily), refBy(fMapper), refBy(fHayashiYoshida), refBy(switchFamily), refBy(fTwitterEventDetection), refBy(FamilyVar_14), refBy(FamilyVar_15), refBy(FamilyVar_17), refBy(FamilyVar_19), refBy(FamilyVar_21), refBy(FamilyVar_22), refBy(FamilyVar_23), refBy(FamilyVar_24), refBy(FamilyVar_26), refBy(FamilyVar_27), refBy(FamilyVar_28)
-+    };
-+    families.bindingTime = BindingTime.compile;
-+    fPreprocessor = Family {
-+        name = "fPreprocessor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "springStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolTuple", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(swPreprocessor)
-+        }
-+    };
-+    fCorrelationFinancial = Family {
-+        name = "fCorrelationFinancial", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            //refBy(correlationSW), refBy(SubPipelineAlgorithmVar_38)
-+            refBy(SWTopoCorrelationFinancial), refBy(GenHWTopoCorrelationFinancial), refBy(correlationSW), refBy(HardwareAlgorithmVar_30), refBy(HardwareAlgorithmVar_31)
-+        }
-+    };
-+    fSentimentAnalysis = Family {
-+        name = "fSentimentAnalysis", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "analyzedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "timeSeriesGranularity"
-+            }, IntegerParameter {
-+                name = "sentimentClass"
-+            }, RealParameter {
-+                name = "classificationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(topoSentiWord), refBy(topoSVM)
-+        }
-+    };
-+    randomFamily = Family {
-+        name = "randomFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(randomAlg1), refBy(randomAlg2)
-+        }
-+    };
-+    FamilyVar_14 = Family {
-+        name = "fSpamDetection", 
-+        description = "Detects spam in tweet stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(spamDetection)
-+        }
-+    };
-+    FamilyVar_15 = Family {
-+        name = "fSpamRemoval", 
-+        description = "Removes Spam from twitter stream", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "spamPropability", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "spamThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(spamRemoval)
-+        }
-+    };
-+    FamilyVar_17 = Family {
-+        name = "fKeywordAnalyzer", 
-+        description = "deduces typical keywords for a current event", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "threshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "decay"
-+            }
-+        }, 
-+        members = {
-+            refBy(keywordAnalyzer)
-+        }
-+    };
-+    FamilyVar_19 = Family {
-+        name = "fRecommendations", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "recommendationStream", 
-+                fields = {
-+                    Field {
-+                        name = "recommendations", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                defaultValue = 0.5, 
-+                name = "impactThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "stockCooccurrenceThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(recommendations)
-+        }
-+    };
-+    FamilyVar_21 = Family {
-+        name = "fStockParser", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_22)
-+        }
-+    };
-+    FamilyVar_22 = Family {
-+        name = "fDynamicGraphCompilation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType)
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            RealParameter {
-+                name = "correlationThreshold"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_25)
-+        }
-+    };
-+    FamilyVar_23 = Family {
-+        name = "fDynamicHubComputation", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "hubStream", 
-+                fields = {
-+                    Field {
-+                        name = "hubList", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 30, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 10, 
-+                name = "hubListSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_26)
-+        }
-+    };
-+    switchFamily = Family {
-+        name = "switchFamily", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "randomData", 
-+                fields = {
-+                    Field {
-+                        name = "randomInteger", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(TimeStampType)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "aggregationFactor"
-+            }, IntegerParameter {
-+                name = "delay"
-+            }, BooleanParameter {
-+                name = "flag"
-+            }, IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(switchAlg1), refBy(switchAlg2)
-+        }
-+    };
-+    fTwitterEventDetection = Family {
-+        name = "fTwitterEventDetection", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "stocks", 
-+                        type = refBy(StringListType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "twitterStream", 
-+                fields = {
-+                    Field {
-+                        name = "events", 
-+                        type = refBy(IFEventListType)
-+                    }, Field {
-+                        name = "status", 
-+                        type = refBy(FieldTypeVar_16)
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 1000, 
-+                name = "hardThreshold"
-+            }, RealParameter {
-+                defaultValue = 0.5, 
-+                name = "percentageThreshold"
-+            }, IntegerParameter {
-+                defaultValue = 86400, 
-+                name = "lengthOfTimeWindow"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "frequenceOfCheckForEvent"
-+            }
-+        }, 
-+        members = {
-+            refBy(AlgorithmVar_24)
-+        }
-+    };
-+    FamilyVar_24 = Family {
-+        name = "fTransferEntropy", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "id0", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "id1", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "date", 
-+                        type = refBy(StringTimeStampType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(DoubleType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                defaultValue = 300, 
-+                name = "windowSize"
-+            }, IntegerParameter {
-+                defaultValue = 1, 
-+                name = "windowAdvance"
-+            }, IntegerParameter {
-+                defaultValue = 128, 
-+                name = "densitySize"
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_33)
-+        }
-+    };
-+    fMapper = Family {
-+        name = "fMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "preprocessedStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "volume", 
-+                        type = refBy(IntegerType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "symbolList", 
-+                fields = {
-+                    Field {
-+                        name = "allSymbols", 
-+                        type = refBy(StringListType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        parameters = {
-+            IntegerParameter {
-+                name = "windowSize"
-+            }
-+        }, 
-+        members = {
-+            refBy(aMapper)
-+        }
-+    };
-+    fHayashiYoshida = Family {
-+        name = "fHayashiYoshida", 
-+        input = {
-+            Tuple {
-+                name = "symbolsStream", 
-+                fields = {
-+                    Field {
-+                        name = "symbolId", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "timestamp", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "value", 
-+                        type = refBy(RealType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "configurationStream", 
-+                fields = {
-+                    Field {
-+                        name = "pairKey", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "pairValue", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }, Tuple {
-+                name = "resetWindowStream", 
-+                fields = {
-+                    Field {
-+                        name = "windowStart", 
-+                        type = refBy(LongType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "pairwiseFinancial", 
-+                fields = {
-+                    Field {
-+                        name = "pairwiseCorrelationFinancial", 
-+                        type = refBy(StringType), 
-+                        keyPart = false
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(aHayashiYoshida)
-+        }
-+    };
-+    FamilyVar_26 = Family {
-+        name = "fTimeGraphMapper", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "edgeStream", 
-+                fields = {
-+                    Field {
-+                        name = "edge", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_34)
-+        }
-+    };
-+    FamilyVar_27 = Family {
-+        name = "fTimeGraphIndexer", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "dataStream", 
-+                fields = {
-+                    Field {
-+                        name = "update", 
-+                        type = refBy(ObjectType), 
-+                        keyPart = false
-+                    }, Field {
-+                        name = "isAddition", 
-+                        type = refBy(BooleanType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "internalRequests", 
-+                fields = {
-+                    Field {
-+                        name = "internalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_35)
-+        }
-+    };
-+    FamilyVar_28 = Family {
-+        name = "fTimeGraphQueryExecutor", 
-+        description = "", 
-+        input = {
-+            Tuple {
-+                name = "snapshotQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathQueryStream", 
-+                fields = {
-+                    Field {
-+                        name = "start", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "end", 
-+                        type = refBy(LongType)
-+                    }, Field {
-+                        name = "vertexA", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "vertexB", 
-+                        type = refBy(StringType)
-+                    }, Field {
-+                        name = "type", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "externalResponses", 
-+                fields = {
-+                    Field {
-+                        name = "externalResponse", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        output = {
-+            Tuple {
-+                name = "snapshotStream", 
-+                fields = {
-+                    Field {
-+                        name = "snapshot", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "pathStream", 
-+                fields = {
-+                    Field {
-+                        name = "path", 
-+                        type = refBy(StringType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "unicastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "unicastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }, Tuple {
-+                name = "broadcastRequests", 
-+                fields = {
-+                    Field {
-+                        name = "broadcastExternalRequest", 
-+                        type = refBy(ObjectType)
-+                    }
-+                }
-+            }
-+        }, 
-+        members = {
-+            refBy(SoftwareAlgorithmVar_36)
-+        }
-+    };
-+    freeze {
-+        families;
-+        fPreprocessor;
-+        fCorrelationFinancial;
-+        fSentimentAnalysis;
-+        randomFamily;
-+        switchFamily;
-+        fTwitterEventDetection;
-+        FamilyVar_14;
-+        FamilyVar_15;
-+        FamilyVar_17;
-+        FamilyVar_19;
-+        FamilyVar_21;
-+        FamilyVar_22;
-+        FamilyVar_24;
-+        FamilyVar_26;
-+        FamilyVar_27;
-+        FamilyVar_28;
-+        fMapper;
-+        fHayashiYoshida;
-+    } but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_0.ivml
-new file mode 100644
-index 0000000..afca1b2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_0.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_1.ivml
-new file mode 100644
-index 0000000..afca1b2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_1.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_10.ivml
-new file mode 100644
-index 0000000..06f43c2
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_10.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_11.ivml
-new file mode 100644
-index 0000000..f441c97
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_11.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_12.ivml
-new file mode 100644
-index 0000000..ceed689
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_12.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17), refBy(PipelineVar_18)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_2.ivml
-new file mode 100644
-index 0000000..1217738
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_2.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_3.ivml
-new file mode 100644
-index 0000000..d5b5add
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_3.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_4.ivml
-new file mode 100644
-index 0000000..0be15c8
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_4.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_5.ivml
-new file mode 100644
-index 0000000..b3a12e5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_5.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_6.ivml
-new file mode 100644
-index 0000000..6f176d0
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_6.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_7.ivml
-new file mode 100644
-index 0000000..d9a63a9
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_7.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_8.ivml
-new file mode 100644
-index 0000000..2367481
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_8.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_9.ivml
-new file mode 100644
-index 0000000..e7c6fef
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/InfrastructureCfg_9.ivml
-@@ -0,0 +1,26 @@
-+project InfrastructureCfg {
-+
-+	import Infrastructure;
-+	import PipelinesCfg;
-+	activePipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14)
-+	};
-+	// TODO constraint no sub-pipeline here
-+	
-+	activePipelines.bindingTime = BindingTime.compile;
-+	interfaceArtifact = "eu.qualimaster:PriorityPipelineInterfaces:0.5.0-SNAPSHOT";
-+	interfaceArtifact.bindingTime = BindingTime.compile;
-+	modelArtifact = "eu.qualimaster:infrastructureModel:0.5.0-SNAPSHOT";
-+	modelArtifact.bindingTime = BindingTime.compile;
-+	repositoryURL = "https://projects.sse.uni-hildesheim.de/qm/maven/";
-+	repositoryURL.bindingTime = BindingTime.compile;
-+	deploymentURL = "http://nexus.sse.uni-hildesheim.de/releases/Qualimaster/";
-+	deploymentURL.bindingTime = BindingTime.compile;
-+	freeze {
-+		activePipelines;
-+		interfaceArtifact;
-+		modelArtifact;
-+		repositoryURL;
-+		deploymentURL;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_0.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_0.ivml
-new file mode 100644
-index 0000000..09c0c87
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_0.ivml
-@@ -0,0 +1,18 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+    import SubTopologyCfg;
-+    import SubPipelineVar_11Cfg;
-+    import SubPipelineVar_15Cfg;
-+    import SubPipelineVar_19Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(SubTopology), refBy(SubPipelineVar_11), refBy(SubPipelineVar_15), refBy(SubPipelineVar_19)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_1.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_1.ivml
-new file mode 100644
-index 0000000..d77e312
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_1.ivml
-@@ -0,0 +1,15 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+    import SubTopologyCfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(SubTopology)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_10.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_10.ivml
-new file mode 100644
-index 0000000..013de85
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_10.ivml
-@@ -0,0 +1,24 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+    import SubTopologyCfg;
-+    import PipelineVar_9Cfg;
-+    import PipelineVar_10Cfg;
-+    import PipelineVar_13Cfg;
-+    import PipelineVar_14Cfg;
-+    import PipelineVar_16Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_11.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_11.ivml
-new file mode 100644
-index 0000000..bba095e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_11.ivml
-@@ -0,0 +1,25 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+    import SubTopologyCfg;
-+    import PipelineVar_9Cfg;
-+    import PipelineVar_10Cfg;
-+    import PipelineVar_13Cfg;
-+    import PipelineVar_14Cfg;
-+    import PipelineVar_16Cfg;
-+    import PipelineVar_17Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_12.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_12.ivml
-new file mode 100644
-index 0000000..66a0a63
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_12.ivml
-@@ -0,0 +1,26 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+    import SubTopologyCfg;
-+    import PipelineVar_9Cfg;
-+    import PipelineVar_10Cfg;
-+    import PipelineVar_13Cfg;
-+    import PipelineVar_14Cfg;
-+    import PipelineVar_16Cfg;
-+    import PipelineVar_17Cfg;
-+    import PipelineVar_18Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14), refBy(PipelineVar_16), refBy(PipelineVar_17), refBy(PipelineVar_18)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_2.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_2.ivml
-new file mode 100644
-index 0000000..84507d1
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_2.ivml
-@@ -0,0 +1,16 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+    import SubTopologyCfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(SubTopology)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_3.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_3.ivml
-new file mode 100644
-index 0000000..650d0de
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_3.ivml
-@@ -0,0 +1,17 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+    import SubTopologyCfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(SubTopology)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_4.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_4.ivml
-new file mode 100644
-index 0000000..f1b61c5
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_4.ivml
-@@ -0,0 +1,18 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+    import SubTopologyCfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(SubTopology)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_5.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_5.ivml
-new file mode 100644
-index 0000000..4fb7643
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_5.ivml
-@@ -0,0 +1,19 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+    import SubTopologyCfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_6.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_6.ivml
-new file mode 100644
-index 0000000..9633365
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_6.ivml
-@@ -0,0 +1,20 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+    import SubTopologyCfg;
-+    import PipelineVar_9Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_7.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_7.ivml
-new file mode 100644
-index 0000000..09c6ddb
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_7.ivml
-@@ -0,0 +1,21 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+    import SubTopologyCfg;
-+    import PipelineVar_9Cfg;
-+    import PipelineVar_10Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_8.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_8.ivml
-new file mode 100644
-index 0000000..b94650e
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_8.ivml
-@@ -0,0 +1,22 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+    import SubTopologyCfg;
-+    import PipelineVar_9Cfg;
-+    import PipelineVar_10Cfg;
-+    import PipelineVar_13Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_9.ivml b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_9.ivml
-new file mode 100644
-index 0000000..5c47cc6
---- /dev/null
-+++ b/Plugins/EASy-Producer/ScenariosTest/testdata/real/QualiMaster/sep17/variants/PipelinesCfg_9.ivml
-@@ -0,0 +1,23 @@
-+project PipelinesCfg {
-+
-+	import Basics;
-+	import Pipelines;
-+	import PriorityPipCfg;
-+	import PipelineVar_1Cfg;
-+	import PipelineVar_2Cfg;
-+	import PipelineVar_7Cfg;
-+	import PipelineVar_8Cfg;
-+    import SubTopologyCfg;
-+    import PipelineVar_9Cfg;
-+    import PipelineVar_10Cfg;
-+    import PipelineVar_13Cfg;
-+    import PipelineVar_14Cfg;
-+	pipelines = {
-+		refBy(PriorityPip), refBy(PipelineVar_1), refBy(PipelineVar_2), refBy(PipelineVar_7), refBy(PipelineVar_8), refBy(PipelineVar_9), refBy(PipelineVar_10), refBy(PipelineVar_13), refBy(PipelineVar_14)
-+	};
-+	pipelines.userVisible = true;
-+	pipelines.bindingTime = BindingTime.compile;
-+	freeze {
-+		pipelines;
-+	} but (f|f.bindingTime >= BindingTime.runtimeMon)
-+}
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/META-INF/MANIFEST.MF b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/META-INF/MANIFEST.MF
-index 8e5a388..2d26ebd 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/META-INF/MANIFEST.MF
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/META-INF/MANIFEST.MF
-@@ -20,4 +20,4 @@
-  org.junit.runners;version="4.5.0",
-  org.junit.runners.model;version="4.5.0",
-  org.hamcrest.core
--
-+Export-Package: test.de.uni_hildesheim.sse
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AbstractTest.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AbstractTest.java
-index ac593e5..6744b3d 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AbstractTest.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AbstractTest.java
-@@ -33,10 +33,34 @@
-  */
- public abstract class AbstractTest extends net.ssehub.easy.dslCore.test.AbstractTest<Project> {
- 
-+    protected static final String TESTDATA_SYSTEM_PROPERTY = "ivml.testdata.home";
-+    
-     /**
-      * The directory containing all tests.
-      */
--    protected static final File TESTDATA_DIR = determineTestDataDir("ivml.testdata.home");
-+    private static File testDataDir;
-+    
-+    static {
-+        setTestDataDir(TESTDATA_SYSTEM_PROPERTY);
-+    }
-+    
-+    /**
-+     * Returns the test data directory.
-+     * 
-+     * @return the test data directory
-+     */
-+    protected static File getTestDataDir() {
-+        return testDataDir;
-+    }
-+
-+    /**
-+     * Changes the testdata directory.
-+     * 
-+     * @param systemProperty the system property to determine the test data dir from
-+     */
-+    protected static void setTestDataDir(String systemProperty) {
-+        testDataDir = determineTestDataDir(systemProperty);
-+    }
- 
-     /**
-      * Starts up the {@link VarModel} by registering {@link #TESTDATA_DIR} as
-@@ -46,7 +70,7 @@
-     public static void startUp() {
-         try {
-             resourceInitialization();
--            VarModel.INSTANCE.locations().addLocation(TESTDATA_DIR, OBSERVER);
-+            VarModel.INSTANCE.locations().addLocation(getTestDataDir(), OBSERVER);
-             VarModel.INSTANCE.loaders().registerLoader(ModelUtility.INSTANCE, OBSERVER);
-         } catch (ModelManagementException e) {
-             e.printStackTrace(System.err);
-@@ -62,7 +86,7 @@
-     @AfterClass
-     public static void shutDown() {
-         try {
--            VarModel.INSTANCE.locations().removeLocation(TESTDATA_DIR, OBSERVER);
-+            VarModel.INSTANCE.locations().removeLocation(getTestDataDir(), OBSERVER);
-         } catch (ModelManagementException e) {
-             Assert.fail();
-         }
-@@ -117,10 +141,12 @@
-      * @return the loaded projects
-      * @throws IOException
-      *             problems finding or reading the model file
-+     *             
-+     * @see #checkErrorCodes(TranslationResult, List, int...)
-+     * @see #checkWarningCodes(TranslationResult)
-      */
-     protected List<Project> assertEqual(File file, String expectedName,
--        String expectedVersion, int... expectedErrorCodes)
--        throws IOException {
-+        String expectedVersion, int... expectedErrorCodes) throws IOException {
- 
-         List<Project> loaded = null;
-         if (file.exists()) {
-@@ -129,9 +155,10 @@
-             // parse the model
-             TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
-             String errorCodesMsg = checkErrorCodes(result, null, expectedErrorCodes);
-+            checkWarningCodes(result);
-             Assert.assertNull(errorCodesMsg, errorCodesMsg);
- 
--            if (0 == result.getErrorCount()) {
-+            if (0 == result.getErrorCount() && checkWriteback(file)) {
-                 // read model file into memory
-                 String fileAsString = file2String(file);
-                 Assert.assertTrue(null != fileAsString);
-@@ -153,7 +180,7 @@
-             loaded = assertProjectInfo(expectedName, expectedVersion, uri, result, expectedErrorCodes);
-         } else {
-             System.err.println("File '" + file + "' does not exist");
--            Assert.assertTrue(false);
-+            Assert.assertTrue("File '" + file + "' does not exist", false);
-         }
- 
-         // due to the startUp the VarModel shall already know about the project!
-@@ -175,6 +202,24 @@
-     }
-     
-     /**
-+     * Whether the test for a certain file shall check for output and output formatting.
-+     * 
-+     * @param file the file
-+     * @return <code>true</code> check for output formatting, <code>false</code> for no checks
-+     */
-+    protected boolean checkWriteback(File file) {
-+        return true;
-+    }
-+
-+    /**
-+     * Optional extension to check for warning codes.
-+     * 
-+     * @param result the translation result
-+     */
-+    protected void checkWarningCodes(TranslationResult<Project> result) {
-+    }
-+    
-+    /**
-      * Assert that the comments in <code>commentResource</code> (seen as expected)
-      * are attached to the proper model elements.
-      * 
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdditionalTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdditionalTests.java
-index 1afb04f..ac02678 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdditionalTests.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdditionalTests.java
-@@ -13,7 +13,6 @@
- import net.ssehub.easy.varModel.confModel.ConfigurationException;
- import net.ssehub.easy.varModel.confModel.ConfigurationSaver;
- import net.ssehub.easy.varModel.confModel.IDecisionVariable;
--import net.ssehub.easy.varModel.cst.CSTSemanticException;
- import net.ssehub.easy.varModel.model.AbstractVariable;
- import net.ssehub.easy.varModel.model.ModelQuery;
- import net.ssehub.easy.varModel.model.ModelQueryException;
-@@ -34,7 +33,7 @@
-     /**
-      * Represents the directory containing the tests.
-      */
--    private static final File DIR = new File(TESTDATA_DIR, "additional");
-+    private static final File DIR = new File(getTestDataDir(), "additional");
- 
-     /**
-      * Creates a file in {@link #DIR}.
-@@ -247,7 +246,7 @@
-      */
-     @Test
-     public void testRefby() throws IOException {
--        assertEqual(createFile("refby"), null, null, CSTSemanticException.UNKNOWN_OPERATION);
-+        assertEqual(createFile("refby"), null, null);
-     }
-     
-     /**
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdvancedTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdvancedTests.java
-index 8ca1902..16aa2bb 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdvancedTests.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/AdvancedTests.java
-@@ -47,7 +47,6 @@
- import net.ssehub.easy.varModel.model.Project;
- import net.ssehub.easy.varModel.model.ProjectImport;
- import net.ssehub.easy.varModel.model.ProjectInterface;
--import net.ssehub.easy.varModel.model.datatypes.Compound;
- import net.ssehub.easy.varModel.model.datatypes.CustomOperation;
- import net.ssehub.easy.varModel.model.datatypes.DerivedDatatype;
- import net.ssehub.easy.varModel.model.datatypes.EnumLiteral;
-@@ -68,7 +67,7 @@
-     /**
-      * Represents the directory containing the tests.
-      */
--    private static final File DIR = new File(TESTDATA_DIR, "advanced");
-+    private static final File DIR = new File(getTestDataDir(), "advanced");
- 
-     /**
-      * Creates a model file object for {@link #DIR}.
-@@ -159,9 +158,7 @@
-      */
-     @Test
-     public void testCompoundOverlapping2() throws IOException {
--        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
--            assertEqual(createFile("compounds2"), "compoundOverlapping2", "0");
--        }
-+        assertEqual(createFile("compounds2"), "compoundOverlapping2", "0");
-     }
- 
-     /**
-@@ -171,10 +168,8 @@
-      */
-     @Test
-     public void testCompoundOverlapping2Fail() throws IOException {
--        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
--            assertEqual(createFile("compounds2Fail"), "compoundOverlapping2Fail", "0", 
--                ValueDoesNotMatchTypeException.TYPE_MISMATCH);
--        }
-+        assertEqual(createFile("compounds2Fail"), "compoundOverlapping2Fail", "0", 
-+            ValueDoesNotMatchTypeException.TYPE_MISMATCH);
-     }
- 
-     /**
-@@ -184,10 +179,8 @@
-      */
-     @Test
-     public void testCompoundOverlapping3Fail() throws IOException {
--        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
--            assertEqual(createFile("compounds3Fail"), "compoundOverlapping3Fail", "0", 
--                ValueDoesNotMatchTypeException.TYPE_MISMATCH);
--        }
-+        assertEqual(createFile("compounds3Fail"), "compoundOverlapping3Fail", "0", 
-+            ValueDoesNotMatchTypeException.TYPE_MISMATCH);
-     }
- 
-     /**
-@@ -197,9 +190,7 @@
-      */
-     @Test
-     public void testCompoundMulti() throws IOException {
--        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
--            assertEqual(createFile("compoundsMulti"), "compoundsMulti", "0");
--        }
-+        assertEqual(createFile("compoundsMulti"), "compoundsMulti", "0");
-     }
- 
-     /**
-@@ -209,10 +200,8 @@
-      */
-     @Test
-     public void testCompoundMultiFail() throws IOException {
--        if (Compound.ENABLE_SHADOWING_REFINEMENT) {
--            assertEqual(createFile("compoundsMultiFail"), "compoundsMultiFail", "0", 
--                ValueDoesNotMatchTypeException.TYPE_MISMATCH);
--        }
-+        assertEqual(createFile("compoundsMultiFail"), "compoundsMultiFail", "0", 
-+            ValueDoesNotMatchTypeException.TYPE_MISMATCH);
-     }
- 
-     /**
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/BasicTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/BasicTests.java
-index 531a7ca..39c758c 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/BasicTests.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/BasicTests.java
-@@ -40,7 +40,7 @@
-     /**
-      * Represents the directory containing the tests.
-      */
--    private static final File DIR = new File(TESTDATA_DIR, "basic");
-+    private static final File DIR = new File(getTestDataDir(), "basic");
- 
-     /**
-      * Creates a file object relative to {@link #DIR} (not a file).
-@@ -391,6 +391,27 @@
-     }
- 
-     /**
-+     * Tests custom typedefs.
-+     * 
-+     * @throws IOException should not occur
-+     */
-+    @Test
-+    public void testTypedefCompound1() throws IOException {
-+        assertEqual(createFile("typedefCompound1"), "testTypedefCompound1", "0");
-+    }
-+
-+    /**
-+     * Tests custom typedefs.
-+     * 
-+     * @throws IOException should not occur
-+     */
-+    @Test
-+    public void testTypedefCompound1Fail() throws IOException {
-+        assertEqual(createFile("typedefCompound1Fail"), "testTypedefCompound1Fail", "0", ErrorCodes.TYPE_CONSISTENCY);
-+    }
-+
-+    
-+    /**
-      * Tests custom typedefs. (failing)
-      * 
-      * @throws IOException should not occur
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ExternalTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ExternalTests.java
-index dafd3ea..4d1cb72 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ExternalTests.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ExternalTests.java
-@@ -33,7 +33,7 @@
-     /**
-      * Represents the directory containing the tests.
-      */
--    private static final File DIR = new File(TESTDATA_DIR, "external");
-+    private static final File DIR = new File(getTestDataDir(), "external");
- 
-     /**
-      * Creates a file in {@link #DIR}.
-@@ -240,4 +240,44 @@
-         }
-     }
- 
-+    /**
-+     * Tests a signature problem with <code>isUnique</code> (by M. Keunecke).
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void testUnique() throws IOException {
-+        assertEqual(createFile("isUnique"), null, null);
-+    }
-+
-+    /**
-+     * Tests a signature problem with <code>isUnique</code> (by M. Keunecke).
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void testUnique2() throws IOException {
-+        assertEqual(createFile("isUnique2"), null, null);
-+    }
-+
-+    /**
-+     * Tests a signature problem with <code>isUnique</code> (by M. Keunecke).
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void testUnique3() throws IOException {
-+        assertEqual(createFile("isUnique3"), null, null);
-+    }
-+
-+    /**
-+     * Tests a problem with compound initializers and references.
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void testCompoundRefAssignTest2() throws IOException {
-+        assertEqual(createFile("CompoundRefAssignTest2"), null, null);
-+    }
-+
- }
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/HierarchicalTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/HierarchicalTests.java
-index 88369a7..5db0f3e 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/HierarchicalTests.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/HierarchicalTests.java
-@@ -25,7 +25,7 @@
-     /**
-      * Represents the directory containing the tests.
-      */
--    private static final File DIR = new File(TESTDATA_DIR, "hierarchical");
-+    private static final File DIR = new File(getTestDataDir(), "hierarchical");
-     
-     /**
-      * Starts up the test overriding the parent method.
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ImportTest.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ImportTest.java
-index b641033..5e963e9 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ImportTest.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/ImportTest.java
-@@ -50,7 +50,7 @@
-     /**
-      * Represents the directory containing the tests.
-      */
--    private static final File DIR = new File(TESTDATA_DIR, "imports");
-+    private static final File DIR = new File(getTestDataDir(), "imports");
-     
-     private static final File LOCATION_IMPORTS_WITH_2_PROJECTS = new File(DIR, "CycleTest_2Projects"); 
-     private static final File LOCATION_CYCLING_DECLARATIONS = new File(DIR, "CycleTest_CyclingDeclarations"); 
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/LanguageSpecTests.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/LanguageSpecTests.java
-index df32c85..425c2c5 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/LanguageSpecTests.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/LanguageSpecTests.java
-@@ -16,7 +16,7 @@
-     /**
-      * Represents the directory containing the tests.
-      */
--    private static final File DIR = new File(TESTDATA_DIR, "languageSpec");
-+    private static final File DIR = new File(getTestDataDir(), "languageSpec");
- 
-     /**
-      * Creates a file in {@link #DIR}.
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/TestUnderFix.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/TestUnderFix.java
-index 69dfbe3..ec2bacd 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/TestUnderFix.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/TestUnderFix.java
-@@ -19,7 +19,7 @@
-      * @return the file
-      */
-     public static final File createFile(String name) {
--        return new File(new File(TESTDATA_DIR, ""), name + ".ivml");
-+        return new File(new File(getTestDataDir(), ""), name + ".ivml");
-     }
- 
-     /**
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/cycletest/CyclingImportsTest.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/cycletest/CyclingImportsTest.java
-index ffebe69..09aa1ef 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/cycletest/CyclingImportsTest.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml.tests/src/test/de/uni_hildesheim/sse/cycletest/CyclingImportsTest.java
-@@ -40,7 +40,7 @@
-     /**
-      * Represents the directory containing the tests.
-      */
--    private static final File DIR = new File(TESTDATA_DIR, "scenarios/qm_may16");
-+    private static final File DIR = new File(getTestDataDir(), "scenarios/qm_may16");
- 
-     /**
-      * Creates a model file object for {@link #DIR}.
-diff --git a/Plugins/IVML/de.uni_hildesheim.sse.ivml/src/de/uni_hildesheim/sse/ModelUtility.java b/Plugins/IVML/de.uni_hildesheim.sse.ivml/src/de/uni_hildesheim/sse/ModelUtility.java
-index 46ac992..8ac1079 100644
---- a/Plugins/IVML/de.uni_hildesheim.sse.ivml/src/de/uni_hildesheim/sse/ModelUtility.java
-+++ b/Plugins/IVML/de.uni_hildesheim.sse.ivml/src/de/uni_hildesheim/sse/ModelUtility.java
-@@ -34,6 +34,7 @@
- import net.ssehub.easy.basics.modelManagement.Version;
- import net.ssehub.easy.basics.modelManagement.VersionFormatException;
- import net.ssehub.easy.dslCore.TranslationResult;
-+import net.ssehub.easy.dslCore.translation.LogMessageReceiver;
- import net.ssehub.easy.dslCore.translation.Message;
- import net.ssehub.easy.dslCore.translation.MessageReceiver;
- import net.ssehub.easy.dslCore.translation.TranslatorException;
-@@ -59,11 +60,13 @@
-     implements IModelLoader<Project> {
- 
-     public static final ModelUtility INSTANCE = new ModelUtility();
-+    private final LogMessageReceiver logReceiver;
-     
-     /**
-      * Prevents external creation.
-      */
-     private ModelUtility() {
-+        logReceiver = new LogMessageReceiver(getClass(), null);
-     }
- 
-     @Override
-@@ -166,7 +169,8 @@
-      *             in case that an I/O error happens during parsing
-      */
-     public List<ModelInfo<Project>> obtainInfo(URI uri) throws IOException {
--        VariabilityUnit root = parse(uri, true, null, VariabilityUnit.class);
-+        logReceiver.setLocationHint(uri);
-+        VariabilityUnit root = parse(uri, true, logReceiver, VariabilityUnit.class);
-         List<ModelInfo<Project>> result = new ArrayList<ModelInfo<Project>>();
-         if (null != root) {
-             for (de.uni_hildesheim.sse.ivml.Project project : root
-diff --git a/Plugins/Instantiation/Instantiator.AspectJ/src/net/ssehub/easy/instantiation/aspectj/Registration.java b/Plugins/Instantiation/Instantiator.AspectJ/src/net/ssehub/easy/instantiation/aspectj/Registration.java
-index ea00b45..f069693 100644
---- a/Plugins/Instantiation/Instantiator.AspectJ/src/net/ssehub/easy/instantiation/aspectj/Registration.java
-+++ b/Plugins/Instantiation/Instantiator.AspectJ/src/net/ssehub/easy/instantiation/aspectj/Registration.java
-@@ -3,6 +3,7 @@
- import org.osgi.service.component.ComponentContext;
- 
- import net.ssehub.easy.instantiation.aspectj.instantiators.AspectJ;
-+import net.ssehub.easy.instantiation.core.JavaUtilities;
- import net.ssehub.easy.instantiation.core.model.vilTypes.IRegistration;
- import net.ssehub.easy.instantiation.core.model.vilTypes.TypeRegistry;
- 
-@@ -42,4 +43,14 @@
-         // this is not the official way of using DS but the official way is instable
-     }
- 
-+    /**
-+     * Checks whether the AspectJ instantiator will work in this environment, e.g., not
-+     * due to Java 9.
-+     * 
-+     * @return a message if the instantiator will not work, <b>null</b> else
-+     */
-+    public static String checkEnvironment() {
-+        return JavaUtilities.isJava9() ? "AspectJ is not available for JDK 9" : null;
-+        //return null; // ok, since AspectJ 1.9.1
-+    }
- }
-diff --git a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/IReasoningHook.java b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/IReasoningHook.java
-index f846fb4..89142f3 100644
---- a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/IReasoningHook.java
-+++ b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/IReasoningHook.java
-@@ -18,6 +18,7 @@
- import net.ssehub.easy.basics.messages.Status;
- import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.Configuration;
- import net.ssehub.easy.reasoning.core.reasoner.Message;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
- 
- /**
-  * A reasoning hook allowing the system using the rt-VIL environment to influence the validity
-@@ -59,8 +60,10 @@
-      * @param concept the specific concept on which the call is being executed
-      * @param values reading access to the actual rt-VIL variable values
-      * @param config the actual configuration
-+     * @param result the reasoning result
-      */
--    public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, Configuration config);
-+    public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, Configuration config, 
-+        ReasoningResult result);
-     
-     /**
-      * Is called if reasoning is considered to fail, e.g., to inform the user.
-diff --git a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/ReasoningHookAdapter.java b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/ReasoningHookAdapter.java
-index 7bc040e..856e55c 100644
---- a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/ReasoningHookAdapter.java
-+++ b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/ReasoningHookAdapter.java
-@@ -18,6 +18,7 @@
- import net.ssehub.easy.basics.messages.Status;
- import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.Configuration;
- import net.ssehub.easy.reasoning.core.reasoner.Message;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
- 
- /**
-  * Provides a neutral reasoning hook implementation, i.e., a hook that does not influencing the 
-@@ -38,7 +39,8 @@
-     }
- 
-     @Override
--    public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, Configuration config) {
-+    public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, Configuration config, 
-+        ReasoningResult result) {
-         // do nothing
-     }
-     
-diff --git a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/RtVilExecution.java b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/RtVilExecution.java
-index 7cdd61c..fafb5f3 100644
---- a/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/RtVilExecution.java
-+++ b/Plugins/Instantiation/de.uni-hildesheim.sse.easy.instantiatorCore.rt/src/net/ssehub/easy/instantiation/rt/core/model/rtVil/RtVilExecution.java
-@@ -106,9 +106,9 @@
-             if (null != cfg) {
-                 Script currentScript = evaluator.currentScript;
-                 IRtValueAccess valueAccess = evaluator.valueAccess;
--                evaluator.reasoningHook.preReasoning(currentScript, concept, valueAccess, cfg);
-                 net.ssehub.easy.varModel.confModel.Configuration easyConfig = cfg.getConfiguration();
-                 EASyLogger logger = EASyLoggerFactory.INSTANCE.getLogger(RtVilExecution.class, Bundle.ID);
-+                evaluator.reasoningHook.preReasoning(currentScript, concept, valueAccess, cfg);
-                 ReasoningResult rResult = null;
-                 try {
-                     rResult = ReasonerFrontend.getInstance().propagate(easyConfig.getProject(), 
-@@ -117,7 +117,7 @@
-                     // pretend it is ok
-                     logger.error("Reasoning exception: " + t.getMessage() + " - going on");
-                 }
--                evaluator.reasoningHook.postReasoning(currentScript, concept, valueAccess, cfg);
-+                evaluator.reasoningHook.postReasoning(currentScript, concept, valueAccess, cfg, rResult);
-                 int errorCount = 0;
-                 for (int m = 0; m < rResult.getMessageCount(); m++) {
-                     Message msg = rResult.getMessage(m);
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.easy.instantiatorCore/src/net/ssehub/easy/instantiation/core/JavaUtilities.java b/Plugins/Instantiation/de.uni_hildesheim.sse.easy.instantiatorCore/src/net/ssehub/easy/instantiation/core/JavaUtilities.java
-index d78fcd6..1e68644 100644
---- a/Plugins/Instantiation/de.uni_hildesheim.sse.easy.instantiatorCore/src/net/ssehub/easy/instantiation/core/JavaUtilities.java
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.easy.instantiatorCore/src/net/ssehub/easy/instantiation/core/JavaUtilities.java
-@@ -193,4 +193,14 @@
-         }
-         return result;
-     }
-+    
-+    /**
-+     * Returns whether we are running Java 9.
-+     * 
-+     * @return <code>true</code> for Java 9, <code>false</code> else
-+     */
-+    public static boolean isJava9() {
-+        return System.getProperty("java.version").startsWith("9.");
-+    }
-+    
- }
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang.tests/src/test/de/uni_hildesheim/sse/vil/buildlang/AbstractTest.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang.tests/src/test/de/uni_hildesheim/sse/vil/buildlang/AbstractTest.java
-index 3913cba..c4449bc 100644
---- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang.tests/src/test/de/uni_hildesheim/sse/vil/buildlang/AbstractTest.java
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang.tests/src/test/de/uni_hildesheim/sse/vil/buildlang/AbstractTest.java
-@@ -494,7 +494,16 @@
-         try {
-             File tmp = getTempDir();
-             if (tmp.exists()) {
--                FileUtils.cleanDirectory(tmp);
-+                File[] files = tmp.listFiles();
-+                for (File f : files) {
-+                    if (f.isDirectory()) {
-+                        FileUtils.deleteDirectory(f);
-+                    } else {
-+                        if (!f.getName().endsWith(".tsv")) { // avoid cleaning up files from TSVMeasurementCollector
-+                            f.delete();
-+                        }
-+                    }
-+                }
-             }
-         } catch (IOException e) {
-             // don't care
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang/xtend-gen/de/uni_hildesheim/sse/generator/.VilBuildLanguageGenerator.java._trace b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang/xtend-gen/de/uni_hildesheim/sse/generator/.VilBuildLanguageGenerator.java._trace
-index b6e8f36..52bbe01 100644
---- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang/xtend-gen/de/uni_hildesheim/sse/generator/.VilBuildLanguageGenerator.java._trace
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.buildlang/xtend-gen/de/uni_hildesheim/sse/generator/.VilBuildLanguageGenerator.java._trace
-Binary files differ
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/META-INF/MANIFEST.MF b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/META-INF/MANIFEST.MF
-index 71ec1c0..439ff93 100644
---- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/META-INF/MANIFEST.MF
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/META-INF/MANIFEST.MF
-@@ -25,7 +25,10 @@
-  de.uni-hildesheim.sse.easy.instantiatorCore.rt,
-  net.ssehub.easy.reasoning.core;bundle-version="0.10.3",
-  net.ssehub.easy.reasoning.sseReasoner;bundle-version="0.0.2",
-- org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional
-+ org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional,
-+ net.ssehub.easy.instantiation.serializer.xml;bundle-version="0.9.0",
-+ net.ssehub.easy.reasoning.sseReasoner.tests,
-+ net.ssehub.easy.reasoning.core.tests
- Import-Package: org.apache.log4j,
-  org.junit;version="4.5.0",
-  org.junit.runner;version="4.5.0",
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AbstractRtTest.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AbstractRtTest.java
-index 663a684..2f60578 100644
---- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AbstractRtTest.java
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AbstractRtTest.java
-@@ -17,6 +17,7 @@
- 
- import test.de.uni_hildesheim.sse.vil.buildlang.AbstractExecutionTest;
- import test.de.uni_hildesheim.sse.vil.buildlang.ITestConfigurer;
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
- 
- import java.util.List;
- 
-@@ -28,6 +29,11 @@
- import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.IVariableFilter;
- import net.ssehub.easy.instantiation.rt.core.model.rtVil.Script;
- import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.GeneralMeasures;
-+import net.ssehub.easy.reasoning.core.reasoner.IMeasurementKey;
-+import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
-+import net.ssehub.easy.reasoning.sseReasoner.Measures;
- import net.ssehub.easy.reasoning.sseReasoner.Reasoner;
- import net.ssehub.easy.varModel.management.VarModel;
- import net.ssehub.easy.varModel.model.Project;
-@@ -38,6 +44,9 @@
-  * @author Holger Eichelberger
-  */
- public abstract class AbstractRtTest extends AbstractExecutionTest<Script> {
-+
-+    protected static final IMeasurementKey[] MEASUREMENTS = AbstractTestDescriptor.concat(
-+        Measures.values(), GeneralMeasures.values()); 
- 
-     private static boolean reasonerRegistered = false;
-     
-@@ -52,10 +61,24 @@
-             // set the preferred reasoner, in particular for plugin-based tests as then also older reasoners
-             // may be available
-             fe.setReasonerHint(reasoner.getDescriptor());
-+            // common measurements
-+            AbstractTestDescriptor.registerMeasurementMappings();
-+            // SSE reasoner measurements
-+            TestDescriptor.registerMeasurementMappings();
-+            // see also MEASUREMENTS!
-             reasonerRegistered = true;
-         }
-     }
-     
-+    /**
-+     * Returns a reasoner instance.
-+     * 
-+     * @return the instance
-+     */
-+    protected IReasoner createReasoner() {
-+        return new Reasoner();
-+    }
-+    
-     @Override
-     protected ITestConfigurer<Script> createTestConfigurer() {
-         return new RtVilTestConfigurer();
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AllTests.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AllTests.java
-index f683323..bcdf9e6 100644
---- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AllTests.java
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/AllTests.java
-@@ -27,6 +27,7 @@
-  */
- @RunWith(Suite.class)
- @Suite.SuiteClasses({
-+    RampUpTest.class, // must be first
-     BasicRtTests.class,
-     ExecutionRtTests.class,
-     AnalyzerTest.class,
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RampUpTest.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RampUpTest.java
-new file mode 100644
-index 0000000..f931955
---- /dev/null
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RampUpTest.java
-@@ -0,0 +1,65 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package de.uni_hildesheim.sse.vil.rt.tests;
-+
-+import org.junit.Assert;
-+import org.junit.BeforeClass;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.basics.progress.ProgressObserver;
-+import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.cst.CSTSemanticException;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+
-+/**
-+ * An rt-VIL rampup test.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class RampUpTest extends AbstractRtTest {
-+    
-+    /**
-+     * Starts up the test.
-+     */
-+    @BeforeClass
-+    public static void startUp() {
-+        registerReasoner();
-+    }
-+
-+    /**
-+     * Performs the ram-up test.
-+     * 
-+     * @throws ConfigurationException if setting an expression as default value fails
-+     * @throws ValueDoesNotMatchTypeException if a value does not match a type
-+     * @throws CSTSemanticException if a constraint is erroneously composed
-+     */
-+    @Test
-+    public void rampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
-+        CSTSemanticException {
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        Configuration cfg = net.ssehub.easy.reasoning.core.reasoner.RampUpTest.createRampUpTest();
-+        IReasoner reasoner = createReasoner();
-+        // NO MEASUREMENT!!!
-+        ReasoningResult rResult = reasoner.propagate(cfg.getProject(), cfg, rConfig, ProgressObserver.NO_OBSERVER);
-+        rResult.logInformation(cfg.getProject(), rConfig);
-+        Assert.assertFalse(rResult.hasConflict());
-+    }
-+
-+}
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RtVilTestConfigurer.java b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RtVilTestConfigurer.java
-index 1b4568e..d0e5be8 100644
---- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RtVilTestConfigurer.java
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/src/de/uni_hildesheim/sse/vil/rt/tests/RtVilTestConfigurer.java
-@@ -37,11 +37,20 @@
- import net.ssehub.easy.instantiation.core.model.buildlangModel.ITracer;
- import net.ssehub.easy.instantiation.core.model.execution.TracerFactory;
- import net.ssehub.easy.instantiation.core.model.expressions.ExpressionParserRegistry;
-+import net.ssehub.easy.instantiation.core.model.vilTypes.configuration.Configuration;
- import net.ssehub.easy.instantiation.rt.core.model.rtVil.BuiltIn;
-+import net.ssehub.easy.instantiation.rt.core.model.rtVil.IRtValueAccess;
-+import net.ssehub.easy.instantiation.rt.core.model.rtVil.IRtVilConcept;
-+import net.ssehub.easy.instantiation.rt.core.model.rtVil.ReasoningHookAdapter;
- import net.ssehub.easy.instantiation.rt.core.model.rtVil.RtVilExecution;
- import net.ssehub.easy.instantiation.rt.core.model.rtVil.RtVilModel;
- import net.ssehub.easy.instantiation.rt.core.model.rtVil.Script;
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
- import net.ssehub.easy.varModel.management.VarModel;
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
-+import net.ssehub.easy.varModel.varModel.testSupport.TSVMeasurementCollector;
- import test.de.uni_hildesheim.sse.vil.buildlang.ITestConfigurer;
- import test.de.uni_hildesheim.sse.vil.buildlang.TestTracerFactory;
- 
-@@ -110,15 +119,38 @@
-     @Override
-     public BuildlangExecution createExecutionEnvironment(ITracer tracer, File base, String startRuleName,
-         Map<String, Object> parameter) {
--        RtVilExecution result = new RtVilExecution(tracer, base, parameter); // TODO adjust tracer
-+        RtVilExecution result = new RtVilExecution(tracer, base, parameter);
-         result.setStopAfterBindValues(false); // although default, fits to initial code
-         result.setUseReasoner(true);
-+        result.setReasoningHook(new ReasoningHookAdapter() {
-+            private String id;
-+            
-+            @Override
-+            public void preReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, 
-+                Configuration config) {
-+                File base = AbstractRtTest.determineTestDataDir(getSystemPropertyName());
-+                TSVMeasurementCollector.ensureCollector(new File(base, 
-+                    "temp/measurements-rtvil.tsv"));
-+                id = MeasurementCollector.start(config.getConfiguration(), "RT-VIL", 1);
-+            }
-+            
-+            @Override
-+            public void postReasoning(Script script, IRtVilConcept concept, IRtValueAccess values, 
-+                Configuration config, ReasoningResult result) {
-+                MeasurementCollector.endAuto(id);
-+                AbstractTest.transferReasoningMeasures(MeasurementCollector.getInstance(), id, 
-+                    AbstractRtTest.MEASUREMENTS, result);
-+                MeasurementCollector.end(id);
-+                result.logInformation(config.getConfiguration().getProject(), 
-+                    ReasonerConfiguration.ADDITIONAL_INFO_LOG_SYSOUT);
-+            }
-+        });
-         return result;
-     }
- 
-     @Override
-     public TracerFactory createTestTracerFactory(Writer trace, String[] baseFolders) {
--        return new TestTracerFactory(trace, baseFolders); // TODO adjust
-+        return new TestTracerFactory(trace, baseFolders);
-     }
- 
- }
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/temp/measurements-rtvil.tsv b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/temp/measurements-rtvil.tsv
-new file mode 100644
-index 0000000..7120680
---- /dev/null
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/temp/measurements-rtvil.tsv
-@@ -0,0 +1,17 @@
-+model name	URI	tag	caller	MODEL_ANNOTATIONS	MODEL_COMPLEXITY	MODEL_CONSTRAINT_AVG_COMPLEXITY	MODEL_CONSTRAINT_COMPLEXITY	MODEL_CONSTRAINT_INSTANCES	MODEL_CONSTRAINT_VARIABLES	MODEL_CONSTRAINT_VARIABLES_NO_CONTAINER	MODEL_NORMAL_VARIABLES	MODEL_NORMAL_VARIABLES_NO_CONTAINER	MODEL_TOPLEVEL_VARIABLES	MODEL_VARIABLES	MODEL_VARIABLES_WITHOUT_CONTAINER	MODEL_VARIABLE_AVG_COMPLEXITY	MODEL_VARIABLE_COMPLEXITY	REASONER_CONSTRAINT_COUNT	REASONER_EVALUATION_TIME	REASONER_INSTANCE_CREATION_TIME	REASONER_PROBLEMS	REASONER_PROBLEM_ASSIGNMENTS	REASONER_PROBLEM_CONSTRAINTS	REASONER_REASONING_TIME	REASONER_REEVALUATION_COUNT	REASONER_TRANSLATION_TIME	REASONER_VARIABLES_IN_CONSTRAINTS	RESPONSETIME_AUTO	
-+QM2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM2.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testParameter	7,00	9,50	0,25	0,50	0,00	0,00	0,00	7,00	7,00	2,00	7,00	7,00	1,29	9,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	1,00	
-+Add	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/Add.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testAdd	4,00	5,75	0,25	0,75	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,25	5,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
-+Clear	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/Clear.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testClear	3,00	4,50	0,25	0,50	0,00	1,00	1,00	2,00	2,00	2,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	1,00	
-+QM5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM5.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testReferences2	16,00	23,00	0,25	1,00	0,00	0,00	0,00	16,00	12,00	4,00	16,00	12,00	1,38	22,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	2,00	
-+QM8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM8.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testReferences3	8,00	11,75	0,25	0,75	0,00	0,00	0,00	8,00	7,00	3,00	8,00	7,00	1,38	11,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	1,00	
-+tactics2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/tactics2.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testTactics2	4,00	6,50	0,25	0,50	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	
-+QM6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM6.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testInstances2	9,00	12,25	0,25	0,25	0,00	0,00	0,00	9,00	9,00	1,00	9,00	9,00	1,33	12,00	1,00	1,00	0,00	0,00	0,00	0,00	4,00	1,00	2,00	5,00	4,00	
-+QM7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM7.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testInstances3	9,00	12,25	0,25	0,25	0,00	0,00	0,00	9,00	9,00	1,00	9,00	9,00	1,33	12,00	1,00	0,00	0,00	0,00	0,00	0,00	2,00	1,00	0,00	5,00	2,00	
-+QM3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM3.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testMapping	11,00	15,50	0,50	1,50	0,00	0,00	0,00	11,00	9,00	3,00	11,00	9,00	1,27	14,00	4,00	0,00	0,00	0,00	0,00	0,00	1,00	4,00	0,00	3,00	1,00	
-+QM4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM4.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testReferences	8,00	11,75	0,25	0,75	0,00	0,00	0,00	8,00	7,00	3,00	8,00	7,00	1,38	11,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
-+QM6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM6.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testInstances	9,00	12,25	0,25	0,25	0,00	0,00	0,00	9,00	9,00	1,00	9,00	9,00	1,33	12,00	1,00	0,00	0,00	0,00	0,00	0,00	2,00	1,00	0,00	5,00	2,00	
-+dispatch2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/dispatch2.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testDispatch2	11,00	15,50	0,25	0,50	0,00	0,00	0,00	11,00	10,00	3,00	11,00	10,00	1,36	15,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	
-+ALtest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/ALtest.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testALTest	41,00	56,75	0,31	2,75	0,00	0,00	0,00	41,00	33,00	9,00	41,00	33,00	1,32	54,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	2,00	
-+QM1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM1.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testStartup3	29,00	43,75	0,39	2,75	0,00	1,00	0,00	28,00	23,00	7,00	29,00	23,00	1,41	41,00	1,00	0,00	0,00	0,00	0,00	0,00	2,00	1,00	0,00	2,00	2,00	
-+QM1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM1.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testStartup4	29,00	43,75	0,39	2,75	0,00	1,00	0,00	28,00	23,00	7,00	29,00	23,00	1,41	41,00	1,00	0,00	0,00	0,00	0,00	0,00	2,00	1,00	0,00	2,00	2,00	
-+QM1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt.tests/testdata/ivml/QM1.ivml	RT-VIL	de.uni_hildesheim.sse.vil.rt.tests.ExecutionRtTests.testStartup5	29,00	43,75	0,39	2,75	0,00	1,00	0,00	28,00	23,00	7,00	29,00	23,00	1,41	41,00	1,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	2,00	1,00	
-diff --git a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt/xtend-gen/de/uni_hildesheim/sse/vil/rt/generator/.RtVilGenerator.java._trace b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt/xtend-gen/de/uni_hildesheim/sse/vil/rt/generator/.RtVilGenerator.java._trace
-index 40b0cc4..9d96755 100644
---- a/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt/xtend-gen/de/uni_hildesheim/sse/vil/rt/generator/.RtVilGenerator.java._trace
-+++ b/Plugins/Instantiation/de.uni_hildesheim.sse.vil.rt/xtend-gen/de/uni_hildesheim/sse/vil/rt/generator/.RtVilGenerator.java._trace
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml.test/.gitignore b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml.test/.gitignore
-new file mode 100644
-index 0000000..92145bc
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml.test/.gitignore
-@@ -0,0 +1,2 @@
-+/bin/
-+/target/
-\ No newline at end of file
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/.gitignore b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/.gitignore
-deleted file mode 100644
-index d64c606..0000000
---- a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/.gitignore
-+++ /dev/null
-@@ -1 +0,0 @@
--/net/
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Activator.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Activator.class
-new file mode 100644
-index 0000000..aa0b89c
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Activator.class
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Main.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Main.class
-new file mode 100644
-index 0000000..06c5667
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/Main.class
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer$InstanceHolder.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer$InstanceHolder.class
-new file mode 100644
-index 0000000..d0d615e
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer$InstanceHolder.class
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer.class
-new file mode 100644
-index 0000000..65d2021
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlDeserializer.class
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor$InstanceHolder.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor$InstanceHolder.class
-new file mode 100644
-index 0000000..f6f7624
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor$InstanceHolder.class
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor.class
-new file mode 100644
-index 0000000..502422c
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlEditor.class
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer$InstanceHolder.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer$InstanceHolder.class
-new file mode 100644
-index 0000000..3c61583
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer$InstanceHolder.class
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer.class
-new file mode 100644
-index 0000000..f64ad94
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/YamlSerializer.class
-Binary files differ
-diff --git a/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/package-info.class b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/package-info.class
-new file mode 100644
-index 0000000..3764b42
---- /dev/null
-+++ b/Plugins/Instantiation/net.ssehub.easy.instantiation.yaml/bin/net/ssehub/easy/instantiation/yaml/package-info.class
-Binary files differ
-diff --git a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/OperationTests.java b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/OperationTests.java
-index e8b2d1f..88c1109 100644
---- a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/OperationTests.java
-+++ b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/OperationTests.java
-@@ -1,8 +1,6 @@
- 
- package net.ssehub.easy.reasoning.drools;
- 
--import org.junit.BeforeClass;
--
- /**
-  * Configures the operation tests for Drools.
-  * 
-@@ -11,11 +9,10 @@
- public class OperationTests extends net.ssehub.easy.reasoning.core.frontend.OperationTests {
- 
-     /**
--     * Initializes the tests (for single execution outside the suite).
-+     * Creates a specific test instance.
-      */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        Utils.init();
-+    public OperationTests() {
-+        super(TestDescriptor.INSTANCE);
-     }
- 
- }
-diff --git a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/TestDescriptor.java b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/TestDescriptor.java
-new file mode 100644
-index 0000000..6980b10
---- /dev/null
-+++ b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools.test/test/net/ssehub/easy/reasoning/drools/TestDescriptor.java
-@@ -0,0 +1,73 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.drools;
-+
-+import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * The test descriptor for this reasoner.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class TestDescriptor extends AbstractTestDescriptor {
-+
-+    public static final ITestDescriptor INSTANCE = new TestDescriptor();
-+    private DroolsReasoner reasoner = new DroolsReasoner();
-+
-+    /**
-+     * Creates a test descriptor.
-+     */
-+    private TestDescriptor() {
-+        super("net.ssehub.easy.reasoning.drools.test", 
-+            null, 
-+            true, // CHECK
-+            false);
-+    }
-+    
-+    @Override
-+    public IReasoner createReasoner() {
-+        return new DroolsReasoner();
-+    }
-+
-+    @Override
-+    public void registerResoner() {
-+        ReasonerFrontend.getInstance().getRegistry().register(reasoner);
-+    }
-+
-+    @Override
-+    public void unregisterReasoner() {
-+        ReasonerFrontend.getInstance().getRegistry().unregister(reasoner);
-+    }
-+
-+    @Override
-+    public String getName() {
-+        return DroolsReasonerDescriptor.NAME;
-+    }
-+
-+    @Override
-+    public String getVersion() {
-+        return DroolsReasonerDescriptor.VERSION;
-+    }
-+
-+    @Override
-+    public String getMeasurementFileName() {
-+        return "measurements-drools.tsv";
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/OperationTests.java b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/OperationTests.java
-index 3234357..edfad3f 100644
---- a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/OperationTests.java
-+++ b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/OperationTests.java
-@@ -1,8 +1,6 @@
- 
- package net.ssehub.easy.reasoning.drools2;
- 
--import org.junit.BeforeClass;
--
- /**
-  * Configures the operation tests for Drools.
-  * 
-@@ -11,11 +9,10 @@
- public class OperationTests extends net.ssehub.easy.reasoning.core.frontend.OperationTests {
- 
-     /**
--     * Initializes the tests (for single execution outside the suite).
-+     * Creates a specific test instance.
-      */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        Utils.init();
-+    public OperationTests() {
-+        super(TestDescriptor.INSTANCE);
-     }
- 
- }
-diff --git a/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/TestDescriptor.java b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/TestDescriptor.java
-new file mode 100644
-index 0000000..5c5fad6
---- /dev/null
-+++ b/Plugins/Reasoner/Drools/de.uni_hildesheim.sse.reasoning.drools2.test/test/net/ssehub/easy/reasoning/drools2/TestDescriptor.java
-@@ -0,0 +1,73 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.drools2;
-+
-+import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * The test descriptor for this reasoner.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class TestDescriptor extends AbstractTestDescriptor {
-+
-+    public static final ITestDescriptor INSTANCE = new TestDescriptor();
-+    private DroolsReasoner reasoner = new DroolsReasoner();
-+
-+    /**
-+     * Creates a test descriptor.
-+     */
-+    private TestDescriptor() {
-+        super("net.ssehub.easy.reasoning.drools2.tests", 
-+            null, 
-+            true, // CHECK
-+            false);
-+    }
-+    
-+    @Override
-+    public IReasoner createReasoner() {
-+        return new DroolsReasoner();
-+    }
-+
-+    @Override
-+    public void registerResoner() {
-+        ReasonerFrontend.getInstance().getRegistry().register(reasoner);
-+    }
-+
-+    @Override
-+    public void unregisterReasoner() {
-+        ReasonerFrontend.getInstance().getRegistry().unregister(reasoner);
-+    }
-+
-+    @Override
-+    public String getName() {
-+        return DroolsReasonerDescriptor.NAME;
-+    }
-+
-+    @Override
-+    public String getVersion() {
-+        return DroolsReasonerDescriptor.VERSION;
-+    }
-+
-+    @Override
-+    public String getMeasurementFileName() {
-+        return "measurements-drools2.tsv";
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/META-INF/MANIFEST.MF b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/META-INF/MANIFEST.MF
-index ef65a8d..b31b975 100644
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/META-INF/MANIFEST.MF
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/META-INF/MANIFEST.MF
-@@ -7,8 +7,9 @@
- Bundle-RequiredExecutionEnvironment: JavaSE-1.6
- Require-Bundle: de.uni_hildesheim.sse.ivml;bundle-version="0.1.1",
-  org.junit;bundle-version="4.8.2",
-- net.ssehub.easy.reasoning.core.tests;bundle-version="0.0.1",
-  net.ssehub.easy.reasoning.core;bundle-version="0.0.8",
-  net.ssehub.easy.dslCore;bundle-version="0.0.1",
-  net.ssehub.easy.varModel.tests;bundle-version="0.0.10",
-- net.ssehub.easy.reasoning.sseReasoner;bundle-version="0.0.1"
-+ net.ssehub.easy.reasoning.sseReasoner;bundle-version="0.0.1",
-+ net.ssehub.easy.reasoning.core.tests;bundle-version="0.0.1"
-+Export-Package: test.net.ssehub.easy.reasoning.sseReasoner
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java
-deleted file mode 100644
-index 29ba766..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java
-+++ /dev/null
-@@ -1,323 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.adaptation;
--
--import org.junit.Assert;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.test.AbstractTest;
--import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
--import net.ssehub.easy.reasoning.sseReasoner.Engine;
--import net.ssehub.easy.varModel.confModel.AssignmentState;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.confModel.ConfigurationException;
--import net.ssehub.easy.varModel.confModel.IDecisionVariable;
--import net.ssehub.easy.varModel.cst.CSTSemanticException;
--import net.ssehub.easy.varModel.cst.ConstantValue;
--import net.ssehub.easy.varModel.cst.OCLFeatureCall;
--import net.ssehub.easy.varModel.cst.Variable;
--import net.ssehub.easy.varModel.model.Constraint;
--import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.datatypes.Compound;
--import net.ssehub.easy.varModel.model.datatypes.IntegerType;
--import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
--import net.ssehub.easy.varModel.model.values.Value;
--import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
--import net.ssehub.easy.varModel.model.values.ValueFactory;
--import net.ssehub.easy.varModel.persistency.StringProvider;
--
--/**
-- * Configures the operation tests for Drools.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class AdaptationIntegrityTests extends AbstractTest<Project> {
--
--    private Configuration config;
--    private ReasonerConfiguration rConfig;
--    private Project project;
--    private DecisionVariableDeclaration declA;
--    private DecisionVariableDeclaration declB;
--    private DecisionVariableDeclaration declC;
--    private DecisionVariableDeclaration myParam;
--    
--    /**
--     * Creates a simple test project and performs reasoning.
--     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
--     * {@link ValueFactory}.
--     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
--     */
--    public void createSimpleProject() throws ValueDoesNotMatchTypeException, CSTSemanticException {
--        // Create project and variables
--        project = new Project("SimpleTestProject");
--        declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, project);
--        project.add(declA);
--        declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, project);
--        project.add(declB);
--        declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, project);
--        declC.setValue(33);
--        project.add(declC);
--        
--        // Create assignment
--        Value valA = ValueFactory.createValue(declA.getType(), 31);
--        Variable varA = new Variable(declA);
--        ConstantValue constValA = new ConstantValue(valA);
--        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
--        Constraint assignmentConstraint = new Constraint(project);
--        assignmentConstraint.setConsSyntax(assignmentA);
--        project.add(assignmentConstraint);
--        
--        // Create implies constraint
--        Value valB = ValueFactory.createValue(declB.getType(), 37);
--        ConstantValue constValB = new ConstantValue(valB);
--        Value valC = ValueFactory.createValue(declC.getType(), 40);
--        ConstantValue constValC = new ConstantValue(valC);
--        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
--        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
--        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
--        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
--        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
--        Constraint impliesConstaint = new Constraint(project);
--        impliesConstaint.setConsSyntax(implies);
--        project.add(impliesConstaint);
--        Constraint impliesConstaintFail = new Constraint(project);
--        impliesConstaintFail.setConsSyntax(impliesFail);
--        project.add(impliesConstaintFail);
--        
--        // debugging
--        System.out.println(StringProvider.toIvmlString(project));
--        
--        // Create Configuration (will also start AssignmentResolver)
--        config = new Configuration(project, true);        
--        rConfig = new ReasonerConfiguration();
--        Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
--        engine.reason();       
--
--    } 
--    
--    /**
--     * Creates a simple test project and performs reasoning.
--     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
--     * {@link ValueFactory}.
--     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
--     */
--    public void createCompoundProject() throws ValueDoesNotMatchTypeException, CSTSemanticException {
--        // Create project and variables
--        project = new Project("CompoundTestProject");
--        Compound param = new Compound("IntParameter", project);
--        declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, param);
--        param.add(declA);
--        declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, param);
--        param.add(declB);
--        declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, param);
--        declC.setValue(33);
--        param.add(declC);
--        project.add(param);
--        
--        myParam = new DecisionVariableDeclaration("myParam", param, project);
--        project.add(myParam);
--        
--        // Create assignment
--        Value valA = ValueFactory.createValue(declA.getType(), 31);
--        Variable varA = new Variable(declA);
--        ConstantValue constValA = new ConstantValue(valA);
--        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
--        Constraint assignmentConstraint = new Constraint(param);
--        assignmentConstraint.setConsSyntax(assignmentA);
--        param.addConstraint(assignmentConstraint);
--        
--        // Create implies constraint
--        Value valB = ValueFactory.createValue(declB.getType(), 37);
--        ConstantValue constValB = new ConstantValue(valB);
--        Value valC = ValueFactory.createValue(declC.getType(), 40);
--        ConstantValue constValC = new ConstantValue(valC);
--        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
--        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
--        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
--        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
--        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
--        Constraint impliesConstaint = new Constraint(param);
--        impliesConstaint.setConsSyntax(implies);
--        param.addConstraint(impliesConstaint);
--        Constraint impliesConstaintFail = new Constraint(param);
--        impliesConstaintFail.setConsSyntax(impliesFail);
--        param.addConstraint(impliesConstaintFail);
--        
--        // debugging
--        System.out.println(StringProvider.toIvmlString(project));
--        
--        // Create Configuration (will also start AssignmentResolver)
--        config = new Configuration(project, true);        
--        rConfig = new ReasonerConfiguration();
--        Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
--        engine.reason();       
--        
--    }  
--    
--    /**
--     * Tests the results of initial reasoning.
--     */
--    @Test
--    public void testSimpleResultAfterReasoning() {
--        try {
--            createSimpleProject();
--            IDecisionVariable iVarA = config.getDecision(declA);
--            IDecisionVariable iVarB = config.getDecision(declB);
--            IDecisionVariable iVarC = config.getDecision(declC);
--            
--            // Test correct assignments
--            Assert.assertNotNull(iVarA);
--            Assert.assertEquals(31, iVarA.getValue().getValue());
--            Assert.assertSame("iVarA", AssignmentState.ASSIGNED, iVarA.getState());
--
--            Assert.assertNotNull(iVarB);
--            Assert.assertEquals(37, iVarB.getValue().getValue());
--            Assert.assertSame("iVarB", AssignmentState.ASSIGNED, iVarB.getState());
--            
--            Assert.assertNotNull(iVarC);
--            Assert.assertEquals(33, iVarC.getValue().getValue());
--            Assert.assertSame("iVarC", AssignmentState.DEFAULT, iVarC.getState());
--
--        } catch (ValueDoesNotMatchTypeException e) {
--            e.printStackTrace();
--        } catch (CSTSemanticException e) {
--            e.printStackTrace();
--        }
--    }
--    
--    /**
--     * Tests the results of reasoning after changing value for adaptation.
--     */
--//    @Ignore
--    @Test
--    public void testSimpleResultAfterReasoningForAdaptation() {
--        try {
--            createSimpleProject();
--            
--            Value newValA = ValueFactory.createValue(declA.getType(), 101);
--            Value newValC = ValueFactory.createValue(declC.getType(), 33);
--            try {
--                config.getDecision(declA).setValue(newValA, AssignmentState.USER_ASSIGNED);
--                config.getDecision(declC).setValue(newValC, AssignmentState.USER_ASSIGNED);
--            } catch (ConfigurationException e) {
--                e.printStackTrace();
--            }
--            Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
--            engine.reason();
--            
--            IDecisionVariable iVarA = config.getDecision(declA);
--            IDecisionVariable iVarB = config.getDecision(declB);
--            IDecisionVariable iVarC = config.getDecision(declC);
--            
--            // Test correct assignments
--            Assert.assertNotNull(iVarA);
--            Assert.assertEquals(101, iVarA.getValue().getValue());
--            Assert.assertSame("iVarA", AssignmentState.USER_ASSIGNED, iVarA.getState());
--            
--            Assert.assertNotNull(iVarB);
--            Assert.assertEquals(37, iVarB.getValue().getValue());
--            Assert.assertSame("iVarB", AssignmentState.ASSIGNED, iVarB.getState());
--            
--            Assert.assertNotNull(iVarC);
--            Assert.assertEquals(33, iVarC.getValue().getValue());
--            Assert.assertSame("iVarC", AssignmentState.USER_ASSIGNED, iVarC.getState());
--            
--        } catch (ValueDoesNotMatchTypeException e) {
--            e.printStackTrace();
--        } catch (CSTSemanticException e) {
--            e.printStackTrace();
--        }
--    }
--    
--    /**
--     * Tests the results of initial reasoning.
--     */
--    @Test
--    public void testCompoundResultAfterReasoning() {
--        try {
--            createCompoundProject();
--            
--            IDecisionVariable iMyParam = config.getDecision(myParam);
--            IDecisionVariable iVarA = iMyParam.getNestedElement(0);
--            IDecisionVariable iVarB = iMyParam.getNestedElement(1);
--            IDecisionVariable iVarC = iMyParam.getNestedElement(2);
--            
--            // Test correct assignments
--            Assert.assertNotNull(iMyParam);
--            Assert.assertSame("iMyParam", AssignmentState.ASSIGNED, iMyParam.getState());
--            
--            Assert.assertNotNull(iVarA);
--            Assert.assertEquals(31, iVarA.getValue().getValue());
--            Assert.assertSame("iVarA", AssignmentState.DERIVED, iVarA.getState());
--            
--            Assert.assertNotNull(iVarB);
--            Assert.assertEquals(37, iVarB.getValue().getValue());
--            Assert.assertSame("iVarB", AssignmentState.DERIVED, iVarB.getState());
--            
--            Assert.assertNotNull(iVarC);
--            Assert.assertEquals(33, iVarC.getValue().getValue());
--            Assert.assertSame("iVarC", AssignmentState.DEFAULT, iVarC.getState());
--            
--        } catch (ValueDoesNotMatchTypeException e) {
--            e.printStackTrace();
--        } catch (CSTSemanticException e) {
--            e.printStackTrace();
--        }
--    }
--    
--    /**
--     * Tests the results of initial reasoning.
--     */
--    @Test
--    public void testCompoundResultAfterReasoningForAdaptation() {
--        try {
--            createCompoundProject();
--            
--            Value newValA = ValueFactory.createValue(declA.getType(), 101);
--            Value newValC = ValueFactory.createValue(declC.getType(), 33);
--            try {
--                config.getDecision(myParam).getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
--                config.getDecision(myParam).getNestedElement(2).setValue(newValC, AssignmentState.USER_ASSIGNED);
--            } catch (ConfigurationException e) {
--                e.printStackTrace();
--            }
--            Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
--            engine.reason();
--            
--            IDecisionVariable iMyParam = config.getDecision(myParam);
--            IDecisionVariable iVarA = iMyParam.getNestedElement(0);
--            IDecisionVariable iVarB = iMyParam.getNestedElement(1);
--            IDecisionVariable iVarC = iMyParam.getNestedElement(2);
--            
--            // Test correct assignments
--            Assert.assertNotNull(iMyParam);
--            Assert.assertSame("iMyParam", AssignmentState.ASSIGNED, iMyParam.getState());
--            
--            Assert.assertNotNull(iVarA);
--            Assert.assertEquals(101, iVarA.getValue().getValue());
--            Assert.assertSame("iVarA", AssignmentState.USER_ASSIGNED, iVarA.getState());
--            
--            Assert.assertNotNull(iVarB);
--            Assert.assertEquals(37, iVarB.getValue().getValue());
--            Assert.assertSame("iVarB", AssignmentState.DERIVED, iVarB.getState());
--            
--            Assert.assertNotNull(iVarC);
--            Assert.assertEquals(33, iVarC.getValue().getValue());
--            Assert.assertSame("iVarC", AssignmentState.USER_ASSIGNED, iVarC.getState());
--            
--        } catch (ValueDoesNotMatchTypeException e) {
--            e.printStackTrace();
--        } catch (CSTSemanticException e) {
--            e.printStackTrace();
--        }
--    }
--    
--
--    
--    
--    
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java
-deleted file mode 100644
-index 94f0ad2..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java
-+++ /dev/null
-@@ -1,316 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.adaptation;
--
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
--import net.ssehub.easy.reasoning.sseReasoner.Engine;
--import net.ssehub.easy.varModel.confModel.AssignmentState;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.confModel.ConfigurationException;
--import net.ssehub.easy.varModel.confModel.IAssignmentState;
--import net.ssehub.easy.varModel.confModel.IDecisionVariable;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--import net.ssehub.easy.varModel.model.datatypes.IntegerType;
--import net.ssehub.easy.varModel.model.values.Value;
--import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
--import net.ssehub.easy.varModel.model.values.ValueFactory;
--
--/**
-- * Collection constraints tests.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class AdaptationScenarioTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "adaptationScenarios");
--    
--    private Project project;
--    private Configuration config;
--    private ReasonerConfiguration rConfig;   
--
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--
--    
--    /**
--     * Helper method to prepare configuration from a project.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     */
--    private void prepareConfiguration(String path) {
--        project = loadProject(FOLDER, path);
--        config = new Configuration(project, true);        
--        rConfig = new ReasonerConfiguration();
--    }
--    
--    /**
--     * Helper method to run reasoning.
--     */
--    private void runReasoning() {
--        Engine engine = new Engine(project, config, rConfig, ProgressObserver.NO_OBSERVER);
--        engine.reason();  
--    }
--
--    /**
--     * Asserts that a given variable has the expected value (and state).
--     * @param variable The variable to test (maybe a nested variable, but not <tt>null</tt>).
--     * @param expectedValue The expected value of the variable (must not be <tt>null</tt>).
--     * @param expectedState Should be one of {@link AssignmentState#ASSIGNED} (if it was initialized by the
--     *     configuration, {@link AssignmentState#USER_ASSIGNED} if it was manually overwritten by the user
--     *     (inside the test case), or {@link AssignmentState#DERIVED} if the reasoner should overwrite a value during
--     *     reasoning
--     * @param explanation A error message if the Junit test case breaks
--     */
--    private void assertVariable(IDecisionVariable variable, Object expectedValue, IAssignmentState expectedState,
--            String explanation) {
--        
--        Assert.assertNotNull("Tested variable was NULL, but was not expected to be.", variable);
--        String name = variable.getDeclaration().getName();
--        if (expectedValue != null) {
--            Assert.assertNotNull(name + " " + explanation + " has NULL value, but was not expected.",
--                    variable.getValue());        
--            Assert.assertEquals(name + " " + explanation, expectedValue, variable.getValue().getValue());            
--        } else {
--            Assert.assertEquals(name + " " + explanation, expectedValue, variable.getValue()); 
--        }
--        Assert.assertSame(name + " " + explanation, expectedState, variable.getState());
--    }
--        
--    /**
--     * Initial AssignmentResolver. 1st Reasoning. Simple variable value modification by user. 2nd Reasoning.
--     * After variable modification it should not be changed by the reasoner.
--     * Uses VariableAccessor.
--     */
--    @Test
--    public void simpleVariableTest() {        
--        prepareConfiguration("simpleVariable.ivml");
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("a")) {
--                assertVariable(variable, 1, AssignmentState.ASSIGNED, "a after 1 reasoning");
--                try {
--                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
--                    variable.setValue(newValA, AssignmentState.USER_ASSIGNED);
--                } catch (ValueDoesNotMatchTypeException e) {                    
--                    e.printStackTrace();
--                } catch (ConfigurationException e) {
--                    e.printStackTrace();
--                }
--                assertVariable(variable, 10, AssignmentState.USER_ASSIGNED, "a after new value");
--            }
--            if (variable.getDeclaration().getName().equals("b")) {
--                assertVariable(variable, null, AssignmentState.UNDEFINED, "b after 1 reasoning");                
--            }
--        }
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("a")) {
--                assertVariable(variable, 10, AssignmentState.USER_ASSIGNED, "a after 2 reasoning");                
--            }
--            if (variable.getDeclaration().getName().equals("b")) {
--                assertVariable(variable, 20, AssignmentState.DERIVED, "b after 2 reasoning");
--            }
--        }
--        
--    }
--    
--    /**
--     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
--     * After variable modification it should not be changed by the reasoner.
--     * Uses VariableAccessor (assigns value to cmp as Variable). - FAILS!
--     */
--    @Test
--    public void compoundVariableTest() {        
--        prepareConfiguration("compoundVariable.ivml");
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("cmp")) {
--                assertVariable(variable.getNestedElement(0), 1, AssignmentState.ASSIGNED, "cmp.a after 1 reasoning");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED, "cmp.b after 1 reasoning");
--                try {
--                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
--                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
--                } catch (ValueDoesNotMatchTypeException e) {                    
--                    e.printStackTrace();
--                } catch (ConfigurationException e) {
--                    e.printStackTrace();
--                }
--                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
--                        "cmp.a after new value");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED, "cmp.b after new value");
--            }
--
--        }
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("cmp")) {
--                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
--                        "cmp.a after 2 reasoning");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.DERIVED, "cmp.b after 2 reasoning");
--            }
--        }
--        
--    }
--    
--    /**
--     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
--     * After variable modification it should not be changed by the reasoner.
--     * Uses CompoundSlotAccessor.
--     */
--    @Test
--    public void compoundConstraintsTest() {        
--        prepareConfiguration("compoundConstraints.ivml");
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("cmp")) {
--                assertVariable(variable.getNestedElement(0), 1, AssignmentState.DERIVED, "cmp.a after 1 reasoning");
--                assertVariable(variable.getNestedElement(1), null, AssignmentState.UNDEFINED, 
--                        "cmp.b after 1 reasoning");
--                try {
--                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
--                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
--                } catch (ValueDoesNotMatchTypeException e) {                    
--                    e.printStackTrace();
--                } catch (ConfigurationException e) {
--                    e.printStackTrace();
--                }
--                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED, 
--                        "cmp.a after new value");
--                assertVariable(variable.getNestedElement(1), null, AssignmentState.UNDEFINED, 
--                        "cmp.b after new value");
--            }
--            
--        }
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("cmp")) {
--                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED, 
--                        "cmp.a after 2 reasoning");
--                assertVariable(variable.getNestedElement(1), 20, AssignmentState.DERIVED, 
--                        "cmp.b after 2 reasoning");
--            }
--        }
--        
--    }
--    
--    /**
--     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
--     * After variable modification it should not be changed by the reasoner.
--     * Uses VariableAccessor.
--     */
--    @Test
--    public void collectionOfSimpleVariablesTest() {        
--        prepareConfiguration("collectionOfSimpleVariables.ivml");
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("seqA")) {
--                assertVariable(variable.getNestedElement(0), 1, AssignmentState.ASSIGNED,
--                    "seqA[0] after 1 reasoning");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED,
--                     "seqA[1] after 1 reasoning");
--                try {
--                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
--                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
--                } catch (ValueDoesNotMatchTypeException e) {                    
--                    e.printStackTrace();
--                } catch (ConfigurationException e) {
--                    e.printStackTrace();
--                }
--                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
--                    "after user defined value for seqA[0]");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED,
--                    "after user defined value for seqA[0]");
--            }            
--        }
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("seqA")) {
--                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
--                        "seqA[0] after 2 reasoning");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.DERIVED,
--                         "seqA[1] after 2 reasoning");             
--            }
--        }        
--    }
--
--    
--    /**
--     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
--     * After variable modification it should not be changed by the reasoner.
--     * Uses VariableAccessor.
--     */
--    @Test
--    public void collectionOfIntegersTest() {        
--        prepareConfiguration("collectionOfIntegers.ivml");
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("seqA")) {
--                assertVariable(variable.getNestedElement(0), 1, AssignmentState.ASSIGNED,
--                        "seqA[0] after 1 reasoning");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED,
--                         "seqA[1] after 1 reasoning");   
--                Assert.assertEquals("seqA[0] after 1 reasoning", 1, variable.getNestedElement(0).getValue().getValue());
--                Assert.assertSame("seqA[0] after 1 reasoning", AssignmentState.ASSIGNED, variable.getState());       
--                try {
--                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
--                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
--                } catch (ValueDoesNotMatchTypeException e) {                    
--                    e.printStackTrace();
--                } catch (ConfigurationException e) {
--                    e.printStackTrace();
--                }
--                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
--                        "seqA[0] after new value");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.ASSIGNED,
--                         "seqA[1] after new value");
--            }
--        }
--        runReasoning();
--        for (IDecisionVariable variable : config) {
--            if (variable.getDeclaration().getName().equals("seqA")) {
--                assertVariable(variable.getNestedElement(0), 10, AssignmentState.USER_ASSIGNED,
--                        "seqA[0] after 2 reasoning");
--                assertVariable(variable.getNestedElement(1), 2, AssignmentState.DERIVED,
--                         "seqA[1] after 2 reasoning"); 
--            }
--        }
--        
--    }
--   
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java
-deleted file mode 100644
-index 286185b..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java
-+++ /dev/null
-@@ -1,23 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.adaptation;
--
--import org.junit.runner.RunWith;
--import org.junit.runners.Suite;
--import org.junit.runners.Suite.SuiteClasses;
--
--/**
-- * Tests for testing the reasoning capabilities for adaptation.<br/>
-- * Usually a property is used to specify the location of test data.
-- * This is done with the property
-- * {@link net.ssehub.easy.reasoning.core.frontend.TestConfiguration#SYSTEM_PROPERTY}. For instance: <br/>
-- * <tt>-DreasonerCore.testdata.home=C:\EASyProducer-git\Plugins\Reasoner\ReasonerCore\ReasonerCore.test\testdata</tt>
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--@RunWith(Suite.class)
--@SuiteClasses({
--    AdaptationIntegrityTests.class,
--    AdaptationScenarioTests.class
--    })
--public class AllTests {
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java
-deleted file mode 100644
-index 87efc86..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java
-+++ /dev/null
-@@ -1,6 +0,0 @@
--/**
-- * Reasoning tests for adaptation.
-- * @author sizonenko
-- *
-- */
--package net.ssehub.easy.reasoning.sseReasoner.adaptation;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java
-deleted file mode 100644
-index 08f7b06..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java
-+++ /dev/null
-@@ -1,30 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--import org.junit.runner.RunWith;
--import org.junit.runners.Suite;
--import org.junit.runners.Suite.SuiteClasses;
--
--/**
-- * Tests for testing the reasoning capabilities.<br/>
-- * Usually a property is used to specify the location of test data.
-- * This is done with the property
-- * {@link net.ssehub.easy.reasoning.core.frontend.TestConfiguration#SYSTEM_PROPERTY}. For instance: <br/>
-- * <tt>-DreasonerCore.testdata.home=C:\EASyProducer-git\Plugins\Reasoner\ReasonerCore\ReasonerCore.test\testdata</tt>
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--@RunWith(Suite.class)
--@SuiteClasses({    
--    AttributeTests.class,  
--    CollectionConstraintsTests.class,
--    FailedDecisionsTests.class,
--    RuntimeReasoningTests.class,
--    OperationTests.class,
--    CollectionOperationsTests.class,
--    StructureTests.class,
--    ConstraintVariableTests.class,
--    EvalTests.class
--    })
--public class AllTests {
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java
-deleted file mode 100644
-index cbaba8b..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java
-+++ /dev/null
-@@ -1,164 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Attribute tests.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class AttributeTests extends  net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--
--    private static final File FOLDER = new File(TESTDATA, "attributes");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    }
--    
--    /**
--     * Assign attribute with a default value to the project test.
--     */
--    @Test    
--    public void defaultAssign() {
--        reasoningTest("DefaultAssign.ivml", 0);
--    }
--    
--    /**
--     * Assign attribute with a default value to the project test.
--     */
--    @Test    
--    public void blockAssign() {
--        reasoningTest("BlockAssign.ivml", 0);
--    }
--    
--    /**
--     * Assign attribute with a default value to the project test.
--     */
--    @Test    
--    public void individualAssign() {
--        reasoningTest("IndividualAssign.ivml", 0);
--    }
--
--    /**
--     * Assign attribute with a default value to the project test.
--     */
--    @Test    
--    public void blockAssignNested() {
--        reasoningTest("BlockAssignNested.ivml", 0);
--    }
--    
--    /**
--     * Assign attribute with a default value to the project test.
--     */
--    @Test    
--    public void blockAssignNestedNested() {
--        reasoningTest("BlockAssignNestedNested.ivml", 0);
--    }
--    
--    /**
--     * Assign attribute with a default value to the project test. Test includes a 
--     * constraint in the attribute assignment.
--     */
--    @Test    
--    public void blockAssignNestedConstraint() {
--        reasoningTest("BlockAssignNestedConstraint.ivml", 0);
--    }
--    
--    /**
--     * Assign attribute with a default value to the project test. Test includes a 
--     * failing constraint in the attribute assignment.
--     */
--    @Test    
--    public void blockAssignNestedConstraintFail() {
--        reasoningTest("BlockAssignNestedConstraintFail.ivml", 1);
--    }
--    
--    /**
--     * Assign attribute with a default value to the project test.
--     */
--    @Test    
--    public void individualAssignNested() {
--        reasoningTest("IndividualAssignNested.ivml", 0);
--    } 
--    
--    /**
--     * Assign attribute with a default value to the project test.
--     */
--    @Test    
--    public void nestedAssignBlockTree() {
--        reasoningTest("NestedAssignBlockTree.ivml", 2);
--    }    
--  
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java
-deleted file mode 100644
-index e84faad..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java
-+++ /dev/null
-@@ -1,145 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Collection constraints tests.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class CollectionConstraintsTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "collectionConstraints");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    } 
--    
--    /**
--     * Tests constraints in set.
--     */
--    @Test
--    public void constraintSetDefaultTest() {
--        reasoningTest("constraintSetDefault.ivml", 1);
--    }
--    
--    /**
--     * Tests constraints in set.
--     */
--    @Test
--    public void constraintSetAssignedTest() {
--        reasoningTest("constraintSetAssigned.ivml", 1);
--    }
--    
--    /**
--     * Tests constraints in set.
--     */
--    @Test
--    public void constraintSetDefaultInCompoundTest() {
--        reasoningTest("constraintSetDefaultInCompound.ivml", 1);
--    }
--    
--    /**
--     * Tests constraints in set.
--     */
--    @Test
--    public void constraintSetInCompoundDefaultTest() {
--        reasoningTest("constraintSetInCompoundDefault.ivml", 1);
--    }
--    
--    /**
--     * Tests constraints in set.
--     */
--    @Test
--    public void constraintSetInCompoundAssignedTest() {
--        reasoningTest("constraintSetInCompoundAssigned.ivml", 1);
--    }
--  
--    /**
--     * Tests constraints in set.
--     */
--    @Test
--    public void constraintSetInNestedCompoundDefaultTest() {
--        reasoningTest("constraintSetInNestedCompoundDefault.ivml", 1);
--    }
--    
--    /**
--     * Tests constraints in set.
--     */
--    @Test
--    public void qmTest() {
--        reasoningTest("QM.ivml", 1);
--    }
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java
-deleted file mode 100644
-index b7a5e1e..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java
-+++ /dev/null
-@@ -1,36 +0,0 @@
--/*
-- * Copyright 2009-2016 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--import org.junit.BeforeClass;
--
--import net.ssehub.easy.reasoning.sseReasoner.reasoner.Utils;
--
--/**
-- * Configures the {@link net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests}
-- * for the SSE-Reasoner.
-- * @author El-Sharkawy
-- */
--public class CollectionOperationsTests extends net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests {
--
--    /**
--     * Initializes the tests (for single execution outside the suite).
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        Utils.init();
--    }
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java
-deleted file mode 100644
-index c28e53d..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java
-+++ /dev/null
-@@ -1,272 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Collection constraints tests.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class ConstraintVariableTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "constraintVariables");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    } 
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void setOfConstraintsInCompoundWithDefaultValue() {
--        reasoningTest("setOfConstraintsInCompoundWithDefaultValue.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void setOfConstraintsInCompoundWithNoDefaultValue() {
--        reasoningTest("setOfConstraintsInCompoundWithNoDefaultValue.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void setOfConstraintsInCompoundWithEmptyDefaultValue() {
--        reasoningTest("setOfConstraintsInCompoundWithEmptyDefaultValue.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void setOfConstraintsWithDefaultValue() {
--        reasoningTest("setOfConstraintsWithDefaultValue.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void setOfConstraintsWithNoDefaultValue() {
--        reasoningTest("setOfConstraintsWithNoDefaultValue.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void setOfConstraintsWithEmptyDefaultValue() {
--        reasoningTest("setOfConstraintsWithEmptyDefaultValue.ivml", 1);
--    }
--    
--    
--    /**
--     * Tests false constraint.
--     */
--//    @Ignore
--    @Test
--    public void constraintDefaultTest() {
--        reasoningTest("constraintDefault.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void constraintAssignedTest() {
--        reasoningTest("constraintAssigned.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint.
--     */
--    @Test
--    public void constraintInCompoundDefaultTest() {
--        reasoningTest("constraintInCompoundDefault.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void constraintsInCompoundWithNoDefaultValue() {
--        reasoningTest("constraintsInCompoundWithNoDefaultValue.ivml", 1);
--    }
--    
--    
--    /**
--     * Tests false constraint. TODO implement assigned ConstraintVariableEvaluation
--     */
--    @Ignore
--    @Test
--    public void constraintInCompoundAssignedTest() {
--        reasoningTest("constraintInCompoundAssigned.ivml", 1);
--    }
--    
--    /**
--     * Tests false constraint.
--     */
--//    @Ignore
--    @Test
--    public void falseTest() {
--        reasoningTest("falseTest.ivml", 1);
--    }
--    
--    /**
--     * Tests boolean variable with value false.
--     */
--    @Test
--    public void booleanAssignedFalse() {
--        reasoningTest("booleanAssignedFalse.ivml", 0);
--    }
--    
--    /**
--     * Tests boolean variable with value false.
--     */
--    @Test
--    public void booleanDefaultFalse() {
--        reasoningTest("booleanDefaultFalse.ivml", 0);
--    }
--    
--    /**
--     * Tests boolean variable with value false.
--     */
--    @Test
--    public void booleanAssignedFalseInCompound() {
--        reasoningTest("booleanAssignedFalseInCompound.ivml", 0);
--    }
--    
--    /**
--     * Tests boolean variable with value false.
--     */
--    @Test
--    public void booleanDefaultFalseInCompound() {
--        reasoningTest("booleanDefaultFalseInCompound.ivml", 0);
--    }
--    
--    /**
--     * Tests boolean variable with value false.
--     */
--    @Test
--    public void setOfBooleanInCompoundWithDefaultValue() {
--        reasoningTest("setOfBooleanInCompoundWithDefaultValue.ivml", 0);
--    }
--    
--    /**
--     * Tests boolean variable with value false.
--     */
--    @Test
--    public void setOfBooleanInCompoundWithNoDefaultValue() {
--        reasoningTest("setOfBooleanInCompoundWithNoDefaultValue.ivml", 0);
--    }
--    
--    /**
--     * Tests boolean variable with value false.
--     */
--    @Test
--    public void setOfBooleanWithDefaultValue() {
--        reasoningTest("setOfBooleanWithDefaultValue.ivml", 0);
--    }
--    
--    /**
--     * Tests boolean variable with value false.
--     */
--    @Test
--    public void setOfBooleanWithNoDefaultValue() {
--        reasoningTest("setOfBooleanWithNoDefaultValue.ivml", 0);
--    }
--    
--    /**
--     * Tests constraint variable order influence (QM project case).
--     */
--    @Test
--    public void compoundConstraintVarOrder() {
--        reasoningTest("QM_constraintOrder.ivml", 0);
--    }
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java
-deleted file mode 100644
-index 8e63380..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java
-+++ /dev/null
-@@ -1,110 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Collection constraints tests.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class EvalTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "evals");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    } 
--    
--    /**
--     * Tests simple eval.
--     */
--    @Test
--    public void simpleEval() {
--        reasoningTest("SimpleEval.ivml", 1);
--    }
--    
--    /**
--     * Tests nested eval.
--     */
--    @Ignore
--    @Test
--    public void nestedEval() {
--        reasoningTest("NestedEval.ivml", 1);
--    }
--    
--  
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java
-deleted file mode 100644
-index c11e977..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java
-+++ /dev/null
-@@ -1,115 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Incremental reasoning tests.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class FailedDecisionsTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "failedDecisions");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    } 
--
--    
--    /**
--     * Tests default assignments ignore.
--     */
--    @Test
--    public void basicConstraintTest() {
--        reasoningTest("basicConstraintTest.ivml", 1);
--    }
--    
--    /**
--     * Tests validation constraint filter.
--     */
--    @Test
--    public void basicAssignmentTest() {
--        reasoningTest("basicAssignmentTest.ivml", 2);
--    }
--    
--    /**
--     * Tests partial freeze.
--     */
--    @Test
--    public void basicCompoundConstraintTest() {
--        reasoningTest("basicCompoundConstraintTest.ivml", 1);
--    }
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java
-deleted file mode 100644
-index a7ffbff..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java
-+++ /dev/null
-@@ -1,24 +0,0 @@
--
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--import org.junit.BeforeClass;
--
--import net.ssehub.easy.reasoning.sseReasoner.reasoner.Utils;
--
--/**
-- * Configures the operation tests for the SSE-Reasoner.
-- * 
-- * @author Holger Eichelberger
-- * @author El-Sharkawy
-- */
--public class OperationTests extends net.ssehub.easy.reasoning.core.frontend.OperationTests {
--
--    /**
--     * Initializes the tests (for single execution outside the suite).
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        Utils.init();
--    }
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java
-deleted file mode 100644
-index 1c527de..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java
-+++ /dev/null
-@@ -1,203 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--
--import java.io.File;
--import java.io.IOException;
--
--import org.eclipse.emf.common.util.URI;
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.messages.Status;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.dslCore.TranslationResult;
--import net.ssehub.easy.dslCore.test.AbstractTest;
--import net.ssehub.easy.dslCore.translation.Message;
--import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
--import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
--import net.ssehub.easy.reasoning.sseReasoner.Engine;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Incremental reasoning tests.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class RuntimeReasoningTests extends AbstractTest<Project> {
--   
--    private static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
--    private static final File FOLDER = new File(TESTDATA, "incrementalReasoningConstraints");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Method for determining folder with IVML files.
--     * @param property property
--     * @return folder location
--     */
--    private static File determineTestDataFolder(String property) {
--        File testdataFolder = determineTestDataDir(property);
--        String externalLocation = System.getProperty(property);
--        
--        // If no property was defined, use ReasonerCore.test/testdata directory
--        if (null == externalLocation) {
--            // Work around over the path avoids a NullPointer exception
--            String path = testdataFolder.getAbsolutePath();
--            testdataFolder = new File(path);
--            testdataFolder = testdataFolder.getParentFile().getParentFile();
--            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
--            testdataFolder = new File(testdataFolder, "testdata");
--        }
--        if (!testdataFolder.exists()) {
--            String path = testdataFolder.getAbsolutePath();
--            testdataFolder = new File(path);
--            testdataFolder = testdataFolder.getParentFile().getParentFile().getParentFile();
--            testdataFolder = new File(testdataFolder, "ReasonerCore");
--            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
--            testdataFolder = new File(testdataFolder, "testdata");
--        }
--        return testdataFolder;    
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    protected Project loadProject(String path) {
--        Project project = null;
--        try {
--            File projectFile = new File(FOLDER, path);
--            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
--            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
--            StringBuffer errorMsg = new StringBuffer();
--            for (int i = 0; i < result.getMessageCount(); i++) {
--                Message msg = result.getMessage(i);
--                if (!msg.ignore()) {
--                    errorMsg.append(msg.getDescription());
--                    errorMsg.append("\n");
--                }
--            }
--            if (errorMsg.length() == 0) {
--                project = result.getResult(0);
--            } else {
--                Assert.fail(errorMsg.toString());
--            }
--            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
--            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
--        } catch (IOException exc) {
--            Assert.fail(exc.getLocalizedMessage());
--        }
--        
--        return project;
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    } 
--
--    /**
--     * Method for handling reasoning result.
--     * @param expectedFailedConstraints Number of constraints that are expected to fa
--     * @param projectP1 Project to reason on.
--     */
--    private void resultHandler(int expectedFailedConstraints, Project projectP1) {
--        Configuration config = new Configuration(projectP1, false);        
--        ReasonerConfiguration rConfig = new ReasonerConfiguration();
--        rConfig.setRuntimeMode(true);
--        // Perform reasoning
--        Engine engine = new Engine(projectP1, config, rConfig, ProgressObserver.NO_OBSERVER);
--        ReasoningResult result = engine.reason();
--        
--        // Test whether reasoning detected correct result  
--        int failedConstraints = 0;
--
--        for (int i = 0; i < result.getMessageCount(); i++) {
--            if (result.getMessage(i).getStatus() == Status.ERROR) {
--                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
--            }
--        }
--        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
--
--    }   
--    
--    /**
--     * Tests default assignments ignore.
--     */
--    @Test
--    public void ignoreDefaultAssignmentsTest() {
--        reasoningTest("IgnoreDefaultAssignments.ivml", 0);
--    }
--    
--    /**
--     * Tests validation constraint filter.
--     */
--    @Test
--    public void validationConstraintFilterTest() {
--        reasoningTest("ValidationConstraintFilter.ivml", 0);
--    }
--    
--    /**
--     * Tests partial freeze.
--     */
--    @Test
--    public void partialFreezeTest() {
--        reasoningTest("PartialFreeze.ivml", 0);
--    }
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java
-deleted file mode 100644
-index 392a0f5..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
--
--import org.junit.BeforeClass;
--
--import net.ssehub.easy.reasoning.sseReasoner.reasoner.Utils;
--
--/**
-- * Test of reasoner capabilities related to the structure of variability models.
-- * @author El-Sharkawy
-- *
-- */
--public class StructureTests extends net.ssehub.easy.reasoning.core.frontend.StructureTests {
--
--    /**
--     * Initializes the tests (for single execution outside the suite).
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        Utils.init();
--    }
--
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt
-deleted file mode 100644
-index e87e44e..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt
-+++ /dev/null
-@@ -1,14 +0,0 @@
--1) DefaultAssign
--Assign attribute with a default value to the project.
--
--2) BlockAssign
--Assign attribute to the project, use assign block for assigning attribute value.
--
--3) IndividualAssign
--Assign attribute to the project, use individual attribute assignments. 
--
--4) BlockAssignNested
--Assign attribute to the project, use assign block for assigning attribute value to a compound nested element.
--
--5) IndividualAssignNested
--Assign attribute to the project, use individual attribute assignments to a compound nested element.
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java
-deleted file mode 100644
-index 5f4573d..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java
-+++ /dev/null
-@@ -1,6 +0,0 @@
--/**
-- * Tests attributes.
-- * @author Sizonenko
-- *
-- */
--package net.ssehub.easy.reasoning.sseReasoner.capabilities;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java
-deleted file mode 100644
-index c4e010c..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java
-+++ /dev/null
-@@ -1,18 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.performance;
--
--import org.junit.runner.RunWith;
--import org.junit.runners.Suite;
--import org.junit.runners.Suite.SuiteClasses;
--
--/**
-- * Bundling all performance tests.
-- * @author Sizonenko
-- */
--@RunWith(Suite.class)
--@SuiteClasses({    
--    GeneratedStats.class,
--    HistoryStats.class
--    })
--public class AllTests {
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java
-deleted file mode 100644
-index 0a3cc70..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java
-+++ /dev/null
-@@ -1,190 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.performance;
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.messages.Status;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
--import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
--import net.ssehub.easy.reasoning.sseReasoner.Engine;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Configures the operation tests for Drools.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class CaseStudyStats extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "performanceModels");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method for comparing reasoning result.
--     * @param expectedFailedConstraints Number of expected failed constraints.
--     * @param expectedReevaluationCount Number of expected reevaluations.
--     * @param projectP1 Project to reason on.
--     */
--    public static void resultComparer(int expectedFailedConstraints, int expectedReevaluationCount, Project projectP1) {
--        Configuration config = new Configuration(projectP1, false);        
--        ReasonerConfiguration rConfig = new ReasonerConfiguration();
--
--        // Perform reasoning
--        Engine engine = new Engine(projectP1, config, rConfig, ProgressObserver.NO_OBSERVER);
--        ReasoningResult result = engine.reason();
--        
--        // Test whether reasoning detected correct result  
--        int failedConstraints = 0;
--        for (int i = 0; i < result.getMessageCount(); i++) {
--            if (result.getMessage(i).getStatus() == Status.ERROR) {
--                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
--            }
--        }
--        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
--        
--        // Test whether reasoning is done in correct reevalustion steps  
--        Assert.assertTrue("Reevaluation count mismatch. Result: " + engine.getReevaluationCount()
--            + " Expected: " + expectedReevaluationCount, engine.getReevaluationCount() == expectedReevaluationCount);
--    }  
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     * @param expectedReevaluationCount Number of expected reevaluations.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints, int expectedReevaluationCount) {
--        Project project = loadProject(ivmlFile);
--        resultComparer(expectedFailedConstraints, expectedReevaluationCount, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     * @param expectedReevaluationCount Number of expected reevaluations.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints, int expectedReevaluationCount) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultComparer(expectedFailedConstraints, expectedReevaluationCount, projectP1);
--    } 
--    
--    /**
--     * Simple Assignments.
--     */
--    @Test    
--    public void simpleAssignments() {
--        reasoningTest("SimpleAssignments.ivml", 1, 6);       
--    } 
--    
--    /**
--     * Simple Assignments with Constraint Variables.
--     */
--    @Test    
--    public void simpleAssignmentsWithConstraintVar() {
--        reasoningTest("SimpleAssignmentsWithConstraintVars.ivml", 1, 6);       
--    }     
--    
--    /**
--     * Simple Assignments in Compound.
--     */
--    @Test    
--    public void compoundSimpleAssignments() {
--        reasoningTest("CompoundSimpleAssignments.ivml", 1, 6);       
--    } 
--    
--    /**
--     * Simple Assignments with Constraint Variables in Compound.
--     */
--    @Test    
--    public void compoundSimpleAssignmentsWithConstraintVar() {
--        reasoningTest("CompoundSimpleAssignmentsWithConstraintVars.ivml", 1, 6);       
--    }  
--    
--    /**
--     * Compound constraints in collection.
--     */
--    @Test    
--    public void compoundConstraintsInCollection() {
--        reasoningTest("CompoundConstraintsInCollection.ivml", 1, 3);       
--    } 
--    
--    /**
--     * Compound constraints with constraint variables in collection.
--     */
--    @Test    
--    public void compoundConstraintsInCollectionWithConstraintVars() {
--        reasoningTest("CompoundConstraintsInCollectionWithConstraintVars.ivml", 1, 3);       
--    }  
--    
--    /**
--     * Collection of typedef.
--     */
--    @Test    
--    public void typedefCollections() {
--        reasoningTest("TypedefCollections.ivml", 1, 5);       
--    } 
--    
--    /**
--     * Collection of typedef in compound.
--     */
--    @Test    
--    public void typedefCollectionsInCompound() {
--        reasoningTest("TypedefCollectionsInCompound.ivml", 1, 5);       
--    }     
--   
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java
-deleted file mode 100644
-index ae9237f..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java
-+++ /dev/null
-@@ -1,118 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.performance;
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Configures the operation tests for Drools.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class GeneratedStats extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "ssePerformance");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    } 
--    
--    /**
--     * Tests Boolean 1 to 3 ration.
--     */
--    @Ignore
--    @Test    
--    public void gr11() {
--        reasoningTest("gr1_1_v100_c300_b_l2_0.ivml", 150);
--//        reasoningTest("gr1_1_v100_c300_b_l2_0.ivml", 150);
--//        reasoningTest("gr1_1_v300_c900_b_l2_0.ivml", 438);
--//        reasoningTest("gr1_1_v500_c1500_b_l2_0.ivml", 726);
--//        reasoningTest("gr1_1_v1000_c3000_b_l2_0.ivml", 1518);
--//        reasoningTest("gr1_1_v1500_c4500_b_l2_0.ivml", 2236);
--    } 
--    
--    /**
--     * Tests Boolean 1 to 1 ration.
--     */
--    @Ignore
--    @Test    
--    public void gr12() {
--        reasoningTest("gr1_2_v100_c100_b_l2_0.ivml", 46);
--//        reasoningTest("gr1_2_v100_c100_b_l2_0.ivml", 46);
--//        reasoningTest("gr1_2_v300_c300_b_l2_0.ivml", 124);
--//        reasoningTest("gr1_2_v500_c500_b_l2_0.ivml", 266);
--//        reasoningTest("gr1_2_v1000_c1000_b_l2_0.ivml", 504);
--        reasoningTest("gr1_2_v1500_c1500_b_l2_0.ivml", 739);
--    }   
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java
-deleted file mode 100644
-index 65d6be5..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java
-+++ /dev/null
-@@ -1,105 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.performance;
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Configures the operation tests for Drools.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class HistoryStats extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "historyPerformance");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    }
--    
--    /**
--     * Tests history models.
--     */
--    @Ignore
--    @Test    
--    public void historyStatsTest() {
--        reasoningTest("d2d_v10_c1_bir_l1_0.ivml", 0);    
--//        reasoningTest("d2d_v10_c1_bir_l1_0.ivml", 0);    
--//        reasoningTest("d2d_v100_c10_bir_l1_0.ivml", 6);    
--//        reasoningTest("d2d_v1000_c100_bir_l1_0.ivml", 42);
--//        reasoningTest("d2d_v10_c1_bir_l3_0.ivml", 0);    
--//        reasoningTest("d2d_v100_c10_bir_l3_0.ivml", 6);    
--//        reasoningTest("d2d_v1000_c100_bir_l3_0.ivml", 42);
--    } 
--   
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java
-deleted file mode 100644
-index 9f5a187..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java
-+++ /dev/null
-@@ -1,5 +0,0 @@
--/**
-- * Performance tests.
-- * @author Sizonenko
-- */
--package net.ssehub.easy.reasoning.sseReasoner.performance;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AbstractQualiMasterTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AbstractQualiMasterTest.java
-deleted file mode 100644
-index 056ebf4..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AbstractQualiMasterTest.java
-+++ /dev/null
-@@ -1,270 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--import java.io.File;
--import java.io.IOException;
--
--import org.eclipse.emf.common.util.URI;
--import org.junit.After;
--import org.junit.Assert;
--import org.junit.Before;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.dslCore.TranslationResult;
--import net.ssehub.easy.dslCore.translation.Message;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Parent class for tests based on the QualiMaster use cases.
-- * @author Sizonenko
-- * @author El-Sharkawy
-- *
-- */
--public abstract class AbstractQualiMasterTest extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--      
--    protected static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
--
--    private Project basic;
--    private Project observables;
--    private Project hardware;
--    private Project hardwareCfg;
--    private Project adaptivity;
--    private Project adaptivityCfg;
--    private Project observablesCfg;
--    private Project dataManagement;
--    private Project dataManagementCfg;
--    private Project reconfigurableHardware;
--    private Project reconfigurableHardwareCfg;
--    private Project algorithms;
--    private Project algorithmsCfg;
--    private Project families;
--    private Project familiesCfg;
--    private Project pipelines;
--    private Project priorityPipCfg;
--    private Project pipelinesCfg;
--    private Project infrastructure;
--    private Project infrastructureCfg;
--    private Project qm;
--    
--    private ProjectImport importBasic;
--    private ProjectImport importObservables;
--    private ProjectImport importHardware;
--    private ProjectImport importHardwareCfg;
--    private ProjectImport importAdaptivity;
--    private ProjectImport importAdaptivityCfg;
--    private ProjectImport importObservablesCfg;
--    private ProjectImport importDataManagement;
--    private ProjectImport importDataManagementCfg;
--    private ProjectImport importReconfigurableHardware;
--    private ProjectImport importReconfigurableHardwareCfg;
--    private ProjectImport importAlgorithms;
--    private ProjectImport importAlgorithmsCfg;
--    private ProjectImport importFamilies;
--    private ProjectImport importFamiliesCfg;
--    private ProjectImport importPipelines;
--    private ProjectImport importPriorityPipCfg;
--    private ProjectImport importPipelinesCfg;
--    private ProjectImport importInfrastructure;
--    private ProjectImport importInfrastructureCfg;
--    
--    /**
--     * (Static) specifcation of sub folder which shall be used for the tests.
--     * @return The test folder of test data which shall be used inside the inherited test class.
--     */
--    protected abstract File getTestFolder();
--    
--    /**
--     * Initializes this Test class.
--     */
--    @Before
--    public void setup() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(getTestFolder(), ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @After
--    public void tearDown() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(getTestFolder(), ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    protected final Project loadProject(String path) {
--        Project project = null;
--        try {
--            File projectFile = new File(getTestFolder(), path);
--            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
--            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
--            StringBuffer errorMsg = new StringBuffer();
--            for (int i = 0; i < result.getMessageCount(); i++) {
--                Message msg = result.getMessage(i);
--                if (!msg.ignore()) {
--                    errorMsg.append(msg.getDescription());
--                    errorMsg.append("\n");
--                }
--            }
--            if (errorMsg.length() == 0) {
--                project = result.getResult(0);
--            } else {
--                Assert.fail(errorMsg.toString());
--            }
--            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
--            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
--        } catch (IOException exc) {
--            Assert.fail(exc.getLocalizedMessage());
--        }
--        
--        return project;
--    }
--    
--    /**
--     * Method for loading all projects.
--     */
--    private void loadAllProjects() {
--        basic = loadProject("Basics.ivml");
--        observables = loadProject("Observables.ivml");
--        hardware = loadProject("Hardware.ivml");
--        hardwareCfg = loadProject("HardwareCfg.ivml");
--        adaptivity = loadProject("Adaptivity.ivml");
--        adaptivityCfg = loadProject("AdaptivityCfg.ivml");
--        observablesCfg = loadProject("ObservablesCfg.ivml");
--        dataManagement = loadProject("DataManagement.ivml");
--        dataManagementCfg = loadProject("DataManagementCfg.ivml");
--        reconfigurableHardware = loadProject("ReconfigurableHardware.ivml");
--        reconfigurableHardwareCfg = loadProject("ReconfigurableHardwareCfg.ivml");
--        algorithms = loadProject("Algorithms.ivml");
--        algorithmsCfg = loadProject("AlgorithmsCfg.ivml");
--        families = loadProject("Families.ivml");
--        familiesCfg = loadProject("FamiliesCfg.ivml");
--        pipelines = loadProject("Pipelines.ivml");
--        priorityPipCfg = loadProject("PriorityPipCfg.ivml");
--        pipelinesCfg = loadProject("PipelinesCfg.ivml");
--        infrastructure = loadProject("Infrastructure.ivml");
--        infrastructureCfg = loadProject("InfrastructureCfg.ivml");
--        qm = loadProject("QM_0.ivml");
--    }
--    
--    /**
--     * Method for creating project imports.
--     */
--    private void createProjectImports() {
--        importBasic = new ProjectImport(basic.getName(), null);
--        importObservables = new ProjectImport(basic.getName(), null);
--        importHardware = new ProjectImport(basic.getName(), null);
--        importHardwareCfg = new ProjectImport(basic.getName(), null);
--        importAdaptivity = new ProjectImport(basic.getName(), null);
--        importAdaptivityCfg = new ProjectImport(basic.getName(), null);
--        importObservablesCfg = new ProjectImport(basic.getName(), null);
--        importDataManagement = new ProjectImport(basic.getName(), null);
--        importDataManagementCfg = new ProjectImport(basic.getName(), null);
--        importReconfigurableHardware = new ProjectImport(basic.getName(), null);
--        importReconfigurableHardwareCfg = new ProjectImport(basic.getName(), null);
--        importAlgorithms = new ProjectImport(basic.getName(), null);
--        importAlgorithmsCfg = new ProjectImport(basic.getName(), null);
--        importFamilies = new ProjectImport(basic.getName(), null);
--        importFamiliesCfg = new ProjectImport(basic.getName(), null);
--        importPipelines = new ProjectImport(basic.getName(), null);
--        importPriorityPipCfg = new ProjectImport(basic.getName(), null);
--        importPipelinesCfg = new ProjectImport(basic.getName(), null);
--        importInfrastructure = new ProjectImport(basic.getName(), null);
--        importInfrastructureCfg = new ProjectImport(basic.getName(), null);
--    }
--    
--    /**
--     * Method to create QM model(import projects) and validate it. 
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public final void reasoningTest(int expectedFailedConstraints) {
--        loadAllProjects();
--        createProjectImports();
--        observables.addImport(importBasic);
--        hardware.addImport(importBasic);
--        hardware.addImport(importObservables);
--        hardwareCfg.addImport(importHardware);
--        adaptivity.addImport(importBasic);
--        adaptivity.addImport(importObservables);
--        adaptivityCfg.addImport(importAdaptivity);
--        observablesCfg.addImport(importObservables);
--        dataManagement.addImport(importBasic);
--        dataManagement.addImport(importObservables);
--        dataManagementCfg.addImport(importDataManagement);
--        reconfigurableHardware.addImport(importBasic);
--        reconfigurableHardware.addImport(importObservables);
--        reconfigurableHardwareCfg.addImport(importReconfigurableHardware);
--        algorithms.addImport(importBasic);
--        algorithms.addImport(importObservables);
--        algorithms.addImport(importReconfigurableHardware);
--        algorithmsCfg.addImport(importReconfigurableHardware);
--        algorithmsCfg.addImport(importReconfigurableHardwareCfg);
--        algorithmsCfg.addImport(importAlgorithms);
--        families.addImport(importBasic);
--        families.addImport(importAlgorithms);
--        familiesCfg.addImport(importReconfigurableHardware);
--        familiesCfg.addImport(importFamilies);
--        familiesCfg.addImport(importAlgorithmsCfg);
--        pipelines.addImport(importBasic);
--        pipelines.addImport(importFamilies);
--        pipelines.addImport(importDataManagement);
--        pipelines.addImport(importHardware);
--        priorityPipCfg.addImport(importPipelines);
--        priorityPipCfg.addImport(importFamiliesCfg);
--        priorityPipCfg.addImport(importDataManagementCfg);
--        pipelinesCfg.addImport(importPriorityPipCfg);
--        infrastructure.addImport(importBasic);
--        infrastructure.addImport(importHardware);
--        infrastructure.addImport(importReconfigurableHardware);
--        infrastructure.addImport(importFamilies);
--        infrastructure.addImport(importObservables);
--        infrastructure.addImport(importAdaptivity);
--        infrastructure.addImport(importPipelines);
--        infrastructureCfg.addImport(importInfrastructure);
--        infrastructureCfg.addImport(importPipelinesCfg);
--        qm.addImport(importHardwareCfg);
--        qm.addImport(importReconfigurableHardwareCfg);
--        qm.addImport(importDataManagementCfg);
--        qm.addImport(importObservablesCfg);
--        qm.addImport(importAdaptivityCfg);
--        qm.addImport(importAlgorithmsCfg);
--        qm.addImport(importFamiliesCfg);
--        qm.addImport(importPipelinesCfg);
--        qm.addImport(importInfrastructureCfg);
--        
--        net.ssehub.easy.reasoning.sseReasoner.AllTests.resultHandler(expectedFailedConstraints, qm);
--    }    
--    
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java
-deleted file mode 100644
-index 97af68f..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java
-+++ /dev/null
-@@ -1,26 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--import org.junit.runner.RunWith;
--import org.junit.runners.Suite;
--import org.junit.runners.Suite.SuiteClasses;
--
--/**
-- * Bundling all tests.
-- * @author Sizonenko
-- */
--@RunWith(Suite.class)
--@SuiteClasses({    
--    QMValidTest.class,  
--    QMHardwareTest1.class,
--    QMHardwareTest2.class,
--    QMHardwareTest3.class,
--    QMAlgorithmsTest1.class,
--    QMFamiliesTest1.class,
--    QMFamiliesTest2.class,
--    QMPipelinesTest1.class,
--    QMScenarioTests.class,
--    QMMismatchedTest.class
--    })
--public class AllTests {
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java
-deleted file mode 100644
-index 2d806d1..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java
-+++ /dev/null
-@@ -1,46 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.Test;
--
--/**
-- * Hardware constraint: algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size() test.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMAlgorithmsTest1 extends AbstractQualiMasterTest {
-- 
--    @Override
--    protected File getTestFolder() {
--        return new File(TESTDATA, "qmAlgorithmsTest1");
--    } 
--
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void coreTest() {
--        reasoningTest(1);
--    }
--
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java
-deleted file mode 100644
-index 4bc1d4d..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.Test;
--
--/**
-- * Hardware constraint: inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input) test.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMFamiliesTest1 extends AbstractQualiMasterTest {
--
--    @Override
--    protected File getTestFolder() {
--        return new File(TESTDATA, "qmFamiliesTest1");
--    } 
--    
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void coreTest() {
--        reasoningTest(1);
--    } 
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java
-deleted file mode 100644
-index 62f9508..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.Test;
--
--/**
-- * Hardware constraint: memberCount = members.size() > 0 test.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMFamiliesTest2 extends AbstractQualiMasterTest {
--    
--    @Override
--    protected File getTestFolder() {
--        return new File(TESTDATA, "qmFamiliesTest2");
--    } 
--    
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void coreTest() {
--        reasoningTest(1);
--    } 
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java
-deleted file mode 100644
-index 7beb038..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.Test;
--
--/**
-- * Hardware constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty() test.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMHardwareTest1 extends AbstractQualiMasterTest {
--    
--    @Override
--    protected File getTestFolder() {
--        return new File(TESTDATA, "qmHardwareTest1");
--    } 
--    
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void coreTest() {
--        reasoningTest(1);
--    } 
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java
-deleted file mode 100644
-index 576a984..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java
-+++ /dev/null
-@@ -1,46 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.Test;
--
--/**
-- * Hardware constraint: managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) test.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMHardwareTest2 extends AbstractQualiMasterTest {
--    
--    
--    @Override
--    protected File getTestFolder() {
--        return new File(TESTDATA, "qmHardwareTest2");
--    } 
--    
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void coreTest() {
--        reasoningTest(1);
--    } 
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java
-deleted file mode 100644
-index a90b725..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.Test;
--
--/**
-- * Hardware constraint: machineName = machines->collect(m|m.name).size() == machines.size() test.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMHardwareTest3 extends AbstractQualiMasterTest {
--
--    @Override
--    protected File getTestFolder() {
--        return new File(TESTDATA, "qmHardwareTest3");
--    } 
--    
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void coreTest() {
--        reasoningTest(1);
--    } 
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java
-deleted file mode 100644
-index c129d39..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java
-+++ /dev/null
-@@ -1,44 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.BeforeClass;
--import org.junit.Test;
--
--import net.ssehub.easy.reasoning.core.frontend.MismatchedTest;
--import net.ssehub.easy.reasoning.sseReasoner.reasoner.Utils;
--
--/**
-- * Qualimaster model test.
-- * Model is valid.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMMismatchedTest extends MismatchedTest {
--    
--    /**
--     * Initializes the tests (for single execution outside the suite).
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        Utils.init();
--    }
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java
-deleted file mode 100644
-index ae54dca..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java
-+++ /dev/null
-@@ -1,46 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.Test;
--
--/**
-- * Hardware constraint: flow error from the presentation test.
-- * typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMPipelinesTest1 extends AbstractQualiMasterTest {
--    
--    @Override
--    protected File getTestFolder() {
--        return new File(TESTDATA, "qmPipelinesTest1");
--    } 
--    
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void coreTest() {
--        reasoningTest(1);
--    } 
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java
-deleted file mode 100644
-index 0ad7ed8..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java
-+++ /dev/null
-@@ -1,216 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--import java.io.IOException;
--
--import org.eclipse.emf.common.util.URI;
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.dslCore.TranslationResult;
--import net.ssehub.easy.dslCore.test.AbstractTest;
--import net.ssehub.easy.dslCore.translation.Message;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Configures the operation tests for SSE reasoner.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMScenarioTests extends AbstractTest<Project> {
--
--    
--    private static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
--    private static final File FOLDER = new File(TESTDATA, "qmTemplates");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Method for determining folder with IVML files.
--     * @param property property
--     * @return folder location
--     */
--    private static File determineTestDataFolder(String property) {
--        File testdataFolder = determineTestDataDir(property);
--        String externalLocation = System.getProperty(property);
--        
--        // If no property was defined, use ReasonerCore.test/testdata directory
--        if (null == externalLocation) {
--            // Work around over the path avoids a NullPointer exception
--            String path = testdataFolder.getAbsolutePath();
--            testdataFolder = new File(path);
--            testdataFolder = testdataFolder.getParentFile().getParentFile();
--            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
--            testdataFolder = new File(testdataFolder, "testdata");
--        }
--        if (!testdataFolder.exists()) {
--            String path = testdataFolder.getAbsolutePath();
--            testdataFolder = new File(path);
--            testdataFolder = testdataFolder.getParentFile().getParentFile().getParentFile();
--            testdataFolder = new File(testdataFolder, "ReasonerCore");
--            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
--            testdataFolder = new File(testdataFolder, "testdata");
--            System.out.println(testdataFolder);
--        }
--        return testdataFolder;    
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    protected Project loadProject(String path) {
--        Project project = null;
--        try {
--            File projectFile = new File(FOLDER, path);
--            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
--            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
--            StringBuffer errorMsg = new StringBuffer();
--            for (int i = 0; i < result.getMessageCount(); i++) {
--                Message msg = result.getMessage(i);
--                if (!msg.ignore()) {
--                    errorMsg.append(msg.getDescription());
--                    errorMsg.append("\n");
--                }
--            }
--            if (errorMsg.length() == 0) {
--                project = result.getResult(0);
--            } else {
--                Assert.fail(errorMsg.toString());
--            }
--            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
--            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
--        } catch (IOException exc) {
--            Assert.fail(exc.getLocalizedMessage());
--        }
--        
--        return project;
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        net.ssehub.easy.reasoning.sseReasoner.AllTests.resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        net.ssehub.easy.reasoning.sseReasoner.AllTests.resultHandler(expectedFailedConstraints, projectP1);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param p2 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, String p2, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        Project projectP2 = loadProject(p2);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
--        projectP2.addImport(importP1);
--        net.ssehub.easy.reasoning.sseReasoner.AllTests.resultHandler(expectedFailedConstraints, projectP2);
--    }
--
--    
--    
--    /**
--     * Tests QM Hardware collections.
--     */
--    @Test    
--    public void qmHardwareTest() {
--        reasoningTest("QMHardwareTest.ivml", 1);
--    }
--    
--    /**
--     * Tests collections.
--     */
--    @Test    
--    public void nestedHardwareTest() {
--        reasoningTest("nestedHardwareTest.ivml", 1);
--    } 
--    
--    /**
--     * Tests QM Family Algorithms fields test.
--     */
--    @Ignore
--    @Test    
--    public void qmFamilyAlgorithmsFieldsTest() {
--        reasoningTest("QMFamilyAlgorithmsFieldsTest.ivml", 0);
--    } 
--    
--   
--    
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java
-deleted file mode 100644
-index 0378005..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java
-+++ /dev/null
-@@ -1,47 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
--
--
--import java.io.File;
--
--import org.junit.Test;
--
--/**
-- * Qualimaster model test.
-- * Model is valid.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class QMValidTest extends AbstractQualiMasterTest {
--    
--    @Override
--    protected File getTestFolder() {
--        return new File(TESTDATA, "qmModelTest");
--    } 
--        
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void coreTest() {
--        reasoningTest(0);
--        reasoningTest(0);
--    } 
--    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt
-deleted file mode 100644
-index 14ab256..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt
-+++ /dev/null
-@@ -1,28 +0,0 @@
--QMValidTest
--Model does not fail
--
--Hardware
--QMHardwareTest1
--constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty()
--QMHardwareTest2
--managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) (same test for Workers)
--QMHardwareTest3
--machineName = machines->collect(m|m.name).size() == machines.size()
--QMHardwareTest4
--
--Infrastructure
--workerportCheck = activePipelinesNumWorkers() <= workerMachinesPortsCount() - needs change
--
--Algorithms
--QMAlgorithmsTest1
--algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size()
--
--Families
--QMFamiliesTest1
--inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input)
--QMFamiliesTest2
--memberCount = members.size() > 0
--
--Pipelines
--QMPipelinesTest1
--typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java
-deleted file mode 100644
-index 1c7e361..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java
-+++ /dev/null
-@@ -1,6 +0,0 @@
--/**
-- * Test the Qualimaster model.
-- * @author Sizonenko
-- *
-- */
--package net.ssehub.easy.reasoning.sseReasoner.qm;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java
-deleted file mode 100644
-index 34f8be6..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java
-+++ /dev/null
-@@ -1,23 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
--
--import org.junit.runner.RunWith;
--import org.junit.runners.Suite;
--import org.junit.runners.Suite.SuiteClasses;
--
--/**
-- * Bundling all tests.
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--@RunWith(Suite.class)
--@SuiteClasses({
--    EvaluationIntegrityTest.class,
--    IntegrityTests.class,  
--    ReasoningScenarioTests.class,
--    StressTest.class,
--    CodedTests.class,
--    BooleanProblemTests.class
--    })
--public class AllTests {
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanProblemTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanProblemTests.java
-deleted file mode 100644
-index 24aed76..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanProblemTests.java
-+++ /dev/null
-@@ -1,165 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
--
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Configures the operation tests for SSE reasoner.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class BooleanProblemTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File FOLDER = new File(TESTDATA, "booleanProblem");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    private Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param p2 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, String p2, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        Project projectP2 = loadProject(p2);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
--        projectP2.addImport(importP1);
--        resultHandler(expectedFailedConstraints, projectP2);
--    }
--
--    /**
--     * Car example.
--     */
--    @Test
--    public void carExampleTest() {
--        reasoningTest("CarExample.ivml", 1);
--    }
--    
--    /**
--     * Boolean defaults test.
--     */
--    @Test
--    public void booleanDefaultsTest() {
--        reasoningTest("BooleanDefaultsTest.ivml", 2);
--    } 
--    
--    /**
--     * Boolean assign test.
--     */
--    @Test
--    public void booleanAssignTest() {
--        reasoningTest("BooleanAssignTest.ivml", 2);
--    } 
--    
--    /**
--     * Boolean in compound defaults test.
--     */
--    @Test
--    public void booleanInCompoundDefaultsTest() {
--        reasoningTest("BooleanInCompoundDefaultsTest.ivml", 2);
--    } 
--    
--    /**
--     * Boolean in compound assign test.
--     */
--    @Test
--    public void booleanInCompoundAssignTest() {
--        reasoningTest("BooleanInCompoundAssignTest.ivml", 2);
--    } 
--    
--    /**
--     * Boolean implies test.
--     */
--    @Test
--    public void booleanImpliesTest() {
--        reasoningTest("BooleanImpliesTest.ivml", 1);
--    } 
--    
--    /**
--     * Boolean in compound implies test.
--     */
--    @Test
--    public void booleanInCompoundImpliesTest() {
--        reasoningTest("BooleanInCompoundImpliesTest.ivml", 1);
--    }  
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java
-deleted file mode 100644
-index f4d918f..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java
-+++ /dev/null
-@@ -1,228 +0,0 @@
--/*
-- * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
--
--import org.junit.Assert;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
--import net.ssehub.easy.reasoning.sseReasoner.Engine;
--import net.ssehub.easy.reasoning.sseReasoner.Reasoner;
--import net.ssehub.easy.varModel.confModel.AssignmentState;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.confModel.ConfigurationException;
--import net.ssehub.easy.varModel.confModel.IDecisionVariable;
--import net.ssehub.easy.varModel.cst.AttributeVariable;
--import net.ssehub.easy.varModel.cst.CSTSemanticException;
--import net.ssehub.easy.varModel.cst.ConstantValue;
--import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
--import net.ssehub.easy.varModel.cst.OCLFeatureCall;
--import net.ssehub.easy.varModel.cst.Variable;
--import net.ssehub.easy.varModel.model.Attribute;
--import net.ssehub.easy.varModel.model.AttributeAssignment;
--import net.ssehub.easy.varModel.model.Constraint;
--import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
--import net.ssehub.easy.varModel.model.FreezeBlock;
--import net.ssehub.easy.varModel.model.IFreezable;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.AttributeAssignment.Assignment;
--import net.ssehub.easy.varModel.model.datatypes.BooleanType;
--import net.ssehub.easy.varModel.model.datatypes.Compound;
--import net.ssehub.easy.varModel.model.datatypes.Enum;
--import net.ssehub.easy.varModel.model.datatypes.EnumLiteral;
--import net.ssehub.easy.varModel.model.datatypes.FreezeVariableType;
--import net.ssehub.easy.varModel.model.datatypes.IntegerType;
--import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
--import net.ssehub.easy.varModel.model.datatypes.OrderedEnum;
--import net.ssehub.easy.varModel.model.values.BooleanValue;
--import net.ssehub.easy.varModel.model.values.Value;
--import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
--import net.ssehub.easy.varModel.model.values.ValueFactory;
--import net.ssehub.easy.varModel.persistency.StringProvider;
--import net.ssehub.easy.varModel.varModel.testSupport.ProjectTestUtilities;
--
--/**
-- * Tests reasoner capabilities via coded tests, without interactions from the parser.
-- * @author El-Sharkawy
-- *
-- */
--public class CodedTests {
--
--    /**
--     * Simulates value propagation based on a Boolean variable with user input via the UI.
--     * @throws ValueDoesNotMatchTypeException Must not occur, otherwise ValueFactory is broken.
--     * @throws CSTSemanticException Must not occur, otherwise constraint.setConsSyntax is broken
--     * @throws ConfigurationException Must not occur, otherwise {@link IDecisionVariable}s are broken.
--     */
--    @Ignore
--    @Test
--    public void testBooleanIplication() throws ValueDoesNotMatchTypeException, CSTSemanticException,
--        ConfigurationException {
--        
--        // Define test model
--        Project project = new Project("BooleanIplicationTest");
--        Enum enumType = new Enum("Color", project, "RED", "BLUE", "GREEN");
--        project.add(enumType);
--        DecisionVariableDeclaration rgbVar = new DecisionVariableDeclaration("rgb", enumType, project);
--        project.add(rgbVar);
--        DecisionVariableDeclaration hasColorVar
--            = new DecisionVariableDeclaration("hasColor", BooleanType.TYPE, project);
--        project.add(hasColorVar);
--        
--        // Create Constraint
--        Constraint constraint = new Constraint(project);
--        Value redValue = ValueFactory.createValue(enumType, enumType.getLiteral(0));
--        ConstantValue redConst = new ConstantValue(redValue);
--        ConstantValue trueConst = new ConstantValue(BooleanValue.TRUE);
--        OCLFeatureCall booleanEquals = new OCLFeatureCall(new Variable(hasColorVar), OclKeyWords.EQUALS, trueConst);
--        OCLFeatureCall enumEquals = new OCLFeatureCall(new Variable(rgbVar), OclKeyWords.EQUALS, redConst);
--        OCLFeatureCall implies = new OCLFeatureCall(booleanEquals, OclKeyWords.IMPLIES, enumEquals);
--        constraint.setConsSyntax(implies);
--        project.add(constraint);
--        
--        // Create Configuration out of valid project
--        ProjectTestUtilities.validateProject(project, true);
--        Configuration config = new Configuration(project);
--        
--        // Simulate user input
--        IDecisionVariable enumVar = config.getDecision(rgbVar);
--        enumVar.setValue(null, AssignmentState.UNDEFINED);
--        IDecisionVariable boolVar = config.getDecision(hasColorVar);
--        boolVar.setValue(BooleanValue.TRUE, AssignmentState.ASSIGNED);
--        
--        // Test precondition
--        Assert.assertFalse(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue(), 
--            config.getDecision(rgbVar).hasValue());
--        Assert.assertEquals(boolVar.getDeclaration().getName() + " has wrong value: " + boolVar.getValue().getValue(), 
--            BooleanValue.TRUE, config.getDecision(hasColorVar).getValue());
--        
--        // Test: Perform reasoning (and propagation)
--        Reasoner sseReasoner = new Reasoner();
--        ReasonerConfiguration rConfig = new ReasonerConfiguration();
--        sseReasoner.propagate(project, config, rConfig, ProgressObserver.NO_OBSERVER);
--        
--        // Test precondition
--        Assert.assertTrue(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue(), 
--            config.getDecision(rgbVar).hasValue());
--        Assert.assertEquals(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue().getValue(), 
--            redValue, config.getDecision(rgbVar).getValue());
--        Assert.assertEquals(boolVar.getDeclaration().getName() + " has wrong value: " + boolVar.getValue().getValue(), 
--            BooleanValue.TRUE, config.getDecision(hasColorVar).getValue());
--        
--        // Output of the configuration
--        ProjectTestUtilities.validateProject(config.toProject(true, false), true);
--    }
--
--    /**
--     * Tests freezing.
--     * 
--     * @throws ValueDoesNotMatchTypeException shall not occur
--     * @throws CSTSemanticException shall not occur
--     */
--    @Test
--    public void freezeCompoundTest() throws ValueDoesNotMatchTypeException, CSTSemanticException {
--        //testFreezing(false); // TODO ENABLE, currently fails without runtime mode
--        testFreezing(true);
--    }
--
--    /**
--     * Creates a project for freezing and checks the frozen states.
--     * 
--     * @param runtimeMode whether the test shall happen in runtime reasoning mode
--     * @throws ValueDoesNotMatchTypeException shall not occur
--     * @throws CSTSemanticException shall not occur
--     */
--    private void testFreezing(boolean runtimeMode) throws ValueDoesNotMatchTypeException, CSTSemanticException {
--        Project prj = new Project("test");
--
--        Enum bindingTime = new OrderedEnum("BindingTime", prj);
--        bindingTime.add(new EnumLiteral("compile", 1, bindingTime));
--        bindingTime.add(new EnumLiteral("monitor", 2, bindingTime));
--        bindingTime.add(new EnumLiteral("enact", 3, bindingTime));
--        prj.add(bindingTime);
--        
--        Attribute attr = new Attribute("binding", bindingTime, prj, prj);
--        attr.setValue(ValueFactory.createValue(bindingTime, "compile"));
--        prj.attribute(attr);
--        prj.add(attr);
--        
--        Compound param = new Compound("IntParameter", prj);
--        param.add(new DecisionVariableDeclaration("defaultValue", IntegerType.TYPE, param));
--        AttributeAssignment assng = new AttributeAssignment(param);
--        assng.add(new Assignment("binding", "=", new ConstantValue(ValueFactory.createValue(bindingTime, "enact"))));
--        assng.add(new DecisionVariableDeclaration("value", IntegerType.TYPE, param));
--        param.add(assng);
--        prj.add(param);
--        
--        DecisionVariableDeclaration myParam = new DecisionVariableDeclaration("myParam", param, prj);
--        prj.add(myParam);
--        
--        IFreezable[] freezables = new IFreezable[1];
--        freezables[0] = myParam;
--        FreezeVariableType iterType = new FreezeVariableType(freezables, prj);
--        DecisionVariableDeclaration freezeIter = new DecisionVariableDeclaration("b", iterType, prj);
--        Variable iterEx = new AttributeVariable(new Variable(freezeIter), iterType.getAttribute("binding"));
--        ConstraintSyntaxTree selector = new OCLFeatureCall(iterEx, ">=", 
--            new ConstantValue(ValueFactory.createValue(bindingTime, "monitor")));
--        selector.inferDatatype();
--        FreezeBlock freeze = new FreezeBlock(freezables, freezeIter, selector, prj);
--        prj.add(freeze);
--        
--        // debugging
--        System.out.println(StringProvider.toIvmlString(prj));
--        
--        Configuration cfg = new Configuration(prj);
--        IDecisionVariable myParamVar = cfg.getDecision(myParam);
--        Assert.assertNotNull(myParamVar);
--        IDecisionVariable myParamVarDeflt = findNested(myParamVar, "defaultValue");
--        Assert.assertNotNull(myParamVarDeflt);
--        Assert.assertEquals(1, myParamVarDeflt.getAttributesCount());
--        IDecisionVariable myParamVarValue = findNested(myParamVar, "value");
--        Assert.assertNotNull(myParamVarValue);
--        Assert.assertEquals(1, myParamVarValue.getAttributesCount());
--
--        ReasonerConfiguration rConfig = new ReasonerConfiguration();
--        rConfig.setRuntimeMode(runtimeMode);
--        // Perform reasoning
--        Engine engine = new Engine(prj, cfg, rConfig, ProgressObserver.NO_OBSERVER);
--        engine.reason();
--        
--        Assert.assertEquals(AssignmentState.FROZEN, myParamVarDeflt.getState());
--        Assert.assertNotEquals(AssignmentState.FROZEN, myParamVarValue.getState());
--        //Assert.assertNotEquals(AssignmentState.FROZEN, myParamVar.getState());
--    }
--    
--    /**
--     * Finds a nested variable.
--     * 
--     * @param var the parent variable
--     * @param name the name of the variable
--     * @return the nested variable (may be <b>null</b>)
--     */
--    private IDecisionVariable findNested(IDecisionVariable var, String name) {
--        IDecisionVariable result = null;
--        for (int n = 0; null == result && n < var.getNestedElementsCount(); n++) {
--            IDecisionVariable decVar = var.getNestedElement(n);
--            if (decVar.getDeclaration().getName().equals(name)) {
--                result = decVar;
--            }
--        }
--        return result;
--    }
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java
-deleted file mode 100644
-index acc7e17..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java
-+++ /dev/null
-@@ -1,266 +0,0 @@
--/*
-- * Copyright 2009-2014 University of Hildesheim, Software Systems Engineering
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- * 
-- *   http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
--
--import org.junit.Assert;
--import org.junit.Test;
--
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
--import net.ssehub.easy.reasoning.sseReasoner.Engine;
--import net.ssehub.easy.reasoning.sseReasoner.Resolver;
--import net.ssehub.easy.varModel.confModel.AssignmentState;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.confModel.IAssignmentState;
--import net.ssehub.easy.varModel.confModel.IDecisionVariable;
--import net.ssehub.easy.varModel.cst.CSTSemanticException;
--import net.ssehub.easy.varModel.cst.ConstantValue;
--import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
--import net.ssehub.easy.varModel.cst.OCLFeatureCall;
--import net.ssehub.easy.varModel.cst.Variable;
--import net.ssehub.easy.varModel.model.Constraint;
--import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--import net.ssehub.easy.varModel.model.datatypes.IntegerType;
--import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
--import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
--import net.ssehub.easy.varModel.model.values.ValueFactory;
--import net.ssehub.easy.varModel.varModel.testSupport.ProjectTestUtilities;
--
--/**
-- * Tests for {@link Resolver}.
-- * @author El-Sharkawy
-- * @author Sizonenko
-- *
-- */
--public class EvaluationIntegrityTest {
--    
--    // Test: testResolveOfIntegers()
--    private Project projectP0;
--    private Project projectP1;
--    private Project projectP2;    
--    
--    private DecisionVariableDeclaration declA;
--    private DecisionVariableDeclaration declB;
--    private DecisionVariableDeclaration declC;
--    private DecisionVariableDeclaration declD;
--    
--    
--    /**
--     * Tests whether integer variables are resolved correctly.
--     * This tests includes:
--     * <ul>
--     * <li>Imports</li>
--     * <li>Assignments</li>
--     * <li>Defaults</li>
--     * <li>Re-Assignments</li>
--     * </ul>
--     */
--    @Test
--    public void testResolveOfIntegers() {
--        createProjectP0();
--        createProjectP1();    
--        createProjectP2();        
--        
--        Configuration config = new Configuration(projectP2, false);
--        ReasonerConfiguration rConfig = new ReasonerConfiguration();
--     
--        Engine engine = new Engine(projectP2, config, rConfig, ProgressObserver.NO_OBSERVER);
--        engine.reason();
--        
--        assertVariable(config, declA, 2, AssignmentState.DERIVED);
--        assertVariable(config, declB, 2, AssignmentState.DERIVED);
--        assertVariable(config, declC, 3, AssignmentState.DERIVED);
--        assertVariable(config, declD, 5, AssignmentState.DERIVED);
--    }
--    
--    /**
--     * Tests whether assignments were correctly applied.
--     * @param config The configuration containing resolved variables.
--     * @param decl The declaration to test.
--     * @param expectedValue The expected resolved value
--     * @param expectedState The expected resolved assignment state
--     */
--    private void assertVariable(Configuration config, DecisionVariableDeclaration decl, Object expectedValue,
--        IAssignmentState expectedState) {
--        
--        IDecisionVariable variable = config.getDecision(decl);
--        Assert.assertNotNull(variable);
--        Assert.assertNotNull(variable.getValue());
--        Assert.assertEquals(expectedValue, variable.getValue().getValue());
--        Assert.assertEquals(expectedState, variable.getState());
--    }
--
--    /**
--     * Creates imported project P0.
--     * <pre><code>
--     * project ProjectP0 {
--     *
--     *    Integer intA;
--     *    Integer intB;
--     *    intA = 1;
--     *    intB = intA;
--     *}
--     *</code></pre>
--     */
--    private void createProjectP0() {
--        projectP0 = new Project("ProjectP0");
--        declA = createVar("intA", projectP0);
--        declB = createVar("intB", projectP0);
--        Constraint constraintA = new Constraint(projectP0);
--        Constraint constraintB = new Constraint(projectP0);
--        try {
--            constraintA.setConsSyntax(createAssignment(declA, createConstValue(declA, 1)));
--            projectP0.add(constraintA);
--            constraintB.setConsSyntax(createAssignment(declB, new Variable(declA)));
--            projectP0.add(constraintB);
--        } catch (CSTSemanticException e) {
--            Assert.fail(e.getMessage());
--        }
--        
--        ProjectTestUtilities.validateProject(projectP0);
--    }
--    
--    /**
--     * Creates imported project P1.
--     * <pre><code>
--     * project ProjectP1 {
--     *    import ProjectP0;
--     *
--     *    intA = 2;
--     *}
--     *</code></pre>
--     */
--    private void createProjectP1() {
--        projectP1 = new Project("ProjectP1");
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);       
--        try {
--            importP0.setResolved(projectP0);            
--        } catch (ModelManagementException e) {
--            Assert.fail(e.getMessage());
--        }
--        
--        Constraint constraint = new Constraint(projectP1);
--        try {
--            constraint.setConsSyntax(createAssignment(declA, createConstValue(declA, 2)));
--            projectP1.add(constraint);
--        } catch (CSTSemanticException e) {
--            Assert.fail(e.getMessage());
--        }
--        
--        ProjectTestUtilities.validateProject(projectP1);
--    }  
--    
--    /**
--     * Creates top imported project.
--     * <pre><code>
--     * project ProjectP2 {
--     *
--     *    import ProjectP1;
--     *    
--     *    Integer intC;
--     *    intC = 1;
--     *    intC == 1 implies intA == 3;;
--     *}
--     *</code></pre>
--     */
--    private void createProjectP2() {
--        projectP2 = new Project("ProjectP2");
--        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
--        projectP2.addImport(importP1);       
--        try {
--            importP1.setResolved(projectP1);            
--        } catch (ModelManagementException e) {
--            Assert.fail(e.getMessage());
--        }
--        
--        declC = createVar("intC", projectP2);
--        Constraint constraintC = new Constraint(projectP2);
--        try {
--            constraintC.setConsSyntax(createAssignment(declC, createConstValue(declC, 3)));
--            projectP2.add(constraintC);
--        } catch (CSTSemanticException e) {
--            Assert.fail(e.getMessage());
--        }
--        
--        declD = createVar("intD", projectP2);
--        Constraint constraintD = new Constraint(projectP2);
--        OCLFeatureCall plus = new OCLFeatureCall(new Variable(declC), OclKeyWords.PLUS, new Variable(declA));
--        try {
--            constraintD.setConsSyntax(createAssignment(declD, plus));
--            projectP2.add(constraintD);
--        } catch (CSTSemanticException e) {
--            Assert.fail(e.getMessage());
--        }
--        
--        Constraint constraintImplies = new Constraint(projectP2);
--        OCLFeatureCall left = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, createConstValue(declC, 1));
--        OCLFeatureCall right 
--            = new OCLFeatureCall(new Variable(declA), OclKeyWords.EQUALS, createConstValue(declA, 3));        
--        OCLFeatureCall implies = new OCLFeatureCall(left, OclKeyWords.IMPLIES, right);
--        try {
--            constraintImplies.setConsSyntax(implies); 
--            projectP2.add(constraintImplies);
--        } catch (CSTSemanticException e) {
--            Assert.fail(e.getMessage());
--        }
--        
--        ProjectTestUtilities.validateProject(projectP2);
--    }  
--
--    /**
--     * Creates a new integer {@link DecisionVariableDeclaration} in the given {@link Project}.
--     * @param varName The name of the {@link DecisionVariableDeclaration}.
--     * @param project The project where to add the {@link DecisionVariableDeclaration}.
--     * @return The created {@link DecisionVariableDeclaration}.
--     */
--    private DecisionVariableDeclaration createVar(String varName, Project project) {
--        DecisionVariableDeclaration decl = new DecisionVariableDeclaration(varName, IntegerType.TYPE, project);
--        project.add(decl);
--        return decl;
--    }
--
--    /**
--     * Creates a {@link ConstantValue} for a given {@link DecisionVariableDeclaration}.
--     * @param decl The {@link DecisionVariableDeclaration} for which the {@link ConstantValue} shall be created.
--     * @param value The value to create.
--     * @return The created {@link ConstraintSyntaxTree}.
--     */
--    private ConstraintSyntaxTree createConstValue(DecisionVariableDeclaration decl, Object... value) {
--        ConstantValue constValue = null;
--        try {
--            constValue = new ConstantValue(ValueFactory.createValue(decl.getType(), value));
--        } catch (ValueDoesNotMatchTypeException e) {
--            Assert.fail(e.getMessage());
--        }
--        
--        return constValue;
--    }
--    
--    /**
--     * Creates an assignment {@link ConstraintSyntaxTree}.
--     * @param decl The {@link DecisionVariableDeclaration} for which an assignment shall be created for.
--     * @param value The value of the assignment constraint.
--     * @return The created assignment {@link ConstraintSyntaxTree}.
--     */
--    private ConstraintSyntaxTree createAssignment(DecisionVariableDeclaration decl, ConstraintSyntaxTree value) {
--        return new OCLFeatureCall(new Variable(decl), OclKeyWords.ASSIGNMENT, value);
--    }    
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java
-deleted file mode 100644
-index 28f8668..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java
-+++ /dev/null
-@@ -1,98 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
--
--import org.junit.Assert;
--import org.junit.Test;
--
--import net.ssehub.easy.dslCore.test.AbstractTest;
--import net.ssehub.easy.varModel.confModel.AssignmentState;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.confModel.IDecisionVariable;
--import net.ssehub.easy.varModel.cst.CSTSemanticException;
--import net.ssehub.easy.varModel.cst.ConstantValue;
--import net.ssehub.easy.varModel.cst.OCLFeatureCall;
--import net.ssehub.easy.varModel.cst.Variable;
--import net.ssehub.easy.varModel.model.Constraint;
--import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.datatypes.IntegerType;
--import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
--import net.ssehub.easy.varModel.model.values.Value;
--import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
--import net.ssehub.easy.varModel.model.values.ValueFactory;
--
--/**
-- * Configures the operation tests for Drools.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class IntegrityTests extends AbstractTest<Project> {
--    
--    /**
--     * Tests whether implies constraints will be handled correctly by the
--     * {@link net.ssehub.easy.varModel.confModel.AssignmentResolver}.
--     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
--     * {@link ValueFactory}.
--     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
--     */
--    @Test
--    public void testImplies() throws ValueDoesNotMatchTypeException, CSTSemanticException {
--        // Create project and variables
--        Project project = new Project("assignmentTestProject");
--        DecisionVariableDeclaration declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, project);
--        project.add(declA);
--        DecisionVariableDeclaration declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, project);
--        project.add(declB);
--        DecisionVariableDeclaration declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, project);
--        declC.setValue(33);
--        project.add(declC);
--        
--        // Create assignment
--        Value valA = ValueFactory.createValue(declA.getType(), 31);
--        Variable varA = new Variable(declA);
--        ConstantValue constValA = new ConstantValue(valA);
--        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
--        Constraint assignmentConstraint = new Constraint(project);
--        assignmentConstraint.setConsSyntax(assignmentA);
--        project.add(assignmentConstraint);       
--   
--        
--        // Create implies constraint
--        Value valB = ValueFactory.createValue(declB.getType(), 37);
--        ConstantValue constValB = new ConstantValue(valB);
--        Value valC = ValueFactory.createValue(declC.getType(), 40);
--        ConstantValue constValC = new ConstantValue(valC);
--        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
--        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
--        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
--        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
--        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
--        Constraint impliesConstaint = new Constraint(project);
--        impliesConstaint.setConsSyntax(implies);
--        project.add(impliesConstaint);
--        Constraint impliesConstaintFail = new Constraint(project);
--        impliesConstaintFail.setConsSyntax(impliesFail);
--        project.add(impliesConstaintFail);
--        
--        
--        // Create Configuration (will also start AssignmentResolver)
--        Configuration config = new Configuration(project, true);
--        IDecisionVariable iVarA = config.getDecision(declA);
--        IDecisionVariable iVarB = config.getDecision(declB);
--        IDecisionVariable iVarC = config.getDecision(declC);
--        
--        // Test correct assignments
--        Assert.assertNotNull(iVarA);
--        Assert.assertEquals(31, iVarA.getValue().getValue());
--        Assert.assertSame(config.getResolutionState(), iVarA.getState());
--
--        Assert.assertNotNull(iVarB);
--        Assert.assertEquals(37, iVarB.getValue().getValue());
--        Assert.assertSame(config.getResolutionState(), iVarB.getState());
--        
--        Assert.assertNotNull(iVarC);
--        Assert.assertEquals(33, iVarC.getValue().getValue());
--        Assert.assertSame(AssignmentState.DEFAULT, iVarC.getState());
--    }    
--    
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java
-deleted file mode 100644
-index 74cbc93..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java
-+++ /dev/null
-@@ -1,373 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
--
--
--import java.io.File;
--
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--import net.ssehub.easy.varModel.model.ProjectImport;
--
--/**
-- * Configures the operation tests for SSE reasoner.
-- * 
-- * @author Sizonenko
-- * @author El-Sharkawy
-- */
--public class ReasoningScenarioTests extends net.ssehub.easy.reasoning.sseReasoner.AbstractTest {
--    
--    private static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
--    private static final File FOLDER = new File(TESTDATA, "operationsTemplates");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    protected Project loadProject(String path) {
--        return loadProject(FOLDER, path);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }   
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        resultHandler(expectedFailedConstraints, projectP1);
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param p0 IVML file to translate and reason on.
--     * @param p1 IVML file to translate and reason on.
--     * @param p2 IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String p0, String p1, String p2, int expectedFailedConstraints) {
--        Project projectP0 = loadProject(p0);
--        Project projectP1 = loadProject(p1);
--        Project projectP2 = loadProject(p2);
--        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
--        projectP1.addImport(importP0);
--        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
--        projectP2.addImport(importP1);
--        resultHandler(expectedFailedConstraints, projectP2);
--    }
--    
--    /**
--     * Basic test.
--     */
--    @Test    
--    public void initialTest() {
--        reasoningTest("InitialTest.ivml", 2);
--    } 
--    
--    /**
--     * Tests collections.
--     */
--    @Test    
--    public void preCollectionTest() {
--        reasoningTest("PreCollectionTest.ivml", 1);
--    }
--    
--    /**
--     * Tests duplicates.
--     */
--    @Ignore
--    @Test    
--    public void hasDuplicatesTestTest() {
--        reasoningTest("HasDuplicatesTest.ivml", 0);
--    }      
--    
--    /**
--     * Tests freeze.
--     */
--    @Test    
--    public void freezeTest() {
--        reasoningTest("FreezeTest.ivml", 0);
--    } 
--    
--    /**
--     * Tests import freeze.
--     */
--    @Test    
--    public void freezeImportTest() {
--        reasoningTest("FreezeTest.ivml", "FreezeImportTest.ivml", 1);
--    } 
--    
--    /**
--     * Tests import freeze.
--     */
--    @Test 
--    @Ignore
--    public void nullTest() {
--        reasoningTest("NullTest.ivml", 3);
--    } 
--    
--    /**
--     * Tests null import.
--     */
--    @Test  
--    @Ignore
--    public void nullImportTest() {
--        reasoningTest("NullTest.ivml", "NullImportTest.ivml", 4);
--    } 
--    
--    /**
--     * Tests import child (1 failed constraint).
--     */
--    @Test    
--    public void importChildTest() {
--        reasoningTest("ImportChild.ivml", 1);
--    } 
--    
--    /**
--     * Tests import core (variable is reassigned and 0 constraints fail).
--     */
--    @Test    
--    public void importCoreTest() {
--        reasoningTest("ImportChild.ivml", "ImportCore.ivml", 0);
--    } 
--    
--    /**
--     * Tests internal constraints.
--     */ 
--    @Test
--    @Ignore
--    public void internalConstraintTest() {
--        reasoningTest("InternalConstraintTest.ivml", 1);
--    }
--    
--    /**
--     * Tests constraint variables. 
--     */ 
--    @Test    
--    public void constraintVariablesTest() {
--        reasoningTest("ConstraintVariableTest.ivml", 2);
--    }
--    
--    /**
--     * Tests failed variables assignments.
--     */ 
--    @Test    
--    public void variableAssignmentFailTest() {
--        reasoningTest("VariableAssignmentFailTest.ivml", 1);
--    }
--    
--    /**
--     * Tests constraint variables.
--     */ 
--    @Test    
--    public void compoundEqualityTest() {
--        reasoningTest("CompoundEqualityTest.ivml", 0);
--    }
--    
--    /**
--     * Tests compound internal constraints.
--     */
--    @Test    
--    public void constrainedCompoundTest() {
--        reasoningTest("ConstrainedCompoundTest.ivml", 3);
--    }
--    
--    /**
--     * Tests annotation assignment.
--     */
--    @Test    
--    public void annotationInitialTest() {
--        reasoningTest("AnnotationInitialTest.ivml", 0);
--    }
--    
--    /**
--     * Tests annotations in compound.
--     */
--    @Test    
--    public void annotationAssignedToDifferentCompoundSlotsValid() {
--        reasoningTest("AnnotationAssignedToDifferentCompoundSlotsValid.ivml", 0);
--    }
--    
--    /**
--     * Tests compound nested constraints.
--     */
--    @Test    
--    @Ignore
--    public void refinedCompoundTest() {
--        reasoningTest("RefinedCompoundTest.ivml", 0);
--    }
--    
--    /**
--     * Tests trace in failed elements.
--     */
--    @Test
--    public void traceTest() {
--        reasoningTest("TraceTest.ivml", 1);
--    }
--    
--    /**
--     * Tests trace in failed elements.
--     */
--    @Test
--    public void nestedVariableReplaceTest() {
--        reasoningTest("nestedVariableReplaceTest.ivml", 1);
--    }
--    
--    /**
--     * String patern test with internal constraint.
--     */
--    @Test
--    public void internalConstraintStringPaternTest() {
--        reasoningTest("internalConstraintStringPaternTest.ivml", 1);
--    }
--    
--    /**
--     * Inherited internal constraint test.
--     */
--    @Test
--    public void internalConstraintInheritedTest() {
--        reasoningTest("internalConstraintInheritedTest.ivml", 1);
--    }
--    
--    /**
--     * Inherited internal constraint in compound test.
--     */
--    @Test
--    public void internalConstraintInheritedInCompoundTest() {
--        reasoningTest("internalConstraintInheritedInCompoundTest.ivml", 1);
--    }
--    
--    /**
--     * Collection internal constraint test.
--     */
--    @Test
--    public void internalConstraintCollectionTest() {
--        reasoningTest("internalConstraintCollectionTest.ivml", 2);
--    }
--    
--    /**
--     * Collection internal constraint in compound test.
--     */
--    @Test
--    public void internalConstraintCollectionInCompoundTest() {
--        reasoningTest("internalConstraintCollectionInCompoundTest.ivml", 2);
--    }
--    
--    /**
--     * String pattern test with internal constraint.
--     */
--    @Test
--    public void refToCompoundInSequenceTest() {
--        reasoningTest("RefToCompoundInSequenceTest.ivml", 0);
--    }
--    
--    /**
--     * Default constraint reevaluation.
--     */
--    @Test
--    public void defaultConstraintReevaluationTest() {
--        reasoningTest("DefaultConstraintReevaluationTest.ivml", 1);
--    }
--    
--    /**
--     * isDefined test.
--     */
--    @Test
--    public void isDefinedTest() {
--        reasoningTest("IsDefinedTest.ivml", 10);
--    }  
--    
--    /**
--     * isDefined Compound test.
--     */
--    @Test
--    public void isDefinedCompoundTest() {
--        reasoningTest("IsDefinedCompoundTest.ivml", 1);
--    }  
--    
--    /**
--     * Test for collections of compounds equality operation.
--     */
--    @Test
--    public void compoundCollectionEqualityTest() {
--        reasoningTest("compoundCollectionEqualityTest.ivml", 1);
--    }  
--    
--    /**
--     * Test for collections of refTo(compounds) equality operation.
--     */
--    @Test
--    public void refByCompoundCollectionEqualityTest() {
--        reasoningTest("refByCompoundCollectionEqualityTest.ivml", 1);
--    }  
--    
--    /**
--     * Test for collections of string equality operation.
--     */
--    @Test
--    public void stringCollectionEqualityTest() {
--        reasoningTest("stringCollectionEqualityTest.ivml", 2);
--    }
--    
--    /**
--     * Test for incremental reasoning and clering derived values in configuration..
--     */
--    @Test
--    public void clearConfigTest() {
--        reasoningTest("ClearConfigBase.ivml", "ClearConfigCore.ivml", 0);
--    }   
--    
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java
-deleted file mode 100644
-index 8c659d8..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java
-+++ /dev/null
-@@ -1,311 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
--
--import java.io.File;
--import java.io.IOException;
--
--import org.eclipse.emf.common.util.URI;
--import org.junit.AfterClass;
--import org.junit.Assert;
--import org.junit.BeforeClass;
--import org.junit.Ignore;
--import org.junit.Test;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.messages.Status;
--import net.ssehub.easy.basics.modelManagement.ModelManagementException;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.StandaloneInitializer;
--import net.ssehub.easy.dslCore.TranslationResult;
--import net.ssehub.easy.dslCore.test.AbstractTest;
--import net.ssehub.easy.dslCore.translation.Message;
--import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
--import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
--import net.ssehub.easy.reasoning.sseReasoner.Engine;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
--
--/**
-- * Stresstests.
-- * 
-- * @author krafczyk
-- */
--public class StressTest extends AbstractTest<Project> {
--    
--    private static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
--    private static final File FOLDER = new File(TESTDATA, "stresstest");
--    
--    /**
--     * Initializes this Test class.
--     */
--    @BeforeClass
--    public static void setUpBeforeClass() {
--        ModelUtility.setResourceInitializer(new StandaloneInitializer());
--        try {
--            VarModel.INSTANCE.locations().addLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not add location of test files.");
--        }
--    }
--    
--    /**
--     * Frees the memory after testing.
--     */
--    @AfterClass
--    public static void tearDownAfterClass() {
--        try {
--            VarModel.INSTANCE.locations().removeLocation(FOLDER, ProgressObserver.NO_OBSERVER);
--        } catch (ModelManagementException e) {
--            Assert.fail("Could not remove location of test files.");
--        }
--    }
--    
--    /**
--     * Method for determining folder with IVML files.
--     * @param property property
--     * @return folder location
--     */
--    private static File determineTestDataFolder(String property) {
--        File testdataFolder = determineTestDataDir(property);
--        String externalLocation = System.getProperty(property);
--        
--        // If no property was defined, use ReasonerCore.test/testdata directory
--        if (null == externalLocation) {
--            // Work around over the path avoids a NullPointer exception
--            String path = testdataFolder.getAbsolutePath();
--            testdataFolder = new File(path);
--            testdataFolder = testdataFolder.getParentFile().getParentFile();
--            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
--            testdataFolder = new File(testdataFolder, "testdata");
--        }
--        if (!testdataFolder.exists()) {
--            String path = testdataFolder.getAbsolutePath();
--            testdataFolder = new File(path);
--            testdataFolder = testdataFolder.getParentFile().getParentFile().getParentFile();
--            testdataFolder = new File(testdataFolder, "ReasonerCore");
--            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
--            testdataFolder = new File(testdataFolder, "testdata");
--            System.out.println(testdataFolder);
--        }            
--        return testdataFolder;    
--    }
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    protected static Project loadProject(String path) {
--        Project project = null;
--        try {
--            File projectFile = new File(FOLDER, path);
--            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
--            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
--            StringBuffer errorMsg = new StringBuffer();
--            for (int i = 0; i < result.getMessageCount(); i++) {
--                Message msg = result.getMessage(i);
--                if (!msg.ignore()) {
--                    errorMsg.append(msg.getDescription());
--                    errorMsg.append("\n");
--                }
--            }
--            if (errorMsg.length() == 0) {
--                project = result.getResult(0);
--            } else {
--                Assert.fail(errorMsg.toString());
--            }
--            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
--            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
--        } catch (IOException exc) {
--            Assert.fail(exc.getLocalizedMessage());
--        }
--        
--        return project;
--    }
--    
--    /**
--     * Method to test whether different types of variables and constraints could be translated correctly
--     * into rules and reasoned on without any errors. 
--     * @param ivmlFile IVML file to translate and reason on.
--     * @param expectedFailedConstraints Number of constraints that are expected to fail.
--     */        
--    public void reasoningTest(String ivmlFile, int expectedFailedConstraints) {
--        Project project = loadProject(ivmlFile);
--        resultHandler(expectedFailedConstraints, project);
--    }
--    
--    /**
--     * Runs the reasoner for the specified project.
--     * @param projectP1 Project to reason on.
--     * @return number of failed constraints.
--     */
--    private int runReasoner(Project projectP1) {
--        Configuration config = new Configuration(projectP1, false);        
--        ReasonerConfiguration rConfig = new ReasonerConfiguration();
--        
--        // Perform reasoning
--        Engine engine = new Engine(projectP1, config, rConfig, ProgressObserver.NO_OBSERVER);
--        ReasoningResult result = engine.reason();
--        
--        // Test whether reasoning detected correct result  
--        int failedConstraints = 0;
--        for (int i = 0; i < result.getMessageCount(); i++) {
--            if (result.getMessage(i).getStatus() == Status.ERROR) {
--                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
--            }
--        }
--        
--        return failedConstraints;
--    }
--    
--    /**
--     * Method for handling reasoning result.
--     * @param expectedFailedConstraints Number of constraints that are expected to fa
--     * @param projectP1 Project to reason on.
--     */
--    private void resultHandler(int expectedFailedConstraints, Project projectP1) {
--        int failedConstraints = runReasoner(projectP1);
--        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
--    }   
--    
--    
--    /**
--     * Tests whether boolean deafult values are handled correctly.
--     */
--    @Test
--    @Ignore
--    public void testBooleanDefault() {
--        // Test whether default values for booleans are not treated as project constraints
--        reasoningTest("BooleanDefault.1.ivml", 0);
--        // Test whether default values for booleans are applied to them
--        reasoningTest("BooleanDefault.2.ivml", 1);
--    }
--    
--    /**
--     * Tests whether boolean implies values are handled correctly.
--     */
--    @Test
--    @Ignore
--    public void testBooleanImplies() {
--        reasoningTest("BooleanImplies.ivml", 1);
--    }
--    
--    /**
--     * Tests whether constraint variables are evaluated correctly.
--     */
--    @Test
--    @Ignore
--    public void testConstraintEvaluation() {
--        reasoningTest("ConstraintEval.ivml", 1);
--    }
--    
--    /**
--     * Tests whether overridden default values for constraint variables are evaluated correctly.
--     */
--    @Test
--    @Ignore
--    public void testConstraintDefaults() {
--        reasoningTest("ConstraintDefault.1.ivml", 0);
--        reasoningTest("ConstraintDefault.2.ivml", 1);
--    }
--    
--    /**
--     * Tests whether automatic assignment of undefined variables in constraints
--     * via == does not result in failing constraints.
--     */
--    @Test
--    @Ignore
--    public void testUndefinedVariables() {
--        reasoningTest("UndefinedVariables.ivml", 0);
--    }
--    
--    /**
--     * Tests whether typedefs work correctly with compounds.
--     */
--    @Test
--    @Ignore
--    public void testCompoundTypedef() {
--        // Tests whether simple typedefs ("aliases") work
--//        reasoningTest("CompoundTypedef.1.ivml", 0);
--        // Tests whether typedefs with "with" work
--        reasoningTest("CompoundTypedef.2.ivml", 1);
--    }
--    
--    /**
--     * Tests whether typedefs work correctly with sequences and sets.
--     */
--    @Test
--    public void testSetAndSequenceTypedef() {
--        // Tests whether simple typedefs ("aliases") work with sets and sequences
--        reasoningTest("SetAndSequenceTypedef.ivml", 2);
--        // Tests whether typedefs of typedefs and "with" works for sequences
--        reasoningTest("SequenceTypedefWith.ivml", 1);
--    }
--    
--    /**
--     * Tests whether constraints in refined compounds produce the right number of error messages.
--     */
--    @Test
--    public void testCompoundRefineConstraints() {
--        reasoningTest("CompoundRefineConstraints.ivml", 1);
--    }
--    
--    /**
--     * Tests whether typedef constraints are correctly evaluated in sequences / sets.
--     */
--    @Test
--    @Ignore
--    public void testTypedefConstraintsInSequences() {
--        reasoningTest("TypedefConstraintSequence.ivml", 1);
--    }
--    
--    /**
--     * Tests whether out-of-bounds accesses to sequences are handled correctly.
--     */
--    @Test
--    public void testOutOfBoundsIndex() {
--        runReasoner(loadProject("OutOfBoundsIndex.ivml"));
--    }
--    
--    /**
--     * Tests whether size() works for null sets and sequences.
--     */
--    @Test
--    public void testNullSize() {
--        runReasoner(loadProject("NullSize.ivml"));
--    }
--    
--    /**
--     * Tests whether == in implies LHS is treated correctly.
--     */
--    @Test
--    public void testPropagationSyntax() {
--        reasoningTest("PropagationSyntax1.ivml", 0);
--    }
--    
--    /**
--     * Tests whether undefined values in if are handled correctly.
--     */
--    @Test
--    public void testIfWithUndefinedValues() {
--        reasoningTest("UndefinedIf.ivml", 0);
--    }
--    
--    /**
--     * Tests whether constraints with undefined variables are ignored.
--     */
--    @Test
--    public void testUndefinedVariableConstraints() {
--        reasoningTest("UndefinedVariableConstraints.ivml", 0);
--    }
--    
--    /**
--     * Tests whether constants passed to custom operations don't cause exceptions.
--     */
--    @Test
--    public void testConstantInCustomOperation() {
--        reasoningTest("ConstantInCustomOperation.ivml", 0);
--    }
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/Utils.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/Utils.java
-deleted file mode 100644
-index b6d8329..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/Utils.java
-+++ /dev/null
-@@ -1,32 +0,0 @@
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
--
--import net.ssehub.easy.reasoning.core.frontend.AbstractReasonerFrontendTest;
--import net.ssehub.easy.reasoning.core.frontend.TestConfiguration;
--import net.ssehub.easy.reasoning.sseReasoner.ReasonerInitializer;
--
--/**
-- * Test utilities.
-- * 
-- * @author Holger Eichelberger
-- */
--public class Utils {
--
--    /**
--     * Prevents creation from outside.
--     */
--    private Utils() {
--    }
--    
--    /**
--     * Initializes the tests (reusable method).
--     */
--    public static final void init() {
--        AbstractReasonerFrontendTest.setupTests(new TestConfiguration(
--            "net.ssehub.easy.reasoning.sseReasoner.tests", 
--            null, 
--            true, // CHECK
--            false), // CONSISTENT
--            ReasonerInitializer.INSTANCE);
--    }
--
--}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java
-deleted file mode 100644
-index 48e8286..0000000
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java
-+++ /dev/null
-@@ -1,5 +0,0 @@
--/**
-- * Test classes for the <tt>de.uni_hildesheim.sse.reasoning.drools2</tt> package, as well as the functionality
-- * of the complete Drools2 reasoner (integration test).
-- */
--package net.ssehub.easy.reasoning.sseReasoner.reasoner;
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/AllTests.java
-index aa39e21..3e3c734 100644
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/AllTests.java
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/AllTests.java
-@@ -1,24 +1,8 @@
--package net.ssehub.easy.reasoning.sseReasoner;
-+package test.net.ssehub.easy.reasoning.sseReasoner;
- 
--import java.io.File;
--import java.io.IOException;
--
--import org.eclipse.emf.common.util.URI;
--import org.junit.Assert;
- import org.junit.runner.RunWith;
- import org.junit.runners.Suite;
- import org.junit.runners.Suite.SuiteClasses;
--
--import de.uni_hildesheim.sse.ModelUtility;
--import net.ssehub.easy.basics.messages.Status;
--import net.ssehub.easy.basics.progress.ProgressObserver;
--import net.ssehub.easy.dslCore.TranslationResult;
--import net.ssehub.easy.dslCore.translation.Message;
--import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
--import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
--import net.ssehub.easy.varModel.confModel.Configuration;
--import net.ssehub.easy.varModel.management.VarModel;
--import net.ssehub.easy.varModel.model.Project;
- 
- /**
-  * Test suite for automated test execution on build server.
-@@ -33,70 +17,12 @@
-  */
- @RunWith(Suite.class)
- @SuiteClasses({
--    net.ssehub.easy.reasoning.sseReasoner.adaptation.AllTests.class,
--    net.ssehub.easy.reasoning.sseReasoner.capabilities.AllTests.class,
--    // Skip: performance in automatic testing 
--    net.ssehub.easy.reasoning.sseReasoner.qm.AllTests.class,
--    net.ssehub.easy.reasoning.sseReasoner.reasoner.AllTests.class
--    })
-+    test.net.ssehub.easy.reasoning.sseReasoner.reasoner.RampUpTest.class, // must be first
-+    test.net.ssehub.easy.reasoning.sseReasoner.adaptation.AllTests.class,
-+    test.net.ssehub.easy.reasoning.sseReasoner.capabilities.AllTests.class,
-+    test.net.ssehub.easy.reasoning.sseReasoner.qm.AllTests.class,
-+    test.net.ssehub.easy.reasoning.sseReasoner.reasoner.AllTests.class,
-+    test.net.ssehub.easy.reasoning.sseReasoner.performance.AllTests.class, })
- public class AllTests {
-     
--    /**
--     * Method for handling reasoning result.
--     * @param expectedFailedConstraints Number of constraints that are expected to fa
--     * @param projectP1 Project to reason on.
--     */
--    public static void resultHandler(int expectedFailedConstraints, Project projectP1) {
--        Configuration config = new Configuration(projectP1, false);        
--        ReasonerConfiguration rConfig = new ReasonerConfiguration();
--
--        // Perform reasoning
--        Engine engine = new Engine(projectP1, config, rConfig, ProgressObserver.NO_OBSERVER);
--        ReasoningResult result = engine.reason();
--        
--        // Test whether reasoning detected correct result  
--        int failedConstraints = 0;
--        for (int i = 0; i < result.getMessageCount(); i++) {
--            if (result.getMessage(i).getStatus() == Status.ERROR) {
--                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
--            }
--        }
--        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
--    }  
--
--    
--    /**
--     * Helper method for load an IVML file.
--     * @param testFolder The (sub-) folder where to load the specified IVML test files.
--     * @param path The name of the ivml file to load (including the file extension) inside of the
--     *     <tt>reasonerModel</tt> folder.
--     * @return The loaded {@link Project} representing the read IVML file.
--     */
--    public static final Project loadProject(File testFolder, String path) {
--        Project project = null;
--        try {
--            File projectFile = new File(testFolder, path);
--            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
--            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
--            StringBuffer errorMsg = new StringBuffer();
--            for (int i = 0; i < result.getMessageCount(); i++) {
--                Message msg = result.getMessage(i);
--                if (!msg.ignore()) {
--                    errorMsg.append(msg.getDescription());
--                    errorMsg.append("\n");
--                }
--            }
--            if (errorMsg.length() == 0) {
--                project = result.getResult(0);
--            } else {
--                Assert.fail(errorMsg.toString());
--            }
--            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
--            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
--        } catch (IOException exc) {
--            Assert.fail(exc.getLocalizedMessage());
--        }
--        
--        return project;
--    }
- }
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/TestDescriptor.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/TestDescriptor.java
-new file mode 100644
-index 0000000..d28bdbb
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/TestDescriptor.java
-@@ -0,0 +1,134 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner;
-+
-+import net.ssehub.easy.reasoning.core.frontend.ReasonerFrontend;
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.GeneralMeasures;
-+import net.ssehub.easy.reasoning.core.reasoner.IMeasurementKey;
-+import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.reasoning.sseReasoner.Descriptor;
-+import net.ssehub.easy.reasoning.sseReasoner.Measures;
-+import net.ssehub.easy.reasoning.sseReasoner.Reasoner;
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector.IMeasurementIdentifier;
-+
-+/**
-+ * The test descriptor for the SSE reasoner.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class TestDescriptor extends AbstractTestDescriptor {
-+
-+    public static final ITestDescriptor INSTANCE = new TestDescriptor();
-+    private static final IMeasurementKey[] MEASUREMENTS = concat(Measures.values(), GeneralMeasures.values());
-+    private Reasoner reasoner = new Reasoner();
-+
-+    /**
-+     * The specific measurement identifiers for the SSE reasoner.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    public enum MeasurementIdentifier implements IMeasurementIdentifier {
-+
-+        /**
-+         * Number of variables in constraints.
-+         */
-+        REASONER_VARIABLES_IN_CONSTRAINTS,
-+
-+        /**
-+         * Number of constraints with evaluation problems.
-+         */
-+        REASONER_PROBLEM_CONSTRAINTS,
-+
-+        /**
-+         * Number of constraints with assignment problems.
-+         */
-+        REASONER_PROBLEM_ASSIGNMENTS;
-+
-+        @Override
-+        public boolean isAutomatic() {
-+            return false;
-+        }
-+
-+    }
-+    
-+    /**
-+     * Creates a test descriptor.
-+     */
-+    private TestDescriptor() {
-+        super("net.ssehub.easy.reasoning.sseReasoner.tests", 
-+            null, 
-+            true, // CHECK
-+            false);
-+    }
-+    
-+    @Override
-+    public IReasoner createReasoner() {
-+        return new Reasoner();
-+    }
-+
-+    @Override
-+    public void registerResoner() {
-+        ReasonerFrontend.getInstance().getRegistry().register(reasoner);
-+    }
-+
-+    @Override
-+    public void unregisterReasoner() {
-+        ReasonerFrontend.getInstance().getRegistry().unregister(reasoner);
-+    }
-+
-+    @Override
-+    public String getName() {
-+        return Descriptor.NAME;
-+    }
-+
-+    @Override
-+    public String getVersion() {
-+        return Descriptor.VERSION;
-+    }
-+
-+    /**
-+     * Registers the measurement mappings for the SSE reasoner.
-+     */
-+    public static void registerMeasurementMappings() {
-+        MeasurementCollector.registerMapping(Measures.VARIABLES_IN_CONSTRAINTS, 
-+            MeasurementIdentifier.REASONER_VARIABLES_IN_CONSTRAINTS);
-+        MeasurementCollector.registerMapping(Measures.PROBLEM_CONSTRAINTS, 
-+            MeasurementIdentifier.REASONER_PROBLEM_CONSTRAINTS);
-+        MeasurementCollector.registerMapping(Measures.PROBLEM_ASSIGNMENTS, 
-+            MeasurementIdentifier.REASONER_PROBLEM_ASSIGNMENTS);
-+    }
-+    
-+    /**
-+     * Automatically registers the measurement mappings.
-+     */
-+    static {
-+        registerMeasurementMappings();
-+    }
-+
-+    @Override
-+    public IMeasurementKey[] measurements() {
-+        return MEASUREMENTS;    
-+    }
-+
-+    @Override
-+    public String getMeasurementFileName() {
-+        return "measurements-sse.tsv";
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java
-new file mode 100644
-index 0000000..3142623
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationIntegrityTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.adaptation;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class AdaptationIntegrityTests extends net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public AdaptationIntegrityTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java
-new file mode 100644
-index 0000000..01dfe9b
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AdaptationScenarioTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.adaptation;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Collection constraints tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class AdaptationScenarioTests extends net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public AdaptationScenarioTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java
-new file mode 100644
-index 0000000..d9524c1
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/AllTests.java
-@@ -0,0 +1,23 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.adaptation;
-+
-+import org.junit.runner.RunWith;
-+import org.junit.runners.Suite;
-+import org.junit.runners.Suite.SuiteClasses;
-+
-+/**
-+ * Tests for testing the reasoning capabilities for adaptation.<br/>
-+ * Usually a property is used to specify the location of test data.
-+ * This is done with the property
-+ * {@link net.ssehub.easy.reasoning.core.frontend.TestConfiguration#SYSTEM_PROPERTY}. For instance: <br/>
-+ * <tt>-DreasonerCore.testdata.home=C:\EASyProducer-git\Plugins\Reasoner\ReasonerCore\ReasonerCore.test\testdata</tt>
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+@RunWith(Suite.class)
-+@SuiteClasses({
-+    AdaptationIntegrityTests.class,
-+    AdaptationScenarioTests.class
-+    })
-+public class AllTests {
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java
-new file mode 100644
-index 0000000..1bc5737
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/adaptation/package-info.java
-@@ -0,0 +1,6 @@
-+/**
-+ * Reasoning tests for adaptation.
-+ * @author sizonenko
-+ *
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.adaptation;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java
-new file mode 100644
-index 0000000..d8f0e8e
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AllTests.java
-@@ -0,0 +1,30 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import org.junit.runner.RunWith;
-+import org.junit.runners.Suite;
-+import org.junit.runners.Suite.SuiteClasses;
-+
-+/**
-+ * Tests for testing the reasoning capabilities.<br/>
-+ * Usually a property is used to specify the location of test data.
-+ * This is done with the property
-+ * {@link net.ssehub.easy.reasoning.core.frontend.TestConfiguration#SYSTEM_PROPERTY}. For instance: <br/>
-+ * <tt>-DreasonerCore.testdata.home=C:\EASyProducer-git\Plugins\Reasoner\ReasonerCore\ReasonerCore.test\testdata</tt>
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+@RunWith(Suite.class)
-+@SuiteClasses({    
-+    AttributeTests.class,  
-+    CollectionConstraintsTests.class,
-+    FailedDecisionsTests.class,
-+    RuntimeReasoningTests.class,
-+    OperationTests.class,
-+    CollectionOperationsTests.class,
-+    StructureTests.class,
-+    ConstraintVariableTests.class,
-+    EvalTests.class
-+    })
-+public class AllTests {
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java
-new file mode 100644
-index 0000000..366fdce
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/AttributeTests.java
-@@ -0,0 +1,21 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Attribute tests. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class AttributeTests extends net.ssehub.easy.reasoning.core.capabilities.AttributeTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public AttributeTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java
-new file mode 100644
-index 0000000..85d8132
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionConstraintsTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Collection constraints tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class CollectionConstraintsTests extends net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public CollectionConstraintsTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java
-new file mode 100644
-index 0000000..517224e
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/CollectionOperationsTests.java
-@@ -0,0 +1,34 @@
-+/*
-+ * Copyright 2009-2016 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the {@link net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests}
-+ * for the SSE-Reasoner.
-+ * @author El-Sharkawy
-+ */
-+public class CollectionOperationsTests extends net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public CollectionOperationsTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java
-new file mode 100644
-index 0000000..d961085
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/ConstraintVariableTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Collection constraints tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class ConstraintVariableTests extends net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public ConstraintVariableTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java
-new file mode 100644
-index 0000000..06e46a4
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/EvalTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Collection constraints tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class EvalTests extends net.ssehub.easy.reasoning.core.reasoner.EvalTests {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public EvalTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java
-new file mode 100644
-index 0000000..81ae5ab
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/FailedDecisionsTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Incremental reasoning tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class FailedDecisionsTests extends net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public FailedDecisionsTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java
-new file mode 100644
-index 0000000..ed47ca8
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/OperationTests.java
-@@ -0,0 +1,21 @@
-+
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the operation tests for the SSE-Reasoner.
-+ * 
-+ * @author Holger Eichelberger
-+ * @author El-Sharkawy
-+ */
-+public class OperationTests extends net.ssehub.easy.reasoning.core.frontend.OperationTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public OperationTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java
-new file mode 100644
-index 0000000..1a0e70b
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/RuntimeReasoningTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Incremental reasoning tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class RuntimeReasoningTests extends net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public RuntimeReasoningTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java
-new file mode 100644
-index 0000000..6c237a2
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/StructureTests.java
-@@ -0,0 +1,34 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Test of reasoner capabilities related to the structure of variability models.
-+ * @author El-Sharkawy
-+ *
-+ */
-+public class StructureTests extends net.ssehub.easy.reasoning.core.frontend.StructureTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public StructureTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt
-new file mode 100644
-index 0000000..e87e44e
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/TestInfo.txt
-@@ -0,0 +1,14 @@
-+1) DefaultAssign
-+Assign attribute with a default value to the project.
-+
-+2) BlockAssign
-+Assign attribute to the project, use assign block for assigning attribute value.
-+
-+3) IndividualAssign
-+Assign attribute to the project, use individual attribute assignments. 
-+
-+4) BlockAssignNested
-+Assign attribute to the project, use assign block for assigning attribute value to a compound nested element.
-+
-+5) IndividualAssignNested
-+Assign attribute to the project, use individual attribute assignments to a compound nested element.
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java
-new file mode 100644
-index 0000000..ae380c5
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/capabilities/package-info.java
-@@ -0,0 +1,6 @@
-+/**
-+ * Tests attributes.
-+ * @author Sizonenko
-+ *
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.capabilities;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/package-info.java
-index 8125011..9d98d7a 100644
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/package-info.java
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/package-info.java
-@@ -3,4 +3,4 @@
-  * @author Sizonenko
-  *
-  */
--package net.ssehub.easy.reasoning.sseReasoner;
-\ No newline at end of file
-+package test.net.ssehub.easy.reasoning.sseReasoner;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java
-new file mode 100644
-index 0000000..d87de3b
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/AllTests.java
-@@ -0,0 +1,19 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.performance;
-+
-+import org.junit.runner.RunWith;
-+import org.junit.runners.Suite;
-+import org.junit.runners.Suite.SuiteClasses;
-+
-+/**
-+ * Bundling all performance tests.
-+ * @author Sizonenko
-+ */
-+@RunWith(Suite.class)
-+@SuiteClasses({
-+    CaseStudyStats.class,
-+    GeneratedStats.class,
-+    HistoryStats.class
-+    })
-+public class AllTests {
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java
-new file mode 100644
-index 0000000..a209d09
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/CaseStudyStats.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.performance;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class CaseStudyStats extends net.ssehub.easy.reasoning.core.performance.CaseStudyStats {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public CaseStudyStats() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java
-new file mode 100644
-index 0000000..ea9fe48
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/GeneratedStats.java
-@@ -0,0 +1,38 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.performance;
-+
-+import org.junit.Test;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class GeneratedStats extends net.ssehub.easy.reasoning.core.performance.GeneratedStats {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public GeneratedStats() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+    /**
-+     * Tests Boolean 1 to 3 ration.
-+     */
-+    @Test    
-+    public void gr11() {
-+        super.gr11();
-+    } 
-+    
-+    /**
-+     * Tests Boolean 1 to 1 ration.
-+     */
-+    @Test    
-+    public void gr12() {
-+        super.gr12();
-+    }   
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java
-new file mode 100644
-index 0000000..b2f9132
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/HistoryStats.java
-@@ -0,0 +1,30 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.performance;
-+
-+import org.junit.Test;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class HistoryStats extends net.ssehub.easy.reasoning.core.performance.HistoryStats {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public HistoryStats() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+    /**
-+     * Tests history models.
-+     */
-+    @Test    
-+    public void historyStatsTest() {
-+        super.historyStatsTest();
-+    } 
-+   
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java
-new file mode 100644
-index 0000000..2b10023
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/performance/package-info.java
-@@ -0,0 +1,5 @@
-+/**
-+ * Performance tests.
-+ * @author Sizonenko
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.performance;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java
-new file mode 100644
-index 0000000..76f3a9b
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/AllTests.java
-@@ -0,0 +1,27 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import org.junit.runner.RunWith;
-+import org.junit.runners.Suite;
-+import org.junit.runners.Suite.SuiteClasses;
-+
-+/**
-+ * Bundling all tests.
-+ * @author Sizonenko
-+ */
-+@RunWith(Suite.class)
-+@SuiteClasses({    
-+    QMValidTest.class,  
-+    QMHardwareTest1.class,
-+    QMHardwareTest2.class,
-+    QMHardwareTest3.class,
-+    QMAlgorithmsTest1.class,
-+    QMFamiliesTest1.class,
-+    QMFamiliesTest2.class,
-+    QMPipelinesTest1.class,
-+    QMScenarioTests.class,
-+    QMMismatchedTest.class,
-+    QMMonTest.class
-+    })
-+public class AllTests {
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java
-new file mode 100644
-index 0000000..0567f23
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMAlgorithmsTest1.java
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Hardware constraint: algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size() test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMAlgorithmsTest1 extends net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1 {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMAlgorithmsTest1() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java
-new file mode 100644
-index 0000000..2eabad5
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest1.java
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Hardware constraint: inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input) test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMFamiliesTest1 extends net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1 {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMFamiliesTest1() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java
-new file mode 100644
-index 0000000..e7aa18b
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMFamiliesTest2.java
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Hardware constraint: memberCount = members.size() > 0 test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMFamiliesTest2 extends net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2 {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMFamiliesTest2() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java
-new file mode 100644
-index 0000000..272c5ca
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest1.java
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Hardware constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty() test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMHardwareTest1 extends net.ssehub.easy.reasoning.core.qm.QMHardwareTest1 {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMHardwareTest1() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java
-new file mode 100644
-index 0000000..f220008
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest2.java
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Hardware constraint: managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMHardwareTest2 extends net.ssehub.easy.reasoning.core.qm.QMHardwareTest2 {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMHardwareTest2() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java
-new file mode 100644
-index 0000000..f6aca78
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMHardwareTest3.java
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Hardware constraint: machineName = machines->collect(m|m.name).size() == machines.size() test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMHardwareTest3 extends net.ssehub.easy.reasoning.core.qm.QMHardwareTest3 {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMHardwareTest3() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java
-new file mode 100644
-index 0000000..e0fc1c9
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMismatchedTest.java
-@@ -0,0 +1,37 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import net.ssehub.easy.reasoning.core.frontend.MismatchedTest;
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Qualimaster model test.
-+ * Model is valid.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMMismatchedTest extends MismatchedTest {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMMismatchedTest() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMonTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMonTest.java
-new file mode 100644
-index 0000000..bd185a5
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMMonTest.java
-@@ -0,0 +1,36 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Qualimaster monitoring test.
-+ * Model is valid.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMMonTest extends net.ssehub.easy.reasoning.core.qm.QMMonTest {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMMonTest() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java
-new file mode 100644
-index 0000000..954cf5f
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMPipelinesTest1.java
-@@ -0,0 +1,36 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Hardware constraint: flow error from the presentation test.
-+ * typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMPipelinesTest1 extends net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1 {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMPipelinesTest1() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java
-new file mode 100644
-index 0000000..410ab13
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMScenarioTests.java
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the operation tests for SSE reasoner.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMScenarioTests extends net.ssehub.easy.reasoning.core.qm.QMScenarioTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMScenarioTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java
-new file mode 100644
-index 0000000..1caf9f6
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/QMValidTest.java
-@@ -0,0 +1,36 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Qualimaster model test.
-+ * Model is valid.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMValidTest extends net.ssehub.easy.reasoning.core.qm.QMValidTest {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public QMValidTest() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt
-new file mode 100644
-index 0000000..14ab256
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/TestInfo.txt
-@@ -0,0 +1,28 @@
-+QMValidTest
-+Model does not fail
-+
-+Hardware
-+QMHardwareTest1
-+constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty()
-+QMHardwareTest2
-+managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) (same test for Workers)
-+QMHardwareTest3
-+machineName = machines->collect(m|m.name).size() == machines.size()
-+QMHardwareTest4
-+
-+Infrastructure
-+workerportCheck = activePipelinesNumWorkers() <= workerMachinesPortsCount() - needs change
-+
-+Algorithms
-+QMAlgorithmsTest1
-+algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size()
-+
-+Families
-+QMFamiliesTest1
-+inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input)
-+QMFamiliesTest2
-+memberCount = members.size() > 0
-+
-+Pipelines
-+QMPipelinesTest1
-+typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java
-new file mode 100644
-index 0000000..f1c4553
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/qm/package-info.java
-@@ -0,0 +1,6 @@
-+/**
-+ * Test the Qualimaster model.
-+ * @author Sizonenko
-+ *
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.qm;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java
-new file mode 100644
-index 0000000..f6e68a7
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/AllTests.java
-@@ -0,0 +1,32 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import org.junit.runner.RunWith;
-+import org.junit.runners.Suite;
-+import org.junit.runners.Suite.SuiteClasses;
-+
-+/**
-+ * Bundling all tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ * @author Eichelberger
-+ */
-+@RunWith(Suite.class)
-+@SuiteClasses({
-+    EvaluationIntegrityTest.class,
-+    IntegrityTests.class,  
-+    ReasoningScenarioTests.class,
-+    StressTest.class,
-+    CodedTests.class,
-+    BooleanTests.class,
-+    RealTests.class, 
-+    StringTests.class, 
-+    IntegerTests.class,
-+    EnumTests.class, 
-+    CompoundTests.class,
-+    InterfaceTests.class,
-+    ApplicationsTests.class,
-+    })
-+public class AllTests {
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ApplicationsTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ApplicationsTests.java
-new file mode 100644
-index 0000000..9d16f3f
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ApplicationsTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the application tests for SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class ApplicationsTests extends net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public ApplicationsTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanTests.java
-new file mode 100644
-index 0000000..22fb30e
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/BooleanTests.java
-@@ -0,0 +1,22 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the boolean tests for SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ * @author Eichelberger
-+ */
-+public class BooleanTests extends net.ssehub.easy.reasoning.core.reasoner.BooleanTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public BooleanTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java
-new file mode 100644
-index 0000000..f7bd17c
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CodedTests.java
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Tests reasoner capabilities via coded tests, without interactions from the parser. Inheritance is used here to 
-+ * be able to override and disable some tests, e.g., during development.
-+ * 
-+ * @author El-Sharkawy
-+ */
-+public class CodedTests extends net.ssehub.easy.reasoning.core.reasoner.CodedTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public CodedTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CompoundTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CompoundTests.java
-new file mode 100644
-index 0000000..635cc46
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/CompoundTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the compound tests for SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class CompoundTests extends net.ssehub.easy.reasoning.core.reasoner.CompoundTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public CompoundTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EnumTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EnumTests.java
-new file mode 100644
-index 0000000..2d9e50d
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EnumTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the enum tests for SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class EnumTests extends net.ssehub.easy.reasoning.core.reasoner.EnumTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public EnumTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java
-new file mode 100644
-index 0000000..b0f4482
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/EvaluationIntegrityTest.java
-@@ -0,0 +1,36 @@
-+/*
-+ * Copyright 2009-2014 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Tests for {@link Resolver}. Inheritance is used here to 
-+ * be able to override and disable some tests, e.g., during development.
-+ * 
-+ * @author El-Sharkawy
-+ * @author Sizonenko
-+ */
-+public class EvaluationIntegrityTest extends net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public EvaluationIntegrityTest() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegerTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegerTests.java
-new file mode 100644
-index 0000000..a50578a
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegerTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the integer tests for SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class IntegerTests extends net.ssehub.easy.reasoning.core.reasoner.IntegerTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public IntegerTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java
-new file mode 100644
-index 0000000..eedc205
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/IntegrityTests.java
-@@ -0,0 +1,21 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the integrity tests for the SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class IntegrityTests extends net.ssehub.easy.reasoning.core.reasoner.IntegrityTests {
-+    
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public IntegrityTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/InterfaceTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/InterfaceTests.java
-new file mode 100644
-index 0000000..ddb7b51
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/InterfaceTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the interface tests for SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class InterfaceTests extends net.ssehub.easy.reasoning.core.reasoner.InterfaceTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public InterfaceTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RampUpTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RampUpTest.java
-new file mode 100644
-index 0000000..bb59c52
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RampUpTest.java
-@@ -0,0 +1,34 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * A ramp-up test for the SSE reasoner.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class RampUpTest extends net.ssehub.easy.reasoning.core.reasoner.RampUpTest {
-+
-+    /**
-+     * Creates the test.
-+     */
-+    public RampUpTest() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RealTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RealTests.java
-new file mode 100644
-index 0000000..a18eb9c
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/RealTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the real tests for SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class RealTests extends net.ssehub.easy.reasoning.core.reasoner.RealTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public RealTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java
-new file mode 100644
-index 0000000..9942c1e
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/ReasoningScenarioTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the operation tests for SSE reasoner.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class ReasoningScenarioTests extends net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public ReasoningScenarioTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java
-new file mode 100644
-index 0000000..84fcf3f
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StressTest.java
-@@ -0,0 +1,19 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Stresstests.
-+ * 
-+ * @author krafczyk
-+ */
-+public class StressTest extends net.ssehub.easy.reasoning.core.reasoner.StressTest {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public StressTest() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StringTests.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StringTests.java
-new file mode 100644
-index 0000000..77b6e28
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/StringTests.java
-@@ -0,0 +1,20 @@
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-+
-+import test.net.ssehub.easy.reasoning.sseReasoner.TestDescriptor;
-+
-+/**
-+ * Configures the string tests for SSE reasoner. Inheritance is used here to be able
-+ * to override and disable some tests, e.g., during development.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class StringTests extends net.ssehub.easy.reasoning.core.reasoner.StringTests {
-+
-+    /**
-+     * Creates a specific test instance.
-+     */
-+    public StringTests() {
-+        super(TestDescriptor.INSTANCE);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java
-new file mode 100644
-index 0000000..c5bada7
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner.test/test/test/net/ssehub/easy/reasoning/sseReasoner/reasoner/package-info.java
-@@ -0,0 +1,5 @@
-+/**
-+ * Test classes for the <tt>de.uni_hildesheim.sse.reasoning.drools2</tt> package, as well as the functionality
-+ * of the complete Drools2 reasoner (integration test).
-+ */
-+package test.net.ssehub.easy.reasoning.sseReasoner.reasoner;
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Descriptor.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Descriptor.java
-index 32eb62e..c31a4c7 100644
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Descriptor.java
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Descriptor.java
-@@ -22,9 +22,9 @@
- 
-     public static final boolean LOGGING = false; 
-     
--    static final String NAME = "EASy-Producer IVML Reasoner";
-+    public static final String NAME = "EASy-Producer IVML Reasoner";
- 
--    static final String VERSION = "1.0";
-+    public static final String VERSION = "1.0";
-     
-     
-     private static final String LICENSE = "Apache License" 
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Engine.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Engine.java
-index 36f5122..b306ce0 100644
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Engine.java
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Engine.java
-@@ -11,6 +11,7 @@
- import net.ssehub.easy.basics.logger.EASyLoggerFactory.EASyLogger;
- import net.ssehub.easy.basics.messages.Status;
- import net.ssehub.easy.basics.progress.ProgressObserver;
-+import net.ssehub.easy.reasoning.core.reasoner.GeneralMeasures;
- import net.ssehub.easy.reasoning.core.reasoner.Message;
- import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
- import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration.IAdditionalInformationLogger;
-@@ -119,11 +120,20 @@
-         infoLogger.info("Model: " + project.getName());
- //        infoLogger.info("Number of variables: " + resolver.variableCount());
-         infoLogger.info("Number of variables involved in constraints: " + resolver.variableInConstraintCount());
-+        result.setMeasure(Measures.VARIABLES_IN_CONSTRAINTS, resolver.variableInConstraintCount());
-         infoLogger.info("Number of constraints: " + resolver.constraintCount());
-+        result.setMeasure(GeneralMeasures.CONSTRAINT_COUNT, resolver.constraintCount());
-         infoLogger.info("Number of reevaluations: " + reevaluationCount);
-+        result.setMeasure(GeneralMeasures.REEVALUATION_COUNT, reevaluationCount);
-         infoLogger.info("Number of problem constraints: " + failedConstraints);
-+        result.setMeasure(Measures.PROBLEM_CONSTRAINTS, failedConstraints);
-         infoLogger.info("Number of problem assignments: " + failedAssignments);
-+        result.setMeasure(Measures.PROBLEM_ASSIGNMENTS, failedAssignments);
-+        result.setMeasure(GeneralMeasures.PROBLEMS, failedConstraints + failedAssignments);
-         infoLogger.info("Evaluation time: " + evaluationTime);
-+        result.setMeasure(GeneralMeasures.REASONING_TIME, evaluationTime);
-+        result.setMeasure(GeneralMeasures.TRANSLATION_TIME, resolver.getTranslationTime());
-+        result.setMeasure(GeneralMeasures.EVALUATION_TIME, resolver.getEvaluationTime());
-         return result;        
-     } 
-     
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Measures.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Measures.java
-new file mode 100644
-index 0000000..89f77bb
---- /dev/null
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Measures.java
-@@ -0,0 +1,63 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.sseReasoner;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.IMeasurementKey;
-+
-+/**
-+ * The measures provided/supported by the SSE reasoner.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public enum Measures implements IMeasurementKey {
-+    
-+    /**
-+     * Number of variables in constraints.
-+     */
-+    VARIABLES_IN_CONSTRAINTS("Number of variables involved in constraints"),
-+
-+    /**
-+     * Number of constraints with evaluation problems.
-+     */
-+    PROBLEM_CONSTRAINTS("Number of problem constraints"),
-+
-+    /**
-+     * Number of constraints with assignment problems.
-+     */
-+    PROBLEM_ASSIGNMENTS("Number of problem assignments");
-+    
-+    private String explanation;
-+    
-+    /**
-+     * Creates a measures constant.
-+     * 
-+     * @param explanation the headline/explanation
-+     */
-+    private Measures(String explanation) {
-+        this.explanation = explanation;
-+    }
-+
-+    @Override
-+    public String getExplanation() {
-+        return explanation;
-+    }
-+
-+    @Override
-+    public int outputPos() {
-+        return 100 + ordinal();
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Resolver.java b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Resolver.java
-index 908dfc3..c3f6d97 100644
---- a/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Resolver.java
-+++ b/Plugins/Reasoner/EASy-Original-Reasoner/de.uni_hildesheim.sse.reasoning.reasoner/src/net/ssehub/easy/reasoning/sseReasoner/Resolver.java
-@@ -119,6 +119,8 @@
-     private int variablesInConstraintsCounter = 0;    
-     private int reevaluationCounter = 0;
-     private int variablesCounter = 0;
-+    private long translationTime = 0;
-+    private long evaluationTime = 0;
-     
-     private boolean incremental;
-     
-@@ -1016,6 +1018,7 @@
-      * @param dispatchScope the scope for dynamic dispatches
-      */
-     private void processConstraints(Project dispatchScope) { 
-+        long start = System.currentTimeMillis();
-         List<Constraint> scopeConstraints = new ArrayList<Constraint>();
-         if (!incremental) {
-             if (defaultConstraints.size() > 0) {
-@@ -1077,6 +1080,7 @@
-         constraintBaseSize = constraintBase.size();
-         constraintCounter = constraintCounter + constraintBaseSize;
-         clearConstraintLists();
-+        translationTime += System.currentTimeMillis() - start;
-         resolveConstraints(constraintBase, dispatchScope);
-         constraintBase.clear(); 
-     }
-@@ -1182,6 +1186,7 @@
-      * @param dispatchScope the scope for dynamic dispatches
-      */
-     private void resolveConstraints(List<Constraint> constraints, Project dispatchScope) {
-+        long start = System.currentTimeMillis();
-         if (Descriptor.LOGGING) {
-             printConstraints(constraintBase);            
-         }
-@@ -1202,7 +1207,6 @@
-                     LOGGER.debug("Resolving: " + reevaluationCounter + ": " + StringProvider.toIvmlString(cst) 
-                         + " : " + constraint.getTopLevelParent());                    
-                 }
--                // TODO check whether these four statements can be moved up / clearResult is sufficient instead of clear
-                 evaluator.init(config, state, false, listener); 
-                 evaluator.setResolutionListener(resolutionListener);
-                 evaluator.setScopeAssignmnets(scopeAssignments);
-@@ -1245,11 +1249,11 @@
-                 }
-                 if (Descriptor.LOGGING) {
-                     LOGGER.debug("Result: " + evaluator.getResult());
--                    LOGGER.debug("------");                     
-                 }
-                 evaluator.clear();
-             }
-         }
-+        evaluationTime += System.currentTimeMillis() - start;
-     }
-     
-     
-@@ -1570,4 +1574,21 @@
-         return failedElements;
-     }  
- 
-+    /**
-+     * Returns the time used for evaluation.
-+     * 
-+     * @return the time in ms
-+     */
-+    long getEvaluationTime() {
-+        return evaluationTime;
-+    }
-+    
-+    /**
-+     * Returns the time used for translation.
-+     * 
-+     * @return the time in ms
-+     */
-+    long getTranslationTime() {
-+        return translationTime;
-+    }
- }
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/META-INF/MANIFEST.MF b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/META-INF/MANIFEST.MF
-index ae722b6..4b5d9de 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/META-INF/MANIFEST.MF
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/META-INF/MANIFEST.MF
-@@ -6,10 +6,16 @@
- Bundle-RequiredExecutionEnvironment: JavaSE-1.6
- Require-Bundle: org.junit,
-  de.uni_hildesheim.sse.ivml;bundle-version="0.1.1",
-+ net.ssehub.easy.varModel.tests;bundle-version="0.0.10";visibility:=reexport,
-  net.ssehub.easy.reasoning.core;bundle-version="0.0.3";visibility:=reexport,
-  org.eclipse.core.runtime;bundle-version="3.7.0",
-  net.ssehub.easy.dslCore;bundle-version="0.0.1"
--Export-Package: net.ssehub.easy.reasoning.core.frontend
-+Export-Package: net.ssehub.easy.reasoning.core.adaptation,
-+ net.ssehub.easy.reasoning.core.capabilities,
-+ net.ssehub.easy.reasoning.core.frontend,
-+ net.ssehub.easy.reasoning.core.performance,
-+ net.ssehub.easy.reasoning.core.qm,
-+ net.ssehub.easy.reasoning.core.reasoner
- Bundle-ClassPath: testdata/,
-  .
- Bundle-ActivationPolicy: lazy
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationIntegrityTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationIntegrityTests.java
-new file mode 100644
-index 0000000..b95eb77
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationIntegrityTests.java
-@@ -0,0 +1,316 @@
-+package net.ssehub.easy.reasoning.core.adaptation;
-+
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.cst.CSTSemanticException;
-+import net.ssehub.easy.varModel.cst.ConstantValue;
-+import net.ssehub.easy.varModel.cst.OCLFeatureCall;
-+import net.ssehub.easy.varModel.cst.Variable;
-+import net.ssehub.easy.varModel.model.Constraint;
-+import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.datatypes.Compound;
-+import net.ssehub.easy.varModel.model.datatypes.IntegerType;
-+import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
-+import net.ssehub.easy.varModel.model.values.Value;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+import net.ssehub.easy.varModel.persistency.StringProvider;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class AdaptationIntegrityTests extends AbstractTest {
-+
-+    private Configuration config;
-+    private ReasonerConfiguration rConfig;
-+    private Project project;
-+    private DecisionVariableDeclaration declA;
-+    private DecisionVariableDeclaration declB;
-+    private DecisionVariableDeclaration declC;
-+    private DecisionVariableDeclaration myParam;
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected AdaptationIntegrityTests(ITestDescriptor descriptor) {
-+        super(descriptor, null);
-+    }
-+
-+    /**
-+     * Creates a simple test project and performs reasoning.
-+     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
-+     * {@link ValueFactory}.
-+     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
-+     */
-+    public void createSimpleProject() throws ValueDoesNotMatchTypeException, CSTSemanticException {
-+        // Create project and variables
-+        project = new Project("SimpleTestProject");
-+        declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, project);
-+        project.add(declA);
-+        declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, project);
-+        project.add(declB);
-+        declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, project);
-+        declC.setValue(33);
-+        project.add(declC);
-+        
-+        // Create assignment
-+        Value valA = ValueFactory.createValue(declA.getType(), 31);
-+        Variable varA = new Variable(declA);
-+        ConstantValue constValA = new ConstantValue(valA);
-+        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
-+        Constraint assignmentConstraint = new Constraint(project);
-+        assignmentConstraint.setConsSyntax(assignmentA);
-+        project.add(assignmentConstraint);
-+        
-+        // Create implies constraint
-+        Value valB = ValueFactory.createValue(declB.getType(), 37);
-+        ConstantValue constValB = new ConstantValue(valB);
-+        Value valC = ValueFactory.createValue(declC.getType(), 40);
-+        ConstantValue constValC = new ConstantValue(valC);
-+        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
-+        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
-+        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
-+        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
-+        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
-+        Constraint impliesConstaint = new Constraint(project);
-+        impliesConstaint.setConsSyntax(implies);
-+        project.add(impliesConstaint);
-+        Constraint impliesConstaintFail = new Constraint(project);
-+        impliesConstaintFail.setConsSyntax(impliesFail);
-+        project.add(impliesConstaintFail);
-+        
-+        // debugging
-+        System.out.println(StringProvider.toIvmlString(project));
-+        
-+        // Create Configuration (will also start AssignmentResolver)
-+        config = new Configuration(project, true);        
-+        rConfig = new ReasonerConfiguration();
-+        performReasoning(project, config, rConfig);
-+    } 
-+    
-+    /**
-+     * Creates a simple test project and performs reasoning.
-+     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
-+     * {@link ValueFactory}.
-+     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
-+     */
-+    public void createCompoundProject() throws ValueDoesNotMatchTypeException, CSTSemanticException {
-+        // Create project and variables
-+        project = new Project("CompoundTestProject");
-+        Compound param = new Compound("IntParameter", project);
-+        declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, param);
-+        param.add(declA);
-+        declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, param);
-+        param.add(declB);
-+        declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, param);
-+        declC.setValue(33);
-+        param.add(declC);
-+        project.add(param);
-+        
-+        myParam = new DecisionVariableDeclaration("myParam", param, project);
-+        project.add(myParam);
-+        
-+        // Create assignment
-+        Value valA = ValueFactory.createValue(declA.getType(), 31);
-+        Variable varA = new Variable(declA);
-+        ConstantValue constValA = new ConstantValue(valA);
-+        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
-+        Constraint assignmentConstraint = new Constraint(param);
-+        assignmentConstraint.setConsSyntax(assignmentA);
-+        param.addConstraint(assignmentConstraint);
-+        
-+        // Create implies constraint
-+        Value valB = ValueFactory.createValue(declB.getType(), 37);
-+        ConstantValue constValB = new ConstantValue(valB);
-+        Value valC = ValueFactory.createValue(declC.getType(), 40);
-+        ConstantValue constValC = new ConstantValue(valC);
-+        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
-+        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
-+        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
-+        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
-+        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
-+        Constraint impliesConstaint = new Constraint(param);
-+        impliesConstaint.setConsSyntax(implies);
-+        param.addConstraint(impliesConstaint);
-+        Constraint impliesConstaintFail = new Constraint(param);
-+        impliesConstaintFail.setConsSyntax(impliesFail);
-+        param.addConstraint(impliesConstaintFail);
-+        
-+        // debugging
-+        System.out.println(StringProvider.toIvmlString(project));
-+        
-+        // Create Configuration (will also start AssignmentResolver)
-+        config = new Configuration(project, true);        
-+        rConfig = new ReasonerConfiguration();
-+        performReasoning(project, config, rConfig, "CompoundInit");
-+    }  
-+    
-+    /**
-+     * Tests the results of initial reasoning.
-+     */
-+    @Test
-+    public void testSimpleResultAfterReasoning() {
-+        try {
-+            createSimpleProject();
-+            IDecisionVariable iVarA = config.getDecision(declA);
-+            IDecisionVariable iVarB = config.getDecision(declB);
-+            IDecisionVariable iVarC = config.getDecision(declC);
-+            
-+            // Test correct assignments
-+            Assert.assertNotNull(iVarA);
-+            Assert.assertEquals(31, iVarA.getValue().getValue());
-+            assertContained("iVarA", iVarA.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+
-+            Assert.assertNotNull(iVarB);
-+            Assert.assertEquals(37, iVarB.getValue().getValue());
-+            assertContained("iVarB", iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+            
-+            Assert.assertNotNull(iVarC);
-+            Assert.assertEquals(33, iVarC.getValue().getValue());
-+            Assert.assertSame("iVarC", AssignmentState.DEFAULT, iVarC.getState());
-+
-+        } catch (ValueDoesNotMatchTypeException e) {
-+            e.printStackTrace();
-+        } catch (CSTSemanticException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+    
-+    /**
-+     * Tests the results of reasoning after changing value for adaptation.
-+     */
-+    @Test
-+    public void testSimpleResultAfterReasoningForAdaptation() {
-+        try {
-+            createSimpleProject();
-+            
-+            Value newValA = ValueFactory.createValue(declA.getType(), 101);
-+            Value newValC = ValueFactory.createValue(declC.getType(), 33);
-+            try {
-+                config.getDecision(declA).setValue(newValA, AssignmentState.USER_ASSIGNED);
-+                config.getDecision(declC).setValue(newValC, AssignmentState.USER_ASSIGNED);
-+            } catch (ConfigurationException e) {
-+                e.printStackTrace();
-+            }
-+            performReasoning(project, config, rConfig);
-+
-+            IDecisionVariable iVarA = config.getDecision(declA);
-+            IDecisionVariable iVarB = config.getDecision(declB);
-+            IDecisionVariable iVarC = config.getDecision(declC);
-+            
-+            // Test correct assignments
-+            Assert.assertNotNull(iVarA);
-+            Assert.assertEquals(101, iVarA.getValue().getValue());
-+            Assert.assertSame("iVarA", AssignmentState.USER_ASSIGNED, iVarA.getState());
-+            
-+            Assert.assertNotNull(iVarB);
-+            Assert.assertEquals(37, iVarB.getValue().getValue());
-+            assertContained("iVarB", iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+            
-+            Assert.assertNotNull(iVarC);
-+            Assert.assertEquals(33, iVarC.getValue().getValue());
-+            Assert.assertSame("iVarC", AssignmentState.USER_ASSIGNED, iVarC.getState());
-+            
-+        } catch (ValueDoesNotMatchTypeException e) {
-+            e.printStackTrace();
-+        } catch (CSTSemanticException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+    
-+    /**
-+     * Tests the results of initial reasoning.
-+     */
-+    @Test
-+    public void testCompoundResultAfterReasoning() {
-+        try {
-+            createCompoundProject();
-+            
-+            IDecisionVariable iMyParam = config.getDecision(myParam);
-+            IDecisionVariable iVarA = iMyParam.getNestedElement(0);
-+            IDecisionVariable iVarB = iMyParam.getNestedElement(1);
-+            IDecisionVariable iVarC = iMyParam.getNestedElement(2);
-+            
-+            // Test correct assignments
-+            Assert.assertNotNull(iMyParam);
-+            Assert.assertSame("iMyParam", AssignmentState.ASSIGNED, iMyParam.getState());
-+            
-+            Assert.assertNotNull(iVarA);
-+            //Assert.assertEquals(31, iVarA.getValue().getValue());
-+            //assertContained(iVarA.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+            
-+            Assert.assertNotNull(iVarB);
-+            //Assert.assertEquals(37, iVarB.getValue().getValue());
-+            //assertContained(iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+            
-+            Assert.assertNotNull(iVarC);
-+            //Assert.assertEquals(33, iVarC.getValue().getValue());
-+            //Assert.assertSame("iVarC", AssignmentState.DEFAULT, iVarC.getState());
-+            
-+        } catch (ValueDoesNotMatchTypeException e) {
-+            e.printStackTrace();
-+        } catch (CSTSemanticException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+    
-+    /**
-+     * Tests the results of initial reasoning.
-+     */
-+    @Test
-+    public void testCompoundResultAfterReasoningForAdaptation() {
-+        try {
-+            createCompoundProject();
-+            Value newValA = ValueFactory.createValue(declA.getType(), 101);
-+            Value newValC = ValueFactory.createValue(declC.getType(), 33);
-+            try {
-+                config.getDecision(myParam).getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
-+                config.getDecision(myParam).getNestedElement(2).setValue(newValC, AssignmentState.USER_ASSIGNED);
-+            } catch (ConfigurationException e) {
-+                e.printStackTrace();
-+            }
-+            performReasoning(project, config, rConfig);
-+            
-+            IDecisionVariable iMyParam = config.getDecision(myParam);
-+            IDecisionVariable iVarA = iMyParam.getNestedElement(0);
-+            IDecisionVariable iVarB = iMyParam.getNestedElement(1);
-+            IDecisionVariable iVarC = iMyParam.getNestedElement(2);
-+            
-+            // Test correct assignments
-+            Assert.assertNotNull(iMyParam);
-+            Assert.assertSame("iMyParam", AssignmentState.ASSIGNED, iMyParam.getState());
-+            
-+            Assert.assertNotNull(iVarA);
-+            Assert.assertEquals(101, iVarA.getValue().getValue());
-+            Assert.assertSame("iVarA", AssignmentState.USER_ASSIGNED, iVarA.getState());
-+            
-+            Assert.assertNotNull(iVarB);
-+            //Assert.assertEquals(37, iVarB.getValue().getValue());
-+            //assertContained(iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+            
-+            Assert.assertNotNull(iVarC);
-+            Assert.assertEquals(33, iVarC.getValue().getValue());
-+            Assert.assertSame("iVarC", AssignmentState.USER_ASSIGNED, iVarC.getState());
-+            
-+        } catch (ValueDoesNotMatchTypeException e) {
-+            e.printStackTrace();
-+        } catch (CSTSemanticException e) {
-+            e.printStackTrace();
-+        }
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationScenarioTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationScenarioTests.java
-new file mode 100644
-index 0000000..795b538
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/AdaptationScenarioTests.java
-@@ -0,0 +1,325 @@
-+package net.ssehub.easy.reasoning.core.adaptation;
-+
-+import org.eclipse.xtext.util.Arrays;
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.confModel.IAssignmentState;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.model.ModelQueryException;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.datatypes.IntegerType;
-+import net.ssehub.easy.varModel.model.values.Value;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+
-+/**
-+ * Collection constraints tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class AdaptationScenarioTests extends AbstractTest {
-+    
-+    private Project project;
-+    private Configuration config;
-+    private ReasonerConfiguration rConfig;   
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected AdaptationScenarioTests(ITestDescriptor descriptor) {
-+        super(descriptor, "adaptationScenarios");
-+    }
-+    
-+    /**
-+     * Helper method to prepare configuration from a project.
-+     * @param path The name of the ivml file to load (including the file extension) inside of the
-+     *     <tt>reasonerModel</tt> folder.
-+     */
-+    private void prepareConfiguration(String path) {
-+        project = loadProject(path);
-+        config = new Configuration(project, true);        
-+        rConfig = new ReasonerConfiguration();
-+    }
-+
-+    /**
-+     * Helper method to run reasoning.
-+     * 
-+     * @return the reasoning result
-+     */
-+    private ReasoningResult runReasoning() {
-+        return performReasoning(project, config, rConfig);
-+    }
-+
-+    /**
-+     * Asserts that a given variable has the expected value (and state).
-+     * @param variable The variable to test (maybe a nested variable, but not <tt>null</tt>).
-+     * @param expectedValue The expected value of the variable (must not be <tt>null</tt>).
-+     * @param explanation A error message if the Junit test case breaks
-+     * @param expectedStates Should be one of {@link AssignmentState#ASSIGNED} (if it was initialized by the
-+     *     configuration, {@link AssignmentState#USER_ASSIGNED} if it was manually overwritten by the user
-+     *     (inside the test case), or {@link AssignmentState#DERIVED} if the reasoner should overwrite a value during
-+     *     reasoning
-+     */
-+    private void assertVariable(IDecisionVariable variable, Object expectedValue, String explanation, 
-+         IAssignmentState... expectedStates) {
-+        
-+        Assert.assertNotNull("Tested variable was NULL, but was not expected to be.", variable);
-+        String name = variable.getDeclaration().getName();
-+        if (expectedValue != null) {
-+            Assert.assertNotNull(name + " " + explanation + " has NULL value, but was not expected.",
-+                    variable.getValue());        
-+            Assert.assertEquals(name + " " + explanation, expectedValue, variable.getValue().getValue());            
-+        } else {
-+            Assert.assertEquals(name + " " + explanation, expectedValue, variable.getValue()); 
-+        }
-+        Assert.assertTrue(name + " " + explanation, Arrays.contains(expectedStates, variable.getState()));
-+    }
-+        
-+    /**
-+     * Initial AssignmentResolver. 1st Reasoning. Simple variable value modification by user. 2nd Reasoning.
-+     * After variable modification it should not be changed by the reasoner.
-+     * Uses VariableAccessor.
-+     */
-+    @Test
-+    public void simpleVariableTest() {        
-+        prepareConfiguration("simpleVariable.ivml");
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("a")) {
-+                assertVariable(variable, 1, "a after 1 reasoning", AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+                try {
-+                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
-+                    variable.setValue(newValA, AssignmentState.USER_ASSIGNED);
-+                } catch (ValueDoesNotMatchTypeException e) {                    
-+                    e.printStackTrace();
-+                } catch (ConfigurationException e) {
-+                    e.printStackTrace();
-+                }
-+                assertVariable(variable, 10, "a after new value", AssignmentState.USER_ASSIGNED);
-+            }
-+            if (variable.getDeclaration().getName().equals("b")) {
-+                assertVariable(variable, null, "b after 1 reasoning", AssignmentState.UNDEFINED);
-+            }
-+        }
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("a")) {
-+                assertVariable(variable, 10, "a after 2 reasoning", AssignmentState.USER_ASSIGNED);
-+            }
-+            //if (variable.getDeclaration().getName().equals("b")) {
-+                //assertVariable(variable, 20, "b after 2 reasoning", AssignmentState.DERIVED);
-+            //}
-+        }
-+        
-+    }
-+    
-+    /**
-+     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
-+     * After variable modification it should not be changed by the reasoner.
-+     * Uses VariableAccessor (assigns value to cmp as Variable). - FAILS!
-+     */
-+    @Test
-+    public void compoundVariableTest() {        
-+        prepareConfiguration("compoundVariable.ivml");
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("cmp")) {
-+                assertVariable(variable.getNestedElement(0), 1, "cmp.a after 1 reasoning", 
-+                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+                assertVariable(variable.getNestedElement(1), 2, "cmp.b after 1 reasoning", 
-+                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+                try {
-+                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
-+                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
-+                } catch (ValueDoesNotMatchTypeException e) {                    
-+                    e.printStackTrace();
-+                } catch (ConfigurationException e) {
-+                    e.printStackTrace();
-+                }
-+                assertVariable(variable.getNestedElement(0), 10, "cmp.a after new value", 
-+                    AssignmentState.USER_ASSIGNED);
-+                assertVariable(variable.getNestedElement(1), 2, "cmp.b after new value", 
-+                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+            }
-+
-+        }
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("cmp")) {
-+                assertVariable(variable.getNestedElement(0), 10, "cmp.a after 2 reasoning", 
-+                    AssignmentState.USER_ASSIGNED);
-+                //assertVariable(variable.getNestedElement(1), 2, "cmp.b after 2 reasoning", AssignmentState.DERIVED);
-+            }
-+        }
-+        
-+    }
-+    
-+    /**
-+     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
-+     * After variable modification it should not be changed by the reasoner.
-+     * Uses CompoundSlotAccessor.
-+     */
-+    @Test
-+    public void compoundConstraintsTest() {        
-+        prepareConfiguration("compoundConstraints.ivml");
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("cmp")) {
-+                //assertVariable(variable.getNestedElement(0), 1, "cmp.a after 1 reasoning", 
-+                //    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+                assertVariable(variable.getNestedElement(1), null, "cmp.b after 1 reasoning", 
-+                    AssignmentState.UNDEFINED);
-+                try {
-+                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
-+                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
-+                } catch (ValueDoesNotMatchTypeException e) {                    
-+                    e.printStackTrace();
-+                } catch (ConfigurationException e) {
-+                    e.printStackTrace();
-+                }
-+                assertVariable(variable.getNestedElement(0), 10, "cmp.a after new value", 
-+                    AssignmentState.USER_ASSIGNED);
-+                assertVariable(variable.getNestedElement(1), null, "cmp.b after new value", 
-+                    AssignmentState.UNDEFINED);
-+            }
-+            
-+        }
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("cmp")) {
-+                assertVariable(variable.getNestedElement(0), 10, "cmp.a after 2 reasoning", 
-+                         AssignmentState.USER_ASSIGNED);
-+                //assertVariable(variable.getNestedElement(1), 20, "cmp.b after 2 reasoning", 
-+                //         AssignmentState.DERIVED);
-+            }
-+        }
-+        
-+    }
-+    
-+    /**
-+     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
-+     * After variable modification it should not be changed by the reasoner.
-+     * Uses VariableAccessor.
-+     */
-+    @Test
-+    public void collectionOfSimpleVariablesTest() {        
-+        prepareConfiguration("collectionOfSimpleVariables.ivml");
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("seqA")) {
-+                assertVariable(variable.getNestedElement(0), 1, "seqA[0] after 1 reasoning", 
-+                     AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+                assertVariable(variable.getNestedElement(1), 2, "seqA[1] after 1 reasoning", 
-+                     AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+                try {
-+                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
-+                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
-+                } catch (ValueDoesNotMatchTypeException e) {                    
-+                    e.printStackTrace();
-+                } catch (ConfigurationException e) {
-+                    e.printStackTrace();
-+                }
-+                assertVariable(variable.getNestedElement(0), 10, "after user defined value for seqA[0]", 
-+                    AssignmentState.USER_ASSIGNED);
-+                assertVariable(variable.getNestedElement(1), 2, "after user defined value for seqA[0]", 
-+                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+            }            
-+        }
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("seqA")) {
-+                assertVariable(variable.getNestedElement(0), 10, "seqA[0] after 2 reasoning", 
-+                    AssignmentState.USER_ASSIGNED);
-+                //assertVariable(variable.getNestedElement(1), 2, "seqA[1] after 2 reasoning", 
-+                //    AssignmentState.DERIVED);             
-+            }
-+        }        
-+    }
-+
-+    
-+    /**
-+     * Initial AssignmentResolver. 1st Reasoning. Compound variables value modification by user. 2nd Reasoning.
-+     * After variable modification it should not be changed by the reasoner.
-+     * Uses VariableAccessor.
-+     */
-+    @Test
-+    public void collectionOfIntegersTest() {        
-+        prepareConfiguration("collectionOfIntegers.ivml");
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("seqA")) {
-+                assertVariable(variable.getNestedElement(0), 1, "seqA[0] after 1 reasoning", 
-+                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+                assertVariable(variable.getNestedElement(1), 2, "seqA[1] after 1 reasoning", 
-+                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);   
-+                Assert.assertEquals("seqA[0] after 1 reasoning", 1, variable.getNestedElement(0).getValue().getValue());
-+                assertContained("seqA[0] after 1 reasoning", variable.getState(), 
-+                     AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+                try {
-+                    Value newValA = ValueFactory.createValue(IntegerType.TYPE, 10);
-+                    variable.getNestedElement(0).setValue(newValA, AssignmentState.USER_ASSIGNED);
-+                } catch (ValueDoesNotMatchTypeException e) {                    
-+                    e.printStackTrace();
-+                } catch (ConfigurationException e) {
-+                    e.printStackTrace();
-+                }
-+                assertVariable(variable.getNestedElement(0), 10, "seqA[0] after new value", 
-+                    AssignmentState.USER_ASSIGNED);
-+                assertVariable(variable.getNestedElement(1), 2, "seqA[1] after new value", 
-+                    AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+            }
-+        }
-+        runReasoning();
-+        for (IDecisionVariable variable : config) {
-+            if (variable.getDeclaration().getName().equals("seqA")) {
-+                assertVariable(variable.getNestedElement(0), 10, "seqA[0] after 2 reasoning", 
-+                    AssignmentState.USER_ASSIGNED);
-+                //assertVariable(variable.getNestedElement(1), 2, "seqA[1] after 2 reasoning", 
-+                //    AssignmentState.DERIVED); 
-+            }
-+        }
-+    }
-+
-+    /**
-+     * Performs a simple test in runtime reasoning mode.
-+     * 
-+     * @throws ModelQueryException shall not occur
-+     * @throws ValueDoesNotMatchTypeException shall not occur
-+     * @throws ConfigurationException shall not occur
-+     */
-+    @Test
-+    public void runtimeReasoningTest() throws ModelQueryException, ValueDoesNotMatchTypeException, 
-+        ConfigurationException {
-+        prepareConfiguration("runtimeReasoning.ivml");
-+        runReasoning();
-+        
-+        rConfig.setRuntimeMode(true);
-+        rConfig.setAdditionalInformationLogger(ReasonerConfiguration.ADDITIONAL_INFO_LOG_SYSOUT);
-+    }
-+
-+    /**
-+     * Performs a simple test in runtime reasoning mode.
-+     * 
-+     * @throws ModelQueryException shall not occur
-+     * @throws ValueDoesNotMatchTypeException shall not occur
-+     * @throws ConfigurationException shall not occur
-+     */
-+    @Test
-+    public void runtimeReasoningConstraintSetTest() throws ModelQueryException, ValueDoesNotMatchTypeException, 
-+        ConfigurationException {
-+        prepareConfiguration("runtimeReasoningConstraintSet.ivml");
-+        runReasoning();
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/package-info.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/package-info.java
-new file mode 100644
-index 0000000..949da54
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/adaptation/package-info.java
-@@ -0,0 +1,6 @@
-+/**
-+ * Reasoning tests for adaptation.
-+ * @author sizonenko
-+ *
-+ */
-+package net.ssehub.easy.reasoning.core.adaptation;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/AttributeTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/AttributeTests.java
-new file mode 100644
-index 0000000..b8a755f
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/AttributeTests.java
-@@ -0,0 +1,118 @@
-+package net.ssehub.easy.reasoning.core.capabilities;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Attribute tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class AttributeTests extends AbstractTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected AttributeTests(ITestDescriptor descriptor) {
-+        super(descriptor, "attributes");
-+    }
-+    
-+    /**
-+     * Assign attribute with a default value to the project test.
-+     */
-+    @Test    
-+    public void defaultAssign() {
-+        reasoningTest("DefaultAssign.ivml", 0);
-+    }
-+    
-+    /**
-+     * Assign attribute with a default value to the project test.
-+     */
-+    @Test    
-+    public void blockAssign() {
-+        reasoningTest("BlockAssign.ivml", 0);
-+    }
-+    
-+    /**
-+     * Assign attribute with a default value to the project test.
-+     */
-+    @Test    
-+    public void individualAssign() {
-+        reasoningTest("IndividualAssign.ivml", 0);
-+    }
-+
-+    /**
-+     * Assign attribute with a default value to the project test.
-+     */
-+    @Test    
-+    public void blockAssignNested() {
-+        reasoningTest("BlockAssignNested.ivml", 0);
-+    }
-+    
-+    /**
-+     * Assign attribute with a default value to the project test.
-+     */
-+    @Test    
-+    public void blockAssignNestedNested() {
-+        reasoningTest("BlockAssignNestedNested.ivml", 0);
-+    }
-+    
-+    /**
-+     * Assign attribute with a default value to the project test. Test includes a 
-+     * constraint in the attribute assignment.
-+     */
-+    @Test    
-+    public void blockAssignNestedConstraint() {
-+        reasoningTest("BlockAssignNestedConstraint.ivml", 0);
-+    }
-+
-+    /**
-+     * Assign attribute with cross-references and self within a compound. Test includes a 
-+     * constraint in the attribute assignment.
-+     */
-+    @Test    
-+    public void compoundIndividualAssign() {
-+        reasoningTest("CompoundIndividualAssign.ivml", 0);
-+    }
-+
-+    /**
-+     * Assign attribute with a default value to the project test. Test includes a 
-+     * failing constraint in the attribute assignment.
-+     */
-+    @Test    
-+    public void blockAssignNestedConstraintFail() {
-+        reasoningTest("BlockAssignNestedConstraintFail.ivml", 1);
-+    }
-+    
-+    /**
-+     * Assign attribute with a default value to the project test.
-+     */
-+    @Test    
-+    public void individualAssignNested() {
-+        reasoningTest("IndividualAssignNested.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Assign attribute with a default value to the project test.
-+     */
-+    @Test    
-+    public void nestedAssignBlockTree() {
-+        // initial: just the triple nested shall be a reassignment
-+        // recognize potential multiple assignments and ignore them
-+        reasoningTest("NestedAssignBlockTree.ivml", 2); 
-+    }    
-+
-+    /**
-+     * Constraint annotations.
-+     */
-+    @Test    
-+    public void constraintAnnotationTest() {
-+        reasoningTest("ConstraintAnnotationTest.ivml", 8);
-+    }    
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/CollectionConstraintsTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/CollectionConstraintsTests.java
-new file mode 100644
-index 0000000..9150960
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/CollectionConstraintsTests.java
-@@ -0,0 +1,203 @@
-+package net.ssehub.easy.reasoning.core.capabilities;
-+
-+import org.junit.Test;
-+
-+import org.junit.Assert;
-+import org.junit.Ignore;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.model.AbstractVariable;
-+import net.ssehub.easy.varModel.model.ModelQuery;
-+import net.ssehub.easy.varModel.model.ModelQueryException;
-+import net.ssehub.easy.varModel.model.values.ContainerValue;
-+import net.ssehub.easy.varModel.model.values.Value;
-+
-+/**
-+ * Collection constraints tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class CollectionConstraintsTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected CollectionConstraintsTests(ITestDescriptor descriptor) {
-+        super(descriptor, "collectionConstraints");
-+    }
-+
-+    /**
-+     * Tests constraints in set.
-+     */
-+    @Test
-+    public void constraintSetDefaultTest() {
-+        reasoningTest("constraintSetDefault.ivml", 1);
-+    }
-+
-+    /**
-+     * Tests constraints in set of set.
-+     */
-+    @Test
-+    public void constraintSetSetDefaultTest() {
-+        reasoningTest("constraintSetSetDefault.ivml", 0);
-+    }
-+
-+    /**
-+     * Tests containers with derived types on compounds and constraints.
-+     */
-+    @Test
-+    public void constraintSetDerivedCompoundTest() {
-+        reasoningTest("constraintSetDerivedCompound.ivml", 0);
-+    }
-+
-+    /**
-+     * Tests containers of containers with derived types on compounds and constraints.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void constraintSetSetDerivedCompoundTest() {
-+        reasoningTest("constraintSetSetDerivedCompound.ivml", 2);
-+    }
-+    
-+    /**
-+     * Tests constraints in set.
-+     */
-+    @Test
-+    public void constraintSetAssignedTest() {
-+        reasoningTest("constraintSetAssigned.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests constraints in set.
-+     */
-+    @Test
-+    public void constraintSetDefaultInCompoundTest() {
-+        reasoningTest("constraintSetDefaultInCompound.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests constraints in set.
-+     */
-+    @Test
-+    public void constraintSetInCompoundDefaultTest() {
-+        reasoningTest("constraintSetInCompoundDefault.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests constraints in set.
-+     */
-+    @Test
-+    public void constraintSetInCompoundAssignedTest() {
-+        reasoningTest("constraintSetInCompoundAssigned.ivml", 1);
-+    }
-+  
-+    /**
-+     * Tests constraints in set.
-+     */
-+    @Test
-+    public void constraintSetInNestedCompoundDefaultTest() {
-+        reasoningTest("constraintSetInNestedCompoundDefault.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests constraints in set.
-+     */
-+    @Test
-+    public void qmTest() {
-+        reasoningTest("QM.ivml", 1);
-+    }
-+
-+    /**
-+     * Tests constraints in set.
-+     */
-+    @Test
-+    public void setDerivedSetTest() {
-+        reasoningTest("setDerivedSet.ivml", 1);
-+    }
-+
-+    /**
-+     * Collection annotation test.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void containerAnnotationTest() {
-+        reasoningTest("ContainerAnnotationTest.ivml", 10);
-+    } 
-+
-+    /**
-+     * Tests for derived and referenced collections.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void referenceDerivedCollectionTest() {
-+        reasoningTest("ReferenceDerivedCollectionTest.ivml", 5);
-+    }
-+    
-+    /**
-+     * String collections test (#72).
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void stringCollection1Test() {
-+        reasoningTest("StringTest1.ivml", 1);
-+    }
-+
-+    /**
-+     * String collections test (#72).
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void stringCollection2Test() {
-+        reasoningTest("StringTest2.ivml", 0);
-+    }
-+
-+    /**
-+     * String collections test (#72).
-+     * 
-+     * @throws ModelQueryException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void stringCollection3Test() throws ModelQueryException {
-+        Configuration cfg = reasoningTest("StringTest3.ivml", 0);
-+
-+        AbstractVariable orgVarsDecl = ModelQuery.findVariable(cfg.getProject(), "orgVars", null);
-+        Assert.assertNotNull(orgVarsDecl);
-+        IDecisionVariable orgVars = cfg.getDecision(orgVarsDecl);
-+        Assert.assertNotNull(orgVars);
-+        assertContained(orgVars.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+        Value val = orgVars.getValue();
-+        Assert.assertTrue(val instanceof ContainerValue);
-+        ContainerValue cVal = (ContainerValue) val;
-+        Assert.assertTrue(cVal.getElementSize() > 0);
-+    }
-+
-+    /**
-+     * String collections test (#74).
-+     * 
-+     * @throws ModelQueryException shall not occur
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void stringCollection4Test() throws ModelQueryException {
-+        Configuration cfg = reasoningTest("StringTest4.ivml", 0);
-+
-+        AbstractVariable orgVarsDecl = ModelQuery.findVariable(cfg.getProject(), "set2", null);
-+        Assert.assertNotNull(orgVarsDecl);
-+        IDecisionVariable orgVars = cfg.getDecision(orgVarsDecl);
-+        Assert.assertNotNull(orgVars);
-+        assertContained(orgVars.getState(), AssignmentState.DEFAULT);
-+        Value val = orgVars.getValue();
-+        Assert.assertTrue(val instanceof ContainerValue);
-+        ContainerValue cVal = (ContainerValue) val;
-+        Assert.assertTrue(cVal.getElementSize() > 0);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/ConstraintVariableTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/ConstraintVariableTests.java
-new file mode 100644
-index 0000000..e180669
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/ConstraintVariableTests.java
-@@ -0,0 +1,232 @@
-+package net.ssehub.easy.reasoning.core.capabilities;
-+
-+import java.io.IOException;
-+
-+import org.junit.Ignore;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.varModel.model.Project;
-+
-+/**
-+ * Collection constraints tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class ConstraintVariableTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected ConstraintVariableTests(ITestDescriptor descriptor) {
-+        super(descriptor, "constraintVariables");
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void setOfConstraintsInCompoundWithDefaultValue() {
-+        reasoningTest("setOfConstraintsInCompoundWithDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void setOfConstraintsInCompoundWithNoDefaultValue() {
-+        reasoningTest("setOfConstraintsInCompoundWithNoDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void setOfConstraintsInCompoundWithEmptyDefaultValue() {
-+        reasoningTest("setOfConstraintsInCompoundWithEmptyDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void setOfConstraintsWithDefaultValue() {
-+        reasoningTest("setOfConstraintsWithDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void setOfConstraintsWithNoDefaultValue() {
-+        reasoningTest("setOfConstraintsWithNoDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void setOfConstraintsWithEmptyDefaultValue() {
-+        reasoningTest("setOfConstraintsWithEmptyDefaultValue.ivml", 0);
-+    }
-+    
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void constraintDefaultTest() {
-+        reasoningTest("constraintDefault.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void constraintAssignedTest() {
-+        reasoningTest("constraintAssigned.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void constraintInCompoundDefaultTest() {
-+        reasoningTest("constraintInCompoundDefault.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void constraintsInCompoundWithNoDefaultValue() {
-+        reasoningTest("constraintsInCompoundWithNoDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void constraintInCompoundAssignedTest() {
-+        reasoningTest("constraintInCompoundAssigned.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests false constraint.
-+     */
-+    @Test
-+    public void falseTest() {
-+        reasoningTest("falseTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests boolean variable with value false.
-+     */
-+    @Test
-+    public void booleanAssignedFalse() {
-+        reasoningTest("booleanAssignedFalse.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests boolean variable with value false.
-+     */
-+    @Test
-+    public void booleanDefaultFalse() {
-+        reasoningTest("booleanDefaultFalse.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests boolean variable with value false.
-+     */
-+    @Test
-+    public void booleanAssignedFalseInCompound() {
-+        reasoningTest("booleanAssignedFalseInCompound.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests boolean variable with value false.
-+     */
-+    @Test
-+    public void booleanDefaultFalseInCompound() {
-+        reasoningTest("booleanDefaultFalseInCompound.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests boolean variable with value false.
-+     */
-+    @Test
-+    public void setOfBooleanInCompoundWithDefaultValue() {
-+        reasoningTest("setOfBooleanInCompoundWithDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests boolean variable with value false.
-+     */
-+    @Test
-+    public void setOfBooleanInCompoundWithNoDefaultValue() {
-+        reasoningTest("setOfBooleanInCompoundWithNoDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests boolean variable with value false.
-+     */
-+    @Test
-+    public void setOfBooleanWithDefaultValue() {
-+        reasoningTest("setOfBooleanWithDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests boolean variable with value false.
-+     */
-+    @Test
-+    public void setOfBooleanWithNoDefaultValue() {
-+        reasoningTest("setOfBooleanWithNoDefaultValue.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests constraint variable order influence (QM project case).
-+     */
-+    @Test
-+    public void compoundConstraintVarOrder() {
-+        reasoningTest("QM_constraintOrder.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests derived constraint variables.
-+     */
-+    @Test
-+    public void constraintsDerivedTest() {
-+        reasoningTest("constraintsDerived.ivml", 2);
-+    }
-+
-+    /**
-+     * Tests changing constraint variables.
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Ignore("not implemented")
-+    @Test
-+    public void changingConstraintsTest() throws IOException {
-+        // basis shall be failing with four tests
-+        reasoningTest("changingConstraints/changingConstraintsBase.ivml", 8);
-+        // importing model changes constraints, shall not fail then 
-+        Project prj = loadCompleteProject("changingConstraints", "changingConstraints");
-+        resultHandler(0, 0, prj);
-+    }
-+    
-+    /**
-+     * Test for refined constraint variable slots (#68).
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void refinedConstraintsTest() throws IOException {
-+        Project prj = loadCompleteProject("refinedConstraints", "refinedConstraints");
-+        resultHandler(1, 0, prj);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/FailedDecisionsTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/FailedDecisionsTests.java
-new file mode 100644
-index 0000000..9a2b113
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/FailedDecisionsTests.java
-@@ -0,0 +1,49 @@
-+package net.ssehub.easy.reasoning.core.capabilities;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Incremental reasoning tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class FailedDecisionsTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected FailedDecisionsTests(ITestDescriptor descriptor) {
-+        super(descriptor, "failedDecisions");
-+    }
-+    
-+    /**
-+     * Tests default assignments ignore.
-+     */
-+    @Test
-+    public void basicConstraintTest() {
-+        reasoningTest("basicConstraintTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests validation constraint filter.
-+     */
-+    @Test
-+    public void basicAssignmentTest() {
-+        reasoningTest("basicAssignmentTest.ivml", 2);
-+    }
-+    
-+    /**
-+     * Tests partial freeze.
-+     */
-+    @Test
-+    public void basicCompoundConstraintTest() {
-+        reasoningTest("basicCompoundConstraintTest.ivml", 1);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/RuntimeReasoningTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/RuntimeReasoningTests.java
-new file mode 100644
-index 0000000..1435d93
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/RuntimeReasoningTests.java
-@@ -0,0 +1,55 @@
-+package net.ssehub.easy.reasoning.core.capabilities;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+
-+/**
-+ * Incremental reasoning tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class RuntimeReasoningTests extends AbstractTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected RuntimeReasoningTests(ITestDescriptor descriptor) {
-+        super(descriptor, "incrementalReasoningConstraints");
-+    }
-+
-+    @Override
-+    protected void configureReasoner(ReasonerConfiguration rConfig) {
-+        rConfig.setRuntimeMode(true);
-+    }
-+    
-+    /**
-+     * Tests default assignments ignore.
-+     */
-+    @Test
-+    public void ignoreDefaultAssignmentsTest() {
-+        reasoningTest("IgnoreDefaultAssignments.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests validation constraint filter.
-+     */
-+    @Test
-+    public void validationConstraintFilterTest() {
-+        reasoningTest("ValidationConstraintFilter.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests partial freeze.
-+     */
-+    @Test
-+    public void partialFreezeTest() {
-+        reasoningTest("PartialFreeze.ivml", 0);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/package-info.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/package-info.java
-new file mode 100644
-index 0000000..a82f77d
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/capabilities/package-info.java
-@@ -0,0 +1,6 @@
-+/**
-+ * Tests attributes.
-+ * @author Sizonenko
-+ *
-+ */
-+package net.ssehub.easy.reasoning.core.capabilities;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/CollectionOperationsTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/CollectionOperationsTests.java
-index d47f298..8f453a4 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/CollectionOperationsTests.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/CollectionOperationsTests.java
-@@ -17,8 +17,10 @@
- 
- import java.io.IOException;
- 
--import org.junit.Ignore;
- import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
- 
- /**
-  * Tests collection operations like <tt>collect</tt> or <tt>forall</tt>.
-@@ -26,21 +28,16 @@
-  * 
-  * @author El-Sharkawy
-  */
--public abstract class CollectionOperationsTests extends AbstractReasonerFrontendTest {
-+public class CollectionOperationsTests extends AbstractTest {
- 
-     /**
--     * Performs a test directly located in the operations test directory [convenience].
-+     * Creating a test instance.
-      * 
--     * @param localFile the name of the file directly located in the test directory
--     * @param isValid whether the model shall be valid (or not) to pass
--     * 
--     * @throws IOException in case of problems reading a model
-+     * @param descriptor the test descriptor
-      */
--    private void performOpCheck(String localFile, boolean isValid) throws IOException {
--        performCheck("collectionOperations/" + localFile, isValid);
-+    protected CollectionOperationsTests(ITestDescriptor descriptor) {
-+        super(descriptor, "collectionOperations");
-     }
--    
--    // collect
-     
-     /**
-      * Tests whether the reasoner is able to handle fulfilled
-@@ -51,7 +48,7 @@
-      */
-     @Test
-     public void testCompoundCollectionConstraintValid() throws IOException {
--        performOpCheck("CompoundCollectionConstraintTest_Valid.ivml", true);
-+        reasoningTest("CompoundCollectionConstraintTest_Valid.ivml", 0);
-     }
-     
-     /**
-@@ -63,6 +60,7 @@
-      */
-     @Test
-     public void testCompoundCollectionConstraintInvalid() throws IOException {
--        performOpCheck("CompoundCollectionConstraintTest_Invalid.ivml", false);
-+        reasoningTest("CompoundCollectionConstraintTest_Invalid.ivml", 1);
-     }
-+
- }
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/MismatchedTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/MismatchedTest.java
-index b261d98..4d7122b 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/MismatchedTest.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/MismatchedTest.java
-@@ -19,23 +19,23 @@
- 
- import org.junit.Test;
- 
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
- /**
-  * Test of reasoner capabilities related to the structure of variability models.
-+ * 
-  * @author El-Sharkawy
-- *
-  */
--public abstract class MismatchedTest extends AbstractReasonerFrontendTest {
-+public class MismatchedTest extends AbstractTest {
-     
-     /**
--     * Performs a test directly located in the structure test directory [convenience].
-+     * Creating a test instance.
-      * 
--     * @param projectName the name of the file directly located in the test directory
--     * @param isValid whether the model shall be valid (or not) to pass
--     * 
--     * @throws IOException in case of problems reading a model
-+     * @param descriptor the test descriptor
-      */
--    private void performStructureCheck(String projectName, boolean isValid) throws IOException {
--        performCheck("mismatchExample/", projectName, isValid);
-+    protected MismatchedTest(ITestDescriptor descriptor) {
-+        super(descriptor, "mismatchExample");
-     }
-     
-     /**
-@@ -44,8 +44,7 @@
-      */
-     @Test
-     public void testMismatchTestFail() throws IOException {
--        performStructureCheck("MismatchTest", false);
-+        resultHandler(2, 0, loadCompleteProject("MismatchTest"));
-     }
--    
- 
- }
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OldTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OldTests.java
-index 6629fa0..9ec318e 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OldTests.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OldTests.java
-@@ -4,6 +4,8 @@
- 
- import org.junit.Test;
- 
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
- import net.ssehub.easy.varModel.confModel.Configuration;
- import net.ssehub.easy.varModel.confModel.ConfigurationException;
- import net.ssehub.easy.varModel.model.IvmlException;
-@@ -15,7 +17,16 @@
-  * 
-  * @author Phani
-  */
--public abstract class OldTests extends AbstractReasonerFrontendTest {
-+public abstract class OldTests extends AbstractTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected OldTests(ITestDescriptor descriptor) {
-+        super(descriptor, ".");
-+    }
- 
-     /**
-      * Unknown.
-@@ -31,12 +42,12 @@
- 
-         Project p = loadProject("testBasisDatatype.ivml");
-         Configuration config = new Configuration(p);
--        configureValue(p, config, 0, "1");
--        configureValue(p, config, 1, "2.0");
--        configureValue(p, config, 2, "true");
--        configureValue(p, config, 3, "A string");
-+        configureValue(config, "intA", "1");
-+        configureValue(config, "realA", "2.0");
-+        configureValue(config, "boolA", "true");
-+        configureValue(config, "stringA", "A string");
- 
--        performCheck(p, config, true);
-+        assertPropagation(0, 0, config);
-     }
- 
-     /**
-@@ -53,12 +64,12 @@
- 
-         Project p = loadProject("testBasisDatatype.ivml");
-         Configuration config = new Configuration(p);
--        configureValue(p, config, 0, "1");
--        configureValue(p, config, 1, "2.0");
--        configureValue(p, config, 2, "false");
--        configureValue(p, config, 3, "A string");
-+        configureValue(config, "intA", "1");
-+        configureValue(config, "realA", "2.0");
-+        configureValue(config, "boolA", "false");
-+        configureValue(config, "stringA", "A string");
- 
--        performCheck(p, config, false);
-+        assertPropagation(1, 0, config); // count may be wrong
-     }
- 
-     /**
-@@ -75,19 +86,13 @@
- 
-         Project p = loadProject("testComplexDatatype.ivml");
- 
--        // Position of needed variables in ivml file
--        int posA1 = 2;
--        int posA2 = posA1 + 1;
--        int posB1 = posA2 + 1;
--        int posB2 = posB1 + 1;
--
-         Configuration config = new Configuration(p);
--        configureValue(p, config, posA1, "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringA1");
--        configureValue(p, config, posA2, "intA", "2", "realA", "2.0", "boolA", "false", "stringA", "aStringA2");
--        configureValue(p, config, posB1, "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringB1");
--        configureValue(p, config, posB2, "intA", "2", "realA", "2.8", "boolA", "false", "stringA", "aStringB2");
-+        configureValue(config, "a1", "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringA1");
-+        configureValue(config, "a2", "intA", "2", "realA", "2.0", "boolA", "false", "stringA", "aStringA2");
-+        configureValue(config, "b1", "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringB1");
-+        configureValue(config, "b2", "intA", "2", "realA", "2.8", "boolA", "false", "stringA", "aStringB2");
- 
--        performCheck(p, config, true);
-+        assertPropagation(0, 0, config);
-     }
- 
-     /**
-@@ -104,12 +109,12 @@
- 
-         Project p = loadProject("testComplexDatatype.ivml");
-         Configuration config = new Configuration(p);
--        configureValue(p, config, 2, "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringA1");
--        configureValue(p, config, 3, "intA", "2", "realA", "2.0", "boolA", "true", "stringA", "aStringA2");
--        configureValue(p, config, 4, "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringB1");
--        configureValue(p, config, 5, "intA", "2", "realA", "2.0", "boolA", "true", "stringA", "aStringB2");
-+        configureValue(config, "a1", "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringA1");
-+        configureValue(config, "a2", "intA", "2", "realA", "2.0", "boolA", "true", "stringA", "aStringA2");
-+        configureValue(config, "b1", "intA", "1", "realA", "1.0", "boolA", "true", "stringA", "aStringB1");
-+        configureValue(config, "b2", "intA", "2", "realA", "2.0", "boolA", "true", "stringA", "aStringB2");
- 
--        performCheck(p, config, false);
-+        assertPropagation(1, 0, config); // count may be wrong
-     }
- 
-     /**
-@@ -127,7 +132,7 @@
-         Project p = loadProject("testEnum.ivml");
-         Configuration config = new Configuration(p);
- 
--        performCheck(p, config, true);
-+        assertPropagation(0, 0, config);
-     }
- 
-     /**
-@@ -145,7 +150,7 @@
-         Project p = loadProject("testGeneral.ivml");
-         Configuration config = new Configuration(p);
- 
--        performCheck(p, config, true);
-+        assertPropagation(0, 0, config);
-     }
- 
-     /**
-@@ -163,7 +168,7 @@
-         Project p = loadProject("testInfrastructure.ivml");
-         Configuration config = new Configuration(p);
- 
--        performCheck(p, config, true);
-+        assertPropagation(0, 0, config);
-     }
- 
-     /**
-@@ -181,7 +186,7 @@
-         Project p = loadProject("testInfra.ivml");
-         Configuration config = new Configuration(p);
- 
--        performCheck(p, config, true);
-+        assertPropagation(0, 0, config);
-     }
- 
- }
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OperationTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OperationTests.java
-index 80a6d5c..12d7f6d 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OperationTests.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/OperationTests.java
-@@ -4,26 +4,27 @@
- 
- import org.junit.Test;
- 
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
- /**
-  * Tests individual operations.
-  * 
-  * @author Holger Eichelberger
-  */
--public abstract class OperationTests extends AbstractReasonerFrontendTest {
-+public abstract class OperationTests extends AbstractTest {
- 
-     /**
--     * Performs a test directly located in the operations test directory [convenience].
-+     * Creating a test instance.
-      * 
--     * @param localFile the name of the file directly located in the test directory
--     * @param isValid whether the model shall be valid (or not) to pass
--     * 
--     * @throws IOException in case of problems reading a model
-+     * @param descriptor the test descriptor
-      */
--    private void performOpCheck(String localFile, boolean isValid) throws IOException {
--        performCheck("operations/" + localFile, isValid);
-+    protected OperationTests(ITestDescriptor descriptor) {
-+        super(descriptor, "operations");
-     }
-     
-- // ---------------------------------- Integer constants ----------------------------------
-+    // ---------------------------------- Integer constants ----------------------------------
-+    
-     /**
-      * Tests integer equality and unequality operations on constants.
-      * 
-@@ -31,7 +32,7 @@
-      */
-     @Test
-     public void testIntegerConstants() throws IOException {
--        performOpCheck("integerEqConstants.ivml", true);
-+        reasoningTest("integerEqConstants", 0);
-     }
-     
-     /**
-@@ -41,7 +42,7 @@
-      */    
-     @Test
-     public void testIntegerAddConstants() throws IOException {
--        performOpCheck("integerAddConstants.ivml", true);
-+        reasoningTest("integerAddConstants", 0);
-     }
- 
-     /**
-@@ -51,7 +52,7 @@
-      */    
-     @Test
-     public void testIntegerSubConstants() throws IOException {
--        performOpCheck("integerSubConstants.ivml", true);
-+        reasoningTest("integerSubConstants", 0);
-     }
- 
-     /**
-@@ -61,7 +62,7 @@
-      */   
-     @Test
-     public void testIntegerMulConstants() throws IOException {
--        performOpCheck("integerMulConstants.ivml", true);
-+        reasoningTest("integerMulConstants", 0);
-     }
-     
-     /**
-@@ -71,7 +72,7 @@
-      */
-     @Test
-     public void testIntegerMulConstantsFail() throws IOException {
--        performOpCheck("integerMulConstantsFail.ivml", false);
-+        reasoningTest("integerMulConstantsFail", 3);
-     }
-     
-     /**
-@@ -81,7 +82,7 @@
-      */
-     @Test    
-     public void testIntegerDivConstants() throws IOException {
--        performOpCheck("integerDivConstants.ivml", true);
-+        reasoningTest("integerDivConstants", 0);
-     }
-     
-     /**
-@@ -91,7 +92,7 @@
-      */  
-     @Test // Must fail div by 0
-     public void testIntegerDivConstantsFail() throws IOException {
--        performOpCheck("integerDivConstantsFail.ivml", true); // -> undefined
-+        reasoningTest("integerDivConstantsFail", 0); // -> undefined
-     }
-     
-     /**
-@@ -101,7 +102,7 @@
-      */    
-     @Test
-     public void testIntegerABSConstants() throws IOException {
--        performOpCheck("integerABSConstants.ivml", true);
-+        reasoningTest("integerABSConstants", 0);
-     }
-     
-     /**
-@@ -111,7 +112,7 @@
-      */
-     @Test 
-     public void testIntegerDIVopConstants() throws IOException {
--        performOpCheck("integerDIVopConstants.ivml", true);
-+        reasoningTest("integerDIVopConstants", 0);
-     }
-     
-     /**
-@@ -121,7 +122,7 @@
-      */
-     @Test 
-     public void testIntegerMODopConstants() throws IOException {
--        performOpCheck("integerMODopConstants.ivml", true);
-+        reasoningTest("integerMODopConstants", 0);
-     }
-     
-     /**
-@@ -131,7 +132,7 @@
-      */
-     @Test 
-     public void testIntegerMAXConstants() throws IOException {
--        performOpCheck("integerMAXConstants.ivml", true);
-+        reasoningTest("integerMAXConstants", 0);
-     }
-     
-     /**
-@@ -141,7 +142,7 @@
-      */
-     @Test
-     public void testIntegerMINConstants() throws IOException {
--        performOpCheck("integerMINConstants.ivml", true);
-+        reasoningTest("integerMINConstants", 0);
-     }
-     
-     /**
-@@ -151,7 +152,7 @@
-      */
-     @Test
-     public void testIntegerGreaterThanConstants() throws IOException {
--        performOpCheck("integerGreaterThanConstants.ivml", true);
-+        reasoningTest("integerGreaterThanConstants", 0);
-     }
-     
-     /**
-@@ -161,7 +162,7 @@
-      */
-     @Test
-     public void testIntegerLessThanConstants() throws IOException {
--        performOpCheck("integerLessThanConstants.ivml", true);
-+        reasoningTest("integerLessThanConstants", 0);
-     }
-     
-     /**
-@@ -171,7 +172,7 @@
-      */
-     @Test
-     public void testIntegerLessThanOrEqualsConstants() throws IOException {
--        performOpCheck("integerLessThanOrEqualsConstants.ivml", true);
-+        reasoningTest("integerLessThanOrEqualsConstants", 0);
-     }
-     
-     /**
-@@ -181,7 +182,7 @@
-      */
-     @Test
-     public void testIntegerGreaterThanOrEqualsConstants() throws IOException {
--        performOpCheck("integerGreaterThanOrEqualsConstants.ivml", true);
-+        reasoningTest("integerGreaterThanOrEqualsConstants", 0);
-     }
- 
-     // ---------------------------------- Integer variables ----------------------------------
-@@ -193,7 +194,7 @@
-      */
-     @Test
-     public void testIntegerEqVariables() throws IOException {
--        performOpCheck("integerEqVariables.ivml", true);
-+        reasoningTest("integerEqVariables", 0);
-     }
- 
-     /**
-@@ -203,7 +204,7 @@
-      */
-     @Test 
-     public void testIntegerEqVariablesFail() throws IOException {
--        performOpCheck("integerEqVariablesFail.ivml", false);
-+        reasoningTest("integerEqVariablesFail", 9);
-     }
- 
-     /**
-@@ -213,7 +214,7 @@
-      */
-     @Test
-     public void testIntegerAddVariables() throws IOException {
--        performOpCheck("integerAddVariables.ivml", true);
-+        reasoningTest("integerAddVariables", 0);
-     }
- 
-     /**
-@@ -223,7 +224,7 @@
-      */
-     @Test 
-     public void testIntegerSubVariables() throws IOException {
--        performOpCheck("integerSubVariables.ivml", true);
-+        reasoningTest("integerSubVariables", 0);
-     }
- 
-     /**
-@@ -233,7 +234,7 @@
-      */
-     @Test
-     public void testIntegerMulVariables() throws IOException {
--        performOpCheck("integerMulVariables.ivml", true);
-+        reasoningTest("integerMulVariables", 0);
-     }
- 
-     /**
-@@ -243,7 +244,7 @@
-      */
-     @Test
-     public void testIntegerDivVariables() throws IOException {
--        performOpCheck("integerDivVariables.ivml", true);
-+        reasoningTest("integerDivVariables", 0);
-     }
-     
-     /**
-@@ -253,7 +254,7 @@
-      */
-     @Test
-     public void testIntegerDivVariablesFails() throws IOException {
--        performOpCheck("integerDivVariablesFail.ivml", true); // -> undefined
-+        reasoningTest("integerDivVariablesFail", 0); // -> undefined
-     }
-     
-     /**
-@@ -263,7 +264,7 @@
-      */
-     @Test
-     public void testIntegerABSVariables() throws IOException {
--        performOpCheck("integerABSVariables.ivml", true);
-+        reasoningTest("integerABSVariables", 0);
-     }
-     
-     /**
-@@ -273,7 +274,7 @@
-      */
-     @Test 
-     public void testIntegerDIVopVariables() throws IOException {
--        performOpCheck("integerDIVopVariables.ivml", true);
-+        reasoningTest("integerDIVopVariables", 0);
-     }
-     
-     /**
-@@ -283,7 +284,7 @@
-      */
-     @Test 
-     public void testIntegerMODopVariables() throws IOException {
--        performOpCheck("integerMODopVariables.ivml", true);
-+        reasoningTest("integerMODopVariables", 0);
-     }
-     
-     /**
-@@ -293,7 +294,7 @@
-      */
-     @Test 
-     public void testIntegerMAXVariables() throws IOException {
--        performOpCheck("integerMAXVariables.ivml", true);
-+        reasoningTest("integerMAXVariables", 0);
-     }
-     
-     /**
-@@ -303,7 +304,7 @@
-      */
-     @Test 
-     public void testIntegerMINVariables() throws IOException {
--        performOpCheck("integerMINVariables.ivml", true);
-+        reasoningTest("integerMINVariables", 0);
-     }
- 
-     /**
-@@ -313,7 +314,7 @@
-      */    
-     @Test 
-     public void testIntegerGreaterThanVariables() throws IOException {
--        performOpCheck("integerGreaterThanVariables.ivml", true);
-+        reasoningTest("integerGreaterThanVariables", 0);
-     }
-     
-     /**
-@@ -323,7 +324,7 @@
-      */    
-     @Test 
-     public void testIntegerLessThanVariables() throws IOException {
--        performOpCheck("integerLessThanVariables.ivml", true);
-+        reasoningTest("integerLessThanVariables", 0);
-     }
-     
-     /**
-@@ -333,7 +334,7 @@
-      */    
-     @Test 
-     public void testIntegerLessThanOrEqualsVariables() throws IOException {
--        performOpCheck("integerLessThanOrEqualsVariables.ivml", true);
-+        reasoningTest("integerLessThanOrEqualsVariables", 0);
-     }
-     
-     /**
-@@ -343,7 +344,7 @@
-      */    
-     @Test 
-     public void testIntegerGreaterThanOrEqualsVariables() throws IOException {
--        performOpCheck("integerGreaterThanOrEqualsVariables.ivml", true);
-+        reasoningTest("integerGreaterThanOrEqualsVariables", 0);
-     }
-     
-     // ---------------------------------- Real constants ----------------------------------
-@@ -354,7 +355,7 @@
-      */
-     @Test
-     public void testRealAddConstants() throws IOException {
--        performOpCheck("realAddConstants.ivml", true);
-+        reasoningTest("realAddConstants", 0);
-     }
-     
-     /**
-@@ -364,7 +365,7 @@
-      */
-     @Test
-     public void testRealDivConstants() throws IOException {
--        performOpCheck("realDivConstants.ivml", true);
-+        reasoningTest("realDivConstants", 0);
-     }
-     
-     /**
-@@ -374,7 +375,7 @@
-      */
-     @Test
-     public void testRealMulConstants() throws IOException {
--        performOpCheck("realMulConstants.ivml", true);
-+        reasoningTest("realMulConstants", 0);
-     }
-     
-     /**
-@@ -384,7 +385,7 @@
-      */
-     @Test
-     public void testRealSubConstants() throws IOException {
--        performOpCheck("realSubConstants.ivml", true);
-+        reasoningTest("realSubConstants", 0);
-     }
-     
-     /**
-@@ -394,7 +395,7 @@
-      */
-     @Test
-     public void testRealABSConstants() throws IOException {
--        performOpCheck("realABSConstants.ivml", true);
-+        reasoningTest("realABSConstants", 0);
-     }
-     
-     /**
-@@ -404,7 +405,7 @@
-      */
-     @Test
-     public void testRealFLOORConstants() throws IOException {
--        performOpCheck("realFLOORConstants.ivml", true);
-+        reasoningTest("realFLOORConstants", 0);
-     }
-     
-     /**
-@@ -414,7 +415,7 @@
-      */
-     @Test
-     public void testRealROUNDConstants() throws IOException {
--        performOpCheck("realROUNDConstants.ivml", true);
-+        reasoningTest("realROUNDConstants", 0);
-     }
-     
-     /**
-@@ -424,7 +425,7 @@
-      */    
-     @Test
-     public void testRealMAXConstants() throws IOException {
--        performOpCheck("realMAXConstants.ivml", true);
-+        reasoningTest("realMAXConstants", 0);
-     }
-     
-     /**
-@@ -434,7 +435,7 @@
-      */
-     @Test
-     public void testRealMINConstants() throws IOException {
--        performOpCheck("realMINConstants.ivml", true);
-+        reasoningTest("realMINConstants", 0);
-     }
-     
-     /**
-@@ -444,7 +445,7 @@
-      */
-     @Test
-     public void testRealEqConstants() throws IOException {
--        performOpCheck("realEqConstants.ivml", true);
-+        reasoningTest("realEqConstants", 0);
-     }
-     
-     /**
-@@ -454,7 +455,7 @@
-      */
-     @Test
-     public void testRealGreaterThanConstants() throws IOException {
--        performOpCheck("realGreaterThanConstants.ivml", true);
-+        reasoningTest("realGreaterThanConstants", 0);
-     }    
-     
-     /**
-@@ -464,7 +465,7 @@
-      */
-     @Test
-     public void testRealGreaterThanOrEqualsConstants() throws IOException {
--        performOpCheck("realGreaterThanOrEqualsConstants.ivml", true);
-+        reasoningTest("realGreaterThanOrEqualsConstants", 0);
-     } 
-     
-     /**
-@@ -474,7 +475,7 @@
-      */
-     @Test
-     public void testRealLessThanConstants() throws IOException {
--        performOpCheck("realLessThanConstants.ivml", true);
-+        reasoningTest("realLessThanConstants", 0);
-     } 
-     
-     /**
-@@ -484,10 +485,11 @@
-      */
-     @Test
-     public void testRealLessThanOrEqualsConstants() throws IOException {
--        performOpCheck("realLessThanOrEqualsConstants.ivml", true);
-+        reasoningTest("realLessThanOrEqualsConstants", 0);
-     } 
-    
-- // ---------------------------------- Real variables ----------------------------------
-+    // ---------------------------------- Real variables ----------------------------------
-+    
-     /**
-      * Tests real + operand on simple variables.
-      * 
-@@ -495,7 +497,7 @@
-      */
-     @Test
-     public void testRealAddVariables() throws IOException {
--        performOpCheck("realAddVariables.ivml", true);
-+        reasoningTest("realAddVariables", 0);
-     }
-     
-     /**
-@@ -505,7 +507,7 @@
-      */
-     @Test
-     public void testRealDivVariables() throws IOException {
--        performOpCheck("realDivVariables.ivml", true);
-+        reasoningTest("realDivVariables", 0);
-     }
-     
-     /**
-@@ -515,7 +517,7 @@
-      */
-     @Test
-     public void testRealMulVariables() throws IOException {
--        performOpCheck("realMulVariables.ivml", true);
-+        reasoningTest("realMulVariables", 0);
-     }
-     
-     /**
-@@ -525,7 +527,7 @@
-      */
-     @Test
-     public void testRealSubVariables() throws IOException {
--        performOpCheck("realSubVariables.ivml", true);
-+        reasoningTest("realSubVariables", 0);
-     }
-     
-     /**
-@@ -535,7 +537,7 @@
-      */
-     @Test
-     public void testRealABSVariables() throws IOException {
--        performOpCheck("realABSVariables.ivml", true);
-+        reasoningTest("realABSVariables", 0);
-     }
-     
-     /**
-@@ -545,7 +547,7 @@
-      */
-     @Test
-     public void testRealFLOORVariables() throws IOException {
--        performOpCheck("realFLOORVariables.ivml", true);
-+        reasoningTest("realFLOORVariables", 0);
-     }
-     
-     /**
-@@ -555,7 +557,7 @@
-      */
-     @Test
-     public void testRealROUNDVariables() throws IOException {
--        performOpCheck("realROUNDVariables.ivml", true);
-+        reasoningTest("realROUNDVariables", 0);
-     }
-     
-     /**
-@@ -565,7 +567,7 @@
-      */
-     @Test
-     public void testRealMAXVariables() throws IOException {
--        performOpCheck("realMAXVariables.ivml", true);
-+        reasoningTest("realMAXVariables", 0);
-     }
-     
-     /**
-@@ -575,7 +577,7 @@
-      */
-     @Test
-     public void testRealMINVariables() throws IOException {
--        performOpCheck("realMINVariables.ivml", true);
-+        reasoningTest("realMINVariables", 0);
-     }
-     
-     /**
-@@ -585,7 +587,7 @@
-      */
-     @Test
-     public void testRealEqVariables() throws IOException {
--        performOpCheck("realEqVariables.ivml", true);
-+        reasoningTest("realEqVariables", 0);
-     }
-     
-     /**
-@@ -595,7 +597,7 @@
-      */
-     @Test
-     public void testRealGreaterThanVariables() throws IOException {
--        performOpCheck("realGreaterThanVariables.ivml", true);
-+        reasoningTest("realGreaterThanVariables", 0);
-     }
-     
-     /**
-@@ -605,7 +607,7 @@
-      */
-     @Test
-     public void testRealGreaterThanOrEqualsVariables() throws IOException {
--        performOpCheck("realGreaterThanOrEqualsVariables.ivml", true);
-+        reasoningTest("realGreaterThanOrEqualsVariables", 0);
-     }
-     
-     /**
-@@ -615,7 +617,7 @@
-      */
-     @Test
-     public void testRealLessThenVariables() throws IOException {
--        performOpCheck("realLessThanVariables.ivml", true);
-+        reasoningTest("realLessThanVariables", 0);
-     }
-     
-     /**
-@@ -625,10 +627,11 @@
-      */
-     @Test
-     public void testRealLessThenOrEqualsVariables() throws IOException {
--        performOpCheck("realLessThanOrEqualsVariables.ivml", true);
-+        reasoningTest("realLessThanOrEqualsVariables", 0);
-     }
-     
-- // ---------------------------------- Mix constants ----------------------------------
-+    // ---------------------------------- Mix constants ----------------------------------
-+    
-     /**
-      * Tests mix MAX operand on simple variables.
-      * 
-@@ -636,7 +639,7 @@
-      */
-     @Test
-     public void testMixMAXVariables() throws IOException {
--        performOpCheck("mixMAXVariables.ivml", true);
-+        reasoningTest("mixMAXVariables", 0);
-     }
-     
-     /**
-@@ -646,10 +649,11 @@
-      */
-     @Test
-     public void testMixMINVariables() throws IOException {
--        performOpCheck("mixMINVariables.ivml", true);
-+        reasoningTest("mixMINVariables", 0);
-     }
-     
-- // ---------------------------------- Boolean constants ----------------------------------
-+    // ---------------------------------- Boolean constants ----------------------------------
-+    
-     /**
-      * Tests boolean OR operand on constants.
-      * 
-@@ -657,7 +661,7 @@
-      */    
-     @Test
-     public void testBooleanORConstants() throws IOException {
--        performOpCheck("booleanORConstants.ivml", true);
-+        reasoningTest("booleanORConstants", 0);
-     }
-     
-     /**
-@@ -667,7 +671,7 @@
-      */
-     @Test
-     public void testBooleanANDConstants() throws IOException {
--        performOpCheck("booleanANDConstants.ivml", true);
-+        reasoningTest("booleanANDConstants", 0);
-     }
-     
-     /**
-@@ -677,7 +681,7 @@
-      */    
-     @Test
-     public void testBooleanXORConstants() throws IOException {
--        performOpCheck("booleanXORConstants.ivml", true);
-+        reasoningTest("booleanXORConstants", 0);
-     }
-     
-     /**
-@@ -687,10 +691,11 @@
-      */    
-     @Test
-     public void testBooleanNOTConstants() throws IOException {
--        performOpCheck("booleanNOTConstants.ivml", true);
-+        reasoningTest("booleanNOTConstants", 0);
-     } 
-     
-- // ---------------------------------- Boolean variables ----------------------------------
-+    // ---------------------------------- Boolean variables ----------------------------------
-+    
-     /**
-      * Tests boolean OR operand on simple variables.
-      * 
-@@ -698,7 +703,7 @@
-      */
-     @Test
-     public void testBooleanORVariables() throws IOException {
--        performOpCheck("booleanORVariables.ivml", true);
-+        reasoningTest("booleanORVariables", 0);
-     }
-     
-     /**
-@@ -708,7 +713,7 @@
-      */
-     @Test
-     public void testBooleanANDVariables() throws IOException {
--        performOpCheck("booleanANDVariables.ivml", true);
-+        reasoningTest("booleanANDVariables", 0);
-     }
-     
-     /**
-@@ -718,7 +723,7 @@
-      */
-     @Test
-     public void testBooleanXORVariables() throws IOException {
--        performOpCheck("booleanXORVariables.ivml", true);
-+        reasoningTest("booleanXORVariables", 0);
-     }
-     
-     /**
-@@ -728,7 +733,7 @@
-      */
-     @Test
-     public void testBooleanNOTVariables() throws IOException {
--        performOpCheck("booleanNOTVariables.ivml", true);
-+        reasoningTest("booleanNOTVariables", 0);
-     }
-     
-     /**
-@@ -738,7 +743,7 @@
-      */
-     @Test
-     public void testBooleanImpliesVariables() throws IOException {
--        performOpCheck("booleanImpliesVariables.ivml", true);
-+        reasoningTest("booleanImpliesVariables", 0);
-     }
-     
-     /**
-@@ -748,7 +753,7 @@
-      */
-     @Test
-     public void testBooleanIFFVariables() throws IOException {
--        performOpCheck("booleanIFFVariables.ivml", true);
-+        reasoningTest("booleanIFFVariables", 0);
-     }
-     
-     /**
-@@ -758,8 +763,9 @@
-      */
-     @Test
-     public void testBooleanEvaluateValueAssignVariables() throws IOException {
--        performOpCheck("booleanEvaluateValueAssignVariables.ivml", true);
-+        reasoningTest("booleanEvaluateValueAssignVariables", 0);
-     }
-+    
-     // ----------------------------------- String -----------------------
-     
-     /**
-@@ -769,7 +775,7 @@
-      */
-     @Test
-     public void testStringOperationsIsValid() throws IOException {
--        performOpCheck("string.ivml", true);
-+        reasoningTest("string", 0);
-     }
-     
- // ----------------------------------- Complicated Types -----------------------
-@@ -781,10 +787,10 @@
-      */
-     @Test
-     public void testSequenceOperationsIsValid() throws IOException {
--        performOpCheck("sequence.ivml", true);
-+        reasoningTest("sequence", 0);
-     }
- 
-- // ----------------------------------- Typedefs -----------------------
-+    // ----------------------------------- Typedefs -----------------------
-     
-     /**
-      * Tests simple typedef operations (valid).
-@@ -793,7 +799,7 @@
-      */
-     @Test
-     public void testTypedefValid() throws IOException {
--        performOpCheck("typedef.ivml", true);
-+        reasoningTest("typedef", 0);
-     }
-     
-     /**
-@@ -803,7 +809,7 @@
-      */
-     @Test
-     public void testTypedefOfTypedefValid() throws IOException {
--        performOpCheck("typedefOfTypedefValid.ivml", true);
-+        reasoningTest("typedefOfTypedefValid", 0);
-     }
-     
-     /**
-@@ -813,7 +819,7 @@
-      */
-     @Test
-     public void testTypedefOfTypedefInvalid() throws IOException {
--        performOpCheck("typedefOfTypedefInvalid.ivml", false);
-+        reasoningTest("typedefOfTypedefInvalid", 1);
-     }
-     
-     /**
-@@ -823,7 +829,7 @@
-      */
-     @Test
-     public void testTypedefNestedInCompoundValid() throws IOException {
--        performOpCheck("typedefNestedInCompoundValid.ivml", true);
-+        reasoningTest("typedefNestedInCompoundValid", 0);
-     }
-     
-     /**
-@@ -833,9 +839,49 @@
-      */
-     @Test
-     public void testTypedefNestedInCompoundInvalid() throws IOException {
--        performOpCheck("typedefNestedInCompoundInvalid.ivml", false);
-+        reasoningTest("typedefNestedInCompoundInvalid", 1);
-+    }
-+
-+    /**
-+     * Tests typedef of compound nested/applied inside a sequence (valid).
-+     * 
-+     * @throws IOException in case of problems reading a model
-+     */
-+    @Test
-+    public void testTypedefCompoundNestedInSequenceValid1() throws IOException {
-+        reasoningTest("typedefCompoundNestedInSequenceValid1", 0);
-     }
-     
-+    /**
-+     * Tests typedef of compound nested/applied inside a compound (invalid).
-+     * 
-+     * @throws IOException in case of problems reading a model
-+     */
-+    @Test
-+    public void testTypedefCompoundNestedInSequenceInvalid1() throws IOException {
-+        reasoningTest("typedefCompoundNestedInSequenceInvalid1", 1);
-+    }
-+    
-+    /**
-+     * Tests typedef of compound nested/applied inside a sequence (valid).
-+     * 
-+     * @throws IOException in case of problems reading a model
-+     */
-+    @Test
-+    public void testTypedefCompoundNestedInSequenceValid2() throws IOException {
-+        reasoningTest("typedefCompoundNestedInSequenceValid2", 0);
-+    }
-+    
-+    /**
-+     * Tests typedef of compound nested/applied inside a compound (invalid).
-+     * 
-+     * @throws IOException in case of problems reading a model
-+     */
-+    @Test
-+    public void testTypedefCompoundNestedInSequenceInvalid2() throws IOException {
-+        reasoningTest("typedefCompoundNestedInSequenceInvalid2", 0);
-+    }
-+
-     /**
-      * Tests typedef nested inside a set (valid).
-      * 
-@@ -843,7 +889,7 @@
-      */
-     @Test
-     public void testTypedefNestedInSetValid() throws IOException {
--        performOpCheck("typedefNestedInSetValid.ivml", true);
-+        reasoningTest("typedefNestedInSetValid", 0);
-     }
-     
-     /**
-@@ -853,7 +899,7 @@
-      */
-     @Test
-     public void testTypedefNestedInSetInvalid() throws IOException {
--        performOpCheck("typedefNestedInSetInvalid.ivml", false);
-+        reasoningTest("typedefNestedInSetInvalid", 1);
-     }
-     
-     /**
-@@ -863,7 +909,7 @@
-      */
-     @Test
-     public void testTypedefNestedInSequenceValid() throws IOException {
--        performOpCheck("typedefNestedInSequenceValid.ivml", true);
-+        reasoningTest("typedefNestedInSequenceValid", 0);
-     }
-     
-     /**
-@@ -873,7 +919,7 @@
-      */
-     @Test
-     public void testTypedefNestedInSequenceInvalid() throws IOException {
--        performOpCheck("typedefNestedInSequenceInvalid.ivml", false);
-+        reasoningTest("typedefNestedInSequenceInvalid", 1);
-     }
-     
-     /**
-@@ -883,10 +929,10 @@
-      */
-     @Test
-     public void testAliasesInContainerValid() throws IOException {
--        performOpCheck("AliasUsedInSet.ivml", true);
-+        reasoningTest("AliasUsedInSet", 0);
-     }
-     
--// ----------------------------------- Value validation -----------------------
-+    // ----------------------------------- Value validation -----------------------
-     
-     /**
-      * Tests value validation.
-@@ -898,7 +944,7 @@
-      */
-     @Test
-     public void testValueValidation1IsValid() throws IOException {
--        performOpCheck("valueValidation1.ivml", true);
-+        reasoningTest("valueValidation1", 0);
-     }
-     
-     /**
-@@ -911,7 +957,7 @@
-      */
-     @Test
-     public void testValueValidation2IsValid() throws IOException {
--        performOpCheck("valueValidation2.ivml", true);
-+        reasoningTest("valueValidation2", 0);
-     }
-     
-     /**
-@@ -924,7 +970,7 @@
-      */
-     @Test
-     public void testValueValidation3IsValid() throws IOException {
--        performOpCheck("valueValidation3.ivml", true);
-+        reasoningTest("valueValidation3", 0);
-     }
-     
-     /**
-@@ -937,7 +983,7 @@
-      */
-     @Test
-     public void testValueValidation4IsValid() throws IOException {
--        performOpCheck("valueValidation4.ivml", true);
-+        reasoningTest("valueValidation4", 0);
-     }
-     
-     /**
-@@ -950,7 +996,7 @@
-      */
-     @Test
-     public void testValueValidation5IsValid() throws IOException {
--        performOpCheck("valueValidation5.ivml", true);
-+        reasoningTest("valueValidation5", 0);
-     }
-     
-     /**
-@@ -963,7 +1009,7 @@
-      */
-     @Test
-     public void testValueValidation6IsValid() throws IOException {
--        performOpCheck("valueValidation6.ivml", true);
-+        reasoningTest("valueValidation6", 0);
-     }
-     
-     /**
-@@ -976,7 +1022,7 @@
-      */ 
-     @Test
-     public void testValueValidation7IsValid() throws IOException {
--        performOpCheck("valueValidation7.ivml", true);
-+        reasoningTest("valueValidation7", 0);
-     }
-     
-     /**
-@@ -989,7 +1035,7 @@
-      */ 
-     @Test
-     public void testValueValidation8IsValid() throws IOException {
--        performOpCheck("valueValidation8.ivml", true);
-+        reasoningTest("valueValidation8", 0);
-     }
-     
-     /**
-@@ -1001,7 +1047,7 @@
-      */ 
-     @Test
-     public void testValueValidation9IsValid() throws IOException {
--        performOpCheck("valueValidation9.ivml", true);
-+        reasoningTest("valueValidation9", 0);
-     }
-     
-     /**
-@@ -1014,7 +1060,7 @@
-      */ 
-     @Test
-     public void testValueValidation10IsValid() throws IOException {
--        performOpCheck("valueValidation10.ivml", true);
-+        reasoningTest("valueValidation10", 0);
-     }
-     
-     /**
-@@ -1026,7 +1072,7 @@
-      */
-     @Test
-     public void testValueValidation11IsValid() throws IOException {
--        performOpCheck("valueValidation11.ivml", true);
-+        reasoningTest("valueValidation11", 0);
-     }
-     
-     /**
-@@ -1038,7 +1084,7 @@
-      */ 
-     @Test
-     public void testValueValidation12IsValid() throws IOException {
--        performOpCheck("valueValidation12.ivml", true);
-+        reasoningTest("valueValidation12", 0);
-     }
-     
-     /**
-@@ -1050,7 +1096,7 @@
-      */
-     @Test
-     public void testValueValidation13IsValid() throws IOException {
--        performOpCheck("valueValidation13.ivml", true);
-+        reasoningTest("valueValidation13", 0);
-     }
-     
-     /**
-@@ -1062,7 +1108,7 @@
-      */  
-     @Test
-     public void testValueValidation14IsValid() throws IOException {
--        performOpCheck("valueValidation14.ivml", true);
-+        reasoningTest("valueValidation14", 0);
-     }
-     
-     /**
-@@ -1074,7 +1120,7 @@
-      */     
-     @Test
-     public void testValueValidation15IsValid() throws IOException {
--        performOpCheck("valueValidation15.ivml", true);
-+        reasoningTest("valueValidation15", 0);
-     }
-     
-     /**
-@@ -1086,7 +1132,7 @@
-      */     
-     @Test
-     public void testValueValidation16IsValid() throws IOException {
--        performOpCheck("valueValidation16.ivml", true);
-+        reasoningTest("valueValidation16", 0);
-     }
-     
-     /**
-@@ -1098,7 +1144,7 @@
-      */     
-     @Test
-     public void testValueValidation17IsValid() throws IOException {
--        performOpCheck("valueValidation17.ivml", true);
-+        reasoningTest("valueValidation17", 0);
-     }
-     
-     /**
-@@ -1110,7 +1156,7 @@
-      */     
-     @Test
-     public void testValueValidation18IsValid() throws IOException {
--        performOpCheck("valueValidation18.ivml", true);
-+        reasoningTest("valueValidation18", 0);
-     }
-     
-     /**
-@@ -1122,7 +1168,7 @@
-      */     
-     @Test
-     public void testValueValidation19IsValid() throws IOException {
--        performOpCheck("valueValidation19.ivml", true);
-+        reasoningTest("valueValidation19", 0);
-     }
-     
-     /**
-@@ -1134,7 +1180,7 @@
-      */     
-     @Test
-     public void testValueValidation20IsValid() throws IOException {
--        performOpCheck("valueValidation20.ivml", true);
-+        reasoningTest("valueValidation20", 0);
-     }
-     
-     /**
-@@ -1146,7 +1192,7 @@
-      */     
-     @Test
-     public void testValueValidation21IsValid() throws IOException {
--        performOpCheck("valueValidation21.ivml", true);
-+        reasoningTest("valueValidation21", 0);
-     }
-     
-     /**
-@@ -1158,10 +1204,10 @@
-      */     
-     @Test
-     public void testValueValidation22IsValid() throws IOException {
--        performOpCheck("valueValidation22.ivml", true);
-+        reasoningTest("valueValidation22", 0);
-     }
-     
--// ----------------------------------- Annotations -----------------------
-+    // ----------------------------------- Annotations -----------------------
-     
-     /**
-      * Tests whether different slots of a compound can be assigned to different annotations.
-@@ -1169,10 +1215,11 @@
-      */
-     @Test
-     public void testAnnotationsToDifferenCompoundSlotsValid() throws IOException {
--        performOpCheck("annotationAssignedToDifferentCompoundSlotsValid.ivml", true);
-+        reasoningTest("annotationAssignedToDifferentCompoundSlotsValid", 0);
-     }
- 
-     // --------------------------User defined operations -----------------------
-+
-     /**
-      * Tests whether operations can be selected through dynamic dispatch in a complex refinement hierarchy.
-      * Reasoner should detect an error.
-@@ -1180,7 +1227,7 @@
-      */
-     @Test
-     public void testDynamicDispatchIsInvalid() throws IOException {
--        performOpCheck("DynamicDispatchIsInvalid.ivml", false);
-+        reasoningTest("DynamicDispatchIsInvalid", 1);
-     }
-     
-     /**
-@@ -1190,7 +1237,7 @@
-      */
-     @Test
-     public void testDynamicDispatchIsValid() throws IOException {
--        performOpCheck("DynamicDispatchIsValid.ivml", true);
-+        reasoningTest("DynamicDispatchIsValid", 0);
-     }
-     
- }
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/StructureTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/StructureTests.java
-index 410c5f0..2930fdf 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/StructureTests.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/frontend/StructureTests.java
-@@ -19,24 +19,24 @@
- 
- import org.junit.Test;
- 
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.varModel.model.Project;
-+
- /**
-  * Test of reasoner capabilities related to the structure of variability models.
-  * @author El-Sharkawy
-  *
-  */
--public abstract class StructureTests extends AbstractReasonerFrontendTest {
-+public class StructureTests extends AbstractTest {
-     
-     /**
--     * Performs a test directly located in the structure test directory [convenience].
-+     * Creating a test instance.
-      * 
--     * @param subFolder The subfolder inside structure, which contain all related projects of the same test.
--     * @param projectName the name of the file directly located in the test directory
--     * @param isValid whether the model shall be valid (or not) to pass
--     * 
--     * @throws IOException in case of problems reading a model
-+     * @param descriptor the test descriptor
-      */
--    private void performStructureCheck(String subFolder, String projectName, boolean isValid) throws IOException {
--        performCheck("structure/" + subFolder, projectName, isValid);
-+    protected StructureTests(ITestDescriptor descriptor) {
-+        super(descriptor, null);
-     }
-     
-     /**
-@@ -62,9 +62,11 @@
-      * For this reason, I specified a short timeout. Timeout may be shorter.
-      * @throws IOException in case of problems reading a mode
-      */
--    @Test(timeout = 1000)
-+    @Test(timeout = 4000)
-     public void testCyclingDeclarations() throws IOException {
--        performStructureCheck("CycleTest_CyclingDeclarations", "ImportCycleTest_CyclingDeclarations_A", true);
-+        Project prj = loadCompleteProject("structure/CycleTest_CyclingDeclarations", 
-+            "ImportCycleTest_CyclingDeclarations_A");
-+        resultHandler(0, 0, prj);
-     }
-     
-     /**
-@@ -74,9 +76,10 @@
-      * For this reason, I specified a short timeout. Timeout may be shorter.
-      * @throws IOException in case of problems reading a mode
-      */
--    @Test(timeout = 1000)
-+    @Test(timeout = 4000)
-     public void testNestedCycle() throws IOException {
--        performStructureCheck("CycleTest_NestedCycle", "NestedCycleTest_MainProject", true);
-+        Project prj = loadCompleteProject("structure/CycleTest_NestedCycle", "NestedCycleTest_MainProject");
-+        resultHandler(0, 0, prj);
-     }
- 
- }
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/CaseStudyStats.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/CaseStudyStats.java
-new file mode 100644
-index 0000000..0dce0eb
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/CaseStudyStats.java
-@@ -0,0 +1,89 @@
-+package net.ssehub.easy.reasoning.core.performance;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class CaseStudyStats extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected CaseStudyStats(ITestDescriptor descriptor) {
-+        super(descriptor, "performanceModels");
-+    }
-+    
-+    /**
-+     * Simple Assignments.
-+     */
-+    @Test    
-+    public void simpleAssignments() {
-+        reasoningTest("SimpleAssignments.ivml", 1, 6);       
-+    } 
-+    
-+    /**
-+     * Simple Assignments with Constraint Variables.
-+     */
-+    @Test    
-+    public void simpleAssignmentsWithConstraintVar() {
-+        reasoningTest("SimpleAssignmentsWithConstraintVars.ivml", 1, 6);       
-+    }     
-+    
-+    /**
-+     * Simple Assignments in Compound.
-+     */
-+    @Test    
-+    public void compoundSimpleAssignments() {
-+        reasoningTest("CompoundSimpleAssignments.ivml", 1, 6);       
-+    } 
-+    
-+    /**
-+     * Simple Assignments with Constraint Variables in Compound.
-+     */
-+    @Test    
-+    public void compoundSimpleAssignmentsWithConstraintVar() {
-+        reasoningTest("CompoundSimpleAssignmentsWithConstraintVars.ivml", 1, 6);       
-+    }  
-+    
-+    /**
-+     * Compound constraints in collection.
-+     */
-+    @Test    
-+    public void compoundConstraintsInCollection() {
-+        reasoningTest("CompoundConstraintsInCollection.ivml", 1, 3);       
-+    } 
-+    
-+    /**
-+     * Compound constraints with constraint variables in collection.
-+     */
-+    @Test    
-+    public void compoundConstraintsInCollectionWithConstraintVars() {
-+        reasoningTest("CompoundConstraintsInCollectionWithConstraintVars.ivml", 1, 3);       
-+    }  
-+    
-+    /**
-+     * Collection of typedef.
-+     */
-+    @Test    
-+    public void typedefCollections() {
-+        reasoningTest("TypedefCollections.ivml", 1, 5);       
-+    } 
-+    
-+    /**
-+     * Collection of typedef in compound.
-+     */
-+    @Test    
-+    public void typedefCollectionsInCompound() {
-+        reasoningTest("TypedefCollectionsInCompound.ivml", 1, 3);       
-+    }     
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/GeneratedStats.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/GeneratedStats.java
-new file mode 100644
-index 0000000..f0ace97
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/GeneratedStats.java
-@@ -0,0 +1,51 @@
-+package net.ssehub.easy.reasoning.core.performance;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class GeneratedStats extends AbstractTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected GeneratedStats(ITestDescriptor descriptor) {
-+        super(descriptor, "ssePerformance");
-+    }
-+    
-+    /**
-+     * Tests Boolean 1 to 3 ratio.
-+     */
-+    @Test    
-+    public void gr11() {
-+        reasoningTest("gr1_1_v100_c300_b_l2_0.ivml", 150);
-+        reasoningTest("gr1_1_v100_c300_b_l2_0.ivml", 150);
-+        reasoningTest("gr1_1_v300_c900_b_l2_0.ivml", 438);
-+        reasoningTest("gr1_1_v500_c1500_b_l2_0.ivml", 726);
-+        reasoningTest("gr1_1_v1000_c3000_b_l2_0.ivml", 1518);
-+        reasoningTest("gr1_1_v1500_c4500_b_l2_0.ivml", 2236);
-+    } 
-+    
-+    /**
-+     * Tests Boolean 1 to 1 ratio.
-+     */
-+    @Test    
-+    public void gr12() {
-+        reasoningTest("gr1_2_v100_c100_b_l2_0.ivml", 46);
-+        reasoningTest("gr1_2_v100_c100_b_l2_0.ivml", 46);
-+        reasoningTest("gr1_2_v300_c300_b_l2_0.ivml", 124);
-+        reasoningTest("gr1_2_v500_c500_b_l2_0.ivml", 266);
-+        reasoningTest("gr1_2_v1000_c1000_b_l2_0.ivml", 504);
-+        reasoningTest("gr1_2_v1500_c1500_b_l2_0.ivml", 739);
-+    }   
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/HistoryStats.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/HistoryStats.java
-new file mode 100644
-index 0000000..bd2fd04
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/HistoryStats.java
-@@ -0,0 +1,39 @@
-+package net.ssehub.easy.reasoning.core.performance;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class HistoryStats extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected HistoryStats(ITestDescriptor descriptor) {
-+        super(descriptor, "historyPerformance");
-+    }
-+    
-+    /**
-+     * Tests history models.
-+     */
-+    @Test    
-+    public void historyStatsTest() {
-+        reasoningTest("d2d_v10_c1_bir_l1_0.ivml", 0);    
-+//        reasoningTest("d2d_v10_c1_bir_l1_0.ivml", 0);    
-+//        reasoningTest("d2d_v100_c10_bir_l1_0.ivml", 6);    
-+//        reasoningTest("d2d_v1000_c100_bir_l1_0.ivml", 42);
-+//        reasoningTest("d2d_v10_c1_bir_l3_0.ivml", 0);    
-+//        reasoningTest("d2d_v100_c10_bir_l3_0.ivml", 6);    
-+//        reasoningTest("d2d_v1000_c100_bir_l3_0.ivml", 42);
-+    } 
-+   
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/package-info.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/package-info.java
-new file mode 100644
-index 0000000..9185bdc
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/performance/package-info.java
-@@ -0,0 +1,5 @@
-+/**
-+ * Performance tests.
-+ * @author Sizonenko
-+ */
-+package net.ssehub.easy.reasoning.core.performance;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/AbstractQualiMasterTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/AbstractQualiMasterTest.java
-new file mode 100644
-index 0000000..bd92e09
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/AbstractQualiMasterTest.java
-@@ -0,0 +1,204 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import java.io.File;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.ProjectImport;
-+
-+/**
-+ * Parent class for tests based on the QualiMaster use cases.
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ *
-+ */
-+public abstract class AbstractQualiMasterTest extends AbstractTest {
-+      
-+    protected static final File TESTDATA = determineTestDataFolder("reasonerCore.testdata.home");
-+
-+    private Project basic;
-+    private Project observables;
-+    private Project hardware;
-+    private Project hardwareCfg;
-+    private Project adaptivity;
-+    private Project adaptivityCfg;
-+    private Project observablesCfg;
-+    private Project dataManagement;
-+    private Project dataManagementCfg;
-+    private Project reconfigurableHardware;
-+    private Project reconfigurableHardwareCfg;
-+    private Project algorithms;
-+    private Project algorithmsCfg;
-+    private Project families;
-+    private Project familiesCfg;
-+    private Project pipelines;
-+    private Project priorityPipCfg;
-+    private Project pipelinesCfg;
-+    private Project infrastructure;
-+    private Project infrastructureCfg;
-+    private Project qm;
-+    
-+    private ProjectImport importBasic;
-+    private ProjectImport importObservables;
-+    private ProjectImport importHardware;
-+    private ProjectImport importHardwareCfg;
-+    private ProjectImport importAdaptivity;
-+    private ProjectImport importAdaptivityCfg;
-+    private ProjectImport importObservablesCfg;
-+    private ProjectImport importDataManagement;
-+    private ProjectImport importDataManagementCfg;
-+    private ProjectImport importReconfigurableHardware;
-+    private ProjectImport importReconfigurableHardwareCfg;
-+    private ProjectImport importAlgorithms;
-+    private ProjectImport importAlgorithmsCfg;
-+    private ProjectImport importFamilies;
-+    private ProjectImport importFamiliesCfg;
-+    private ProjectImport importPipelines;
-+    private ProjectImport importPriorityPipCfg;
-+    private ProjectImport importPipelinesCfg;
-+    private ProjectImport importInfrastructure;
-+    private ProjectImport importInfrastructureCfg;
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     * @param testPath the test path (empty or null means do not try to load models)
-+     */
-+    protected AbstractQualiMasterTest(ITestDescriptor descriptor, String testPath) {
-+        super(descriptor, testPath);
-+    }
-+    
-+    /**
-+     * Method for loading all projects.
-+     */
-+    private void loadAllProjects() {
-+        basic = loadProject("Basics.ivml");
-+        observables = loadProject("Observables.ivml");
-+        hardware = loadProject("Hardware.ivml");
-+        hardwareCfg = loadProject("HardwareCfg.ivml");
-+        adaptivity = loadProject("Adaptivity.ivml");
-+        adaptivityCfg = loadProject("AdaptivityCfg.ivml");
-+        observablesCfg = loadProject("ObservablesCfg.ivml");
-+        dataManagement = loadProject("DataManagement.ivml");
-+        dataManagementCfg = loadProject("DataManagementCfg.ivml");
-+        reconfigurableHardware = loadProject("ReconfigurableHardware.ivml");
-+        reconfigurableHardwareCfg = loadProject("ReconfigurableHardwareCfg.ivml");
-+        algorithms = loadProject("Algorithms.ivml");
-+        algorithmsCfg = loadProject("AlgorithmsCfg.ivml");
-+        families = loadProject("Families.ivml");
-+        familiesCfg = loadProject("FamiliesCfg.ivml");
-+        pipelines = loadProject("Pipelines.ivml");
-+        priorityPipCfg = loadProject("PriorityPipCfg.ivml");
-+        pipelinesCfg = loadProject("PipelinesCfg.ivml");
-+        infrastructure = loadProject("Infrastructure.ivml");
-+        infrastructureCfg = loadProject("InfrastructureCfg.ivml");
-+        qm = loadProject("QM_0.ivml");
-+    }
-+    
-+    /**
-+     * Method for creating project imports.
-+     */
-+    private void createProjectImports() {
-+        importBasic = new ProjectImport(basic.getName(), null);
-+        importObservables = new ProjectImport(basic.getName(), null);
-+        importHardware = new ProjectImport(basic.getName(), null);
-+        importHardwareCfg = new ProjectImport(basic.getName(), null);
-+        importAdaptivity = new ProjectImport(basic.getName(), null);
-+        importAdaptivityCfg = new ProjectImport(basic.getName(), null);
-+        importObservablesCfg = new ProjectImport(basic.getName(), null);
-+        importDataManagement = new ProjectImport(basic.getName(), null);
-+        importDataManagementCfg = new ProjectImport(basic.getName(), null);
-+        importReconfigurableHardware = new ProjectImport(basic.getName(), null);
-+        importReconfigurableHardwareCfg = new ProjectImport(basic.getName(), null);
-+        importAlgorithms = new ProjectImport(basic.getName(), null);
-+        importAlgorithmsCfg = new ProjectImport(basic.getName(), null);
-+        importFamilies = new ProjectImport(basic.getName(), null);
-+        importFamiliesCfg = new ProjectImport(basic.getName(), null);
-+        importPipelines = new ProjectImport(basic.getName(), null);
-+        importPriorityPipCfg = new ProjectImport(basic.getName(), null);
-+        importPipelinesCfg = new ProjectImport(basic.getName(), null);
-+        importInfrastructure = new ProjectImport(basic.getName(), null);
-+        importInfrastructureCfg = new ProjectImport(basic.getName(), null);
-+    }
-+    
-+    /**
-+     * Method to create QM model(import projects) and validate it. 
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail.
-+     */        
-+    public final void reasoningTest(int expectedFailedConstraints) {
-+        loadAllProjects();
-+        createProjectImports();
-+        observables.addImport(importBasic);
-+        hardware.addImport(importBasic);
-+        hardware.addImport(importObservables);
-+        hardwareCfg.addImport(importHardware);
-+        adaptivity.addImport(importBasic);
-+        adaptivity.addImport(importObservables);
-+        adaptivityCfg.addImport(importAdaptivity);
-+        observablesCfg.addImport(importObservables);
-+        dataManagement.addImport(importBasic);
-+        dataManagement.addImport(importObservables);
-+        dataManagementCfg.addImport(importDataManagement);
-+        reconfigurableHardware.addImport(importBasic);
-+        reconfigurableHardware.addImport(importObservables);
-+        reconfigurableHardwareCfg.addImport(importReconfigurableHardware);
-+        algorithms.addImport(importBasic);
-+        algorithms.addImport(importObservables);
-+        algorithms.addImport(importReconfigurableHardware);
-+        algorithmsCfg.addImport(importReconfigurableHardware);
-+        algorithmsCfg.addImport(importReconfigurableHardwareCfg);
-+        algorithmsCfg.addImport(importAlgorithms);
-+        families.addImport(importBasic);
-+        families.addImport(importAlgorithms);
-+        familiesCfg.addImport(importReconfigurableHardware);
-+        familiesCfg.addImport(importFamilies);
-+        familiesCfg.addImport(importAlgorithmsCfg);
-+        pipelines.addImport(importBasic);
-+        pipelines.addImport(importFamilies);
-+        pipelines.addImport(importDataManagement);
-+        pipelines.addImport(importHardware);
-+        priorityPipCfg.addImport(importPipelines);
-+        priorityPipCfg.addImport(importFamiliesCfg);
-+        priorityPipCfg.addImport(importDataManagementCfg);
-+        pipelinesCfg.addImport(importPriorityPipCfg);
-+        infrastructure.addImport(importBasic);
-+        infrastructure.addImport(importHardware);
-+        infrastructure.addImport(importReconfigurableHardware);
-+        infrastructure.addImport(importFamilies);
-+        infrastructure.addImport(importObservables);
-+        infrastructure.addImport(importAdaptivity);
-+        infrastructure.addImport(importPipelines);
-+        infrastructureCfg.addImport(importInfrastructure);
-+        infrastructureCfg.addImport(importPipelinesCfg);
-+        qm.addImport(importHardwareCfg);
-+        qm.addImport(importReconfigurableHardwareCfg);
-+        qm.addImport(importDataManagementCfg);
-+        qm.addImport(importObservablesCfg);
-+        qm.addImport(importAdaptivityCfg);
-+        qm.addImport(importAlgorithmsCfg);
-+        qm.addImport(importFamiliesCfg);
-+        qm.addImport(importPipelinesCfg);
-+        qm.addImport(importInfrastructureCfg);
-+        
-+        resultHandler(expectedFailedConstraints, -1, qm);
-+    }    
-+    
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMAlgorithmsTest1.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMAlgorithmsTest1.java
-new file mode 100644
-index 0000000..d53329f
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMAlgorithmsTest1.java
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Hardware constraint: algNamesUnique = algorithms->collect(a|a.name).size() == algorithms.size() test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMAlgorithmsTest1 extends AbstractQualiMasterTest {
-+ 
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMAlgorithmsTest1(ITestDescriptor descriptor) {
-+        super(descriptor, "qmAlgorithmsTest1");
-+    }
-+
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void coreTest() {
-+        reasoningTest(1);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest1.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest1.java
-new file mode 100644
-index 0000000..44fa690
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest1.java
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Hardware constraint: inputCheck = members->forAll(refTo(Algorithm) algorithm | input == algorithm.input) test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMFamiliesTest1 extends AbstractQualiMasterTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMFamiliesTest1(ITestDescriptor descriptor) {
-+        super(descriptor, "qmFamiliesTest1");
-+    }
-+    
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void coreTest() {
-+        reasoningTest(1);
-+    } 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest2.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest2.java
-new file mode 100644
-index 0000000..6699976
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMFamiliesTest2.java
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Hardware constraint: memberCount = members.size() > 0 test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMFamiliesTest2 extends AbstractQualiMasterTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMFamiliesTest2(ITestDescriptor descriptor) {
-+        super(descriptor, "qmFamiliesTest2");
-+    }
-+    
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void coreTest() {
-+        reasoningTest(1);
-+    } 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest1.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest1.java
-new file mode 100644
-index 0000000..de08494
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest1.java
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Hardware constraint: managerRole = role == MachineRole.Manager implies ports.isEmpty() test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMHardwareTest1 extends AbstractQualiMasterTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMHardwareTest1(ITestDescriptor descriptor) {
-+        super(descriptor, "qmHardwareTest1");
-+    }
-+    
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void coreTest() {
-+        reasoningTest(1);
-+    } 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest2.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest2.java
-new file mode 100644
-index 0000000..3e92b0f
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest2.java
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Hardware constraint: managerReq = machines->exists(Machine machine | machine.role == MachineRole.Manager) test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMHardwareTest2 extends AbstractQualiMasterTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMHardwareTest2(ITestDescriptor descriptor) {
-+        super(descriptor, "qmHardwareTest2");
-+    }    
-+    
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void coreTest() {
-+        reasoningTest(1);
-+    } 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest3.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest3.java
-new file mode 100644
-index 0000000..bbd2dd6
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMHardwareTest3.java
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Hardware constraint: machineName = machines->collect(m|m.name).size() == machines.size() test.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMHardwareTest3 extends AbstractQualiMasterTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMHardwareTest3(ITestDescriptor descriptor) {
-+        super(descriptor, "qmHardwareTest3");
-+    }
-+    
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void coreTest() {
-+        reasoningTest(1);
-+    } 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMMonTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMMonTest.java
-new file mode 100644
-index 0000000..56a8357
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMMonTest.java
-@@ -0,0 +1,86 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.IReasoner;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasoningResult;
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.model.AbstractVariable;
-+import net.ssehub.easy.varModel.model.ModelQuery;
-+import net.ssehub.easy.varModel.model.ModelQueryException;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.datatypes.IntegerType;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+
-+/**
-+ * Qualimaster monitoring test.
-+ * Model is valid.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class QMMonTest extends AbstractTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMMonTest(ITestDescriptor descriptor) {
-+        super(descriptor, "qmMonTest");
-+    }
-+
-+    /**
-+     * Basic test.
-+     * 
-+     * @throws ModelQueryException shall not occur
-+     * @throws ConfigurationException shall not occur
-+     * @throws ValueDoesNotMatchTypeException shall not occur
-+     */
-+    @Test    
-+    public void monTest() throws ModelQueryException, ConfigurationException, ValueDoesNotMatchTypeException {
-+        Project prj = loadProject("QM");
-+        Configuration config = new Configuration(prj, true);
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setRuntimeMode(true);
-+        IReasoner reasoner = createReasoner();
-+        ReasoningResult rResult = performReasoning(reasoner, prj, config, rConfig, DEFAULT_TAG + " 1");
-+        Assert.assertFalse(rResult.hasConflict());
-+
-+        AbstractVariable alg1Decl = ModelQuery.findVariable(prj, "alg1", null);
-+        AbstractVariable alg2Decl = ModelQuery.findVariable(prj, "alg2", null);
-+        IDecisionVariable alg1 = config.getDecision(alg1Decl);
-+        IDecisionVariable alg2 = config.getDecision(alg2Decl);
-+        
-+        alg1.getNestedElement("throughputItem").setValue(
-+            ValueFactory.createValue(IntegerType.TYPE, 22), AssignmentState.ASSIGNED);
-+        alg2.getNestedElement("throughputItem").setValue(
-+            ValueFactory.createValue(IntegerType.TYPE, 22), AssignmentState.ASSIGNED);
-+
-+        rResult = performReasoning(reasoner, prj, config, rConfig, DEFAULT_TAG + " 2");
-+        Assert.assertTrue(rResult.hasConflict());
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMPipelinesTest1.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMPipelinesTest1.java
-new file mode 100644
-index 0000000..56e0bb2
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMPipelinesTest1.java
-@@ -0,0 +1,48 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Hardware constraint: flow error from the presentation test.
-+ * typeCheck(PriorityPipCfg::PriorityPip_FamilyElement2, PriorityPipCfg::PriorityPip_FamilyElement2.output)
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMPipelinesTest1 extends AbstractQualiMasterTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMPipelinesTest1(ITestDescriptor descriptor) {
-+        super(descriptor, "qmPipelinesTest1");
-+    }
-+    
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void coreTest() {
-+        reasoningTest(1);
-+    } 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMScenarioTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMScenarioTests.java
-new file mode 100644
-index 0000000..493ef47
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMScenarioTests.java
-@@ -0,0 +1,64 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.AbstractTest;
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Configures the operation tests for SSE reasoner.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMScenarioTests extends AbstractTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMScenarioTests(ITestDescriptor descriptor) {
-+        super(descriptor, "qmTemplates");
-+    }
-+    
-+    /**
-+     * Tests QM Hardware collections.
-+     */
-+    @Test    
-+    public void qmHardwareTest() {
-+        reasoningTest("QMHardwareTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests collections.
-+     */
-+    @Test    
-+    public void nestedHardwareTest() {
-+        reasoningTest("nestedHardwareTest.ivml", 1);
-+    } 
-+    
-+    /**
-+     * Tests QM Family Algorithms fields test.
-+     */
-+    @Test    
-+    public void qmFamilyAlgorithmsFieldsTest() {
-+        reasoningTest("QMFamilyAlgorithmsFieldsTest.ivml", 1); // fail as stated in model
-+    } 
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMValidTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMValidTest.java
-new file mode 100644
-index 0000000..549097a
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/QMValidTest.java
-@@ -0,0 +1,49 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.reasoning.core.reasoner.ITestDescriptor;
-+
-+/**
-+ * Qualimaster model test.
-+ * Model is valid.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class QMValidTest extends AbstractQualiMasterTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected QMValidTest(ITestDescriptor descriptor) {
-+        super(descriptor, "qmModelTest");
-+    }
-+
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void coreTest() {
-+        reasoningTest(0);
-+        reasoningTest(0);
-+    } 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/package-info.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/package-info.java
-new file mode 100644
-index 0000000..5144c78
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/qm/package-info.java
-@@ -0,0 +1,6 @@
-+/**
-+ * Test the Qualimaster model.
-+ * @author Sizonenko
-+ *
-+ */
-+package net.ssehub.easy.reasoning.core.qm;
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTest.java
-new file mode 100644
-index 0000000..a79b3f8
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTest.java
-@@ -0,0 +1,699 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import java.io.File;
-+import java.io.IOException;
-+import java.util.List;
-+
-+import org.eclipse.emf.common.util.URI;
-+import org.eclipse.xtext.util.Arrays;
-+import org.junit.After;
-+import org.junit.Assert;
-+import org.junit.Before;
-+
-+import de.uni_hildesheim.sse.ModelUtility;
-+import net.ssehub.easy.basics.messages.Status;
-+import net.ssehub.easy.basics.modelManagement.ModelInfo;
-+import net.ssehub.easy.basics.modelManagement.ModelManagementException;
-+import net.ssehub.easy.basics.modelManagement.Version;
-+import net.ssehub.easy.basics.progress.ProgressObserver;
-+import net.ssehub.easy.dslCore.StandaloneInitializer;
-+import net.ssehub.easy.dslCore.TranslationResult;
-+import net.ssehub.easy.dslCore.translation.Message;
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.management.VarModel;
-+import net.ssehub.easy.varModel.model.AbstractVariable;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.ProjectImport;
-+import net.ssehub.easy.varModel.model.filter.DeclarationFinder;
-+import net.ssehub.easy.varModel.model.filter.FilterType;
-+import net.ssehub.easy.varModel.model.filter.DeclarationFinder.VisibilityType;
-+import net.ssehub.easy.varModel.model.values.Value;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
-+import net.ssehub.easy.varModel.varModel.testSupport.TSVMeasurementCollector;
-+
-+/**
-+ * General abstract test class for reusable reasoning tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ * @author Eichelberger
-+ */
-+public abstract class AbstractTest extends net.ssehub.easy.dslCore.test.AbstractTest<Project> {
-+
-+    public static final String DEFAULT_TAG = "REASONING";
-+    
-+    /**
-+     * The system property key for the number number of full reasoning executions {@value}}.
-+     */
-+    public static final String KEY_NUM_RUNS_REASONING_FULL = "easy.test.runs.reasoning.full";
-+    
-+    /**
-+     * The system property key for the number number of incremental reasoning executions {@value}}.
-+     */
-+    public static final String KEY_NUM_RUNS_REASONING_INCREMENTAL = "easy.test.runs.reasoning.incremental";
-+    
-+    /**
-+     * The system property key for the number number of full instance executions {@value}}.
-+     */
-+    public static final String KEY_NUM_RUNS_REASONING_INSTANCE = "easy.test.runs.reasoning.instance";
-+    
-+    /**
-+     * The number of full reasoning executions based on {@link #KEY_NUM_RUNS_REASONING_FULL}. At least 1.
-+     * @see #performReasoning(IReasoner, Project, Configuration, ReasonerConfiguration)
-+     */
-+    public static final int NUM_FULL_REASONING 
-+        = MeasurementCollector.getIntProperty(KEY_NUM_RUNS_REASONING_FULL, 1, 1);
-+    
-+    /**
-+     * The number of incremental reasoning executions based on {@link #KEY_NUM_RUNS_REASONING_INCREMENTAL}. At least 0, 
-+     * i.e., can be switched off.
-+     */
-+    public static final int NUM_INCREMENTAL_REASONING 
-+        = MeasurementCollector.getIntProperty(KEY_NUM_RUNS_REASONING_INCREMENTAL, 1, 0);
-+
-+    /**
-+     * The number of instance reasoning executions based on {@link #KEY_NUM_RUNS_REASONING_INSTANCE}. At least 0, 
-+     * i.e., can be switched off.
-+    */
-+    public static final int NUM_INSTANCE_REASONING 
-+        = MeasurementCollector.getIntProperty(KEY_NUM_RUNS_REASONING_INSTANCE, 2, 0);
-+    
-+    private ITestDescriptor descriptor;
-+    private String testPath;
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     * @param testPath the test path (empty or <b>null</b> means do not try to load models)
-+     */
-+    protected AbstractTest(ITestDescriptor descriptor, String testPath) {
-+        this.descriptor = descriptor;
-+        this.testPath = testPath;
-+    }
-+    
-+    /**
-+     * Returns the testdata folder.
-+     * 
-+     * @return the testdata folder
-+     */
-+    public File getTestdataBase() {
-+        return determineTestDataFolder(descriptor.getSystemProperty());
-+    }
-+    
-+    /**
-+     * Creates a reasoner instance through {@link #descriptor}.
-+     * 
-+     * @return the reasoner instance
-+     */
-+    protected IReasoner createReasoner() {
-+        return descriptor.createReasoner();
-+    }
-+    
-+    /**
-+     * Returns the path after testdata folder where the test files are located.
-+     * 
-+     * @return the path
-+     */
-+    protected String getTestPath() {
-+        return testPath;
-+    }
-+    
-+    /**
-+     * Changes the test path.
-+     * 
-+     * @param testPath the new test path
-+     */
-+    protected void setTestPath(String testPath) {
-+        removeLocation();
-+        this.testPath = testPath;
-+        addLocation();
-+    }
-+
-+    /**
-+     * Returns the complete testdata folder.
-+     * 
-+     * @return the path
-+     */
-+    protected File getTestdata() {
-+        return new File(getTestdataBase(), getTestPath());
-+    }
-+
-+    /**
-+     * Method for handling reasoning result, actually performing a propagation by default (due to legacy reasons).
-+     * 
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail
-+     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
-+     * @param projectP1 Project to reason on.
-+     * @return configuration (for further specific tests)
-+     */
-+    protected final Configuration resultHandler(int expectedFailedConstraints, int expectedReevaluationCount, 
-+        Project projectP1) {
-+        return assertPropagation(expectedFailedConstraints, expectedReevaluationCount, projectP1); // legacy
-+    }
-+
-+    /**
-+     * Method for asserting a propagation.
-+     * 
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail
-+     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
-+     * @param projectP1 Project to reason on.
-+     * @return configuration (for further specific tests)
-+     * 
-+     * @see #debugConfigBeforeResultHandler(Configuration)
-+     */
-+    protected final Configuration assertPropagation(int expectedFailedConstraints, int expectedReevaluationCount, 
-+        Project projectP1) {
-+        Configuration config = new Configuration(projectP1, false);
-+        return assertPropagation(expectedFailedConstraints, expectedReevaluationCount, config);
-+    }
-+
-+    /**
-+     * Method for asserting a propagation.
-+     * 
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail
-+     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
-+     * @param config the configuration to reason on.
-+     * @return <code>config</code> (for further specific tests)
-+     * 
-+     * @see #debugConfigBeforeResultHandler(Configuration)
-+     */
-+    protected final Configuration assertPropagation(int expectedFailedConstraints, int expectedReevaluationCount, 
-+        Configuration config) {
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        configureReasoner(rConfig);
-+        // Perform reasoning
-+        IReasoner reasoner = createReasoner();
-+        ReasoningResult rResult = performReasoning(reasoner, config.getProject(), config, rConfig);
-+        debugConfigBeforeResultHandler(config);
-+        resultHandler(expectedFailedConstraints, expectedReevaluationCount, rResult);
-+        return config;
-+    }
-+
-+    /**
-+     * Performs reasoning using {@link ITestDescriptor#createReasoner() the reasoner provided by 
-+     * the test descriptor} and collects the result in {@link MeasurementCollector}.
-+     * 
-+     * @param project the project
-+     * @param config the configuration
-+     * @param rConfig the reasoner configuration
-+     * @return the reasoning result
-+     */
-+    protected ReasoningResult performReasoning(Project project, Configuration config, 
-+        ReasonerConfiguration rConfig) {
-+        return performReasoning(descriptor.createReasoner(), project, config, rConfig);
-+    }
-+
-+    /**
-+     * Performs reasoning using {@link ITestDescriptor#createReasoner() the reasoner provided by 
-+     * the test descriptor} and collects the result in {@link MeasurementCollector}.
-+     * 
-+     * @param project the project
-+     * @param config the configuration
-+     * @param rConfig the reasoner configuration
-+     * @param tag explicit tag for measurement recording (may be <b>null</b>)
-+     * @return the reasoning result
-+     */
-+    protected ReasoningResult performReasoning(Project project, Configuration config, 
-+        ReasonerConfiguration rConfig, String tag) {
-+        return performReasoning(descriptor.createReasoner(), project, config, rConfig, tag);
-+    }
-+
-+    /**
-+     * Performs reasoning and collects the result in {@link MeasurementCollector} using {@link #DEFAULT_TAG}.
-+     * 
-+     * @param reasoner the reasoner to use
-+     * @param project the project
-+     * @param config the configuration
-+     * @param rConfig the reasoner configuration
-+     * @return the reasoning result
-+     */
-+    protected ReasoningResult performReasoning(IReasoner reasoner, Project project, Configuration config, 
-+        ReasonerConfiguration rConfig) {
-+        return performReasoning(reasoner, project, config, rConfig, DEFAULT_TAG);
-+    }
-+
-+    /**
-+     * Performs reasoning and collects the result in {@link MeasurementCollector}.
-+     * Repeats the reasoning {@link #NUM_FULL_REASONING} times.
-+     * 
-+     * @param reasoner the reasoner to use
-+     * @param project the project
-+     * @param config the configuration
-+     * @param rConfig the reasoner configuration
-+     * @param tag explicit tag for measurement recording (may be <b>null</b>)
-+     * @return the (first) reasoning result
-+     */
-+    protected ReasoningResult performReasoning(IReasoner reasoner, Project project, Configuration config, 
-+        ReasonerConfiguration rConfig, String tag) {
-+        ensureCollector();
-+        ReasoningResult result = null;
-+        for (int r = 1, n = NUM_FULL_REASONING; r <= n; r++) {
-+            String id = MeasurementCollector.start(config, tag, r);
-+            ReasoningResult res =  reasoner.propagate(project, config, rConfig, ProgressObserver.NO_OBSERVER);
-+            MeasurementCollector.endAuto(id);
-+            transferReasoningMeasures(id, res);
-+            MeasurementCollector.end(id);
-+            res.logInformation(project, rConfig);
-+            if (n > 1) {
-+                // we want to cause multiple reasoner calls, not re-reasoning on the same configuration here
-+                config = new Configuration(project, false); 
-+            }
-+            result = null == result ? res : result;
-+        }
-+        return result;
-+    }
-+
-+    /**
-+     * Ensures the measurement collector.
-+     */
-+    protected void ensureCollector() {
-+        TSVMeasurementCollector.ensureCollector(new File(getTestdataBase(), 
-+            "temp/" + descriptor.getMeasurementFileName()));
-+    }
-+
-+    /**
-+     * Transfers the reasoning measures from the given reasoning <code>result</code> to the collector <code>coll</code>.
-+     * 
-+     * @param id the measurement identifier
-+     * @param result the reasoning result to take the values from
-+     */
-+    protected void transferReasoningMeasures(String id, ReasoningResult result) {
-+        transferReasoningMeasures(MeasurementCollector.getInstance(), id, result);
-+    }
-+
-+    /**
-+     * Transfers the reasoning measures from the given reasoning <code>result</code> to the collector <code>coll</code>.
-+     * 
-+     * @param coll the collector to receive the measurements
-+     * @param id the measurement identifier
-+     * @param result the reasoning result to take the values from
-+     */
-+    protected void transferReasoningMeasures(MeasurementCollector coll, String id, ReasoningResult result) {
-+        transferReasoningMeasures(coll, id, descriptor.measurements(), result);
-+    }
-+    
-+    /**
-+     * Transfers the reasoning measures from the given reasoning <code>result</code> to the collector <code>coll</code>.
-+     * 
-+     * @param coll the collector to receive the measurements
-+     * @param id the measurement identifier
-+     * @param keys the measurement keys to collect
-+     * @param result the reasoning result to take the values from
-+     */
-+    public static void transferReasoningMeasures(MeasurementCollector coll, String id, IMeasurementKey[] keys, 
-+        ReasoningResult result) {
-+        for (int k = 0; k < keys.length; k++) {
-+            Number measure = result.getMeasure(keys[k]);
-+            if (null != measure) {
-+                coll.setMeasurement(id, keys[k], measure.doubleValue());
-+            }
-+        }
-+        // auto columns in TSV
-+        MeasurementCollector.set(id, AbstractTestDescriptor.MeasurementIdentifier.REASONER_INSTANCE_CREATION_TIME, 0);
-+    }
-+    
-+    /**
-+     * Allows to configure the reasoner configuration.
-+     * 
-+     * @param rConfig the configuration to change if needed
-+     */
-+    protected void configureReasoner(ReasonerConfiguration rConfig) {
-+    }
-+    
-+    /**
-+     * Called to enable debugging the configuration after reasoning but before asserting.
-+     * 
-+     * @param cfg the configuration to debug
-+     */
-+    protected void debugConfigBeforeResultHandler(Configuration cfg) {
-+    }
-+    
-+    /**
-+     * Method for handling a reasoning result.
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail
-+     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
-+     * @param result the reasoning result
-+     */
-+    protected static final void resultHandler(int expectedFailedConstraints, int expectedReevaluationCount, 
-+        ReasoningResult result) {
-+        // Test whether reasoning detected correct result  
-+        int failedConstraints = 0;
-+        for (int i = 0; i < result.getMessageCount(); i++) {
-+            if (result.getMessage(i).getStatus() == Status.ERROR) {
-+                failedConstraints = failedConstraints + result.getMessage(i).getConflicts().size();
-+            }
-+        }
-+        Assert.assertEquals("Failed constraints: ", expectedFailedConstraints, failedConstraints);
-+
-+        if (expectedReevaluationCount > 0) {
-+            Number measure = result.getMeasure(GeneralMeasures.REEVALUATION_COUNT);
-+            if (null == measure) {
-+                Assert.fail("Reasoner does not provide measure " + GeneralMeasures.REEVALUATION_COUNT);
-+            } else {
-+                // Test whether reasoning is done in correct reevalustion steps  
-+                Assert.assertTrue("Reevaluation count mismatch. Result: " + measure.intValue()
-+                    + " Expected: " + expectedReevaluationCount, measure.intValue() == expectedReevaluationCount);
-+            }
-+        }
-+    }
-+    
-+    /**
-+     * Helper method for load an IVML file.
-+     * @param testFolder The (sub-) folder where to load the specified IVML test files.
-+     * @param path The name of the IVML file to load (optional including the file extension) inside of the
-+     *     <tt>reasonerModel</tt> folder.
-+     * @return The loaded {@link Project} representing the read IVML file.
-+     */
-+    protected final Project loadProject(File testFolder, String path) {
-+        Project project = null;
-+        try {
-+            File projectFile = new File(testFolder, path.endsWith(".ivml") ? path : path + ".ivml");
-+            URI uri = URI.createFileURI(projectFile.getAbsolutePath());
-+            TranslationResult<Project> result = ModelUtility.INSTANCE.parse(uri);
-+            StringBuffer errorMsg = new StringBuffer();
-+            for (int i = 0; i < result.getMessageCount(); i++) {
-+                Message msg = result.getMessage(i);
-+                if (!msg.ignore() && Status.ERROR == msg.getStatus()) {
-+                    errorMsg.append(msg.getDescription());
-+                    errorMsg.append("\n");
-+                }
-+            }
-+            if (errorMsg.length() == 0) {
-+                project = result.getResult(0);
-+            } else {
-+                Assert.fail(errorMsg.toString());
-+            }
-+            Assert.assertNotNull("Error: The loaded project " + path + " is NULL (should not happen)", project);
-+            VarModel.INSTANCE.updateModel(project, projectFile.toURI());
-+        } catch (IOException exc) {
-+            Assert.fail(exc.getLocalizedMessage());
-+        }
-+        return project;
-+    }
-+
-+    /**
-+     * Load an IVML File as project with dependencies assuming version "0".
-+     * 
-+     * @param projectName The name of the project to load.
-+     * @return the specified and parsed project 
-+     * @throws IOException
-+     *     if an error occurred while reading the IVML file
-+     */
-+    protected final Project loadCompleteProject(String projectName) throws IOException {
-+        return loadCompleteProject("", projectName);
-+    }
-+    
-+    /**
-+     * Load an IVML File as project with dependencies assuming version "0". Call 
-+     * {@link #resultHandler(int, int, Project)} afterwards.
-+     * 
-+     * @param folderName The folder the test project(s) relative to {@link #getTestdataBase()}
-+     * @param projectName The name of the project to load.
-+     * @return the specified and parsed project 
-+     * @throws IOException
-+     *     if an error occurred while reading the IVML file
-+     */
-+    protected final Project loadCompleteProject(String folderName, String projectName) throws IOException {
-+        // Register folder for parsing files
-+        File folder = getTestdataBase();
-+        if (null != getTestPath()) {
-+            folder = getTestdata();
-+        }
-+        folder = new File(folder, folderName);
-+        try {
-+            VarModel.INSTANCE.locations().addLocation(folder, ProgressObserver.NO_OBSERVER);
-+            VarModel.INSTANCE.loaders().registerLoader(ModelUtility.INSTANCE, ProgressObserver.NO_OBSERVER);
-+        } catch (ModelManagementException e) {
-+            System.out.println(e.getMessage());
-+        }
-+        
-+        List<ModelInfo<Project>> infos = VarModel.INSTANCE.availableModels().getModelInfo(projectName, new Version(0));
-+        Assert.assertNotNull("No models found at \"" + folder.getAbsolutePath() + "\"", infos);
-+        Assert.assertEquals(infos.size() + " models found at \"" + folder.getAbsolutePath() + "\" but should be 1.",
-+            1, infos.size());
-+        
-+        // Parse IVML File
-+        Project project = null;
-+        try {
-+            project = VarModel.INSTANCE.load(infos.get(0));
-+        } catch (ModelManagementException e) {
-+            e.printStackTrace();
-+            Assert.fail("Could not load model \"" + projectName + "\", reason: " + e.getMessage());
-+        }
-+        
-+        Assert.assertNotNull("Loaded project is null, probably due parsing errors: \"" + projectName + "\"", project);
-+
-+        try {
-+            VarModel.INSTANCE.locations().removeLocation(folder, ProgressObserver.NO_OBSERVER);
-+            VarModel.INSTANCE.loaders().unregisterLoader(ModelUtility.INSTANCE, ProgressObserver.NO_OBSERVER);
-+        } catch (ModelManagementException e) {
-+            System.out.println(e.getMessage());
-+        }
-+
-+        return project;
-+    }
-+    
-+    /**
-+     * Helper method for load an IVML file.
-+     * @param path The name of the IVML file to load (optional including the file extension) inside of the
-+     *     <tt>reasonerModel</tt> folder.
-+     * @return The loaded {@link Project} representing the read IVML file.
-+     */
-+    protected Project loadProject(String path) {
-+        return loadProject(getTestdata(), path);
-+    }
-+    
-+    /**
-+     * Initializes this Test class.
-+     */
-+    @Before
-+    public void setUpBeforeClass() {
-+        startup();
-+    }
-+    
-+    /**
-+     * Frees the memory after testing.
-+     */
-+    @After
-+    public void tearDownAfterClass() {
-+        shutdown();
-+    }
-+    
-+    /**
-+     * Initializes this Test class.
-+     */
-+    public void startup() {
-+        descriptor.registerResoner();
-+        ModelUtility.setResourceInitializer(new StandaloneInitializer());
-+        addLocation();
-+    }
-+    
-+    /**
-+     * Frees the memory after testing.
-+     */
-+    protected void shutdown() {
-+        descriptor.unregisterReasoner();
-+        removeLocation();
-+    }
-+
-+    /**
-+     * Adds {@link #testPath} as IVML location.
-+     */
-+    private void addLocation() {
-+        if (null != testPath && testPath.length() > 0) {
-+            try {
-+                VarModel.INSTANCE.locations().addLocation(getTestdata(), ProgressObserver.NO_OBSERVER);
-+            } catch (ModelManagementException e) {
-+                Assert.fail("Could not add location of test files.");
-+            }
-+        }
-+        
-+    }
-+
-+    /**
-+     * Removes {@link #testPath} as IVML location.
-+     */
-+    private void removeLocation() {
-+        if (null != testPath && testPath.length() > 0) {
-+            try {
-+                VarModel.INSTANCE.locations().removeLocation(getTestdata(), ProgressObserver.NO_OBSERVER);
-+            } catch (ModelManagementException e) {
-+                Assert.fail("Could not remove location of test files.");
-+            }
-+        }
-+    }
-+    
-+    /**
-+     * Method to test whether different types of variables and constraints could be translated correctly
-+     * into rules and reasoned on without any errors. 
-+     * @param ivmlFile IVML file to translate and reason on.
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail.
-+     * @param expectedReevaluationCount expected number of constraint re-evaluations (ignored if negative)
-+     * @return configuration (for further specific tests)
-+     */        
-+    public Configuration reasoningTest(String ivmlFile, int expectedFailedConstraints, int expectedReevaluationCount) {
-+        Project project = loadProject(ivmlFile);
-+        return resultHandler(expectedFailedConstraints, expectedReevaluationCount, project);
-+    }   
-+    
-+    /**
-+     * Method to test whether different types of variables and constraints could be translated correctly
-+     * into rules and reasoned on without any errors. 
-+     * @param ivmlFile IVML file to translate and reason on.
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail.
-+     * @return configuration (for further specific tests)
-+     */        
-+    public Configuration reasoningTest(String ivmlFile, int expectedFailedConstraints) {
-+        return reasoningTest(ivmlFile, expectedFailedConstraints, -1);
-+    }
-+
-+    /**
-+     * Method to test whether different types of variables and constraints could be translated correctly
-+     * into rules and reasoned on without any errors. 
-+     * @param p0 IVML file to translate and reason on.
-+     * @param p1 IVML file to translate and reason on.
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail.
-+     * @return configuration (for further specific tests)
-+     */        
-+    protected Configuration reasoningTest(String p0, String p1, int expectedFailedConstraints) {
-+        Project projectP0 = loadProject(p0);
-+        Project projectP1 = loadProject(p1);
-+        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
-+        projectP1.addImport(importP0);
-+        return resultHandler(expectedFailedConstraints, -1, projectP1);
-+    }
-+    
-+    /**
-+     * Method to test whether different types of variables and constraints could be translated correctly
-+     * into rules and reasoned on without any errors. 
-+     * @param p0 IVML file to translate and reason on.
-+     * @param p1 IVML file to translate and reason on.
-+     * @param p2 IVML file to translate and reason on.
-+     * @param expectedFailedConstraints Number of constraints that are expected to fail.
-+     * @return configuration (for further specific tests)
-+     */        
-+    protected Configuration reasoningTest(String p0, String p1, String p2, int expectedFailedConstraints) {
-+        Project projectP0 = loadProject(p0);
-+        Project projectP1 = loadProject(p1);
-+        Project projectP2 = loadProject(p2);
-+        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
-+        projectP1.addImport(importP0);
-+        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
-+        projectP2.addImport(importP1);
-+        return resultHandler(expectedFailedConstraints, -1, projectP2);
-+    }
-+    
-+    /**
-+     * Method for determining folder with IVML files.
-+     * @param property property
-+     * @return folder location
-+     */
-+    public static File determineTestDataFolder(String property) {
-+        File testdataFolder = determineTestDataDir(property);
-+        String externalLocation = System.getProperty(property);
-+        // If no property was defined, use ReasonerCore.test/testdata directory
-+        if (null == externalLocation) {
-+            // Work around over the path avoids a NullPointer exception
-+            String path = testdataFolder.getAbsolutePath();
-+            testdataFolder = new File(path);
-+            testdataFolder = testdataFolder.getParentFile().getParentFile();
-+            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
-+            testdataFolder = new File(testdataFolder, "testdata");
-+        }
-+        if (!testdataFolder.exists()) {
-+            String path = testdataFolder.getAbsolutePath();
-+            testdataFolder = new File(path);
-+            testdataFolder = testdataFolder.getParentFile().getParentFile().getParentFile();
-+            testdataFolder = new File(testdataFolder, "ReasonerCore");
-+            testdataFolder = new File(testdataFolder, "ReasonerCore.test");
-+            testdataFolder = new File(testdataFolder, "testdata");
-+        }
-+        return testdataFolder;    
-+    }
-+    
-+    /**
-+     * Created a value and configures a variable inside the configuration with
-+     * the created value.
-+     * 
-+     * @param config
-+     *            The configuration containing the variable to be configured
-+     *            (Must not be <tt>null</tt>).
-+     * @param declName
-+     *            The name of the variable to be configured (Must not be
-+     *            <tt>null</tt>).
-+     * @param namespace
-+     *            The namespace of the variable. Can be used if more than one
-+     *            variable with the same name exist. If <tt>null</tt> the first
-+     *            variable with the specified name will be configured.
-+     * @param value
-+     *            The new value to be set.
-+     * @throws ConfigurationException
-+     *             Must not occur, otherwise there is an error inside the
-+     *             Configuration
-+     * @throws ValueDoesNotMatchTypeException
-+     *             Occurs if the value does not match to the datatype of the
-+     *             configured variable
-+     */
-+    protected void configureValue(Configuration config, String declName, String namespace, String... value)
-+        throws ConfigurationException, ValueDoesNotMatchTypeException {
-+
-+        Project project = config.getProject();
-+        DeclarationFinder finder = new DeclarationFinder(project, FilterType.ALL, null);
-+        List<AbstractVariable> declarations = finder.getVariableDeclarations(VisibilityType.ALL);
-+        AbstractVariable decl = null;
-+        for (int i = 0; null == decl && i < declarations.size(); i++) {
-+            AbstractVariable tmp = declarations.get(i);
-+            if (tmp.getName().equals(declName)) {
-+                if (null == namespace ^ namespace.equals(tmp.getNameSpace())) {
-+                    decl = tmp;
-+                }
-+            }
-+        }
-+        if (null != decl) {
-+            Value val = ValueFactory.createValue(decl.getType(), (Object[]) value);
-+            config.getDecision(decl).setValue(val, AssignmentState.ASSIGNED);
-+        }
-+    }
-+
-+    /**
-+     * Asserts that <code>actual</code> is in <code>expected</code>.
-+     * 
-+     * @param actual the actual value
-+     * @param expected the expected/allowed values
-+     */
-+    protected void assertContained(Object actual, Object... expected) {
-+        Assert.assertTrue(null, Arrays.contains(expected, actual));
-+    }
-+
-+    /**
-+     * Asserts that <code>actual</code> is in <code>expected</code>.
-+     * 
-+     * @param message emitted in case of failing
-+     * @param actual the actual value
-+     * @param expected the expected/allowed values
-+     */
-+    protected void assertContained(String message, Object actual, Object... expected) {
-+        Assert.assertTrue(message, Arrays.contains(expected, actual));
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTestDescriptor.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTestDescriptor.java
-new file mode 100644
-index 0000000..199223a
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AbstractTestDescriptor.java
-@@ -0,0 +1,209 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector;
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementCollector.IMeasurementIdentifier;
-+
-+/**
-+ * A test descriptor pre-configured for the reasoner core test cases.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public abstract class AbstractTestDescriptor implements ITestDescriptor {
-+    
-+    public static final String PLUGIN_ID = "net.ssehub.easy.reasoning.core.tests";
-+    public static final String SYSTEM_PROPERTY = "reasonerCore.testdata.home";
-+    protected static final IMeasurementKey[] MEASUREMENTS = GeneralMeasures.values();
-+    static final String PROJECT_NAME = "../ReasonerCore.test/";
-+    
-+    private String pluginId;
-+    private String systemProperty;
-+    private boolean[] capabilities;
-+
-+    /**
-+     * The abstract measurement identifiers for mapping {@link net.ssehub.easy.reasoning.sseReasoner.Measures}.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    public enum MeasurementIdentifier implements IMeasurementIdentifier {
-+
-+        /**
-+         * Time taken for creating a re-usable reasoner instance (in ms).
-+         */
-+        REASONER_INSTANCE_CREATION_TIME,
-+        
-+        /**
-+         * Total number of re-evaluations.
-+         */
-+        REASONER_REEVALUATION_COUNT,
-+        
-+        /**
-+         * Total number of constraints.
-+         */
-+        REASONER_CONSTRAINT_COUNT,
-+        
-+        /**
-+         * Total number of evaluation problems.
-+         */
-+        REASONER_PROBLEMS,
-+        
-+        /**
-+         * Total time (in ms) spent for reasoning.
-+         */
-+        REASONER_REASONING_TIME,
-+
-+        /**
-+         * Time (in ms) spent for translating the model - collected only if the approach performs translation.
-+         */
-+        REASONER_TRANSLATION_TIME,
-+
-+        /**
-+         * Time (in ms) spent for constraint translation.
-+         */
-+        REASONER_EVALUATION_TIME;
-+
-+        @Override
-+        public boolean isAutomatic() {
-+            return false;
-+        }
-+
-+    }
-+
-+    
-+    /**
-+     * Creates a new default instance.
-+     */
-+    protected AbstractTestDescriptor() {
-+        this(PLUGIN_ID, SYSTEM_PROPERTY, null);
-+    }
-+    
-+    /**
-+     * Creates a new instance.
-+     * 
-+     * @param pluginId the pluginId (in case that tests are started from within an OSGi environment, may be <b>null</b> 
-+     *   then the default is used)
-+     * @param systemProperty the property defining the location of the test files in a continuous 
-+     *   integration environment - this supersedes all other path specifications, may be <b>null</b> then the default 
-+     *   is used
-+     * @param capabilities the capabilities, may be <b>null</b> then all explicit capabilities are 
-+     *   unsupported, shall support all {@link Capabilities} in length (unspecified are considered as 
-+     *   unsupported)
-+     */
-+    protected AbstractTestDescriptor(String pluginId, String systemProperty, boolean... capabilities) {
-+        assert null == capabilities || capabilities.length == Capabilities.values().length;
-+        if (null == pluginId || 0 == pluginId.length()) {
-+            this.pluginId = PLUGIN_ID;
-+        } else {
-+            this.pluginId = pluginId;
-+        }
-+        if (null == systemProperty || 0 == systemProperty.length()) {
-+            this.systemProperty = SYSTEM_PROPERTY;
-+        } else {
-+            this.systemProperty = systemProperty;
-+        }
-+        this.capabilities = capabilities;
-+    }
-+    
-+    @Override
-+    public String getPluginId() {
-+        return pluginId;
-+    }
-+
-+    @Override
-+    public String getSystemProperty() {
-+        return systemProperty;
-+    }
-+
-+    @Override
-+    public boolean isSupported(Capabilities capability) {
-+        boolean result = false;
-+        if (null != capabilities) {
-+            if (capabilities.length > capability.ordinal()) {
-+                result = capabilities[capability.ordinal()];
-+            }
-+        }
-+        return result;
-+    }
-+    
-+    /**
-+     * Registers the measurement mappings for the SSE reasoner.
-+     */
-+    public static void registerMeasurementMappings() {
-+        MeasurementCollector.registerMapping(GeneralMeasures.REEVALUATION_COUNT, 
-+            MeasurementIdentifier.REASONER_REEVALUATION_COUNT);
-+        MeasurementCollector.registerMapping(GeneralMeasures.CONSTRAINT_COUNT, 
-+            MeasurementIdentifier.REASONER_CONSTRAINT_COUNT);
-+        MeasurementCollector.registerMapping(GeneralMeasures.PROBLEMS, 
-+            MeasurementIdentifier.REASONER_PROBLEMS);
-+        MeasurementCollector.registerMapping(GeneralMeasures.REASONING_TIME, 
-+            MeasurementIdentifier.REASONER_REASONING_TIME);
-+        MeasurementCollector.registerMapping(GeneralMeasures.TRANSLATION_TIME, 
-+            MeasurementIdentifier.REASONER_TRANSLATION_TIME);
-+        MeasurementCollector.registerMapping(GeneralMeasures.EVALUATION_TIME, 
-+            MeasurementIdentifier.REASONER_EVALUATION_TIME);
-+    }
-+    
-+    /**
-+     * Automatically registers the measurement mappings.
-+     */
-+    static {
-+        registerMeasurementMappings();
-+    }
-+
-+    @Override
-+    public IMeasurementKey[] measurements() {
-+        return MEASUREMENTS;
-+    }
-+
-+    /**
-+     * Concatenates two arrays of measurement keys.
-+     * 
-+     * @param a1 the first array
-+     * @param a2 the second array
-+     * @return the concatenated array
-+     */
-+    public static IMeasurementKey[] concat(IMeasurementKey[] a1, IMeasurementKey[] a2) {
-+        return concat(new IMeasurementKey[a1.length + a2.length], a1, a2);
-+    }
-+
-+    /**
-+     * Concatenates two arrays of objects.
-+     * 
-+     * @param a1 the first array
-+     * @param a2 the second array
-+     * @return the concatenated array
-+     */
-+    public static Object[] concat(Object[] a1, Object[] a2) {
-+        return concat(new Object[a1.length + a2.length], a1, a2);
-+    }
-+
-+    /**
-+     * Concatenates two arrays of objects.
-+     * 
-+     * @param <T> the array type
-+     * @param target the target array of size of (at last) the sum of the size of <code>a1</code> and <code>a2</code>
-+     * @param a1 the first array
-+     * @param a2 the second array
-+     * @return <code>target</code>
-+     */
-+    private static <T> T[] concat(T[] target, T[] a1, T[] a2) {
-+        System.arraycopy(a1, 0, target, 0, a1.length);
-+        System.arraycopy(a2, 0, target, a1.length, a2.length);
-+        return target;
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ApplicationsTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ApplicationsTests.java
-new file mode 100644
-index 0000000..7968a12
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ApplicationsTests.java
-@@ -0,0 +1,44 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import java.io.IOException;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.varModel.model.Project;
-+
-+/**
-+ * Defines application tests.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class ApplicationsTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected ApplicationsTests(ITestDescriptor descriptor) {
-+        super(descriptor, "applications");
-+    }
-+
-+    /**
-+     * Failing SimElevator.
-+     */
-+    @Test
-+    public void plSimElevatorTestFail() {
-+        reasoningTest("PL_SimElevator_frozen_orig", 0); // reassignment
-+    }
-+    
-+    /**
-+     * Working SimElevator.
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void plSimElevatorTest() throws IOException {
-+        Project p = loadCompleteProject("applications", "PL_SimElevator_frozen");
-+        resultHandler(0, 0, p);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AttributeValuesTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AttributeValuesTest.java
-index e7924e7..0436f4c 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AttributeValuesTest.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/AttributeValuesTest.java
-@@ -16,8 +16,6 @@
- import net.ssehub.easy.dslCore.StandaloneInitializer;
- import net.ssehub.easy.dslCore.TranslationResult;
- import net.ssehub.easy.dslCore.test.AbstractTest;
--import net.ssehub.easy.reasoning.core.reasoner.AttributeException;
--import net.ssehub.easy.reasoning.core.reasoner.AttributeValues;
- import net.ssehub.easy.varModel.confModel.Configuration;
- import net.ssehub.easy.varModel.confModel.IDecisionVariable;
- import net.ssehub.easy.varModel.management.VarModel;
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/BooleanTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/BooleanTests.java
-new file mode 100644
-index 0000000..8c64aab
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/BooleanTests.java
-@@ -0,0 +1,118 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Test;
-+
-+/**
-+ * Defines the boolean tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ * @author Eichelberger
-+ */
-+public class BooleanTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected BooleanTests(ITestDescriptor descriptor) {
-+        super(descriptor, "boolean");
-+    }
-+
-+    /**
-+     * Car example.
-+     */
-+    @Test
-+    public void carExampleTest() {
-+        reasoningTest("CarExample.ivml", 1);
-+    }
-+    
-+    /**
-+     * Boolean defaults test.
-+     */
-+    @Test
-+    public void booleanDefaultsTest() {
-+        reasoningTest("BooleanDefaultsTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Boolean assign test.
-+     */
-+    @Test
-+    public void booleanAssignTest() {
-+        reasoningTest("BooleanAssignTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Boolean in compound defaults test.
-+     */
-+    @Test
-+    public void booleanInCompoundDefaultsTest() {
-+        reasoningTest("BooleanInCompoundDefaultsTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Boolean in compound assign test.
-+     */
-+    @Test
-+    public void booleanInCompoundAssignTest() {
-+        reasoningTest("BooleanInCompoundAssignTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Boolean implies test.
-+     */
-+    @Test
-+    public void booleanImpliesTest() {
-+        reasoningTest("BooleanImpliesTest.ivml", 1);
-+    } 
-+    
-+    /**
-+     * Boolean in compound implies test.
-+     */
-+    @Test
-+    public void booleanInCompoundImpliesTest() {
-+        reasoningTest("BooleanInCompoundImpliesTest.ivml", 1);
-+    }
-+
-+    /**
-+     * Boolean in collection defaults test.
-+     */
-+    @Test
-+    public void booleanInCollectionDefaultsTest() {
-+        reasoningTest("BooleanInCollectionDefaultsTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Boolean in collection assign test.
-+     */
-+    @Test
-+    public void booleanInCollectionAssignTest() {
-+        reasoningTest("BooleanInCollectionAssignTest.ivml", 2);
-+    } 
-+
-+    /**
-+     * Boolean reference assign test.
-+     */
-+    @Test
-+    public void booleanReferenceAssignTest() {
-+        reasoningTest("BooleanRefAssignTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * Boolean annotation test.
-+     */
-+    @Test
-+    public void booleanAnnotationTest() {
-+        reasoningTest("BooleanAnnotationTest.ivml", 9);
-+    } 
-+    
-+    /**
-+     * Combined reference-typedef on Boolean.
-+     */
-+    public void referenceDerivedBooleanTest() {
-+        reasoningTest("ReferenceDerivedBooleanTest.ivml", 4);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CodedTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CodedTests.java
-new file mode 100644
-index 0000000..36be3e4
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CodedTests.java
-@@ -0,0 +1,230 @@
-+/*
-+ * Copyright 2009-2015 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.cst.AttributeVariable;
-+import net.ssehub.easy.varModel.cst.CSTSemanticException;
-+import net.ssehub.easy.varModel.cst.ConstantValue;
-+import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
-+import net.ssehub.easy.varModel.cst.OCLFeatureCall;
-+import net.ssehub.easy.varModel.cst.Variable;
-+import net.ssehub.easy.varModel.model.Attribute;
-+import net.ssehub.easy.varModel.model.AttributeAssignment;
-+import net.ssehub.easy.varModel.model.Constraint;
-+import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
-+import net.ssehub.easy.varModel.model.FreezeBlock;
-+import net.ssehub.easy.varModel.model.IFreezable;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.AttributeAssignment.Assignment;
-+import net.ssehub.easy.varModel.model.datatypes.BooleanType;
-+import net.ssehub.easy.varModel.model.datatypes.Compound;
-+import net.ssehub.easy.varModel.model.datatypes.Enum;
-+import net.ssehub.easy.varModel.model.datatypes.EnumLiteral;
-+import net.ssehub.easy.varModel.model.datatypes.FreezeVariableType;
-+import net.ssehub.easy.varModel.model.datatypes.IntegerType;
-+import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
-+import net.ssehub.easy.varModel.model.datatypes.OrderedEnum;
-+import net.ssehub.easy.varModel.model.values.BooleanValue;
-+import net.ssehub.easy.varModel.model.values.Value;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+import net.ssehub.easy.varModel.varModel.testSupport.ProjectTestUtilities;
-+
-+/**
-+ * Tests reasoner capabilities via coded tests, without interactions from the parser.
-+ * 
-+ * @author El-Sharkawy
-+ */
-+public class CodedTests extends AbstractTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected CodedTests(ITestDescriptor descriptor) {
-+        super(descriptor, null);
-+    }
-+
-+    /**
-+     * Simulates value propagation based on a Boolean variable with user input via the UI.
-+     * @throws ValueDoesNotMatchTypeException Must not occur, otherwise ValueFactory is broken.
-+     * @throws CSTSemanticException Must not occur, otherwise constraint.setConsSyntax is broken
-+     * @throws ConfigurationException Must not occur, otherwise {@link IDecisionVariable}s are broken.
-+     */
-+    @Test
-+    public void testBooleanIplication() throws ValueDoesNotMatchTypeException, CSTSemanticException,
-+        ConfigurationException {
-+        
-+        // Define test model
-+        Project project = new Project("BooleanIplicationTest");
-+        Enum enumType = new Enum("Color", project, "RED", "BLUE", "GREEN");
-+        project.add(enumType);
-+        DecisionVariableDeclaration rgbVar = new DecisionVariableDeclaration("rgb", enumType, project);
-+        project.add(rgbVar);
-+        DecisionVariableDeclaration hasColorVar
-+            = new DecisionVariableDeclaration("hasColor", BooleanType.TYPE, project);
-+        project.add(hasColorVar);
-+        
-+        // Create Constraint
-+        Constraint constraint = new Constraint(project);
-+        Value redValue = ValueFactory.createValue(enumType, enumType.getLiteral(0));
-+        ConstantValue redConst = new ConstantValue(redValue);
-+        ConstantValue trueConst = new ConstantValue(BooleanValue.TRUE);
-+        OCLFeatureCall booleanEquals = new OCLFeatureCall(new Variable(hasColorVar), OclKeyWords.EQUALS, trueConst);
-+        OCLFeatureCall enumEquals = new OCLFeatureCall(new Variable(rgbVar), OclKeyWords.EQUALS, redConst);
-+        OCLFeatureCall implies = new OCLFeatureCall(booleanEquals, OclKeyWords.IMPLIES, enumEquals);
-+        constraint.setConsSyntax(implies);
-+        project.add(constraint);
-+        
-+        // Create Configuration out of valid project
-+        ProjectTestUtilities.validateProject(project, true);
-+        Configuration config = new Configuration(project);
-+        
-+        // Simulate user input
-+        IDecisionVariable enumVar = config.getDecision(rgbVar);
-+        enumVar.setValue(null, AssignmentState.UNDEFINED);
-+        IDecisionVariable boolVar = config.getDecision(hasColorVar);
-+        boolVar.setValue(BooleanValue.TRUE, AssignmentState.ASSIGNED);
-+        
-+        // Test precondition
-+        Assert.assertFalse(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue(), 
-+            config.getDecision(rgbVar).hasValue());
-+        Assert.assertEquals(boolVar.getDeclaration().getName() + " has wrong value: " + boolVar.getValue().getValue(), 
-+            BooleanValue.TRUE, config.getDecision(hasColorVar).getValue());
-+        
-+        // Test: Perform reasoning (and propagation)
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        performReasoning(project, config, rConfig);
-+        
-+        // Test precondition
-+        /*Assert.assertTrue(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue(), 
-+            config.getDecision(rgbVar).hasValue());
-+        Assert.assertEquals(enumVar.getDeclaration().getName() + " has wrong value: " + enumVar.getValue().getValue(), 
-+            redValue, config.getDecision(rgbVar).getValue());
-+        Assert.assertEquals(boolVar.getDeclaration().getName() + " has wrong value: " + boolVar.getValue().getValue(), 
-+            BooleanValue.TRUE, config.getDecision(hasColorVar).getValue());*/
-+        
-+        // Output of the configuration
-+        ProjectTestUtilities.validateProject(config.toProject(true, false), true);
-+    }
-+
-+    /**
-+     * Tests freezing.
-+     * 
-+     * @throws ValueDoesNotMatchTypeException shall not occur
-+     * @throws CSTSemanticException shall not occur
-+     */
-+    @Test
-+    public void freezeCompoundTest() throws ValueDoesNotMatchTypeException, CSTSemanticException {
-+        testFreezing(false); 
-+        testFreezing(true);
-+    }
-+
-+    /**
-+     * Creates a project for freezing and checks the frozen states.
-+     * 
-+     * @param runtimeMode whether the test shall happen in runtime reasoning mode
-+     * @throws ValueDoesNotMatchTypeException shall not occur
-+     * @throws CSTSemanticException shall not occur
-+     */
-+    private void testFreezing(boolean runtimeMode) throws ValueDoesNotMatchTypeException, CSTSemanticException {
-+        Project prj = new Project("test");
-+
-+        Enum bindingTime = new OrderedEnum("BindingTime", prj);
-+        bindingTime.add(new EnumLiteral("compile", 1, bindingTime));
-+        bindingTime.add(new EnumLiteral("monitor", 2, bindingTime));
-+        bindingTime.add(new EnumLiteral("enact", 3, bindingTime));
-+        prj.add(bindingTime);
-+        
-+        Attribute attr = new Attribute("binding", bindingTime, prj, prj);
-+        attr.setValue(ValueFactory.createValue(bindingTime, "compile"));
-+        prj.attribute(attr);
-+        prj.add(attr);
-+        
-+        Compound param = new Compound("IntParameter", prj);
-+        param.add(new DecisionVariableDeclaration("defaultValue", IntegerType.TYPE, param));
-+        AttributeAssignment assng = new AttributeAssignment(param);
-+        assng.add(new Assignment("binding", "=", new ConstantValue(ValueFactory.createValue(bindingTime, "enact"))));
-+        assng.add(new DecisionVariableDeclaration("value", IntegerType.TYPE, param));
-+        param.add(assng);
-+        prj.add(param);
-+        
-+        DecisionVariableDeclaration myParam = new DecisionVariableDeclaration("myParam", param, prj);
-+        prj.add(myParam);
-+        
-+        IFreezable[] freezables = new IFreezable[1];
-+        freezables[0] = myParam;
-+        FreezeVariableType iterType = new FreezeVariableType(freezables, prj);
-+        DecisionVariableDeclaration freezeIter = new DecisionVariableDeclaration("b", iterType, prj);
-+        Variable iterEx = new AttributeVariable(new Variable(freezeIter), iterType.getAttribute("binding"));
-+        ConstraintSyntaxTree selector = new OCLFeatureCall(iterEx, ">=", 
-+            new ConstantValue(ValueFactory.createValue(bindingTime, "monitor")));
-+        selector.inferDatatype();
-+        FreezeBlock freeze = new FreezeBlock(freezables, freezeIter, selector, prj);
-+        prj.add(freeze);
-+        
-+        // debugging
-+        //System.out.println(StringProvider.toIvmlString(prj));
-+        
-+        Configuration cfg = new Configuration(prj);
-+        IDecisionVariable myParamVar = cfg.getDecision(myParam);
-+        Assert.assertNotNull(myParamVar);
-+        IDecisionVariable myParamVarDeflt = findNested(myParamVar, "defaultValue");
-+        Assert.assertNotNull(myParamVarDeflt);
-+        Assert.assertEquals(1, myParamVarDeflt.getAttributesCount());
-+        IDecisionVariable myParamVarValue = findNested(myParamVar, "value");
-+        Assert.assertNotNull(myParamVarValue);
-+        Assert.assertEquals(1, myParamVarValue.getAttributesCount());
-+
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        rConfig.setRuntimeMode(runtimeMode);
-+        // Perform reasoning
-+        performReasoning(prj, cfg, rConfig);
-+        
-+        Assert.assertEquals(myParamVarDeflt.getQualifiedName() + " " + myParamVarDeflt.getState(), 
-+            AssignmentState.FROZEN, myParamVarDeflt.getState());
-+        Assert.assertNotEquals(myParamVarValue.getQualifiedName() + " " + myParamVarValue.getState(), 
-+            AssignmentState.FROZEN, myParamVarValue.getState());
-+        //Assert.assertNotEquals(AssignmentState.FROZEN, myParamVar.getState());
-+    }
-+    
-+    /**
-+     * Finds a nested variable.
-+     * 
-+     * @param var the parent variable
-+     * @param name the name of the variable
-+     * @return the nested variable (may be <b>null</b>)
-+     */
-+    private IDecisionVariable findNested(IDecisionVariable var, String name) {
-+        IDecisionVariable result = null;
-+        for (int n = 0; null == result && n < var.getNestedElementsCount(); n++) {
-+            IDecisionVariable decVar = var.getNestedElement(n);
-+            if (decVar.getDeclaration().getName().equals(name)) {
-+                result = decVar;
-+            }
-+        }
-+        return result;
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CompoundTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CompoundTests.java
-new file mode 100644
-index 0000000..ed45db4
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/CompoundTests.java
-@@ -0,0 +1,157 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import java.io.IOException;
-+
-+import org.junit.Ignore;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.varModel.model.Project;
-+
-+/**
-+ * Configures the compound tests for reasoners.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class CompoundTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected CompoundTests(ITestDescriptor descriptor) {
-+        super(descriptor, "compounds");
-+    }
-+    
-+    /**
-+     * Compound reference assign test for a basic type.
-+     */
-+    @Test
-+    public void compoundReferenceAssignTest1() {
-+        reasoningTest("CompoundRefAssignTest1.ivml", 0);
-+    } 
-+
-+    /**
-+     * Compound reference assign test for a compound type.
-+     */
-+    @Test
-+    public void compoundReferenceAssignTest2Fail() {
-+        reasoningTest("CompoundRefAssignTest2.ivml", 0); // re-assign
-+    } 
-+
-+    /**
-+     * Compound reference assign test for a compound type.
-+     */
-+    @Test
-+    public void compoundReferenceAssignTest3() {
-+        reasoningTest("CompoundRefAssignTest3.ivml", 0);
-+    } 
-+
-+    /**
-+     * Compound constraint test for a compound type/instances.
-+     */
-+    @Test
-+    public void compoundConstraintTest() {
-+        reasoningTest("CompoundConstraintTest.ivml", 2);
-+    } 
-+
-+    /**
-+     * Compound constraint test for nested compound type/instances.
-+     */
-+    @Test
-+    public void compoundCompoundTest1() {
-+        reasoningTest("CompoundCompoundTest1.ivml", 2);
-+    } 
-+
-+    /**
-+     * Compound constraint test for nested recursive compound type/instances.
-+     */
-+    @Ignore
-+    @Test
-+    public void compoundCompoundTest2() {
-+        reasoningTest("CompoundCompoundTest2.ivml", 2);
-+    } 
-+
-+    /**
-+     * Compound constraint test for nested containers.
-+     */
-+    @Test
-+    public void compoundContainerTest1() {
-+        reasoningTest("CompoundContainerTest1.ivml", 2);
-+    } 
-+
-+    /**
-+     * Compound constraint test for recursive nested containers.
-+     */
-+    @Test
-+    public void compoundContainerTest2() {
-+        reasoningTest("CompoundContainerTest2.ivml", 4);
-+    } 
-+
-+    /**
-+     * Compound annotation test.
-+     */
-+    @Test
-+    public void compoundAnnotationTest() {
-+        reasoningTest("CompoundAnnotationTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * Derived compound annotation test.
-+     */
-+    @Test
-+    public void derivedCompoundAnnotationTest() {
-+        reasoningTest("DerivedCompoundAnnotationTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * Referenced compound annotation test.
-+     */
-+    @Test
-+    public void referenceCompoundAnnotationTest() {
-+        reasoningTest("ReferenceCompoundAnnotationTest.ivml", 9);
-+    }
-+    
-+    /**
-+     * Tests referenced-derived compounds (testing chains of types).
-+     */
-+    @Ignore
-+    @Test
-+    public void referenceDerivedCompoundTest() {
-+        reasoningTest("ReferenceDerivedCompoundTest.ivml", 5);
-+    }
-+
-+    /**
-+     * Tests changing constraint variables.
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void changingValuesTest() throws IOException {
-+        // basis shall be failing with four tests
-+        reasoningTest("changingValues/changingValuesBase.ivml", 0);
-+        // importing model changes constraints, shall not fail then 
-+        Project prj = loadCompleteProject("changingValues", "changingValues");
-+        resultHandler(0, 0, prj);
-+    }
-+
-+    /**
-+     * Additional compound annotation test on combining nested compounds with an assignment block (QM).
-+     */
-+    @Test
-+    public void compoundAnnotationTest2() {
-+        reasoningTest("CompoundAnnotationTest2.ivml", 0);
-+    } 
-+
-+    /**
-+     * Tests a slot reassignment.
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void slotReassignmentTest() throws IOException {
-+        Project prj = loadCompleteProject("slotReassignment", "Cfg");
-+        resultHandler(0, 0, prj);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EnumTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EnumTests.java
-new file mode 100644
-index 0000000..23bc4e5
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EnumTests.java
-@@ -0,0 +1,161 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Ignore;
-+import org.junit.Test;
-+
-+/**
-+ * Configures the enum tests for SSE reasoner.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class EnumTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected EnumTests(ITestDescriptor descriptor) {
-+        super(descriptor, "enums");
-+    }
-+    
-+    /**
-+     * Enum defaults test.
-+     */
-+    @Test
-+    public void enumDefaultsTest() {
-+        reasoningTest("EnumDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Enum assign test.
-+     */
-+    @Test
-+    public void enumAssignTest() {
-+        reasoningTest("EnumAssignTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Enum in compound defaults test.
-+     */
-+    @Test
-+    public void enumInCompoundDefaultsTest() {
-+        reasoningTest("EnumInCompoundDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Enum in compound assign test.
-+     */
-+    @Test
-+    public void enumInCompoundAssignTest() {
-+        reasoningTest("EnumInCompoundAssignTest.ivml", 0);
-+    } 
-+
-+    
-+    
-+    /**
-+     * OrderedEnum defaults test.
-+     */
-+    @Test
-+    public void orderedEnumDefaultsTest() {
-+        reasoningTest("OrderedEnumDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * OrderedEnum assign test.
-+     */
-+    @Test
-+    public void orderedEnumAssignTest() {
-+        reasoningTest("OrderedEnumAssignTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * OrderedEnum in compound defaults test.
-+     */
-+    @Test
-+    public void orderedEnumInCompoundDefaultsTest() {
-+        reasoningTest("OrderedEnumInCompoundDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * OrderedEnum in compound assign test.
-+     */
-+    @Test
-+    public void orderedEnumInCompoundAssignTest() {
-+        reasoningTest("OrderedEnumInCompoundAssignTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * Enum in collection defaults test.
-+     */
-+    @Test
-+    public void enumInCollectionDefaultsTest() {
-+        reasoningTest("EnumInCollectionDefaultsTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Enum in collection assign test.
-+     */
-+    @Test
-+    public void enumInCollectionAssignTest() {
-+        reasoningTest("EnumInCollectionAssignTest.ivml", 2);
-+    } 
-+
-+    /**
-+     * Ordered enum in collection defaults test.
-+     */
-+    @Test
-+    public void orderedEnumInCollectionDefaultsTest() {
-+        reasoningTest("OrderedEnumInCollectionDefaultsTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Ordered enum in collection assign test.
-+     */
-+    @Test
-+    public void orderedEnumInCollectionAssignTest() {
-+        reasoningTest("OrderedEnumInCollectionAssignTest.ivml", 2);
-+    } 
-+
-+    /**
-+     * Enum reference assign test.
-+     */
-+    @Test
-+    public void enumReferenceAssignTest() {
-+        reasoningTest("EnumRefAssignTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * Ordered enum reference assign test.
-+     */
-+    @Test
-+    public void orderedEnumReferenceAssignTest() {
-+        reasoningTest("OrderedEnumRefAssignTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * Enum annotation test.
-+     */
-+    @Test
-+    public void enumAnnotationTest() {
-+        reasoningTest("EnumAnnotationTest.ivml", 9);
-+    } 
-+
-+    /**
-+     * Ordered enum annotation test.
-+     */
-+    @Test
-+    public void orderdEnumAnnotationTest() {
-+        reasoningTest("OrderedEnumAnnotationTest.ivml", 9);
-+    } 
-+
-+    /**
-+     * Combination of references and typedefs on enums.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void referenceDerivedEnumTest() {
-+        reasoningTest("ReferenceDerivedEnumTest.ivml", 3);
-+    } 
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvalTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvalTests.java
-new file mode 100644
-index 0000000..94c6149
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvalTests.java
-@@ -0,0 +1,49 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Ignore;
-+import org.junit.Test;
-+
-+/**
-+ * Collection constraints tests.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ * @author Eichelberger
-+ */
-+public class EvalTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected EvalTests(ITestDescriptor descriptor) {
-+        super(descriptor, "evals");
-+    }
-+    
-+    /**
-+     * Tests simple eval (priority).
-+     */
-+    @Test
-+    public void simpleEval() {
-+        reasoningTest("SimpleEval.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests nested eval.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void nestedEval() {
-+        reasoningTest("NestedEval.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests compound eval (priority).
-+     */
-+    @Test
-+    public void compoundEval() {
-+        reasoningTest("CompoundEval.ivml", 0);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvaluationIntegrityTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvaluationIntegrityTest.java
-new file mode 100644
-index 0000000..0f1076d
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/EvaluationIntegrityTest.java
-@@ -0,0 +1,268 @@
-+/*
-+ * Copyright 2009-2014 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.basics.modelManagement.ModelManagementException;
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.IAssignmentState;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.cst.CSTSemanticException;
-+import net.ssehub.easy.varModel.cst.ConstantValue;
-+import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
-+import net.ssehub.easy.varModel.cst.OCLFeatureCall;
-+import net.ssehub.easy.varModel.cst.Variable;
-+import net.ssehub.easy.varModel.model.Constraint;
-+import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.ProjectImport;
-+import net.ssehub.easy.varModel.model.datatypes.IntegerType;
-+import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+import net.ssehub.easy.varModel.varModel.testSupport.ProjectTestUtilities;
-+
-+/**
-+ * Tests for {@link Resolver}.
-+ * @author El-Sharkawy
-+ * @author Sizonenko
-+ *
-+ */
-+public class EvaluationIntegrityTest extends AbstractTest {
-+    
-+    // Test: testResolveOfIntegers()
-+    private Project projectP0;
-+    private Project projectP1;
-+    private Project projectP2;    
-+    
-+    private DecisionVariableDeclaration declA;
-+    private DecisionVariableDeclaration declB;
-+    private DecisionVariableDeclaration declC;
-+    private DecisionVariableDeclaration declD;
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected EvaluationIntegrityTest(ITestDescriptor descriptor) {
-+        super(descriptor, null);
-+    }
-+    
-+    /**
-+     * Tests whether integer variables are resolved correctly.
-+     * This tests includes:
-+     * <ul>
-+     * <li>Imports</li>
-+     * <li>Assignments</li>
-+     * <li>Defaults</li>
-+     * <li>Re-Assignments</li>
-+     * </ul>
-+     */
-+    @Test
-+    public void testResolveOfIntegers() {
-+        createProjectP0();
-+        createProjectP1();    
-+        createProjectP2();        
-+        
-+        Configuration config = new Configuration(projectP2, false);
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        performReasoning(projectP2, config, rConfig);
-+        
-+        //assertVariable(config, declA, 2, AssignmentState.DERIVED);
-+        //assertVariable(config, declB, 2, AssignmentState.DERIVED);
-+        //assertVariable(config, declC, 3, AssignmentState.DERIVED);
-+        //assertVariable(config, declD, 5, AssignmentState.DERIVED);
-+    }
-+    
-+    /**
-+     * Tests whether assignments were correctly applied.
-+     * @param config The configuration containing resolved variables.
-+     * @param decl The declaration to test.
-+     * @param expectedValue The expected resolved value
-+     * @param expectedState The expected resolved assignment state
-+     */
-+    private void assertVariable(Configuration config, DecisionVariableDeclaration decl, Object expectedValue,
-+        IAssignmentState expectedState) {
-+        
-+        IDecisionVariable variable = config.getDecision(decl);
-+        Assert.assertNotNull(variable);
-+        Assert.assertNotNull(variable.getValue());
-+        Assert.assertEquals(expectedValue, variable.getValue().getValue());
-+        Assert.assertEquals(expectedState, variable.getState());
-+    }
-+
-+    /**
-+     * Creates imported project P0.
-+     * <pre><code>
-+     * project ProjectP0 {
-+     *
-+     *    Integer intA;
-+     *    Integer intB;
-+     *    intA = 1;
-+     *    intB = intA;
-+     *}
-+     *</code></pre>
-+     */
-+    private void createProjectP0() {
-+        projectP0 = new Project("ProjectP0");
-+        declA = createVar("intA", projectP0);
-+        declB = createVar("intB", projectP0);
-+        Constraint constraintA = new Constraint(projectP0);
-+        Constraint constraintB = new Constraint(projectP0);
-+        try {
-+            constraintA.setConsSyntax(createAssignment(declA, createConstValue(declA, 1)));
-+            projectP0.add(constraintA);
-+            constraintB.setConsSyntax(createAssignment(declB, new Variable(declA)));
-+            projectP0.add(constraintB);
-+        } catch (CSTSemanticException e) {
-+            Assert.fail(e.getMessage());
-+        }
-+        
-+        ProjectTestUtilities.validateProject(projectP0);
-+    }
-+    
-+    /**
-+     * Creates imported project P1.
-+     * <pre><code>
-+     * project ProjectP1 {
-+     *    import ProjectP0;
-+     *
-+     *    intA = 2;
-+     *}
-+     *</code></pre>
-+     */
-+    private void createProjectP1() {
-+        projectP1 = new Project("ProjectP1");
-+        ProjectImport importP0 = new ProjectImport(projectP0.getName(), null);
-+        projectP1.addImport(importP0);       
-+        try {
-+            importP0.setResolved(projectP0);            
-+        } catch (ModelManagementException e) {
-+            Assert.fail(e.getMessage());
-+        }
-+        
-+        Constraint constraint = new Constraint(projectP1);
-+        try {
-+            constraint.setConsSyntax(createAssignment(declA, createConstValue(declA, 2)));
-+            projectP1.add(constraint);
-+        } catch (CSTSemanticException e) {
-+            Assert.fail(e.getMessage());
-+        }
-+        
-+        ProjectTestUtilities.validateProject(projectP1);
-+    }  
-+    
-+    /**
-+     * Creates top imported project.
-+     * <pre><code>
-+     * project ProjectP2 {
-+     *
-+     *    import ProjectP1;
-+     *    
-+     *    Integer intC;
-+     *    intC = 1;
-+     *    intC == 1 implies intA == 3;;
-+     *}
-+     *</code></pre>
-+     */
-+    private void createProjectP2() {
-+        projectP2 = new Project("ProjectP2");
-+        ProjectImport importP1 = new ProjectImport(projectP1.getName(), null);
-+        projectP2.addImport(importP1);       
-+        try {
-+            importP1.setResolved(projectP1);            
-+        } catch (ModelManagementException e) {
-+            Assert.fail(e.getMessage());
-+        }
-+        
-+        declC = createVar("intC", projectP2);
-+        Constraint constraintC = new Constraint(projectP2);
-+        try {
-+            constraintC.setConsSyntax(createAssignment(declC, createConstValue(declC, 3)));
-+            projectP2.add(constraintC);
-+        } catch (CSTSemanticException e) {
-+            Assert.fail(e.getMessage());
-+        }
-+        
-+        declD = createVar("intD", projectP2);
-+        Constraint constraintD = new Constraint(projectP2);
-+        OCLFeatureCall plus = new OCLFeatureCall(new Variable(declC), OclKeyWords.PLUS, new Variable(declA));
-+        try {
-+            constraintD.setConsSyntax(createAssignment(declD, plus));
-+            projectP2.add(constraintD);
-+        } catch (CSTSemanticException e) {
-+            Assert.fail(e.getMessage());
-+        }
-+        
-+        Constraint constraintImplies = new Constraint(projectP2);
-+        OCLFeatureCall left = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, createConstValue(declC, 1));
-+        OCLFeatureCall right 
-+            = new OCLFeatureCall(new Variable(declA), OclKeyWords.EQUALS, createConstValue(declA, 3));        
-+        OCLFeatureCall implies = new OCLFeatureCall(left, OclKeyWords.IMPLIES, right);
-+        try {
-+            constraintImplies.setConsSyntax(implies); 
-+            projectP2.add(constraintImplies);
-+        } catch (CSTSemanticException e) {
-+            Assert.fail(e.getMessage());
-+        }
-+        
-+        ProjectTestUtilities.validateProject(projectP2);
-+    }  
-+
-+    /**
-+     * Creates a new integer {@link DecisionVariableDeclaration} in the given {@link Project}.
-+     * @param varName The name of the {@link DecisionVariableDeclaration}.
-+     * @param project The project where to add the {@link DecisionVariableDeclaration}.
-+     * @return The created {@link DecisionVariableDeclaration}.
-+     */
-+    private DecisionVariableDeclaration createVar(String varName, Project project) {
-+        DecisionVariableDeclaration decl = new DecisionVariableDeclaration(varName, IntegerType.TYPE, project);
-+        project.add(decl);
-+        return decl;
-+    }
-+
-+    /**
-+     * Creates a {@link ConstantValue} for a given {@link DecisionVariableDeclaration}.
-+     * @param decl The {@link DecisionVariableDeclaration} for which the {@link ConstantValue} shall be created.
-+     * @param value The value to create.
-+     * @return The created {@link ConstraintSyntaxTree}.
-+     */
-+    private ConstraintSyntaxTree createConstValue(DecisionVariableDeclaration decl, Object... value) {
-+        ConstantValue constValue = null;
-+        try {
-+            constValue = new ConstantValue(ValueFactory.createValue(decl.getType(), value));
-+        } catch (ValueDoesNotMatchTypeException e) {
-+            Assert.fail(e.getMessage());
-+        }
-+        
-+        return constValue;
-+    }
-+    
-+    /**
-+     * Creates an assignment {@link ConstraintSyntaxTree}.
-+     * @param decl The {@link DecisionVariableDeclaration} for which an assignment shall be created for.
-+     * @param value The value of the assignment constraint.
-+     * @return The created assignment {@link ConstraintSyntaxTree}.
-+     */
-+    private ConstraintSyntaxTree createAssignment(DecisionVariableDeclaration decl, ConstraintSyntaxTree value) {
-+        return new OCLFeatureCall(new Variable(decl), OclKeyWords.ASSIGNMENT, value);
-+    }    
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ITestDescriptor.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ITestDescriptor.java
-new file mode 100644
-index 0000000..1eaefd5
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ITestDescriptor.java
-@@ -0,0 +1,102 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+/**
-+ * Contains common code to perform direct reasoner testing.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public interface ITestDescriptor {
-+
-+    /**
-+     * Defines reasoner capabilities which may not be supported and, thus, shall not be tested.
-+     * 
-+     * @author Eichelberger
-+     */
-+    public enum Capabilities {
-+        CHECK,
-+        CONSISTENT
-+    }
-+
-+    /**
-+     * Creates a reasoner instance to test against.
-+     * 
-+     * @return the reasoner instance
-+     */
-+    public IReasoner createReasoner();
-+
-+    /**
-+     * Returns the system property.
-+     * 
-+     * @return the system property
-+     */
-+    public String getSystemProperty();
-+    
-+    /**
-+     * Returns the plugin id of the containing test.
-+     * 
-+     * @return the plugin id
-+     */
-+    public String getPluginId();
-+    
-+    /**
-+     * Supposed to register the reasoner with the ReasonerFrontend.
-+     */
-+    public void registerResoner();
-+
-+    /**
-+     * Supposed to unregister the reasoner from the ReasonerFrontend.
-+     */
-+    public void unregisterReasoner();
-+
-+    /**
-+     * Returns whether <code>capability</code> is supported.
-+     * 
-+     * @param capability the capability to check for
-+     * @return <code>true</code> if <code>capability</code> is supported, <code>false</code> else
-+     */
-+    public boolean isSupported(Capabilities capability);
-+      
-+    /**
-+     * Returns the name of the reasoner.
-+     * 
-+     * @return the name of the reasoner
-+     */
-+    public String getName();
-+    
-+    /**
-+     * Returns the version of the reasoner.
-+     * 
-+     * @return the version of the reasoner
-+     */
-+    public String getVersion();
-+    
-+    /**
-+     * Returns the measurements relevant for the tests denoted by this descriptor.
-+     * 
-+     * @return the measurements
-+     */
-+    public IMeasurementKey[] measurements();
-+    
-+    /**
-+     * Returns the name of the measurement file.
-+     * 
-+     * @return the name of the measurement file
-+     */
-+    public String getMeasurementFileName();
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegerTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegerTests.java
-new file mode 100644
-index 0000000..5b23966
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegerTests.java
-@@ -0,0 +1,103 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Ignore;
-+import org.junit.Test;
-+
-+/**
-+ * Configures the integer tests for SSE reasoner.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class IntegerTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected IntegerTests(ITestDescriptor descriptor) {
-+        super(descriptor, "integer");
-+    }
-+    
-+    /**
-+     * Integer defaults test.
-+     */
-+    @Test
-+    public void integerDefaultsTest() {
-+        reasoningTest("IntegerDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Integer assign test.
-+     */
-+    @Test
-+    public void integerAssignTest() {
-+        reasoningTest("IntegerAssignTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Integer in compound defaults test.
-+     */
-+    @Test
-+    public void integerInCompoundDefaultsTest() {
-+        reasoningTest("IntegerInCompoundDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Integer in compound assign test.
-+     */
-+    @Test
-+    public void integerInCompoundAssignTest() {
-+        reasoningTest("IntegerInCompoundAssignTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * Integer in collection defaults test.
-+     */
-+    @Test
-+    public void integerInCollectionDefaultsTest() {
-+        reasoningTest("IntegerInCollectionDefaultsTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Integer in collection assign test.
-+     */
-+    @Test
-+    public void integerInCollectionAssignTest() {
-+        reasoningTest("IntegerInCollectionAssignTest.ivml", 2);
-+    }
-+
-+    /**
-+     * Integer reference assign test.
-+     */
-+    @Test
-+    public void integerReferenceAssignTest() {
-+        reasoningTest("IntegerRefAssignTest.ivml", 0);
-+    }
-+
-+    /**
-+     * Integer annotation test.
-+     */
-+    @Test
-+    public void integerAnnotationTest() {
-+        reasoningTest("IntegerAnnotationTest.ivml", 9);
-+    }
-+
-+    /**
-+     * Combined reference-typedef on Integer.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void referenceDerivedIntegerTest() {
-+        reasoningTest("ReferenceDerivedIntegerTest.ivml", 4);
-+    }
-+
-+    /**
-+     * Reassignment failure (#46).
-+     */
-+    @Test
-+    public void variableFailTest() {
-+        reasoningTest("VariableFailTest.ivml", 0);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegrityTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegrityTests.java
-new file mode 100644
-index 0000000..74e13d6
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/IntegrityTests.java
-@@ -0,0 +1,105 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.cst.CSTSemanticException;
-+import net.ssehub.easy.varModel.cst.ConstantValue;
-+import net.ssehub.easy.varModel.cst.OCLFeatureCall;
-+import net.ssehub.easy.varModel.cst.Variable;
-+import net.ssehub.easy.varModel.model.Constraint;
-+import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.datatypes.IntegerType;
-+import net.ssehub.easy.varModel.model.datatypes.OclKeyWords;
-+import net.ssehub.easy.varModel.model.values.Value;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+
-+/**
-+ * Configures the operation tests for Drools.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class IntegrityTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected IntegrityTests(ITestDescriptor descriptor) {
-+        super(descriptor, null); // no test path, in memory tests only
-+    }
-+
-+    /**
-+     * Tests whether implies constraints will be handled correctly by the
-+     * {@link net.ssehub.easy.varModel.confModel.AssignmentResolver}.
-+     * @throws ValueDoesNotMatchTypeException Must not occur otherwise there is a failure inside the
-+     * {@link ValueFactory}.
-+     * @throws CSTSemanticException  Must not occur otherwise there is a failure inside the constraint syntax trees.
-+     */
-+    @Test
-+    public void testImplies() throws ValueDoesNotMatchTypeException, CSTSemanticException {
-+        // Create project and variables
-+        Project project = new Project("assignmentTestProject");
-+        DecisionVariableDeclaration declA = new DecisionVariableDeclaration("intA", IntegerType.TYPE, project);
-+        project.add(declA);
-+        DecisionVariableDeclaration declB = new DecisionVariableDeclaration("intB", IntegerType.TYPE, project);
-+        project.add(declB);
-+        DecisionVariableDeclaration declC = new DecisionVariableDeclaration("intC", IntegerType.TYPE, project);
-+        declC.setValue(33);
-+        project.add(declC);
-+        
-+        // Create assignment
-+        Value valA = ValueFactory.createValue(declA.getType(), 31);
-+        Variable varA = new Variable(declA);
-+        ConstantValue constValA = new ConstantValue(valA);
-+        OCLFeatureCall assignmentA = new OCLFeatureCall(varA, OclKeyWords.ASSIGNMENT, constValA);
-+        Constraint assignmentConstraint = new Constraint(project);
-+        assignmentConstraint.setConsSyntax(assignmentA);
-+        project.add(assignmentConstraint);       
-+   
-+        
-+        // Create implies constraint
-+        Value valB = ValueFactory.createValue(declB.getType(), 37);
-+        ConstantValue constValB = new ConstantValue(valB);
-+        Value valC = ValueFactory.createValue(declC.getType(), 40);
-+        ConstantValue constValC = new ConstantValue(valC);
-+        OCLFeatureCall equalsA = new OCLFeatureCall(varA, OclKeyWords.EQUALS, constValA);
-+        OCLFeatureCall equalsB = new OCLFeatureCall(new Variable(declB), OclKeyWords.EQUALS, constValB);
-+        OCLFeatureCall equalsC = new OCLFeatureCall(new Variable(declC), OclKeyWords.EQUALS, constValC);
-+        OCLFeatureCall implies = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsB);
-+        OCLFeatureCall impliesFail = new OCLFeatureCall(equalsA, OclKeyWords.IMPLIES, equalsC);
-+        Constraint impliesConstaint = new Constraint(project);
-+        impliesConstaint.setConsSyntax(implies);
-+        project.add(impliesConstaint);
-+        Constraint impliesConstaintFail = new Constraint(project);
-+        impliesConstaintFail.setConsSyntax(impliesFail);
-+        project.add(impliesConstaintFail);
-+        
-+        // Create Configuration (will also start AssignmentResolver)
-+        Configuration config = new Configuration(project, true);
-+        IDecisionVariable iVarA = config.getDecision(declA);
-+        IDecisionVariable iVarB = config.getDecision(declB);
-+        IDecisionVariable iVarC = config.getDecision(declC);
-+
-+        // Test correct assignments
-+        Assert.assertNotNull(iVarA);
-+        Assert.assertEquals(31, iVarA.getValue().getValue());
-+        assertContained(iVarA.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+
-+        Assert.assertNotNull(iVarB);
-+        Assert.assertEquals(37, iVarB.getValue().getValue());
-+        assertContained(iVarB.getState(), AssignmentState.ASSIGNED, AssignmentState.DERIVED);
-+        
-+        Assert.assertNotNull(iVarC);
-+        Assert.assertEquals(33, iVarC.getValue().getValue());
-+        Assert.assertSame(AssignmentState.DEFAULT, iVarC.getState());
-+    }    
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/InterfaceTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/InterfaceTests.java
-new file mode 100644
-index 0000000..aa7deef
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/InterfaceTests.java
-@@ -0,0 +1,94 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import java.io.IOException;
-+import java.util.Iterator;
-+
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.varModel.confModel.AssignmentState;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.IAssignmentState;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.model.AbstractVariable;
-+import net.ssehub.easy.varModel.model.ModelQuery;
-+import net.ssehub.easy.varModel.model.ModelQueryException;
-+import net.ssehub.easy.varModel.model.Project;
-+
-+/**
-+ * Configures the interface tests for reasoners.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class InterfaceTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected InterfaceTests(ITestDescriptor descriptor) {
-+        super(descriptor, "interfaces");
-+    }
-+
-+    /**
-+     * Tests changing constraint variables.
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     */
-+    @Test
-+    public void unfrozenTest() throws IOException, ModelQueryException {
-+        reasoningTest("Basis", 0);
-+        Configuration cfg = reasoningTest("Unfrozen", 1);
-+        //assertState(cfg, "iVal", AssignmentState.DERIVED, AssignmentState.ASSIGNED);
-+        //assertState(cfg, "sVal", AssignmentState.DERIVED, AssignmentState.ASSIGNED);
-+        //assertState(cfg, "myVal", AssignmentState.DERIVED, AssignmentState.ASSIGNED);
-+    }
-+
-+    /**
-+     * Tests changing constraint variables.
-+     * 
-+     * @throws IOException shall not occur
-+     * @throws ModelQueryException shall not occur
-+     */
-+    @Test
-+    public void frozenTest() throws IOException, ModelQueryException {
-+        reasoningTest("Basis", 0);
-+        Configuration cfg = reasoningTest("Frozen", 1);
-+        //assertState(cfg, "iVal", AssignmentState.FROZEN);
-+        //assertState(cfg, "sVal", AssignmentState.FROZEN);
-+        //assertState(cfg, "myVal", AssignmentState.FROZEN);
-+    }
-+
-+    /**
-+     * Asserts the state of a given variable, also as fallback by iterating through the configuration
-+     * in case of variables under IVML interface access restrictions.
-+     * 
-+     * @param cfg the configuration
-+     * @param varName the variable name
-+     * @param states the states to be asserted (at least one)
-+     * @throws ModelQueryException in case that accessing the underlying variable fails
-+     */
-+    private void assertState(Configuration cfg, String varName, IAssignmentState... states) throws ModelQueryException {
-+        Project prj = cfg.getProject();
-+        AbstractVariable decl = ModelQuery.findVariable(prj, varName, null);
-+        IDecisionVariable var = null;
-+        if (null == decl) {
-+            // fallback to bypass interface access restriction
-+            Iterator<IDecisionVariable> iter = cfg.iterator();
-+            while (null == var && iter.hasNext()) {
-+                IDecisionVariable tmp = iter.next();
-+                if (varName.equals(tmp.getDeclaration().getName())) {
-+                    var = tmp;
-+                }
-+            }
-+        } else {
-+            var = cfg.getDecision(decl);
-+        }
-+        Assert.assertNotNull(var);
-+        assertContained(var.getState(), (Object[]) states);
-+    }
-+    
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RampUpTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RampUpTest.java
-new file mode 100644
-index 0000000..c7a0677
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RampUpTest.java
-@@ -0,0 +1,110 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Assert;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.basics.progress.ProgressObserver;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.confModel.ConfigurationException;
-+import net.ssehub.easy.varModel.cst.CSTSemanticException;
-+import net.ssehub.easy.varModel.cst.CompoundAccess;
-+import net.ssehub.easy.varModel.cst.ConstantValue;
-+import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
-+import net.ssehub.easy.varModel.cst.ContainerOperationCall;
-+import net.ssehub.easy.varModel.cst.OCLFeatureCall;
-+import net.ssehub.easy.varModel.cst.Variable;
-+import net.ssehub.easy.varModel.model.Constraint;
-+import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
-+import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.datatypes.Compound;
-+import net.ssehub.easy.varModel.model.datatypes.IntegerType;
-+import net.ssehub.easy.varModel.model.datatypes.Set;
-+import net.ssehub.easy.varModel.model.values.ValueDoesNotMatchTypeException;
-+import net.ssehub.easy.varModel.model.values.ValueFactory;
-+
-+/**
-+ * Not a real test, just to ramp up the reasoner so that for subsequent tests most classloading issues are already done.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class RampUpTest extends AbstractTest {
-+
-+    /**
-+     * Creates the ramp-up test.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected RampUpTest(ITestDescriptor descriptor) {
-+        super(descriptor, null);
-+    }
-+
-+    /**
-+     * Performs the ram-up test.
-+     * 
-+     * @throws ConfigurationException if setting an expression as default value fails
-+     * @throws ValueDoesNotMatchTypeException if a value does not match a type
-+     * @throws CSTSemanticException if a constraint is erroneously composed
-+     */
-+    @Test
-+    public void rampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
-+        CSTSemanticException {
-+        ReasonerConfiguration rConfig = new ReasonerConfiguration();
-+        Configuration cfg = createRampUpTest();
-+        IReasoner reasoner = createReasoner();
-+        // NO MEASUREMENT!!!
-+        ReasoningResult rResult = reasoner.propagate(cfg.getProject(), cfg, rConfig, ProgressObserver.NO_OBSERVER);
-+        rResult.logInformation(cfg.getProject(), rConfig);
-+        Assert.assertFalse(rResult.hasConflict());
-+    }
-+    
-+    /**
-+     * Creates the configuration for a ram-up test, just a configuration to reason on.
-+     * 
-+     * @return the configuration
-+     * @throws ConfigurationException if setting an expression as default value fails
-+     * @throws ValueDoesNotMatchTypeException if a value does not match a type
-+     * @throws CSTSemanticException if a constraint is erroneously composed
-+     */
-+    public static Configuration createRampUpTest() throws ConfigurationException, ValueDoesNotMatchTypeException, 
-+        CSTSemanticException {
-+        Project prj = new Project("Test");
-+        Compound cmp = new Compound("Cmp", prj);
-+        prj.add(cmp);
-+        DecisionVariableDeclaration cmpV1 = new DecisionVariableDeclaration("v1", IntegerType.TYPE, prj);
-+        cmpV1.setValue(new OCLFeatureCall(
-+            new ConstantValue(ValueFactory.createValue(IntegerType.TYPE, 1)), 
-+            IntegerType.PLUS_INTEGER_INTEGER.getName(), 
-+            new ConstantValue(ValueFactory.createValue(IntegerType.TYPE, 5))));
-+        cmp.add(cmpV1);
-+        Set cmpSet = new Set("", cmp, prj);
-+        DecisionVariableDeclaration set = new DecisionVariableDeclaration("s", cmpSet, prj);
-+        DecisionVariableDeclaration iter = new DecisionVariableDeclaration("i", cmp, prj);
-+        ConstraintSyntaxTree iterEx = new OCLFeatureCall(
-+            new CompoundAccess(new Variable(iter), "v1"), 
-+            IntegerType.GREATER_INTEGER_INTEGER.getName(), 
-+            new ConstantValue(ValueFactory.createValue(IntegerType.TYPE, 2)));
-+        iterEx.inferDatatype();
-+        ConstraintSyntaxTree op = new ContainerOperationCall(new Variable(set), Set.FORALL.getName(), iterEx, iter);
-+        op.inferDatatype();
-+        Constraint constraint = new Constraint(op, prj);
-+        prj.add(constraint);
-+        
-+        return new Configuration(prj);
-+    }
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RealTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RealTests.java
-new file mode 100644
-index 0000000..832f56e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/RealTests.java
-@@ -0,0 +1,110 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import java.io.IOException;
-+
-+import org.junit.Ignore;
-+import org.junit.Test;
-+
-+import net.ssehub.easy.varModel.model.Project;
-+
-+/**
-+ * Configures the real tests for SSE reasoner.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class RealTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected RealTests(ITestDescriptor descriptor) {
-+        super(descriptor, "real");
-+    }
-+    
-+    /**
-+     * Real defaults test.
-+     */
-+    @Test
-+    public void realDefaultsTest() {
-+        reasoningTest("RealDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Real assign test.
-+     */
-+    @Test
-+    public void realAssignTest() {
-+        reasoningTest("RealAssignTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Real in compound defaults test.
-+     */
-+    @Test
-+    public void realInCompoundDefaultsTest() {
-+        reasoningTest("RealInCompoundDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Real in compound assign test.
-+     */
-+    @Test
-+    public void realInCompoundAssignTest() {
-+        reasoningTest("RealInCompoundAssignTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * Real in collection defaults test.
-+     */
-+    @Test
-+    public void realInCollectionDefaultsTest() {
-+        reasoningTest("RealInCollectionDefaultsTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Real in collection assign test.
-+     */
-+    @Test
-+    public void realInCollectionAssignTest() {
-+        reasoningTest("RealInCollectionAssignTest.ivml", 2);
-+    } 
-+
-+    /**
-+     * Real reference assign test.
-+     */
-+    @Test
-+    public void realReferenceAssignTest() {
-+        reasoningTest("RealRefAssignTestFail.ivml", 0); // re-assinment
-+    } 
-+    
-+    /**
-+     * Tests whether overridden default values for constraint variables are evaluated correctly.
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void testConstraintDefaults() throws IOException {
-+        Project p = loadCompleteProject("realRefAssign", "RealRefAssignTest");
-+        resultHandler(0, 0, p);
-+    }
-+
-+    /**
-+     * Real annotation test.
-+     */
-+    @Test
-+    public void realAnnotationTest() {
-+        reasoningTest("RealAnnotationTest.ivml", 9);
-+    } 
-+
-+    /**
-+     * Combined reference-typedef on Real.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void referenceDerivedRealTest() {
-+        reasoningTest("ReferenceDerivedRealTest.ivml", 4);
-+    }    
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningScenarioTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningScenarioTests.java
-new file mode 100644
-index 0000000..2862a9e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningScenarioTests.java
-@@ -0,0 +1,278 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Test;
-+
-+/**
-+ * Configures the operation tests for SSE reasoner.
-+ * 
-+ * @author Sizonenko
-+ * @author El-Sharkawy
-+ */
-+public class ReasoningScenarioTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected ReasoningScenarioTests(ITestDescriptor descriptor) {
-+        super(descriptor, "operationsTemplates");
-+    }
-+    
-+    /**
-+     * Basic test.
-+     */
-+    @Test    
-+    public void initialTest() {
-+        reasoningTest("InitialTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * Tests collections.
-+     */
-+    @Test    
-+    public void preCollectionTest() {
-+        reasoningTest("PreCollectionTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests duplicates.
-+     */
-+    @Test    
-+    public void hasDuplicatesTestTest() {
-+        reasoningTest("HasDuplicatesTest.ivml", 1);
-+    }      
-+    
-+    /**
-+     * Tests freeze.
-+     */
-+    @Test    
-+    public void freezeTest() {
-+        reasoningTest("FreezeTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Tests import freeze.
-+     */
-+    @Test    
-+    public void freezeImportTest() {
-+        reasoningTest("FreezeTest.ivml", "FreezeImportTest.ivml", 1);
-+    } 
-+    
-+    /**
-+     * Tests import freeze.
-+     */
-+    @Test 
-+    public void nullTest() {
-+        reasoningTest("NullTest.ivml", 3);
-+    } 
-+    
-+    /**
-+     * Tests null import.
-+     */
-+    @Test  
-+    public void nullImportTest() {
-+        reasoningTest("NullTest.ivml", "NullImportTest.ivml", 4);
-+    } 
-+    
-+    /**
-+     * Tests import child (1 failed constraint).
-+     */
-+    @Test    
-+    public void importChildTest() {
-+        reasoningTest("ImportChild.ivml", 1);
-+    } 
-+    
-+    /**
-+     * Tests import core (variable is reassigned and 0 constraints fail).
-+     */
-+    @Test    
-+    public void importCoreTest() {
-+        reasoningTest("ImportChild.ivml", "ImportCore.ivml", 0);
-+    } 
-+    
-+    /**
-+     * Tests internal constraints.
-+     */ 
-+    @Test
-+    public void internalConstraintTest() {
-+        reasoningTest("InternalConstraintTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests constraint variables. 
-+     */ 
-+    @Test    
-+    public void constraintVariablesTest() {
-+        reasoningTest("ConstraintVariableTest.ivml", 2);
-+    }
-+    
-+    /**
-+     * Tests failed variables assignments.
-+     */ 
-+    @Test    
-+    public void variableAssignmentFailTest() {
-+        reasoningTest("VariableAssignmentFailTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests constraint variables.
-+     */ 
-+    @Test    
-+    public void compoundEqualityTest() {
-+        reasoningTest("CompoundEqualityTest.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests compound internal constraints.
-+     */
-+    @Test    
-+    public void constrainedCompoundTest() {
-+        reasoningTest("ConstrainedCompoundTest.ivml", 3);
-+    }
-+    
-+    /**
-+     * Tests annotation assignment.
-+     */
-+    @Test    
-+    public void annotationInitialTest() {
-+        reasoningTest("AnnotationInitialTest.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests annotations in compound.
-+     */
-+    @Test    
-+    public void annotationAssignedToDifferentCompoundSlotsValid() {
-+        reasoningTest("AnnotationAssignedToDifferentCompoundSlotsValid.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests compound nested constraints.
-+     */
-+    @Test    
-+    public void refinedCompoundTest() {
-+        reasoningTest("RefinedCompoundTest.ivml", 1); // test purpose unclear, src will always fail
-+    }
-+    
-+    /**
-+     * Tests trace in failed elements.
-+     */
-+    @Test
-+    public void traceTest() {
-+        reasoningTest("TraceTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests trace in failed elements.
-+     */
-+    @Test
-+    public void nestedVariableReplaceTest() {
-+        reasoningTest("nestedVariableReplaceTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * String patern test with internal constraint.
-+     */
-+    @Test
-+    public void internalConstraintStringPaternTest() {
-+        reasoningTest("internalConstraintStringPaternTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Inherited internal constraint test.
-+     */
-+    @Test
-+    public void internalConstraintInheritedTest() {
-+        reasoningTest("internalConstraintInheritedTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Inherited internal constraint in compound test.
-+     */
-+    @Test
-+    public void internalConstraintInheritedInCompoundTest() {
-+        reasoningTest("internalConstraintInheritedInCompoundTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * Collection internal constraint test.
-+     */
-+    @Test
-+    public void internalConstraintCollectionTest() {
-+        reasoningTest("internalConstraintCollectionTest.ivml", 2);
-+    }
-+    
-+    /**
-+     * Collection internal constraint in compound test.
-+     */
-+    @Test
-+    public void internalConstraintCollectionInCompoundTest() {
-+        reasoningTest("internalConstraintCollectionInCompoundTest.ivml", 2);
-+    }
-+    
-+    /**
-+     * String pattern test with internal constraint.
-+     */
-+    @Test
-+    public void refToCompoundInSequenceTest() {
-+        reasoningTest("RefToCompoundInSequenceTest.ivml", 0);
-+    }
-+    
-+    /**
-+     * Default constraint reevaluation.
-+     */
-+    @Test
-+    public void defaultConstraintReevaluationTest() {
-+        reasoningTest("DefaultConstraintReevaluationTest.ivml", 1);
-+    }
-+    
-+    /**
-+     * isDefined test.
-+     */
-+    @Test
-+    public void isDefinedTest() {
-+        reasoningTest("IsDefinedTest.ivml", 10);
-+    }  
-+    
-+    /**
-+     * isDefined Compound test.
-+     */
-+    @Test
-+    public void isDefinedCompoundTest() {
-+        reasoningTest("IsDefinedCompoundTest.ivml", 1);
-+    }  
-+    
-+    /**
-+     * Test for collections of compounds equality operation.
-+     */
-+    @Test
-+    public void compoundCollectionEqualityTest() {
-+        reasoningTest("compoundCollectionEqualityTest.ivml", 1);
-+    }  
-+    
-+    /**
-+     * Test for collections of refTo(compounds) equality operation.
-+     */
-+    @Test
-+    public void refByCompoundCollectionEqualityTest() {
-+        reasoningTest("refByCompoundCollectionEqualityTest.ivml", 1);
-+    }  
-+    
-+    /**
-+     * Test for collections of string equality operation.
-+     */
-+    @Test
-+    public void stringCollectionEqualityTest() {
-+        reasoningTest("stringCollectionEqualityTest.ivml", 2);
-+    }
-+    
-+    /**
-+     * Test for incremental reasoning and clering derived values in configuration..
-+     */
-+    @Test
-+    public void clearConfigTest() {
-+        reasoningTest("ClearConfigBase.ivml", "ClearConfigCore.ivml", 0);
-+    }   
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StressTest.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StressTest.java
-new file mode 100644
-index 0000000..d8615f8
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StressTest.java
-@@ -0,0 +1,169 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import java.io.IOException;
-+
-+import org.junit.Test;
-+
-+import net.ssehub.easy.varModel.model.Project;
-+
-+/**
-+ * Stresstests.
-+ * 
-+ * @author krafczyk
-+ */
-+public class StressTest extends AbstractTest {
-+
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected StressTest(ITestDescriptor descriptor) {
-+        super(descriptor, "stresstest");
-+    }
-+
-+    /**
-+     * Tests whether boolean default values are handled correctly.
-+     */
-+    @Test
-+    public void testBooleanDefault() {
-+        // Test whether default values for booleans are not treated as project constraints
-+        reasoningTest("BooleanDefault.1.ivml", 0);
-+        // Test whether default values for booleans are applied to them
-+        reasoningTest("BooleanDefault.2.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests whether boolean implies values are handled correctly.
-+     */
-+    @Test
-+    public void testBooleanImplies() {
-+        reasoningTest("BooleanImplies.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests whether constraint variables are evaluated correctly.
-+     */
-+    @Test
-+    public void testConstraintEvaluation() {
-+        reasoningTest("ConstraintEval.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests whether overridden default values for constraint variables are evaluated correctly.
-+     */
-+    @Test
-+    public void testConstraintDefaultsFail() {
-+        reasoningTest("ConstraintDefault.1-fail.ivml", 1); // false constraint and re-assign
-+        reasoningTest("ConstraintDefault.2-fail.ivml", 0);
-+    }
-+
-+    /**
-+     * Tests whether overridden default values for constraint variables are evaluated correctly.
-+     * 
-+     * @throws IOException shall not occur
-+     */
-+    @Test
-+    public void testConstraintDefaults() throws IOException {
-+        Project p = loadCompleteProject("constraintDefault", "ConstraintDefault1");
-+        resultHandler(1, 0, p);
-+        p = loadCompleteProject("constraintDefault", "ConstraintDefault2");
-+        resultHandler(0, 0, p); // false constraint
-+    }
-+
-+    /**
-+     * Tests whether automatic assignment of undefined variables in constraints
-+     * via == results in failing constraints.
-+     */
-+    @Test
-+    public void testUndefinedVariables() {
-+        reasoningTest("UndefinedVariables.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests whether typedefs work correctly with compounds.
-+     */
-+    @Test
-+    public void testCompoundTypedef() {
-+        // Tests whether simple typedefs ("aliases") work
-+        reasoningTest("CompoundTypedef.1.ivml", 0);
-+        // Tests whether typedefs with "with" work
-+        reasoningTest("CompoundTypedef.2.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests whether typedefs work correctly with sequences and sets.
-+     */
-+    @Test
-+    public void testSetAndSequenceTypedef() {
-+        // Tests whether simple typedefs ("aliases") work with sets and sequences
-+        reasoningTest("SetAndSequenceTypedef.ivml", 2);
-+        // Tests whether typedefs of typedefs and "with" works for sequences
-+        reasoningTest("SequenceTypedefWith.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests whether constraints in refined compounds produce the right number of error messages.
-+     */
-+    @Test
-+    public void testCompoundRefineConstraints() {
-+        reasoningTest("CompoundRefineConstraints.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests whether typedef constraints are correctly evaluated in sequences / sets.
-+     */
-+    @Test
-+    public void testTypedefConstraintsInSequences() {
-+        reasoningTest("TypedefConstraintSequence.ivml", 1);
-+    }
-+    
-+    /**
-+     * Tests whether out-of-bounds accesses to sequences are handled correctly.
-+     */
-+    @Test
-+    public void testOutOfBoundsIndex() {
-+        reasoningTest("OutOfBoundsIndex.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests whether size() works for null sets and sequences.
-+     */
-+    @Test
-+    public void testNullSize() {
-+        reasoningTest("NullSize.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests whether == in implies LHS is treated correctly.
-+     */
-+    @Test
-+    public void testPropagationSyntax() {
-+        reasoningTest("PropagationSyntax1.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests whether undefined values in if are handled correctly.
-+     */
-+    @Test
-+    public void testIfWithUndefinedValues() {
-+        reasoningTest("UndefinedIf.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests whether constraints with undefined variables are ignored.
-+     */
-+    @Test
-+    public void testUndefinedVariableConstraints() {
-+        reasoningTest("UndefinedVariableConstraints.ivml", 0);
-+    }
-+    
-+    /**
-+     * Tests whether constants passed to custom operations don't cause exceptions.
-+     */
-+    @Test
-+    public void testConstantInCustomOperation() {
-+        reasoningTest("ConstantInCustomOperation.ivml", 0);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StringTests.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StringTests.java
-new file mode 100644
-index 0000000..6bb405b
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/src/net/ssehub/easy/reasoning/core/reasoner/StringTests.java
-@@ -0,0 +1,96 @@
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+import org.junit.Ignore;
-+import org.junit.Test;
-+
-+/**
-+ * Configures the String tests for SSE reasoner.
-+ * 
-+ * @author Eichelberger
-+ */
-+public class StringTests extends AbstractTest {
-+    
-+    /**
-+     * Creating a test instance.
-+     * 
-+     * @param descriptor the test descriptor
-+     */
-+    protected StringTests(ITestDescriptor descriptor) {
-+        super(descriptor, "string");
-+    }
-+    
-+    /**
-+     * String defaults test.
-+     */
-+    @Test
-+    public void stringDefaultsTest() {
-+        reasoningTest("StringDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * String assign test.
-+     */
-+    @Test
-+    public void stringAssignTest() {
-+        reasoningTest("StringAssignTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * String in compound defaults test.
-+     */
-+    @Test
-+    public void stringInCompoundDefaultsTest() {
-+        reasoningTest("StringInCompoundDefaultsTest.ivml", 0);
-+    } 
-+    
-+    /**
-+     * String in compound assign test.
-+     */
-+    @Test
-+    public void stringInCompoundAssignTest() {
-+        reasoningTest("StringInCompoundAssignTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * String in collection defaults test.
-+     */
-+    @Test
-+    public void stringInCollectionDefaultsTest() {
-+        reasoningTest("StringInCollectionDefaultsTest.ivml", 2);
-+    } 
-+    
-+    /**
-+     * String in collection assign test.
-+     */
-+    @Test
-+    public void stringInCollectionAssignTest() {
-+        reasoningTest("StringInCollectionAssignTest.ivml", 2);
-+    } 
-+
-+    /**
-+     * String reference assign test.
-+     */
-+    @Test
-+    public void stringReferenceAssignTest() {
-+        reasoningTest("StringRefAssignTest.ivml", 0);
-+    } 
-+
-+    /**
-+     * String annotation test.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void stringAnnotationTest() {
-+        reasoningTest("StringAnnotationTest.ivml", 9);
-+    } 
-+    
-+    /**
-+     * Combined reference-typedef on String.
-+     */
-+    @Ignore("IVML")
-+    @Test
-+    public void referenceDerivedStringTest() {
-+        reasoningTest("ReferenceDerivedStringTest.ivml", 4);
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml
-new file mode 100644
-index 0000000..c544a59
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml
-@@ -0,0 +1,14 @@
-+project runtimeReasoning {
-+
-+    enum BindingTime {compile=0, runtime=1};
-+    annotate BindingTime binding = BindingTime::compile to runtimeReasoning;
-+    Integer a = 5;
-+    assign (binding = BindingTime::runtime) to {
-+        Integer b;
-+        b > 10;
-+    }
-+    a >= 5;
-+    freeze {
-+        runtimeReasoning;
-+    } but (f|f.binding >= BindingTime.runtime);
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml
-new file mode 100644
-index 0000000..fa91671
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml
-@@ -0,0 +1,14 @@
-+project runtimeReasoningConstraintSet {
-+
-+    enum BindingTime {compile=0, runtime=1};
-+    annotate BindingTime binding = BindingTime::compile to runtimeReasoningConstraintSet;
-+    Integer a = 5;
-+    assign (binding = BindingTime::runtime) to {
-+        Integer b;
-+    }
-+    setOf(Constraint) user = {b > 10}; 
-+    a >= 5;
-+    freeze {
-+        runtimeReasoningConstraintSet;
-+    } but (f|f.binding >= BindingTime.runtime);
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_base.ivml
-new file mode 100644
-index 0000000..8ac4770
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_base.ivml
-@@ -0,0 +1,27 @@
-+project PL_SimElevator_base {
-+
-+    version v0;
-+    enum ControllerType {DefaultEController, DistanceEController};
-+    enum ButtonType {DefaultButton, ArrowButton};
-+    Integer elevators = 2;
-+    Integer floors;
-+    ControllerType controlling_controllertype = ControllerType.DefaultEController;
-+    Boolean controlling_synchronized = true;
-+    Boolean controlling_accelerated = true;
-+    ButtonType outerview_buttontype = ButtonType.DefaultButton;
-+    Boolean outerview_emergencybuttons = true;
-+    Boolean outerview_cancellation = true;
-+    Boolean innerview_emergencybutton = true;
-+    Boolean innerview_authorization = true;
-+    Boolean innerview_doorbutton = true;
-+    Boolean display_direction = true;
-+    Boolean display_currfloor_number = true;
-+    Boolean display_currfloor_chain = true;
-+    Boolean display_target = true;
-+    Boolean display_openingside = true;
-+    Boolean outerview_autoscroll = true;
-+    controlling_synchronized == true implies elevators >= 2;
-+    elevators > 0;
-+    floors >= 1;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml
-new file mode 100644
-index 0000000..da23450
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml
-@@ -0,0 +1,42 @@
-+project PL_SimElevator_frozen {
-+
-+    version v0;
-+    import PL_SimElevator_base;
-+    
-+    elevators = 4;
-+    floors = 10;
-+    controlling_controllertype = ControllerType.DefaultEController;
-+    controlling_synchronized = true;
-+    controlling_accelerated = true;
-+    outerview_buttontype = ButtonType.DefaultButton;
-+    outerview_emergencybuttons = true;
-+    outerview_cancellation = true;
-+    innerview_emergencybutton = true;
-+    innerview_authorization = true;
-+    innerview_doorbutton = true;
-+    display_direction = true;
-+    display_currfloor_number = true;
-+    display_currfloor_chain = true;
-+    display_target = true;
-+    display_openingside = true;
-+    outerview_autoscroll = true;
-+    freeze {
-+        elevators;
-+        floors;
-+        controlling_controllertype;
-+        controlling_synchronized;
-+        controlling_accelerated;
-+        outerview_buttontype;
-+        outerview_emergencybuttons;
-+        outerview_cancellation;
-+        innerview_emergencybutton;
-+        innerview_authorization;
-+        innerview_doorbutton;
-+        display_direction;
-+        display_currfloor_number;
-+        display_currfloor_chain;
-+        display_target;
-+        display_openingside;
-+        outerview_autoscroll;
-+    }
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml
-new file mode 100644
-index 0000000..75ef9f3
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml
-@@ -0,0 +1,63 @@
-+project PL_SimElevator_frozen_orig {
-+
-+    version v0;
-+    enum ControllerType {DefaultEController, DistanceEController};
-+    enum ButtonType {DefaultButton, ArrowButton};
-+    Integer elevators = 2;
-+    Integer floors;
-+    ControllerType controlling_controllertype = ControllerType.DefaultEController;
-+    Boolean controlling_synchronized = true;
-+    Boolean controlling_accelerated = true;
-+    ButtonType outerview_buttontype = ButtonType.DefaultButton;
-+    Boolean outerview_emergencybuttons = true;
-+    Boolean outerview_cancellation = true;
-+    Boolean innerview_emergencybutton = true;
-+    Boolean innerview_authorization = true;
-+    Boolean innerview_doorbutton = true;
-+    Boolean display_direction = true;
-+    Boolean display_currfloor_number = true;
-+    Boolean display_currfloor_chain = true;
-+    Boolean display_target = true;
-+    Boolean display_openingside = true;
-+    Boolean outerview_autoscroll = true;
-+    controlling_synchronized == true implies elevators >= 2;
-+    elevators > 0;
-+    floors >= 1;
-+    
-+    elevators = 4;
-+    floors = 10;
-+    controlling_controllertype = ControllerType.DefaultEController;
-+    controlling_synchronized = true;
-+    controlling_accelerated = true;
-+    outerview_buttontype = ButtonType.DefaultButton;
-+    outerview_emergencybuttons = true;
-+    outerview_cancellation = true;
-+    innerview_emergencybutton = true;
-+    innerview_authorization = true;
-+    innerview_doorbutton = true;
-+    display_direction = true;
-+    display_currfloor_number = true;
-+    display_currfloor_chain = true;
-+    display_target = true;
-+    display_openingside = true;
-+    outerview_autoscroll = true;
-+    freeze {
-+        elevators;
-+        floors;
-+        controlling_controllertype;
-+        controlling_synchronized;
-+        controlling_accelerated;
-+        outerview_buttontype;
-+        outerview_emergencybuttons;
-+        outerview_cancellation;
-+        innerview_emergencybutton;
-+        innerview_authorization;
-+        innerview_doorbutton;
-+        display_direction;
-+        display_currfloor_number;
-+        display_currfloor_chain;
-+        display_target;
-+        display_openingside;
-+        outerview_autoscroll;
-+    }
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml
-new file mode 100644
-index 0000000..0aa4dc0
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml
-@@ -0,0 +1,27 @@
-+project CompoundIndividualAssign {
-+
-+    version v0;
-+    
-+    annotate Integer at to CompoundIndividualAssign;
-+    annotate Integer am to CompoundIndividualAssign;
-+    annotate Integer ar to CompoundIndividualAssign;
-+    annotate Integer ak to CompoundIndividualAssign;
-+    
-+    compound cmp {
-+        Integer nest = 5;
-+        am = nest + 1;
-+        at = am - 1;
-+        ar = self.nest + 1;
-+        ak = self.am - 1;
-+        am == ar;
-+        at == ak;
-+    }
-+    
-+    cmp c = {};
-+    c.nest == 5;
-+    c.am == 6;
-+    c.at = 5;
-+    c.ar = 6;
-+    c.ak = 5;
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml
-new file mode 100644
-index 0000000..1f8bb53
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml
-@@ -0,0 +1,29 @@
-+project ConstraintAnnotationTest {
-+
-+    annotate Constraint ann = true to ConstraintAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+    
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+
-+    t.ann <> true;    
-+    i.ann <> true;    
-+    r.ann <> true;    
-+    s.ann <> true;    
-+    e.ann <> true;
-+    c.ann <> true;
-+    o.ann <> true;
-+    d.ann <> true;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml
-new file mode 100644
-index 0000000..a081b70
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml
-@@ -0,0 +1,31 @@
-+project BooleanAnnotationTest {
-+
-+    annotate Boolean ann = true to BooleanAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+    
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann <> true;    
-+    i.ann <> true;    
-+    r.ann <> true;    
-+    s.ann <> true;    
-+    e.ann <> true;
-+    c.ann <> true;
-+    o.ann <> true;
-+    d.ann <> true;
-+    n.ann <> true;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml
-new file mode 100644
-index 0000000..887a54c
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml
-@@ -0,0 +1,17 @@
-+project BooleanInCompoundAssignTest {
-+
-+    Boolean t;
-+    Boolean f;
-+    
-+    t = true;
-+    f = false;
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t == true implies check == false;
-+    f == false implies check == false;
-+    
-+   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml
-new file mode 100644
-index 0000000..ef2cf3c
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml
-@@ -0,0 +1,14 @@
-+project BooleanDefaultsTest {
-+
-+    Boolean t = true;
-+    Boolean f = false;
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t == true implies check == false;
-+    f == false implies check == false;
-+    
-+   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml
-new file mode 100644
-index 0000000..a38c6a3
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml
-@@ -0,0 +1,11 @@
-+project BooleanImpliesTest {
-+
-+    Boolean t = true;
-+    Boolean f = false;
-+    
-+    t implies f == true;
-+    
-+    
-+   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml
-new file mode 100644
-index 0000000..a61b0c5
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml
-@@ -0,0 +1,15 @@
-+project BooleanAssignTest {
-+
-+    sequenceOf(Boolean) t;
-+    sequenceOf(Boolean) f;
-+    
-+    t = {true, true};
-+    f = {false, false};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i) implies check == false;
-+    f->forAll(i|i==false) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml
-new file mode 100644
-index 0000000..459059c
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml
-@@ -0,0 +1,12 @@
-+project BooleanInCollectionDefaultsTest {
-+
-+    sequenceOf(Boolean) t = {true, true};
-+    sequenceOf(Boolean) f = {false, false};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i) implies check == false;
-+    f->forAll(i|i==false) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml
-new file mode 100644
-index 0000000..4be1937
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml
-@@ -0,0 +1,19 @@
-+project BooleanAssignTest {
-+
-+    compound C {
-+        Boolean t;
-+        Boolean f;
-+    
-+        t = true;
-+        f = false;
-+    
-+        Boolean check;
-+        check = true;
-+    
-+        t == true implies check == false;
-+        f == false implies check == false;    
-+    }
-+    
-+    C cmp;   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml
-new file mode 100644
-index 0000000..4711b0f
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml
-@@ -0,0 +1,16 @@
-+project BooleanInCompoundDefaultsTest {
-+
-+    compound C {
-+        Boolean t = true;
-+        Boolean f = false;
-+    
-+        Boolean check;
-+        check = true;
-+        
-+        t == true implies check == false;
-+        f == false implies check == false;
-+    }
-+    
-+    C cmp; 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml
-new file mode 100644
-index 0000000..4de4f00
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml
-@@ -0,0 +1,14 @@
-+project BooleanInCompoundImpliesTest {
-+
-+
-+    compound C {
-+        Boolean t = true;
-+        Boolean f = false;
-+    
-+        t implies f == true;    
-+    }
-+    
-+    C cmp;
-+   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml
-new file mode 100644
-index 0000000..19b3b10
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml
-@@ -0,0 +1,14 @@
-+project BooleanRefAssignTest {
-+
-+    Boolean t;
-+    Boolean f;
-+
-+    refTo(Boolean) tr = refBy(t);
-+    refTo(Boolean) fr = refBy(f);
-+    
-+    tr = true;
-+    fr = false;
-+
-+    t == false;
-+    f == true;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml
-new file mode 100644
-index 0000000..74101e7
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml
-@@ -0,0 +1,35 @@
-+project CarExample {
-+
-+    version v0;
-+    
-+    typedef HPType Integer with (HPType >= 45 and HPType <= 500);
-+    
-+    enum transmission {manual, automatic};
-+    
-+    compound Seat {
-+        Boolean reclining;
-+        Boolean heightcontrol;
-+    }
-+
-+    compound ComfortSeat refines Seat {
-+        Boolean automaticControl;
-+        Boolean remoteControl;
-+    }
-+
-+    sequenceOf(Seat) seats;
-+    
-+    Boolean airconditioning = true;
-+    
-+    HPType horsePower = 100;
-+    
-+    airconditioning implies horsePower > 100;
-+    
-+    size(seats) > 4 implies horsePower > 100;
-+    
-+    horsePower = 80;
-+    
-+    seats = {{reclining = true, heightcontrol = true}, {reclining = true, heightcontrol = true}, {reclining = false, heightcontrol = false}, {reclining = false, heightcontrol = false}};
-+    
-+     
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/ReferenceDerivedBooleanTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/ReferenceDerivedBooleanTest.ivml
-new file mode 100644
-index 0000000..5d722d7
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/ReferenceDerivedBooleanTest.ivml
-@@ -0,0 +1,13 @@
-+project ReferenceDerivedBooleanTest {
-+
-+    typedef RBoolean refTo(Boolean);
-+    typedef B Boolean with (B == true);
-+    typedef RB refTo(B);
-+
-+    Boolean b = false;
-+    RB r1 = refBy(b);
-+    r1 == false;
-+    RBoolean r2 = refBy(b);
-+    r2 == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanAssignTest.ivml
-deleted file mode 100644
-index 887a54c..0000000
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanAssignTest.ivml
-+++ /dev/null
-@@ -1,17 +0,0 @@
--project BooleanInCompoundAssignTest {
--
--    Boolean t;
--    Boolean f;
--    
--    t = true;
--    f = false;
--    
--    Boolean check;
--    check = true;
--    
--    t == true implies check == false;
--    f == false implies check == false;
--    
--   
--    
--}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanDefaultsTest.ivml
-deleted file mode 100644
-index ef2cf3c..0000000
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanDefaultsTest.ivml
-+++ /dev/null
-@@ -1,14 +0,0 @@
--project BooleanDefaultsTest {
--
--    Boolean t = true;
--    Boolean f = false;
--    
--    Boolean check;
--    check = true;
--    
--    t == true implies check == false;
--    f == false implies check == false;
--    
--   
--    
--}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanImpliesTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanImpliesTest.ivml
-deleted file mode 100644
-index a38c6a3..0000000
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanImpliesTest.ivml
-+++ /dev/null
-@@ -1,11 +0,0 @@
--project BooleanImpliesTest {
--
--    Boolean t = true;
--    Boolean f = false;
--    
--    t implies f == true;
--    
--    
--   
--    
--}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundAssignTest.ivml
-deleted file mode 100644
-index 4be1937..0000000
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundAssignTest.ivml
-+++ /dev/null
-@@ -1,19 +0,0 @@
--project BooleanAssignTest {
--
--    compound C {
--        Boolean t;
--        Boolean f;
--    
--        t = true;
--        f = false;
--    
--        Boolean check;
--        check = true;
--    
--        t == true implies check == false;
--        f == false implies check == false;    
--    }
--    
--    C cmp;   
--    
--}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundDefaultsTest.ivml
-deleted file mode 100644
-index 4711b0f..0000000
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundDefaultsTest.ivml
-+++ /dev/null
-@@ -1,16 +0,0 @@
--project BooleanInCompoundDefaultsTest {
--
--    compound C {
--        Boolean t = true;
--        Boolean f = false;
--    
--        Boolean check;
--        check = true;
--        
--        t == true implies check == false;
--        f == false implies check == false;
--    }
--    
--    C cmp; 
--    
--}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundImpliesTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundImpliesTest.ivml
-deleted file mode 100644
-index 4de4f00..0000000
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/BooleanInCompoundImpliesTest.ivml
-+++ /dev/null
-@@ -1,14 +0,0 @@
--project BooleanInCompoundImpliesTest {
--
--
--    compound C {
--        Boolean t = true;
--        Boolean f = false;
--    
--        t implies f == true;    
--    }
--    
--    C cmp;
--   
--    
--}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/CarExample.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/CarExample.ivml
-deleted file mode 100644
-index 74101e7..0000000
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/booleanProblem/CarExample.ivml
-+++ /dev/null
-@@ -1,35 +0,0 @@
--project CarExample {
--
--    version v0;
--    
--    typedef HPType Integer with (HPType >= 45 and HPType <= 500);
--    
--    enum transmission {manual, automatic};
--    
--    compound Seat {
--        Boolean reclining;
--        Boolean heightcontrol;
--    }
--
--    compound ComfortSeat refines Seat {
--        Boolean automaticControl;
--        Boolean remoteControl;
--    }
--
--    sequenceOf(Seat) seats;
--    
--    Boolean airconditioning = true;
--    
--    HPType horsePower = 100;
--    
--    airconditioning implies horsePower > 100;
--    
--    size(seats) > 4 implies horsePower > 100;
--    
--    horsePower = 80;
--    
--    seats = {{reclining = true, heightcontrol = true}, {reclining = true, heightcontrol = true}, {reclining = false, heightcontrol = false}, {reclining = false, heightcontrol = false}};
--    
--     
--    
--}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ContainerAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ContainerAnnotationTest.ivml
-new file mode 100644
-index 0000000..3c6b312
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ContainerAnnotationTest.ivml
-@@ -0,0 +1,31 @@
-+project ContainerAnnotationTest {
-+
-+    annotate setOf(Integer) ann = {3, -2} to ContainerAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    size(t.ann) <> 2;
-+    size(i.ann) <> 2;    
-+    size(r.ann) <> 2;    
-+    size(s.ann) <> 2;    
-+    size(e.ann) <> 2;    
-+    size(c.ann) <> 2;
-+    size(o.ann) <> 2;
-+    size(d.ann) <> 2;
-+    size(n.ann) <> 2;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ReferenceDerivedCollectionTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ReferenceDerivedCollectionTest.ivml
-new file mode 100644
-index 0000000..8fdd8bb
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/ReferenceDerivedCollectionTest.ivml
-@@ -0,0 +1,14 @@
-+project ReferenceDerivedCollectionTest {
-+
-+    typedef RMySet refTo(setOf(Integer));
-+    typedef ISet setOf(Integer) with (size(ISet) > 2);
-+    typedef RISet refTo(ISet);
-+
-+    ISet c = {1, 2};
-+    size(c) > 3;
-+    RISet r1 = refBy(c);
-+    size(refBy(r1)) > 4;
-+    RMySet r2 = refBy(c);
-+    size(refBy(r2)) > 5;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest1.ivml
-new file mode 100644
-index 0000000..cbee740
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest1.ivml
-@@ -0,0 +1,10 @@
-+project IVML {
-+
-+    version v0;
-+    sequenceOf(String) array = {"Hello", " ", "World"};
-+    setOf(refTo(String)) referedVars = {refBy(array[0]), refBy(array[2])};
-+    setOf(String) orgVars;
-+
-+    referedVars->apply(refTo(String) itr;
-+      setOf(String) tmpValues = {} | tmpValues.add(refBy(itr))).size() == 1;
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest2.ivml
-new file mode 100644
-index 0000000..737983f
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest2.ivml
-@@ -0,0 +1,10 @@
-+project IVML {
-+
-+    version v0;
-+    sequenceOf(String) array = {"Hello", " ", "World"};
-+    setOf(refTo(String)) referedVars = {refBy(array[0]), refBy(array[2])};
-+    setOf(String) orgVars;
-+
-+    referedVars->apply(refTo(String) itr;
-+      setOf(String) tmpValues = {} | tmpValues.add(refBy(itr))).size() == 2;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest3.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest3.ivml
-new file mode 100644
-index 0000000..7f45425
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest3.ivml
-@@ -0,0 +1,12 @@
-+project IVML {
-+
-+    version v0;
-+    sequenceOf(String) array = {"Hello", " ", "World"};
-+    setOf(refTo(String)) referedVars = {refBy(array[0]), refBy(array[2])};
-+    setOf(String) orgVars;
-+
-+
-+    // "Derefer" values
-+    orgVars = referedVars->apply(refTo(String) itr;
-+      setOf(String) tmpValues = {} | tmpValues.add(refBy(itr)));
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest4.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest4.ivml
-new file mode 100644
-index 0000000..4e0f78c
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/StringTest4.ivml
-@@ -0,0 +1,9 @@
-+project IVML {
-+
-+    version v0;
-+    sequenceOf(String) strs1 = {"a", "b", "c"};
-+    setOf(refTo(String)) strs2 = {refBy(strs1[0]), refBy(strs1[1]), refBy(strs1[2])};
-+
-+    setOf(String) set1 = strs1.asSet()->collect(s | s);
-+    setOf(String) set2 = strs2->collect(refTo(String) s | refBy(s));
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml
-new file mode 100644
-index 0000000..01a0f38
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml
-@@ -0,0 +1,21 @@
-+project constraintSetDerivedCompound {
-+
-+    version v0;
-+    
-+    compound Comp {
-+        Integer i;
-+        i > 10;
-+    }
-+    
-+    compound Comp2 refines Comp {
-+        Integer j;
-+        j > 20;
-+        i <= 20;
-+    }
-+    
-+    typedef TComp Comp with (TComp.i <= 21);
-+    typedef TComp2 Comp2 with (TComp2.i <= 21);
-+    
-+    setOf(TComp) t1 = {{i = 11}, Comp{i=12}, Comp2{i=19}, Comp2{i=21}};
-+    setOf(TComp) t2 = {{i = 11}, Comp2{i=16}, Comp2{i=21}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml
-new file mode 100644
-index 0000000..cd5b308
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml
-@@ -0,0 +1,8 @@
-+project constraintSetSetDefault {
-+
-+    version v0;
-+    
-+    Integer i;
-+    setOf(setOf(Constraint)) constraints = {{i > 0, i < 1}};
-+    i = 1;
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDerivedCompound.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDerivedCompound.ivml
-new file mode 100644
-index 0000000..da5ecd7
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDerivedCompound.ivml
-@@ -0,0 +1,21 @@
-+project constraintSetSetDerivedCompound {
-+
-+    version v0;
-+    
-+    compound Comp {
-+        Integer i;
-+        i > 10;
-+    }
-+    
-+    compound Comp2 refines Comp {
-+        Integer j;
-+        j > 20;
-+        i <= 20;
-+    }
-+    
-+    typedef TComp Comp with (TComp.i <= 21);
-+    typedef TComp2 Comp2 with (TComp2.i <= 21);
-+    
-+    setOf(setOf(TComp)) t1 = {{{i = 11}, Comp{i=12}, Comp2{i=19}, Comp2{i=21}}};
-+    setOf(setOf(TComp)) t2 = {{{i = 11}, Comp2{i=16}, Comp2{i=21}}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml
-new file mode 100644
-index 0000000..08da47c
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml
-@@ -0,0 +1,12 @@
-+project setDerivedSet {
-+
-+    version v0;
-+    
-+    typedef MyIntSet setOf(Integer) with (size(MyIntSet) > 2);
-+    MyIntSet si1 = {1, 2, 3};
-+    MyIntSet si2 = {2, 3, 4};
-+    MyIntSet si3 = {4, 5};
-+
-+    setOf(MyIntSet) s = {{1, 2, 3}, {2, 3, 4}, {4, 5}};
-+    s->forAll(t|sum(t) > 6);
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml
-new file mode 100644
-index 0000000..7d009ac
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml
-@@ -0,0 +1,34 @@
-+project CompoundAnnotationTest {
-+
-+    compound ACmp {
-+       Integer i = 0;
-+    };
-+    annotate ACmp ann = ACmp{} to CompoundAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann.i <> 0;
-+    i.ann.i <> 0;    
-+    r.ann.i <> 0;    
-+    s.ann.i <> 0;    
-+    e.ann.i <> 0;    
-+    c.ann.i <> 0;
-+    o.ann.i <> 0;
-+    d.ann.i <> 0;
-+    n.ann.i <> 0;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml
-new file mode 100644
-index 0000000..4c66511
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml
-@@ -0,0 +1,20 @@
-+project CompoundAnnotationTest2 {
-+
-+    enum Binding {compile=0, runtime=1};
-+    annotate Binding bindingTime = Binding.compile to CompoundAnnotationTest2;
-+
-+    compound Info {
-+        assign(bindingTime = Binding.runtime) to {
-+            Boolean active;
-+        }
-+    }
-+    
-+    compound Snk {
-+        Integer nr = 1;
-+        assign(bindingTime = Binding.runtime) to {
-+            Info info;
-+        }
-+    }
-+    
-+    Snk snk;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml
-new file mode 100644
-index 0000000..44c6372
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml
-@@ -0,0 +1,18 @@
-+project CompoundCompoundTest1 {
-+
-+    compound ContComp {
-+        Integer a;
-+    }
-+
-+    compound MyComp {
-+        Integer a;
-+        ContComp c;
-+        a > c.a;
-+    }
-+
-+    MyComp c1 = {a = 1, c = {a = 0}};
-+    MyComp c2 = {a = 100, c = {a = 101}};
-+    
-+    c2.a > 100;
-+    c2.c.a > 100;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest2.ivml
-new file mode 100644
-index 0000000..4e73abb
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest2.ivml
-@@ -0,0 +1,14 @@
-+project CompoundCompoundTest2 {
-+
-+    compound MyComp {
-+        Integer a;
-+        MyComp c;
-+        a > c.a;
-+    }
-+
-+    MyComp c1 = {a = 1, c = {a = 0}};
-+    MyComp c2 = {a = 100, c = {a = 101}};
-+    
-+    c2.a > 100;
-+    c2.c.a > 100;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml
-new file mode 100644
-index 0000000..cc0a21e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml
-@@ -0,0 +1,13 @@
-+project CompoundConstraintTest {
-+
-+    compound MyComp {
-+        Integer a;
-+        Integer b;
-+        a > b;
-+    }
-+
-+    MyComp c1 = {a = 1, b = 0};
-+    MyComp c2 = {a = 100, b = 101};
-+    
-+    c2.a > 100;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml
-new file mode 100644
-index 0000000..82bfcba
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml
-@@ -0,0 +1,34 @@
-+project CompoundContainerTest1 {
-+
-+    compound RecComp {
-+        setOf(Integer) iSet;
-+    }
-+
-+    compound MyComp {
-+        setOf(Integer) iSet;
-+        setOf(RecComp) cSet;
-+        iSet.size() == cSet.size();
-+        cSet->forAll(c|c.iSet.size() > 0);
-+    }
-+
-+    MyComp c1 = {
-+      iSet = {1}, 
-+      cSet = {
-+        RecComp{
-+          iSet = {3}
-+        }
-+      }
-+    };
-+    MyComp c2 = {
-+      iSet = {1, 2}, 
-+      cSet = {}
-+    };
-+    MyComp c3 = {
-+      iSet = {1, 2}, 
-+      cSet = {
-+        RecComp{
-+          iSet = {3, 4}
-+        }
-+      }
-+    };
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml
-new file mode 100644
-index 0000000..9b18c4d
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml
-@@ -0,0 +1,32 @@
-+project CompoundContainerTest2 {
-+
-+    compound MyComp {
-+        setOf(Integer) iSet;
-+        setOf(MyComp) cSet;
-+        iSet.size() == cSet.size();
-+        cSet->forAll(c|c.iSet.size() > 0);
-+    }
-+
-+    MyComp c1 = {
-+      iSet = {1}, 
-+      cSet = {
-+        MyComp{
-+          iSet = {3}, 
-+          cSet = {MyComp{}}
-+        }
-+      }
-+    };
-+    MyComp c2 = {
-+      iSet = {1, 2}, 
-+      cSet = {}
-+    };
-+    MyComp c3 = {
-+      iSet = {1, 2}, 
-+      cSet = {
-+        MyComp{
-+          iSet = {3, 4}, 
-+          cSet = {MyComp{}}
-+        }
-+      }
-+    };
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml
-new file mode 100644
-index 0000000..5e46643
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml
-@@ -0,0 +1,16 @@
-+project CompoundRefAssignTest1 {
-+
-+    compound MyComp {
-+        Integer t;
-+        Integer f;
-+        refTo(Integer) tr = refBy(t);
-+        refTo(Integer) fr = refBy(f);
-+    }
-+
-+    MyComp c = {};
-+    c.tr = 1;
-+    c.fr = 2;
-+
-+    c.t == 2;
-+    c.f == 1;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml
-new file mode 100644
-index 0000000..d1d791e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml
-@@ -0,0 +1,18 @@
-+project CompoundRefAssignTest2 {
-+
-+    compound RefComp {
-+        Integer a;
-+        Integer b;
-+    }
-+
-+    compound MyComp {
-+        RefComp rc;
-+        refTo(RefComp) rcr = refBy(rc);
-+    }
-+
-+    MyComp c;
-+    c.rc = {a = 1, b = 2};
-+
-+    c.rc.a == c.rcr.b;
-+    c.rc.b == c.rcr.a;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml
-new file mode 100644
-index 0000000..a93469a
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml
-@@ -0,0 +1,18 @@
-+project CompoundRefAssignTest3 {
-+
-+    compound RefComp {
-+        Integer a;
-+        Integer b;
-+    }
-+
-+    compound MyComp {
-+        RefComp rc;
-+        refTo(RefComp) rcr = refBy(rc);
-+    }
-+
-+    MyComp c;
-+    c.rc = {a = 1, b = 2};
-+
-+    c.rc.a == c.rcr.b;
-+    c.rc.b == c.rcr.a;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml
-new file mode 100644
-index 0000000..e6f44e4
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml
-@@ -0,0 +1,35 @@
-+project DerivedCompoundAnnotationTest {
-+
-+    compound ACmp {
-+       Integer j = 0;
-+    };
-+    typedef A ACmp with (A.j >= 0);
-+    annotate A ann = ACmp{} to DerivedCompoundAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann.j <> 0;
-+    i.ann.j <> 0;    
-+    r.ann.j <> 0;    
-+    s.ann.j <> 0;    
-+    e.ann.j <> 0;    
-+    c.ann.j <> 0;
-+    o.ann.j <> 0;
-+    d.ann.j <> 0;
-+    n.ann.j <> 0;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml
-new file mode 100644
-index 0000000..92cf3a5
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml
-@@ -0,0 +1,35 @@
-+project ReferenceCompoundAnnotationTest {
-+
-+    compound ACmp {
-+       Integer i = 0;
-+    };
-+    ACmp annotation = ACmp{};
-+    annotate refTo(ACmp) ann = refBy(annotation) to ReferenceCompoundAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann.i <> 0;
-+    i.ann.i <> 0;    
-+    r.ann.i <> 0;    
-+    s.ann.i <> 0;    
-+    e.ann.i <> 0;    
-+    c.ann.i <> 0;
-+    o.ann.i <> 0;
-+    d.ann.i <> 0;
-+    n.ann.i <> 0;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceDerivedCompoundTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceDerivedCompoundTest.ivml
-new file mode 100644
-index 0000000..dfd7442
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceDerivedCompoundTest.ivml
-@@ -0,0 +1,17 @@
-+project ReferenceDerivedCompoundTest {
-+
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef RMyCmp refTo(MyCmp);
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+    typedef RCmp refTo(Cmp);
-+
-+    Cmp c = Cmp{};
-+    c.i > 3;
-+    RCmp r1 = refBy(c);
-+    r1.i > 4;
-+    RMyCmp r2 = refBy(c);
-+    r2.i > 5;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValues.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValues.ivml
-new file mode 100644
-index 0000000..cc1a2f5
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValues.ivml
-@@ -0,0 +1,12 @@
-+project changingValues {
-+
-+	version v0;
-+	
-+	import changingValuesBase;
-+
-+    cmp1 = MyRefinedCmp{value = 31};
-+    cmp2 = MyBaseCmp{value = 36};
-+    cmp3 = null;
-+    cmp4 = MyBaseCmp{value = 37};
-+	
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml
-new file mode 100644
-index 0000000..1a498e0
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml
-@@ -0,0 +1,19 @@
-+project changingValuesBase {
-+
-+	version v0;
-+	
-+	compound MyBaseCmp {
-+	    Integer value = 30;
-+	    value > 30;
-+	}
-+	
-+	compound MyRefinedCmp refines MyBaseCmp {
-+	    value < 35;
-+	}
-+	
-+	MyBaseCmp cmp1 = MyBaseCmp{};
-+    MyBaseCmp cmp2 = MyRefinedCmp{value = 40};
-+    MyBaseCmp cmp3 = MyBaseCmp{};
-+    MyBaseCmp cmp4 = null;
-+	
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Base.ivml
-new file mode 100644
-index 0000000..caaaff6
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Base.ivml
-@@ -0,0 +1,16 @@
-+project Base {
-+    version v0;
-+    enum Binding {compile = 0, runtime = 1};
-+    annotate Binding bind = Binding.compile to Base;
-+    compound ACmp {
-+        String algTopologyClass = null;
-+        Integer parallelism = 1;
-+        assign(bind = Binding.runtime) to {
-+            Integer executors = parallelism;
-+            Integer initialExecutors = parallelism;
-+        }
-+        algTopologyClass == null implies parallelism == 1;
-+        algTopologyClass == null implies numtasks == 1;
-+        algTopologyClass == null implies scalable == false;
-+    };
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Cfg.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Cfg.ivml
-new file mode 100644
-index 0000000..3994321
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/slotReassignment/Cfg.ivml
-@@ -0,0 +1,6 @@
-+project Cfg {
-+    version v0;
-+    import Base;
-+    annotate Binding bind = Binding.compile to Cfg;
-+    ACmp c = {parallelism = 14, algTopologyClass = "TSCF"};
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraints.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraints.ivml
-new file mode 100644
-index 0000000..6cefb6a
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraints.ivml
-@@ -0,0 +1,18 @@
-+project changingConstraints {
-+
-+	version v0;
-+	
-+	import changingConstraintsBase;
-+
-+	valueConstraint = value < 30;
-+    valueNConstraint = null;
-+    valueTConstraint = true;
-+    valueN2Constraint = value < 30;
-+	cmp.value2Constraint = cmp.value2 < 40;
-+    cmp.value2NConstraint = null;
-+    cmp.value2TConstraint = null;
-+    cmp.value2N2Constraint = cmp.value2 < 40;
-+	cmpConstraints = {cmp.value2 < 50};
-+	cmpConstraints2[0] = cmp.value2 > 0;
-+	
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraintsBase.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraintsBase.ivml
-new file mode 100644
-index 0000000..4f3f8a2
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/changingConstraints/changingConstraintsBase.ivml
-@@ -0,0 +1,24 @@
-+project changingConstraintsBase {
-+
-+	version v0;
-+	
-+	Integer value = 25;
-+	Constraint valueConstraint = value < 20;
-+	Constraint valueNConstraint = value < 20;
-+    Constraint valueTConstraint = value < 20;
-+    Constraint valueN2Constraint = null;
-+	
-+	compound MyCmp {
-+	    Integer value2 = 30;
-+		Constraint value2Constraint = value2 < 21;
-+        Constraint value2NConstraint = value2 < 21;
-+        Constraint value2TConstraint = value2 < 21;
-+        Constraint value2N2Constraint = null;
-+	}
-+	
-+	MyCmp cmp = MyCmp{};
-+	
-+	setOf(Constraint) cmpConstraints = {cmp.value2 < 15};
-+	sequenceOf(Constraint) cmpConstraints2 = {cmp.value2 < 16};
-+	
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml
-new file mode 100644
-index 0000000..9cec427
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml
-@@ -0,0 +1,15 @@
-+project constraintsDerived {
-+
-+	version v0;
-+
-+    typedef MyConstraint Constraint;
-+	
-+	compound CP {
-+	   MyConstraint c = false;
-+	}
-+	
-+	MyConstraint c = false;
-+	CP cmp = {};
-+	setOf(MyConstraint) s = {false};
-+	
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraints.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraints.ivml
-new file mode 100644
-index 0000000..49a3f99
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraints.ivml
-@@ -0,0 +1,9 @@
-+project refinedConstraints {
-+
-+    version v0;
-+    
-+    import refinedConstraintsInter;
-+
-+    CP2 cmp = {no = 0};
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsBase.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsBase.ivml
-new file mode 100644
-index 0000000..e9cfe4c
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsBase.ivml
-@@ -0,0 +1,10 @@
-+project refinedConstraintsBase {
-+
-+    version v0;
-+
-+    compound CP1 {
-+        Integer no;
-+        Constraint cons = no > 0;
-+    }
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsInter.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsInter.ivml
-new file mode 100644
-index 0000000..1d01269
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/refinedConstraints/refinedConstraintsInter.ivml
-@@ -0,0 +1,10 @@
-+project refinedConstraintsInter {
-+
-+    version v0;
-+    import refinedConstraintsBase;
-+
-+    compound CP2 refines CP1 {
-+        cons = null;
-+    }
-+
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml
-new file mode 100644
-index 0000000..d7187f7
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml
-@@ -0,0 +1,32 @@
-+project EnumAnnotationTest {
-+
-+    enum AEnum {a1, a2};
-+    annotate AEnum ann = AEnum::a1 to EnumAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann <> AEnum::a1;
-+    i.ann <> AEnum::a1;    
-+    r.ann <> AEnum::a1;    
-+    s.ann <> AEnum::a1;    
-+    e.ann <> AEnum::a1;
-+    c.ann <> AEnum::a1;
-+    o.ann <> AEnum::a1;
-+    d.ann <> AEnum::a1;
-+    n.ann <> AEnum::a1;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml
-new file mode 100644
-index 0000000..379849a
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml
-@@ -0,0 +1,12 @@
-+project EnumAssignTest {
-+
-+    enum MyEnum {val1, val2, val3};
-+    MyEnum e1;
-+    MyEnum e2;
-+    MyEnum e3;
-+    
-+    e1 = MyEnum::val1;
-+    e2 = MyEnum::val2;
-+    
-+    e1 <> e2 implies e3 == MyEnum::val3;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml
-new file mode 100644
-index 0000000..6b696ab
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml
-@@ -0,0 +1,9 @@
-+project EnumDefaultsTest {
-+
-+    enum MyEnum {val1, val2, val3};
-+    MyEnum e1 = MyEnum::val1;
-+    MyEnum e2 = MyEnum::val2;
-+    MyEnum e3;
-+ 
-+    e1 <> e2 implies e3 == MyEnum::val3;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml
-new file mode 100644
-index 0000000..b2e591d
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml
-@@ -0,0 +1,16 @@
-+project EnumInCollectionAssignTest {
-+
-+    enum MyEnum {val1, val2, val3};
-+    sequenceOf(MyEnum) t;
-+    sequenceOf(MyEnum) f;
-+    
-+    t = {MyEnum::val1, MyEnum::val1};
-+    f = {MyEnum::val2, MyEnum::val2};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i==MyEnum::val1) implies check == false;
-+    f->forAll(i|i==MyEnum::val2) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml
-new file mode 100644
-index 0000000..ddab240
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml
-@@ -0,0 +1,13 @@
-+project EnumInCollectionDefaultsTest {
-+
-+    enum MyEnum {val1, val2, val3};
-+    sequenceOf(MyEnum) t = {MyEnum::val1, MyEnum::val1};
-+    sequenceOf(MyEnum) f = {MyEnum::val2, MyEnum::val2};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i==MyEnum::val1) implies check == false;
-+    f->forAll(i|i==MyEnum::val2) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml
-new file mode 100644
-index 0000000..c1f7e7e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml
-@@ -0,0 +1,17 @@
-+project EnumInCompoundAssignTest {
-+
-+    enum MyEnum {val1, val2, val3};
-+    compound C {
-+        MyEnum e1;
-+        MyEnum e2;
-+        MyEnum e3;
-+    
-+        e1 = MyEnum::val1;
-+        e2 = MyEnum::val2;
-+    
-+        e1 <> e2 implies e3 == MyEnum::val3;
-+    }
-+    
-+    C cmp;   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml
-new file mode 100644
-index 0000000..7b7c464
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml
-@@ -0,0 +1,14 @@
-+project EnumInCompoundDefaultsTest {
-+
-+    enum MyEnum {val1, val2, val3};
-+    compound C {
-+        MyEnum e1 = MyEnum::val1;
-+        MyEnum e2 = MyEnum::val2;
-+        MyEnum e3;
-+ 
-+        e1 <> e2 implies e3 == MyEnum::val3;
-+    }
-+    
-+    C cmp; 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml
-new file mode 100644
-index 0000000..3d00724
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml
-@@ -0,0 +1,15 @@
-+project EnumRefAssignTest {
-+
-+    enum MyEnum {val1, val2, val3};
-+    MyEnum t;
-+    MyEnum f;
-+
-+    refTo(MyEnum) tr = refBy(t);
-+    refTo(MyEnum) fr = refBy(f);
-+    
-+    tr = MyEnum.val1;
-+    fr = MyEnum.val2;
-+
-+    t == MyEnum.val2;
-+    f == MyEnum.val1;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml
-new file mode 100644
-index 0000000..96ecb23
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml
-@@ -0,0 +1,32 @@
-+project EnumAnnotationTest {
-+
-+    enum AEnum {a1=1, a2=2};
-+    annotate AEnum ann = AEnum::a1 to EnumAnnotationTest;
-+    
-+    enum MyEnum {val1=1, val2=2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann <> AEnum::a1;
-+    i.ann <> AEnum::a1;    
-+    r.ann <> AEnum::a1;    
-+    s.ann <> AEnum::a1;    
-+    e.ann <> AEnum::a1;
-+    c.ann <> AEnum::a1;
-+    o.ann <> AEnum::a1;
-+    d.ann <> AEnum::a1;
-+    n.ann <> AEnum::a1;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml
-new file mode 100644
-index 0000000..787af7d
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml
-@@ -0,0 +1,13 @@
-+project OrderedEnumAssignTest {
-+
-+    enum MyEnum {val1=1, val2=2, val3=3};
-+    MyEnum e1;
-+    MyEnum e2;
-+    MyEnum e3;
-+    
-+    e1 = MyEnum::val1;
-+    e2 = MyEnum::val2;
-+
-+    e1 < e2;    
-+    e1 <> e2 implies e3 == MyEnum::val3;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml
-new file mode 100644
-index 0000000..c397388
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml
-@@ -0,0 +1,10 @@
-+project OrderedEnumDefaultsTest {
-+
-+    enum MyEnum {val1=1, val2=2, val3=3};
-+    MyEnum e1 = MyEnum::val1;
-+    MyEnum e2 = MyEnum::val2;
-+    MyEnum e3;
-+ 
-+    e1 < e2;    
-+    e1 <> e2 implies e3 == MyEnum::val3;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml
-new file mode 100644
-index 0000000..344c739
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml
-@@ -0,0 +1,16 @@
-+project EnumInCollectionAssignTest {
-+
-+    enum MyEnum {val1=1, val2=2, val3=3};
-+    sequenceOf(MyEnum) t;
-+    sequenceOf(MyEnum) f;
-+    
-+    t = {MyEnum::val1, MyEnum::val1};
-+    f = {MyEnum::val2, MyEnum::val2};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i==MyEnum::val1) implies check == false;
-+    f->forAll(i|i==MyEnum::val2) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml
-new file mode 100644
-index 0000000..32e4584
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml
-@@ -0,0 +1,13 @@
-+project EnumInCollectionDefaultsTest {
-+
-+    enum MyEnum {val1=1, val2=2, val3=3};
-+    sequenceOf(MyEnum) t = {MyEnum::val1, MyEnum::val1};
-+    sequenceOf(MyEnum) f = {MyEnum::val2, MyEnum::val2};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i==MyEnum::val1) implies check == false;
-+    f->forAll(i|i==MyEnum::val2) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml
-new file mode 100644
-index 0000000..8ef2ee0
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml
-@@ -0,0 +1,18 @@
-+project OrderedEnumInCompoundAssignTest {
-+
-+    enum MyEnum {val1=1, val2=2, val3=3};
-+    compound C {
-+        MyEnum e1;
-+        MyEnum e2;
-+        MyEnum e3;
-+    
-+        e1 = MyEnum::val1;
-+        e2 = MyEnum::val2;
-+    
-+        e1 < e2;    
-+        e1 <> e2 implies e3 == MyEnum::val3;
-+    }
-+    
-+    C cmp;   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml
-new file mode 100644
-index 0000000..fd5cc55
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml
-@@ -0,0 +1,15 @@
-+project OrderedEnumInCompoundDefaultsTest {
-+
-+    enum MyEnum {val1=1, val2=2, val3=3};
-+    compound C {
-+        MyEnum e1 = MyEnum::val1;
-+        MyEnum e2 = MyEnum::val2;
-+        MyEnum e3;
-+ 
-+        e1 < e2;    
-+        e1 <> e2 implies e3 == MyEnum::val3;
-+    }
-+    
-+    C cmp; 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml
-new file mode 100644
-index 0000000..1c35978
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml
-@@ -0,0 +1,15 @@
-+project OrderedEnumRefAssignTest {
-+
-+    enum MyEnum {val1=1, val2=2, val3=3};
-+    MyEnum t;
-+    MyEnum f;
-+
-+    refTo(MyEnum) tr = refBy(t);
-+    refTo(MyEnum) fr = refBy(f);
-+    
-+    tr = MyEnum.val1;
-+    fr = MyEnum.val2;
-+
-+    t == MyEnum.val2;
-+    f == MyEnum.val1;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/ReferenceDerivedEnumTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/ReferenceDerivedEnumTest.ivml
-new file mode 100644
-index 0000000..91bceef
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/ReferenceDerivedEnumTest.ivml
-@@ -0,0 +1,14 @@
-+project ReferenceDerivedEnumTest {
-+
-+    enum MyEnum {val1, val2};
-+    typedef RMyEnum refTo(MyEnum);
-+    typedef E MyEnum with (E == MyEnum::val1);
-+    typedef RE refTo(E);
-+
-+    MyEnum e = MyEnum::val2;
-+    RE r1 = refBy(e);
-+    refBy(r1) == MyEnum::val1;
-+    RMyEnum r2 = refBy(e);
-+    r2 == MyEnum::val1;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml
-new file mode 100644
-index 0000000..af34d6f
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml
-@@ -0,0 +1,15 @@
-+project CompoundEval {
-+
-+	version v0;
-+
-+    compound Cmp {
-+        Integer a;
-+        eval {
-+            not(isDefined(a)) implies a == -1;
-+        }
-+        not(isDefined(a)) implies a == 1;
-+    }
-+    
-+    Cmp c = {};
-+    c.a < 0;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_base.ivml
-new file mode 100644
-index 0000000..8ac4770
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_base.ivml
-@@ -0,0 +1,27 @@
-+project PL_SimElevator_base {
-+
-+    version v0;
-+    enum ControllerType {DefaultEController, DistanceEController};
-+    enum ButtonType {DefaultButton, ArrowButton};
-+    Integer elevators = 2;
-+    Integer floors;
-+    ControllerType controlling_controllertype = ControllerType.DefaultEController;
-+    Boolean controlling_synchronized = true;
-+    Boolean controlling_accelerated = true;
-+    ButtonType outerview_buttontype = ButtonType.DefaultButton;
-+    Boolean outerview_emergencybuttons = true;
-+    Boolean outerview_cancellation = true;
-+    Boolean innerview_emergencybutton = true;
-+    Boolean innerview_authorization = true;
-+    Boolean innerview_doorbutton = true;
-+    Boolean display_direction = true;
-+    Boolean display_currfloor_number = true;
-+    Boolean display_currfloor_chain = true;
-+    Boolean display_target = true;
-+    Boolean display_openingside = true;
-+    Boolean outerview_autoscroll = true;
-+    controlling_synchronized == true implies elevators >= 2;
-+    elevators > 0;
-+    floors >= 1;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_0.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_0.ivml
-new file mode 100644
-index 0000000..da23450
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_0.ivml
-@@ -0,0 +1,42 @@
-+project PL_SimElevator_frozen {
-+
-+    version v0;
-+    import PL_SimElevator_base;
-+    
-+    elevators = 4;
-+    floors = 10;
-+    controlling_controllertype = ControllerType.DefaultEController;
-+    controlling_synchronized = true;
-+    controlling_accelerated = true;
-+    outerview_buttontype = ButtonType.DefaultButton;
-+    outerview_emergencybuttons = true;
-+    outerview_cancellation = true;
-+    innerview_emergencybutton = true;
-+    innerview_authorization = true;
-+    innerview_doorbutton = true;
-+    display_direction = true;
-+    display_currfloor_number = true;
-+    display_currfloor_chain = true;
-+    display_target = true;
-+    display_openingside = true;
-+    outerview_autoscroll = true;
-+    freeze {
-+        elevators;
-+        floors;
-+        controlling_controllertype;
-+        controlling_synchronized;
-+        controlling_accelerated;
-+        outerview_buttontype;
-+        outerview_emergencybuttons;
-+        outerview_cancellation;
-+        innerview_emergencybutton;
-+        innerview_authorization;
-+        innerview_doorbutton;
-+        display_direction;
-+        display_currfloor_number;
-+        display_currfloor_chain;
-+        display_target;
-+        display_openingside;
-+        outerview_autoscroll;
-+    }
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_orig.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_orig.ivml
-new file mode 100644
-index 0000000..75ef9f3
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/applications/PL_SimElevator_frozen_orig.ivml
-@@ -0,0 +1,63 @@
-+project PL_SimElevator_frozen_orig {
-+
-+    version v0;
-+    enum ControllerType {DefaultEController, DistanceEController};
-+    enum ButtonType {DefaultButton, ArrowButton};
-+    Integer elevators = 2;
-+    Integer floors;
-+    ControllerType controlling_controllertype = ControllerType.DefaultEController;
-+    Boolean controlling_synchronized = true;
-+    Boolean controlling_accelerated = true;
-+    ButtonType outerview_buttontype = ButtonType.DefaultButton;
-+    Boolean outerview_emergencybuttons = true;
-+    Boolean outerview_cancellation = true;
-+    Boolean innerview_emergencybutton = true;
-+    Boolean innerview_authorization = true;
-+    Boolean innerview_doorbutton = true;
-+    Boolean display_direction = true;
-+    Boolean display_currfloor_number = true;
-+    Boolean display_currfloor_chain = true;
-+    Boolean display_target = true;
-+    Boolean display_openingside = true;
-+    Boolean outerview_autoscroll = true;
-+    controlling_synchronized == true implies elevators >= 2;
-+    elevators > 0;
-+    floors >= 1;
-+    
-+    elevators = 4;
-+    floors = 10;
-+    controlling_controllertype = ControllerType.DefaultEController;
-+    controlling_synchronized = true;
-+    controlling_accelerated = true;
-+    outerview_buttontype = ButtonType.DefaultButton;
-+    outerview_emergencybuttons = true;
-+    outerview_cancellation = true;
-+    innerview_emergencybutton = true;
-+    innerview_authorization = true;
-+    innerview_doorbutton = true;
-+    display_direction = true;
-+    display_currfloor_number = true;
-+    display_currfloor_chain = true;
-+    display_target = true;
-+    display_openingside = true;
-+    outerview_autoscroll = true;
-+    freeze {
-+        elevators;
-+        floors;
-+        controlling_controllertype;
-+        controlling_synchronized;
-+        controlling_accelerated;
-+        outerview_buttontype;
-+        outerview_emergencybuttons;
-+        outerview_cancellation;
-+        innerview_emergencybutton;
-+        innerview_authorization;
-+        innerview_doorbutton;
-+        display_direction;
-+        display_currfloor_number;
-+        display_currfloor_chain;
-+        display_target;
-+        display_openingside;
-+        outerview_autoscroll;
-+    }
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml
-new file mode 100644
-index 0000000..3f7feeb
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml
-@@ -0,0 +1,31 @@
-+project IntegerAnnotationTest {
-+
-+    annotate Integer ann = 1 to IntegerAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann <> 1;
-+    i.ann <> 1;    
-+    r.ann <> 1;    
-+    s.ann <> 1;    
-+    e.ann <> 1;
-+    c.ann <> 1;
-+    o.ann <> 1;
-+    d.ann <> 1;
-+    n.ann <> 1;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml
-new file mode 100644
-index 0000000..c2d8ce3
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml
-@@ -0,0 +1,13 @@
-+project IntegerAssignTest {
-+
-+    Integer i1;
-+    Integer i2;
-+    Integer i3;
-+    
-+    i1 = 6;
-+    i2 = 4;
-+    
-+    i1 > i2;
-+    i1 - 1 > i2 implies i3 == 2;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml
-new file mode 100644
-index 0000000..aba30fb
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml
-@@ -0,0 +1,9 @@
-+project IntegerDefaultsTest {
-+
-+    Integer i1 = 1;
-+    Integer i2 = 3;
-+    Integer i3;
-+ 
-+    i1 < i2;    
-+    i1 + 1 < i2 implies i3 == 2;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml
-new file mode 100644
-index 0000000..1d6bb77
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml
-@@ -0,0 +1,15 @@
-+project IntegerAssignTest {
-+
-+    sequenceOf(Integer) t;
-+    sequenceOf(Integer) f;
-+    
-+    t = {1, 2};
-+    f = {-1, -2};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i > 0) implies check == false;
-+    f->forAll(i|i < 0) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml
-new file mode 100644
-index 0000000..a093c48
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml
-@@ -0,0 +1,12 @@
-+project IntegerInCollectionDefaultsTest {
-+
-+    sequenceOf(Integer) t = {1, 2};
-+    sequenceOf(Integer) f = {-1, -2};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i > 0) implies check == false;
-+    f->forAll(i|i < 0) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml
-new file mode 100644
-index 0000000..752f571
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml
-@@ -0,0 +1,17 @@
-+project IntegerInCompoundAssignTest {
-+
-+    compound C {
-+        Integer i1;
-+        Integer i2;
-+        Integer i3;
-+    
-+        i1 = 6;
-+        i2 = 4;
-+    
-+        i1 > i2;
-+        i1 - 1 > i2 implies i3 == 2;
-+    }
-+    
-+    C cmp;   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml
-new file mode 100644
-index 0000000..fc8e09e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml
-@@ -0,0 +1,14 @@
-+project IntegerInCompoundDefaultsTest {
-+
-+    compound C {
-+        Integer i1 = 1;
-+        Integer i2 = 3;
-+        Integer i3;
-+ 
-+        i1 < i2;    
-+        i1 + 1 < i2 implies i3 == 2;
-+    }
-+    
-+    C cmp; 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml
-new file mode 100644
-index 0000000..ca464e5
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml
-@@ -0,0 +1,14 @@
-+project IntegerRefAssignTest {
-+
-+    Integer t;
-+    Integer f;
-+
-+    refTo(Integer) tr = refBy(t);
-+    refTo(Integer) fr = refBy(f);
-+    
-+    tr = 1;
-+    fr = 2;
-+
-+    t == 2;
-+    f == 1;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/ReferenceDerivedIntegerTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/ReferenceDerivedIntegerTest.ivml
-new file mode 100644
-index 0000000..1019c56
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/ReferenceDerivedIntegerTest.ivml
-@@ -0,0 +1,13 @@
-+project ReferenceDerivedIntegerTest {
-+
-+    typedef RInteger refTo(Integer);
-+    typedef I Integer with (I > 0);
-+    typedef RI refTo(I);
-+
-+    I i = 0;
-+    RI r1 = refBy(i);
-+    refBy(r1) > 0;
-+    RInteger r2 = refBy(i);
-+    refBy(r2) > 0;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml
-new file mode 100644
-index 0000000..fd4ad07
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml
-@@ -0,0 +1,6 @@
-+project VariableFail {
-+
-+   Integer horsePower = 101;
-+   horsePower = 102;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml
-new file mode 100644
-index 0000000..900d2b5
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml
-@@ -0,0 +1,16 @@
-+project Basis {
-+
-+    interface bIface {
-+        export iVal;
-+        export sVal;
-+    }
-+    
-+    Integer iVal;
-+    String sVal;
-+    Integer myVal;
-+    
-+    sVal == iVal.toString();
-+    myVal = iVal;
-+    myVal < 7;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml
-new file mode 100644
-index 0000000..f946687
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml
-@@ -0,0 +1,12 @@
-+project Frozen {
-+
-+    import Basis::bIface;
-+
-+    iVal = 8;
-+    sVal = "8";
-+
-+    freeze {
-+        Frozen;
-+        Basis;
-+    };    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml
-new file mode 100644
-index 0000000..388b0c8
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml
-@@ -0,0 +1,8 @@
-+project Unfrozen {
-+
-+    import Basis::bIface;
-+
-+    iVal = 8;
-+    sVal = "8";
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml
-new file mode 100644
-index 0000000..1e56fca
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml
-@@ -0,0 +1,12 @@
-+project typedefCompoundNestedInSequenceInvalid1 {
-+
-+  compound Dimension {
-+    Integer width;
-+    Integer height;
-+  }
-+  typedef MyDimension Dimension with (MyDimension.width >= 0 and MyDimension.height >= 0);
-+  
-+  sequenceOf(MyDimension) dim;
-+
-+  dim = {{width = -1, height = -2}, {width = 200, height = 300}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml
-new file mode 100644
-index 0000000..5d7a80d
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml
-@@ -0,0 +1,12 @@
-+project typedefCompoundNestedInSequenceInvalid2 {
-+
-+  typedef NaturalInteger Integer with (NaturalInteger >= 0);
-+  compound Dimension {
-+    NaturalInteger width;
-+    NaturalInteger height;
-+  }
-+  
-+  sequenceOf(Dimension) dim;
-+
-+  dim = {{width = -1, height = -2}, {width = 200, height = 300}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml
-new file mode 100644
-index 0000000..8bbd1a0
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml
-@@ -0,0 +1,12 @@
-+project typedefCompoundNestedInSequenceValid1 {
-+
-+  compound Dimension {
-+    Integer width;
-+    Integer height;
-+  }
-+  typedef MyDimension Dimension with (MyDimension.width >= 0 and MyDimension.height >= 0);
-+  
-+  sequenceOf(MyDimension) dim;
-+
-+  dim = {{width = 1600, height = 1200}, {width = 200, height = 300}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml
-new file mode 100644
-index 0000000..7eb1294
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml
-@@ -0,0 +1,12 @@
-+project typedefCompoundNestedInSequenceValid2 {
-+
-+  typedef NaturalInteger Integer with (NaturalInteger >= 0);
-+  compound Dimension {
-+    NaturalInteger width;
-+    NaturalInteger height;
-+  }
-+  
-+  sequenceOf(Dimension) dim;
-+
-+  dim = {{width = 1600, height = 1200}, {width = 200, height = 300}};
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml
-new file mode 100644
-index 0000000..8b19557
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml
-@@ -0,0 +1,171 @@
-+// specific variability model for tests.eu.qualimaster.storm
-+
-+project QM {
-+
-+    enum BindingTime {compile = 0, runtime = 1};
-+    annotate BindingTime bindingTime = BindingTime.compile to QM;
-+
-+    compound PipelineElement {
-+    }
-+
-+    compound Node refines PipelineElement {
-+        String name;
-+        setOf(Constraint) constraints;
-+        assign (bindingTime = BindingTime.runtime) to {
-+          Boolean isValid = true;
-+          Real predictedItemsThreshold;
-+        }
-+    }
-+    
-+    compound Source refines Node {
-+        setOf(refTo(Node)) next;
-+    }
-+    
-+    compound FamilyElement refines Node {
-+        setOf(refTo(Node)) output;
-+        refTo(Family) family;
-+
-+        assign (bindingTime = BindingTime.runtime) to {
-+          refTo(Algorithm) actual;
-+          setOf(refTo(Algorithm)) available;
-+          Real capacity;
-+          Integer executors;
-+        }
-+    }
-+    
-+    compound Sink refines Node {
-+    }
-+    
-+    compound ReplaySink refines Sink {
-+    }
-+    
-+    compound Family {
-+        String name;
-+        setOf(refTo(Algorithm)) members;
-+    }
-+    
-+    compound Algorithm {
-+        String name;
-+        setOf(Constraint) constraints;
-+        assign (bindingTime = BindingTime.runtime) to {
-+          Real latency;
-+          Integer throughputItem;
-+          Boolean isValid = true;
-+        }
-+    }
-+    
-+    compound HardwareAlgorithm refines Algorithm {
-+    }
-+    
-+    compound SubPipelineAlgorithm refines Algorithm {
-+    }
-+
-+    compound Pipeline {
-+        String artifact;
-+        String name;
-+        setOf(refTo(Source)) sources;
-+        setOf(Constraint) constraints;
-+
-+        assign (bindingTime = BindingTime.runtime) to {
-+          Real latency;
-+          Integer throughputItem;
-+          Real capacity;
-+          Integer executors;
-+          Boolean isValid = true;
-+          
-+          capacity > 0.10;
-+          capacity < 0.85;
-+        }
-+    }
-+    
-+    setOf(refTo(Pipeline)) pipelines;
-+    setOf(refTo(Algorithm)) algorithms;
-+    
-+    compound HwNode {
-+	String name;	 	
-+    }
-+	
-+    compound MPCCNode refines HwNode{
-+	String host; // possibly needed to direct network stream to
-+	Integer monitoringPort;
-+	Integer numCPUs;
-+	Integer numDFEs;
-+    } 
-+	
-+    sequenceOf(refTo(HwNode)) clusters;
-+
-+
-+    // ---------------------- instances ---------------------
-+    
-+    Algorithm alg1 = {
-+        name = "alg1",
-+        constraints = {(throughputItem * throughputItem) <= 500}
-+    };
-+
-+    Algorithm alg2 = {
-+        name = "alg2",
-+        constraints = {(throughputItem * throughputItem) > 500}
-+    };
-+    
-+    // background info for HW integration test
-+    HardwareAlgorithm hwAlg = {
-+        name = "GenTopoHardwareCorrelationFinancial"
-+    };
-+    
-+    SubPipelineAlgorithm subAlg = {
-+        name = "CorrelationSW"
-+    };
-+    
-+    Family fam1 = {
-+        name = "fam1",
-+        members = {refBy(alg1), refBy(alg2)}
-+    };
-+
-+    Sink snk = {
-+        name = "snk"
-+    };
-+    
-+    FamilyElement famElt1 = {
-+        name = "process",
-+        family = refBy(fam1), 
-+        output = {refBy(snk)},
-+        predictedItemsThreshold = 500 // default value
-+    };
-+    
-+    Source src = {
-+        name = "source", 
-+        next = {refBy(famElt1)}
-+    };
-+    
-+    Pipeline pip = {
-+        artifact = "eu.qualiMaster:TestPipeline:0.0.1",
-+        name = "pipeline",
-+        sources = {refBy(src)}
-+    };
-+    
-+    pipelines = {refBy(pip)};
-+    algorithms = {refBy(alg1), refBy(alg2), refBy(hwAlg), refBy(subAlg)};
-+    
-+    MPCCNode olynthos = {
-+        name = "olynthos",
-+        host = "147.27.39.12",
-+        monitoringPort = 2402,
-+	numCPUs = 12,
-+	numDFEs = 4
-+    };
-+
-+    clusters = {refBy(olynthos)};
-+
-+    freeze {
-+        alg1;
-+        alg2;
-+        fam1;
-+        snk;
-+        famElt1;
-+        src;
-+        pip;
-+        pipelines;
-+        algorithms;
-+        clusters;
-+    } but (v | v.bindingTime == BindingTime.runtime);
-+}
-\ No newline at end of file
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml
-new file mode 100644
-index 0000000..1e87ada
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml
-@@ -0,0 +1,31 @@
-+project RealAnnotationTest {
-+
-+    annotate Real ann = 1.0 to RealAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann <> 1.0;
-+    i.ann <> 1.0;    
-+    r.ann <> 1.0;    
-+    s.ann <> 1.0;    
-+    e.ann <> 1.0;    
-+    c.ann <> 1.0;    
-+    o.ann <> 1.0;    
-+    d.ann <> 1.0;
-+    n.ann <> 1.0;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml
-new file mode 100644
-index 0000000..e74639b
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml
-@@ -0,0 +1,13 @@
-+project RealAssignTest {
-+
-+    Real d1;
-+    Real d2;
-+    Real d3;
-+    
-+    d1 = 5.0;
-+    d2 = 4.0;
-+    
-+    d1 > d2;
-+    d1 + 0.4 > d2 implies d3 == 2.0;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml
-new file mode 100644
-index 0000000..b71067d
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml
-@@ -0,0 +1,9 @@
-+project RealDefaultsTest {
-+
-+    Real d1 = 1.0;
-+    Real d2 = 3.0;
-+    Real d3;
-+ 
-+    d1 < d2;    
-+    d1 + 0.4 < d2 implies d3 == 2.0;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml
-new file mode 100644
-index 0000000..e421f43
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml
-@@ -0,0 +1,15 @@
-+project RealInCollectionAssignTest {
-+
-+    sequenceOf(Real) t;
-+    sequenceOf(Real) f;
-+    
-+    t = {1.1, 2.2};
-+    f = {-1.3, -2.4};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i > 0) implies check == false;
-+    f->forAll(i|i < 0) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml
-new file mode 100644
-index 0000000..ae1cce7
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml
-@@ -0,0 +1,12 @@
-+project RealDefaultsTest {
-+
-+    sequenceOf(Real) t = {1.0, 2.0};
-+    sequenceOf(Real) f = {-1.1, -2.2};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|i > 0) implies check == false;
-+    f->forAll(i|i < 0) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml
-new file mode 100644
-index 0000000..eb32ed2
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml
-@@ -0,0 +1,17 @@
-+project RealInCompoundAssignTest {
-+
-+    compound C {
-+        Real d1;
-+        Real d2;
-+        Real d3;
-+    
-+        d1 = 5.0;
-+        d2 = 4.0;
-+    
-+        d1 > d2;
-+        d1 + 0.4 > d2 implies d3 == 2.0;
-+    }
-+    
-+    C cmp;   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml
-new file mode 100644
-index 0000000..95cb678
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml
-@@ -0,0 +1,14 @@
-+project RealInCompoundDefaultsTest {
-+
-+    compound C {
-+        Real d1 = 5.0;
-+        Real d2 = 4.0;
-+        Real d3;
-+    
-+        d1 > d2;
-+        d1 + 0.4 > d2 implies d3 == 2.0;
-+    }
-+    
-+    C cmp; 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml
-new file mode 100644
-index 0000000..9a3314e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml
-@@ -0,0 +1,14 @@
-+project RealRefAssignTest {
-+
-+    Real t;
-+    Real f;
-+
-+    refTo(Real) tr = refBy(t);
-+    refTo(Real) fr = refBy(f);
-+    
-+    tr = 1.0;
-+    fr = 5.0;
-+
-+    t < 2.0;
-+    f > 3.0;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/ReferenceDerivedRealTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/ReferenceDerivedRealTest.ivml
-new file mode 100644
-index 0000000..674072e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/ReferenceDerivedRealTest.ivml
-@@ -0,0 +1,13 @@
-+project ReferenceDerivedRealTest {
-+
-+    typedef RReal refTo(Real);
-+    typedef R Real with (R > 0);
-+    typedef RR refTo(R);
-+
-+    R r = 0.0;
-+    RR r1 = refBy(r);
-+    refBy(r1) > 0.0;
-+    RReal r2 = refBy(r);
-+    refBy(r2) > 0.0;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignBase.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignBase.ivml
-new file mode 100644
-index 0000000..1c04ced
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignBase.ivml
-@@ -0,0 +1,13 @@
-+project RealRefAssignBase {
-+
-+    version v0;
-+
-+    Real t;
-+    Real f;
-+
-+    refTo(Real) tr = refBy(t);
-+    refTo(Real) fr = refBy(f);
-+    
-+    t < 2.0;
-+    f > 3.0;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignTest.ivml
-new file mode 100644
-index 0000000..556066c
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/realRefAssign/RealRefAssignTest.ivml
-@@ -0,0 +1,8 @@
-+project RealRefAssignTest {
-+
-+    version v0;
-+    import RealRefAssignBase;
-+
-+    t < 2.0;
-+    f > 3.0;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml
-new file mode 100644
-index 0000000..bfe15cd
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml
-@@ -0,0 +1,4 @@
-+project ConstraintDefault1Fail {
-+    Constraint C = false;
-+    C = true;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml
-new file mode 100644
-index 0000000..05322bc
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml
-@@ -0,0 +1,4 @@
-+project ConstraintDefault2Fail {
-+    Constraint C = true;
-+    C = false;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1.ivml
-new file mode 100644
-index 0000000..85797e0
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1.ivml
-@@ -0,0 +1,5 @@
-+project ConstraintDefault1 {
-+    version v0;
-+    import ConstraintDefault1Base;
-+    C = true;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1Base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1Base.ivml
-new file mode 100644
-index 0000000..fe355c8
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault1Base.ivml
-@@ -0,0 +1,4 @@
-+project ConstraintDefault1Base {
-+    version v0;
-+    Constraint C = false;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2.ivml
-new file mode 100644
-index 0000000..74eda62
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2.ivml
-@@ -0,0 +1,5 @@
-+project ConstraintDefault2 {
-+    version v0;
-+    import ConstraintDefault2Base;
-+    C = false;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2Base.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2Base.ivml
-new file mode 100644
-index 0000000..e11b5ac
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/constraintDefault/ConstraintDefault2Base.ivml
-@@ -0,0 +1,4 @@
-+project ConstraintDefault2Base {
-+    version v0;
-+    Constraint C = true;
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/ReferenceDerivedStringTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/ReferenceDerivedStringTest.ivml
-new file mode 100644
-index 0000000..feee165
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/ReferenceDerivedStringTest.ivml
-@@ -0,0 +1,13 @@
-+project ReferenceDerivedStringTest {
-+
-+    typedef RString refTo(String);
-+    typedef S String with (S == "abba");
-+    typedef RS refTo(S);
-+
-+    S s = "baab";
-+    RS r1 = refBy(s);
-+    refBy(r1) == "abba";
-+    RString r2 = refBy(s);
-+    refBy(r2) == "abba";
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAnnotationTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAnnotationTest.ivml
-new file mode 100644
-index 0000000..9186f03
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAnnotationTest.ivml
-@@ -0,0 +1,31 @@
-+project StringAnnotationTest {
-+
-+    annotate String ann = "abba" to StringAnnotationTest;
-+    
-+    enum MyEnum {val1, val2};
-+    compound MyCmp {
-+       Integer i = 1;
-+    };
-+    typedef Cmp MyCmp with (Cmp.i > 1);
-+
-+    Boolean t = true;
-+    Integer i = 1;
-+    Real r = 0.5;
-+    String s = "aaa";
-+    MyEnum e = MyEnum::val1;
-+    MyCmp c = MyCmp{};
-+    setOf(Integer) o = {1, 2};
-+    Cmp d = {};
-+    Constraint n = true;
-+
-+    t.ann <> "abba";
-+    i.ann <> "abba";    
-+    r.ann <> "abba";    
-+    s.ann <> "abba";    
-+    e.ann <> "abba";    
-+    c.ann <> "abba";    
-+    o.ann <> "abba";    
-+    d.ann <> "abba";
-+    n.ann <> "abba";
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml
-new file mode 100644
-index 0000000..09ffc5c
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml
-@@ -0,0 +1,13 @@
-+project StringAssignTest {
-+
-+    String s1;
-+    String s2;
-+    String s3;
-+    
-+    s1 = "abba";
-+    s2 = "ba";
-+    
-+    s1.indexOf(s2) > 0;
-+    s1 != s2 implies s3 == "assigned";
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml
-new file mode 100644
-index 0000000..1e0d814
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml
-@@ -0,0 +1,9 @@
-+project StringDefaultsTest {
-+
-+    String s1 = "abba";
-+    String s2 = "ba";
-+    String s3;
-+    
-+    s1.indexOf(s2) > 0;
-+    s1 != s2 implies s3 == "assigned";
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml
-new file mode 100644
-index 0000000..e23201a
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml
-@@ -0,0 +1,15 @@
-+project StringInCollectionAssignTest {
-+
-+    sequenceOf(String) t;
-+    sequenceOf(String) f;
-+    
-+    t = {"aaa", "bbb"};
-+    f = {"aa", "bb"};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|size(i) > 2) implies check == false;
-+    f->forAll(i|size(i) <= 2) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml
-new file mode 100644
-index 0000000..ca7c25f
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml
-@@ -0,0 +1,12 @@
-+project StringInCollectionTest {
-+
-+    sequenceOf(String) t = {"aaa", "bbb"};
-+    sequenceOf(String) f = {"aa", "bb"};
-+    
-+    Boolean check;
-+    check = true;
-+    
-+    t->forAll(i|size(i) > 2) implies check == false;
-+    f->forAll(i|size(i) <= 2) implies check == false;
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml
-new file mode 100644
-index 0000000..e6ed7f9
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml
-@@ -0,0 +1,17 @@
-+project StringInCompoundAssignTest {
-+
-+    compound C {
-+        String s1;
-+        String s2;
-+        String s3;
-+    
-+        s1 = "abba";
-+        s2 = "ba";
-+    
-+        s1.indexOf(s2) > 0;
-+        s1 != s2 implies s3 == "assigned";
-+    }
-+    
-+    C cmp;   
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml
-new file mode 100644
-index 0000000..a79a84e
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml
-@@ -0,0 +1,14 @@
-+project StringInCompoundDefaultsTest {
-+
-+    compound C {
-+        String s1 = "abba";
-+        String s2 = "ba";
-+        String s3;
-+    
-+        s1.indexOf(s2) > 0;
-+        s1 != s2 implies s3 == "assigned";
-+    }
-+    
-+    C cmp; 
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml
-new file mode 100644
-index 0000000..17316ab
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml
-@@ -0,0 +1,14 @@
-+project StringRefAssignTest {
-+
-+    String t;
-+    String f;
-+
-+    refTo(String) tr = refBy(t);
-+    refTo(String) fr = refBy(f);
-+    
-+    tr = "abba";
-+    fr = "babba";
-+
-+    t == "babba";
-+    f == "abba";
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/temp/measurements-sse.tsv b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/temp/measurements-sse.tsv
-new file mode 100644
-index 0000000..be01f17
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/temp/measurements-sse.tsv
-@@ -0,0 +1,354 @@
-+model name	URI	tag	caller	MODEL_ANNOTATIONS	MODEL_COMPLEXITY	MODEL_CONSTRAINT_AVG_COMPLEXITY	MODEL_CONSTRAINT_COMPLEXITY	MODEL_CONSTRAINT_INSTANCES	MODEL_CONSTRAINT_VARIABLES	MODEL_CONSTRAINT_VARIABLES_NO_CONTAINER	MODEL_NORMAL_VARIABLES	MODEL_NORMAL_VARIABLES_NO_CONTAINER	MODEL_TOPLEVEL_VARIABLES	MODEL_VARIABLES	MODEL_VARIABLES_WITHOUT_CONTAINER	MODEL_VARIABLE_AVG_COMPLEXITY	MODEL_VARIABLE_COMPLEXITY	REASONER_CONSTRAINT_COUNT	REASONER_EVALUATION_TIME	REASONER_INSTANCE_CREATION_TIME	REASONER_PROBLEMS	REASONER_PROBLEM_ASSIGNMENTS	REASONER_PROBLEM_CONSTRAINTS	REASONER_REASONING_TIME	REASONER_REEVALUATION_COUNT	REASONER_TRANSLATION_TIME	REASONER_VARIABLES_IN_CONSTRAINTS	RESPONSETIME_AUTO	
-+CompoundTestProject		CompoundInit	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	2,00	0,00	1,00	0,00	1,00	8,00	5,00	0,00	4,00	9,00	
-+CompoundTestProject		REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoningForAdaptation	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	1,00	0,00	1,00	0,00	1,00	1,00	5,00	0,00	4,00	2,00	
-+SimpleTestProject		REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoning	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	1,00	5,00	1,00	3,00	1,00	
-+SimpleTestProject		REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	5,00	0,00	3,00	0,00	
-+SimpleTestProject		REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testSimpleResultAfterReasoningForAdaptation	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	1,00	5,00	0,00	3,00	2,00	
-+CompoundTestProject		CompoundInit	net.ssehub.easy.reasoning.core.adaptation.AdaptationIntegrityTests.testCompoundResultAfterReasoning	0,00	5,25	0,25	0,25	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	1,00	0,00	1,00	1,00	5,00	1,00	4,00	1,00	
-+collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	1,00	1,00	3,00	1,00	1,33	4,00	1,00	1,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	0,00	1,00	
-+collectionOfIntegers	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfIntegers.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfIntegersTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	1,00	1,00	3,00	1,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	1,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	0,00	1,00	
-+compoundVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundVariable.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundVariableTest	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	1,00	1,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	0,00	1,00	
-+collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	7,75	0,58	1,75	0,00	0,00	0,00	5,00	3,00	3,00	5,00	3,00	1,20	6,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
-+collectionOfSimpleVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/collectionOfSimpleVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.collectionOfSimpleVariablesTest	0,00	7,75	0,58	1,75	0,00	0,00	0,00	5,00	3,00	3,00	5,00	3,00	1,20	6,00	3,00	0,00	0,00	0,00	0,00	0,00	1,00	3,00	0,00	0,00	1,00	
-+runtimeReasoning	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoning.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningTest	2,00	3,25	0,42	1,25	1,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	6,00	1,00	0,00	0,00	0,00	0,00	1,00	7,00	0,00	2,00	1,00	
-+simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
-+simpleVariable	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/simpleVariable.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.simpleVariableTest	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	2,00	0,00	
-+runtimeReasoningConstraintSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/runtimeReasoningConstraintSet.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.runtimeReasoningConstraintSetTest	4,00	6,25	0,42	1,25	0,00	1,00	0,00	3,00	3,00	3,00	4,00	3,00	1,25	5,00	8,00	1,00	0,00	0,00	0,00	0,00	2,00	9,00	0,00	2,00	2,00	
-+compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	1,00	
-+compoundConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/adaptationScenarios/compoundConstraints.ivml	REASONING	net.ssehub.easy.reasoning.core.adaptation.AdaptationScenarioTests.compoundConstraintsTest	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	3,00	0,00	
-+CompoundIndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/CompoundIndividualAssign.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.compoundIndividualAssign	8,00	11,00	1,14	8,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	13,00	2,00	0,00	0,00	0,00	0,00	3,00	15,00	0,00	7,00	4,00	
-+BlockAssignNestedConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraint.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraint	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+ConstraintAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/ConstraintAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.constraintAnnotationTest	10,00	26,50	0,81	14,50	0,00	1,00	1,00	9,00	9,00	8,00	10,00	10,00	1,20	12,00	27,00	2,00	0,00	8,00	0,00	8,00	4,00	36,00	1,00	17,00	5,00	
-+IndividualAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssignNested.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssignNested	2,00	5,50	2,50	2,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	0,00	1,00	
-+BlockAssignNestedNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedNested.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedNested	12,00	15,00	2,50	10,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	6,00	1,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	6,00	1,00	
-+BlockAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssign.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssign	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
-+DefaultAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/DefaultAssign.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.defaultAssign	3,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	1,00	0,00	
-+IndividualAssign	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/IndividualAssign.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.individualAssign	3,00	7,00	1,50	3,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+BlockAssignNestedConstraintFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNestedConstraintFail.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNestedConstraintFail	3,00	5,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	3,00	1,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	2,00	1,00	
-+NestedAssignBlockTree	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/NestedAssignBlockTree.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.nestedAssignBlockTree	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	10,00	1,00	0,00	2,00	2,00	0,00	1,00	10,00	0,00	0,00	1,00	
-+BlockAssignNested	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/attributes/BlockAssignNested.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.AttributeTests.blockAssignNested	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	2,00	3,00	3,00	1,33	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+constraintSetSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetSetDefault.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	2,00	0,00	0,00	1,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/QM.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.qmTest	37,00	59,75	0,48	5,75	0,00	0,00	0,00	37,00	37,00	9,00	37,00	37,00	1,46	54,00	62,00	5,00	0,00	1,00	0,00	1,00	12,00	64,00	1,00	4,00	13,00	
-+constraintSetAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetAssigned.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetAssignedTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	1,00	0,00	1,00	0,00	1,00	1,00	4,00	0,00	1,00	1,00	
-+constraintSetDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefault.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultTest	0,00	4,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	1,00	0,00	1,00	1,00	4,00	1,00	1,00	1,00	
-+constraintSetInNestedCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInNestedCompoundDefault.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInNestedCompoundDefaultTest	0,00	13,50	5,50	5,50	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,60	8,00	3,00	0,00	0,00	1,00	0,00	1,00	2,00	3,00	1,00	3,00	2,00	
-+setDerivedSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/setDerivedSet.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.setDerivedSetTest	0,00	11,75	1,35	6,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,25	5,00	9,00	1,00	0,00	1,00	0,00	1,00	3,00	9,00	1,00	6,00	3,00	
-+constraintSetDerivedCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDerivedCompound.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDerivedCompoundTest	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	4,00	1,00	0,00	0,00	0,00	0,00	2,00	4,00	0,00	4,00	2,00	
-+constraintSetInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundAssigned.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundAssignedTest	0,00	6,50	1,50	1,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	3,00	1,00	2,00	1,00	
-+constraintSetInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetInCompoundDefault.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetInCompoundDefaultTest	0,00	6,25	1,25	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
-+constraintSetDefaultInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionConstraints/constraintSetDefaultInCompound.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.CollectionConstraintsTests.constraintSetDefaultInCompoundTest	0,00	6,25	0,63	1,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,67	5,00	4,00	1,00	0,00	1,00	0,00	1,00	1,00	4,00	0,00	2,00	1,00	
-+basicAssignmentTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicAssignmentTest.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicAssignmentTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	2,00	2,00	0,00	1,00	4,00	0,00	0,00	1,00	
-+basicCompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicCompoundConstraintTest.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicCompoundConstraintTest	0,00	5,75	0,25	0,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	1,00	0,00	1,00	0,00	1,00	1,00	4,00	0,00	4,00	1,00	
-+basicConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/failedDecisions/basicConstraintTest.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.FailedDecisionsTests.basicConstraintTest	0,00	4,75	0,44	1,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	3,00	1,00	
-+IgnoreDefaultAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/IgnoreDefaultAssignments.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.ignoreDefaultAssignmentsTest	0,00	8,00	0,60	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	2,00	3,00	2,00	4,00	2,00	
-+PartialFreeze	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/PartialFreeze.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.partialFreezeTest	2,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
-+ValidationConstraintFilter	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/incrementalReasoningConstraints/ValidationConstraintFilter.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.RuntimeReasoningTests.validationConstraintFilterTest	0,00	10,25	1,31	5,25	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	4,00	0,00	
-+booleanXORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
-+DynamicDispatchTestIsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsValid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsValid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	1,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	1,00	1,00	
-+realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
-+realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	1,00	0,00	0,00	0,00	0,00	1,00	13,00	0,00	4,00	1,00	
-+integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	1,00	
-+realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	1,00	0,00	0,00	0,00	0,00	1,00	12,00	0,00	6,00	1,00	
-+realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanOrEqualsVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	0,00	
-+integerDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	1,00	0,00	0,00	0,00	0,00	1,00	9,00	0,00	4,00	1,00	
-+typedefTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedef.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
-+integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	1,00	
-+valueValidation13	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation13.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation13IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	4,00	0,00	0,00	0,00	0,00	4,00	10,00	0,00	4,00	5,00	
-+DynamicDispatchTestIsInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/DynamicDispatchIsInvalid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testDynamicDispatchIsInvalid	0,00	3,25	0,25	1,25	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	1,00	0,00	1,00	0,00	1,00	1,00	1,00	0,00	1,00	1,00	
-+integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
-+realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	0,00	15,00	0,00	4,00	1,00	
-+valueValidation1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation1.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation1IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	1,00	0,00	0,00	0,00	0,00	1,00	4,00	0,00	0,00	1,00	
-+typedefOfTypedefInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefInvalid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefInvalid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	8,00	0,00	2,00	0,00	
-+realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulConstants	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
-+valueValidation18	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation18.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation18IsValid	5,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	1,00	
-+valueValidation6	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation6.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation6IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	1,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	4,00	1,00	
-+typedefNestedInSequenceValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceValid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	3,00	0,00	2,00	1,00	
-+integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanOrEqualsVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	1,00	15,00	0,00	4,00	1,00	
-+booleanEvaluateValueAssignVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanEvaluateValueAssignVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanEvaluateValueAssignVariables	0,00	11,50	0,50	3,50	0,00	2,00	2,00	6,00	6,00	8,00	8,00	8,00	1,00	8,00	7,00	1,00	0,00	0,00	0,00	0,00	1,00	10,00	0,00	6,00	1,00	
-+integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanOrEqualsVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanOrEqualsVariables	0,00	14,25	0,68	10,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	15,00	0,00	0,00	0,00	0,00	0,00	1,00	15,00	1,00	4,00	1,00	
-+realMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMulVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
-+integerGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	1,00	4,00	0,00	0,00	1,00	
-+typedefNestedInSetValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetValid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetValid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
-+realAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddConstants	0,00	1,50	0,75	1,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	1,00	
-+realABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+realLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+booleanANDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+valueValidation22	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation22.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation22IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	1,00	
-+integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerGreaterThanVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	1,00	0,00	0,00	0,00	0,00	1,00	13,00	0,00	4,00	1,00	
-+valueValidation11	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation11.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation11IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	1,00	0,00	0,00	0,00	0,00	1,00	10,00	0,00	4,00	1,00	
-+realFLOORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORConstants	0,00	2,00	0,50	2,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+realAddVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realAddVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealAddVariables	0,00	4,75	0,55	2,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
-+valueValidation16	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation16.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation16IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	1,00	6,00	1,00	5,00	1,00	
-+realABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realABSVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
-+typedefNestedInCompoundInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundInvalid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundInvalid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	1,00	0,00	1,00	0,00	1,00	1,00	5,00	0,00	3,00	1,00	
-+valueValidation4	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation4.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation4IsValid	0,00	19,50	2,25	13,50	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	0,00	
-+integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
-+typedefNestedInCompoundValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInCompoundValid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInCompoundValid	0,00	4,50	0,50	0,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+AliasUsedInSet	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/AliasUsedInSet.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAliasesInContainerValid	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	1,00	
-+booleanANDVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanANDVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanANDVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
-+valueValidation9	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation9.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation9IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	1,00	10,00	1,00	4,00	1,00	
-+booleanORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+integerMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+integerDivVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivVariablesFail.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivVariablesFails	0,00	9,75	0,61	6,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	11,00	0,00	0,00	0,00	0,00	0,00	0,00	11,00	0,00	3,00	0,00	
-+integerLessThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+realFLOORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realFLOORVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealFLOORVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
-+realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	1,00	5,00	0,00	0,00	1,00	
-+integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerSubVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerSubVariables	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	1,00	8,00	1,00	4,00	1,00	
-+booleanORVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanORVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanORVariables	0,00	6,00	0,67	4,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
-+integerDivConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDivConstantsFail.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDivConstantsFail	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+integerMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMAXVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
-+integerGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerLessThanVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerLessThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
-+valueValidation20	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation20.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation20IsValid	5,00	19,50	2,25	13,50	2,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
-+integerMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+realDivConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realDivVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealDivVariables	0,00	6,00	0,50	3,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	6,00	1,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	3,00	1,00	
-+realEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
-+booleanNOTConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	2,00	1,00	0,00	1,00	
-+valueValidation14	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation14.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation14IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	1,00	0,00	0,00	0,00	0,00	1,00	10,00	0,00	4,00	1,00	
-+valueValidation2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation2.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation2IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	1,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	4,00	1,00	
-+testBasisDatatype	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/string.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testStringOperationsIsValid	0,00	14,25	0,75	5,25	0,00	2,00	2,00	7,00	7,00	9,00	9,00	9,00	1,00	9,00	7,00	1,00	0,00	0,00	0,00	0,00	1,00	7,00	0,00	6,00	1,00	
-+typedefNestedInSequenceInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSequenceInvalid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSequenceInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	2,00	1,00	
-+realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+valueValidation19	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation19.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation19IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	1,00	
-+valueValidation7	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation7.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation7IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	1,00	0,00	0,00	0,00	0,00	1,00	10,00	0,00	4,00	1,00	
-+typedefCompoundNestedInSequenceValid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid1.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	1,00	3,00	0,00	4,00	1,00	
-+typedefCompoundNestedInSequenceValid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceValid2.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceValid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	1,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	0,00	1,00	
-+integerMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMINVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	1,00	13,00	1,00	4,00	1,00	
-+realEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realEqVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
-+booleanNOTVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanNOTVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanNOTVariables	0,00	4,00	0,50	2,00	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
-+sequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/sequence.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testSequenceOperationsIsValid	0,00	28,25	0,52	16,25	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	2,00	12,00	31,00	3,00	0,00	0,00	0,00	0,00	4,00	31,00	0,00	6,00	4,00	
-+realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realGreaterThanVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealGreaterThanVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	1,00	0,00	0,00	0,00	0,00	1,00	13,00	0,00	4,00	1,00	
-+realGreaterThanVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThenVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	1,00	
-+realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMAXVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	1,00	0,00	0,00	0,00	0,00	1,00	13,00	0,00	4,00	1,00	
-+typedefOfTypedefValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefOfTypedefValid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefOfTypedefValid	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
-+valueValidation12	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation12.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation12IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	1,00	10,00	0,00	5,00	1,00	
-+integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstants	0,00	3,75	0,75	3,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	0,00	0,00	
-+valueValidation17	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation17.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation17IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
-+valueValidation5	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation5.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation5IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	1,00	6,00	1,00	3,00	1,00	
-+realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	1,00	0,00	0,00	0,00	0,00	1,00	4,00	0,00	0,00	1,00	
-+integerMulConstantsFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulConstantsFail.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulConstantsFail	0,00	2,25	0,75	2,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	3,00	0,00	3,00	1,00	3,00	0,00	0,00	1,00	
-+booleanImpliesVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanImpliesVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanImpliesVariables	0,00	11,00	0,88	7,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
-+integerMulConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMulVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMulVariables	0,00	10,00	0,50	5,00	0,00	0,00	0,00	5,00	5,00	5,00	5,00	5,00	1,00	5,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	0,00	
-+realMINVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/mixMINVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testMixMINVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
-+realMAXConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+integerEqConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerConstants	0,00	4,50	0,50	4,50	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	1,00	
-+integerDIVopConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+realGreaterThanConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realLessThanOrEqualsConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealLessThanOrEqualsConstants	0,00	5,25	0,75	5,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	7,00	0,00	0,00	0,00	
-+integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddConstants	0,00	6,00	0,75	6,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	0,00	
-+integerABSConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSConstants	0,00	1,00	0,50	1,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+integerEqVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariables	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	3,00	0,00	
-+realSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realSubVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealSubVariables	0,00	8,75	0,53	4,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	4,00	0,00	
-+booleanIFFVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanIFFVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanIFFVariables	0,00	10,00	0,75	6,00	0,00	4,00	4,00	0,00	0,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	4,00	0,00	
-+valueValidation21	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation21.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation21IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	8,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	0,00	1,00	
-+realMAXVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMAXVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMAXVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
-+integerSubConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerMODopVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerMODopVariables	0,00	12,75	0,67	8,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	13,00	1,00	0,00	0,00	0,00	0,00	1,00	13,00	0,00	4,00	1,00	
-+integerDIVopVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerDIVopVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerDIVopVariables	0,00	14,75	0,67	8,75	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	13,00	0,00	0,00	0,00	0,00	0,00	0,00	13,00	0,00	4,00	0,00	
-+typedefNestedInSetInvalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefNestedInSetInvalid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefNestedInSetInvalid	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	2,00	1,00	
-+valueValidation10	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation10.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation10IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	1,00	0,00	0,00	0,00	0,00	1,00	10,00	0,00	5,00	1,00	
-+integerAddConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerAddVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerAddVariables	0,00	12,00	0,50	6,00	0,00	0,00	0,00	6,00	6,00	6,00	6,00	6,00	1,00	6,00	12,00	1,00	0,00	0,00	0,00	0,00	1,00	12,00	0,00	6,00	1,00	
-+booleanXORConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/booleanXORConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testBooleanXORConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+integerABSVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerABSVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerABSVariables	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	2,00	0,00	
-+realMINConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realMINConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealMINConstants	0,00	3,00	0,75	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/annotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testAnnotationsToDifferenCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+valueValidation15	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation15.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation15IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	0,00	0,00	
-+valueValidation3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation3.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation3IsValid	0,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	5,00	1,00	
-+realROUNDConstants	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/realROUNDConstants.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testRealROUNDConstants	0,00	3,00	0,50	3,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	0,00	0,00	
-+typedefCompoundNestedInSequenceInvalid1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid1.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid1	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	4,00	1,00	
-+typedefCompoundNestedInSequenceInvalid2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/typedefCompoundNestedInSequenceInvalid2.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testTypedefCompoundNestedInSequenceInvalid2	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+integerEqVariablesFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/integerEqVariablesFail.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testIntegerEqVariablesFail	0,00	8,25	0,44	5,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	12,00	0,00	0,00	9,00	0,00	9,00	1,00	12,00	1,00	3,00	1,00	
-+valueValidation8	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operations/valueValidation8.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.OperationTests.testValueValidation8IsValid	5,00	12,00	1,50	6,00	0,00	1,00	1,00	4,00	4,00	1,00	5,00	5,00	1,20	6,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	5,00	1,00	
-+CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Invalid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintInvalid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	3,00	0,00	
-+CompoundCollectionConstraintTest_Invalid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/collectionOperations/CompoundCollectionConstraintTest_Valid.ivml	REASONING	net.ssehub.easy.reasoning.core.frontend.CollectionOperationsTests.testCompoundCollectionConstraintValid	0,00	9,25	3,63	7,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	1,00	2,00	0,00	3,00	1,00	
-+ImportCycleTest_CyclingDeclarations_A		REASONING	net.ssehub.easy.reasoning.core.frontend.StructureTests.testCyclingDeclarations	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	1,00	7,00	1,00	3,00	1,00	
-+NestedCycleTest_MainProject		REASONING	net.ssehub.easy.reasoning.core.frontend.StructureTests.testNestedCycle	0,00	4,25	0,42	1,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	3,00	1,00	
-+booleanDefaultFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalse.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalse	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+falseTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/falseTest.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.falseTest	0,00	0,25	0,25	0,25	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
-+setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	1,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	0,00	1,00	
-+constraintInCompoundDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundDefault.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundDefaultTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	1,00	0,00	1,00	1,00	1,00	0,00	0,00	1,00	
-+booleanDefaultFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanDefaultFalseInCompound.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanDefaultFalseInCompound	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	1,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	0,00	1,00	
-+setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithNoDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+setOfConstraintsInCompoundWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithEmptyDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithEmptyDefaultValue	0,00	4,50	0,25	0,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	2,00	0,00	0,00	1,00	
-+setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanInCompoundWithNoDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanInCompoundWithNoDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+QM_constraintOrder	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/QM_constraintOrder.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.compoundConstraintVarOrder	0,00	101,75	3,51	59,75	0,00	4,00	4,00	26,00	26,00	10,00	30,00	30,00	1,40	42,00	14,00	6,00	0,00	0,00	0,00	0,00	6,00	14,00	0,00	8,00	6,00	
-+refinedConstraints		REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.refinedConstraintsTest	0,00	5,25	0,42	1,25	1,00	1,00	1,00	2,00	2,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	2,00	1,00	
-+constraintDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintDefault.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintDefaultTest	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	0,00	0,00	
-+constraintsDerived	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsDerived.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsDerivedTest	0,00	7,00	0,25	1,00	0,00	2,00	2,00	2,00	2,00	3,00	4,00	4,00	1,50	6,00	4,00	0,00	0,00	2,00	0,00	2,00	0,00	4,00	0,00	0,00	0,00	
-+setOfConstraintsInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsInCompoundWithDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsInCompoundWithDefaultValue	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	
-+setOfConstraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithNoDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+booleanAssignedFalse	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalse.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalse	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+setOfConstraintsWithEmptyDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfConstraintsWithEmptyDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfConstraintsWithEmptyDefaultValue	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+booleanAssignedFalseInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/booleanAssignedFalseInCompound.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.booleanAssignedFalseInCompound	0,00	4,50	1,50	1,50	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+setOfBooleanInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithNoDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithNoDefaultValue	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+constraintInCompoundAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintInCompoundAssigned.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintInCompoundAssignedTest	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+constraintsInCompoundWithNoDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintsInCompoundWithNoDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintsInCompoundWithNoDefaultValue	0,00	3,25	0,25	0,25	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,50	3,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+setOfBooleanInCompoundWithDefaultValue	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/setOfBooleanWithDefaultValue.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.setOfBooleanWithDefaultValue	0,00	2,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+constraintAssigned	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/constraintVariables/constraintAssigned.ivml	REASONING	net.ssehub.easy.reasoning.core.capabilities.ConstraintVariableTests.constraintAssignedTest	0,00	1,50	0,50	0,50	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	
-+SimpleEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/SimpleEval.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EvalTests.simpleEval	0,00	2,00	0,50	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	1,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+CompoundEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/evals/CompoundEval.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EvalTests.compoundEval	0,00	4,75	0,88	1,75	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	1,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	91,00	0,00	0,00	0,00	0,00	115,00	1701,00	4,00	140,00	119,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmModelTest/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMValidTest.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	53,00	0,00	0,00	0,00	0,00	73,00	1701,00	3,00	140,00	75,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest1/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMHardwareTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	40,00	0,00	1,00	0,00	1,00	56,00	1701,00	2,00	140,00	57,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest2/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMHardwareTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	43,00	0,00	1,00	0,00	1,00	56,00	1701,00	4,00	140,00	58,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmHardwareTest3/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMHardwareTest3.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	41,00	0,00	1,00	0,00	1,00	56,00	1701,00	4,00	140,00	58,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmAlgorithmsTest1/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMAlgorithmsTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	23,00	0,00	1,00	0,00	1,00	32,00	1701,00	1,00	140,00	35,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest1/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest1.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	25,00	0,00	1,00	0,00	1,00	36,00	1701,00	3,00	140,00	37,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmFamiliesTest2/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMFamiliesTest2.coreTest	681,00	1025,25	1,81	360,25	5,00	102,00	102,00	480,00	480,00	65,00	582,00	582,00	1,14	665,00	1319,00	29,00	0,00	1,00	0,00	1,00	43,00	1701,00	2,00	140,00	45,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmPipelinesTest1/QM_0.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMPipelinesTest1.coreTest	715,00	1057,75	1,76	367,75	5,00	107,00	107,00	494,00	494,00	67,00	601,00	601,00	1,15	690,00	1364,00	31,00	0,00	1,00	0,00	1,00	41,00	1753,00	1,00	139,00	42,00	
-+HardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMHardwareTest.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmHardwareTest	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	4,00	1,00	
-+QMFamilyAlgorithmsFieldsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/QMFamilyAlgorithmsFieldsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.qmFamilyAlgorithmsFieldsTest	0,00	87,00	3,58	43,00	0,00	2,00	2,00	34,00	34,00	7,00	36,00	36,00	1,22	44,00	9,00	1,00	0,00	1,00	0,00	1,00	1,00	9,00	0,00	7,00	1,00	
-+NestedHardwareTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmTemplates/nestedHardwareTest.ivml	REASONING	net.ssehub.easy.reasoning.core.qm.QMScenarioTests.nestedHardwareTest	0,00	8,50	2,50	2,50	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	3,00	1,00	0,00	1,00	0,00	1,00	2,00	3,00	0,00	6,00	2,00	
-+MismatchTest		REASONING	net.ssehub.easy.reasoning.core.frontend.MismatchedTest.testMismatchTestFail	619,00	941,75	1,58	356,75	33,00	109,00	109,00	403,00	403,00	60,00	512,00	512,00	1,14	585,00	1087,00	86,00	0,00	2,00	0,00	2,00	110,00	1367,00	3,00	142,00	111,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 1	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	81,00	114,50	0,36	7,50	0,00	10,00	8,00	71,00	60,00	13,00	81,00	68,00	1,32	107,00	4,00	0,00	0,00	0,00	0,00	0,00	2,00	4,00	0,00	5,00	2,00	
-+QM	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/qmMonTest/QM.ivml	REASONING 2	net.ssehub.easy.reasoning.core.qm.QMMonTest.monTest	81,00	114,50	0,36	7,50	0,00	10,00	8,00	71,00	60,00	13,00	81,00	68,00	1,32	107,00	4,00	0,00	0,00	1,00	0,00	1,00	2,00	4,00	0,00	5,00	2,00	
-+ProjectP2		REASONING	net.ssehub.easy.reasoning.core.reasoner.EvaluationIntegrityTest.testResolveOfIntegers	0,00	7,75	0,63	3,75	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	4,00	0,00	
-+internalConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InternalConstraintTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintTest	0,00	3,50	1,50	1,50	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
-+NullTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullTest	0,00	9,00	0,44	4,00	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	9,00	0,00	0,00	3,00	0,00	3,00	1,00	13,00	0,00	5,00	1,00	
-+refByCompoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/refByCompoundCollectionEqualityTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refByCompoundCollectionEqualityTest	0,00	14,75	0,29	1,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	1,00	
-+compoundCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/compoundCollectionEqualityTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundCollectionEqualityTest	0,00	15,75	0,46	2,75	0,00	0,00	0,00	8,00	8,00	5,00	8,00	8,00	1,63	13,00	6,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	1,00	
-+ConstrainedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstrainedCompoundTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constrainedCompoundTest	0,00	10,75	0,25	0,75	0,00	0,00	0,00	7,00	7,00	1,00	7,00	7,00	1,43	10,00	9,00	1,00	0,00	3,00	0,00	3,00	1,00	11,00	0,00	7,00	1,00	
-+NestedVariableReplaceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/nestedVariableReplaceTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nestedVariableReplaceTest	0,00	8,25	0,63	1,25	0,00	0,00	0,00	5,00	5,00	2,00	5,00	5,00	1,40	7,00	4,00	1,00	0,00	1,00	0,00	1,00	1,00	4,00	0,00	3,00	1,00	
-+stringCollectionEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/stringCollectionEqualityTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.stringCollectionEqualityTest	0,00	10,00	0,33	2,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	2,00	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	6,00	0,00	4,00	0,00	
-+AttributeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationInitialTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationInitialTest	12,00	7,25	0,25	0,25	0,00	0,00	0,00	6,00	6,00	3,00	6,00	6,00	1,17	7,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	0,00	0,00	
-+ConstraintVariableTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ConstraintVariableTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.constraintVariablesTest	0,00	10,25	0,45	2,25	0,00	2,00	2,00	5,00	5,00	4,00	7,00	7,00	1,14	8,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	5,00	0,00	
-+CompoundEqualityTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/CompoundEqualityTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.compoundEqualityTest	0,00	10,75	0,38	0,75	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,25	10,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
-+internalConstraintInheritedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	1,00	1,00	
-+DefaultConstraintReevaluationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/DefaultConstraintReevaluationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.defaultConstraintReevaluationTest	0,00	3,25	0,42	1,25	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
-+HasDuplicatesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/HasDuplicatesTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.hasDuplicatesTestTest	0,00	2,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	1,00	0,00	
-+internalConstraintCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionTest	0,00	5,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	2,00	4,00	6,00	0,00	0,00	2,00	0,00	2,00	0,00	10,00	0,00	4,00	0,00	
-+ImportCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportCore.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importCoreTest	0,00	4,00	0,50	2,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	2,00	0,00	
-+ClearConfigCore	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ClearConfigCore.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.clearConfigTest	2,00	4,50	0,42	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	9,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	0,00	0,00	
-+PreCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/PreCollectionTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.preCollectionTest	0,00	13,00	0,50	1,00	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	4,00	0,00	4,00	0,00	
-+FreezeTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeTest	0,00	4,25	0,63	1,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	2,00	0,00	
-+annotationAssignedToDifferentCompoundSlotsValid	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/AnnotationAssignedToDifferentCompoundSlotsValid.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.annotationAssignedToDifferentCompoundSlotsValid	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	1,00	
-+NullImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/NullImportTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.nullImportTest	0,00	11,00	0,45	5,00	0,00	4,00	4,00	2,00	2,00	6,00	6,00	6,00	1,00	6,00	11,00	1,00	0,00	4,00	0,00	4,00	1,00	16,00	0,00	6,00	1,00	
-+internalConstraintCollectionInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintCollectionInCompoundTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintCollectionInCompoundTest	0,00	6,25	0,25	0,25	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	2,00	6,00	5,00	0,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	5,00	1,00	
-+RefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefinedCompoundTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refinedCompoundTest	0,00	22,00	0,50	5,00	5,00	0,00	0,00	12,00	12,00	4,00	12,00	12,00	1,42	17,00	9,00	1,00	0,00	1,00	0,00	1,00	1,00	9,00	0,00	0,00	1,00	
-+ImportChild	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/ImportChild.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.importChildTest	0,00	3,50	0,50	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
-+TraceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/TraceTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.traceTest	0,00	10,75	1,88	3,75	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,75	7,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	4,00	0,00	
-+VariableAssignmentFailTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/VariableAssignmentFailTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.variableAssignmentFailTest	0,00	8,25	0,53	4,25	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	1,00	0,00	1,00	1,00	0,00	1,00	9,00	0,00	3,00	1,00	
-+InitialTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/InitialTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.initialTest	0,00	7,25	0,46	3,25	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	7,00	0,00	0,00	2,00	0,00	2,00	0,00	8,00	0,00	4,00	0,00	
-+RefToCompoundInSequenceTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/RefToCompoundInSequenceTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.refToCompoundInSequenceTest	0,00	10,25	0,31	1,25	0,00	0,00	0,00	6,00	6,00	4,00	6,00	6,00	1,50	9,00	4,00	2,00	0,00	0,00	0,00	0,00	2,00	4,00	0,00	0,00	2,00	
-+IsDefinedTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedTest	0,00	22,75	0,25	6,75	0,00	4,00	4,00	12,00	12,00	16,00	16,00	16,00	1,00	16,00	27,00	0,00	0,00	10,00	0,00	10,00	0,00	27,00	0,00	16,00	0,00	
-+IsDefinedCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/IsDefinedCompoundTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.isDefinedCompoundTest	0,00	1,25	0,25	0,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	1,00	0,00	
-+internalConstraintInheritedInCompoundTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintInheritedInCompoundTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintInheritedInCompoundTest	0,00	3,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,50	3,00	3,00	1,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	2,00	1,00	
-+internalConstraintStringPaternTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/internalConstraintStringPaternTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.internalConstraintStringPaternTest	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	5,00	6,00	0,00	2,00	5,00	
-+FreezeImportTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/operationsTemplates/FreezeImportTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ReasoningScenarioTests.freezeImportTest	0,00	5,25	0,56	2,25	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	1,00	1,00	0,00	0,00	5,00	0,00	2,00	1,00	
-+BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.1.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	1,25	0,25	0,25	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	0,00	0,00	0,00	0,00	0,00	1,00	1,00	0,00	0,00	1,00	
-+BooleanDefault	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanDefault.2.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanDefault	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
-+NullSize	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/NullSize.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testNullSize	0,00	3,00	0,50	1,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
-+PropagationSyntax1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/PropagationSyntax1.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testPropagationSyntax	0,00	5,00	1,00	3,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	1,00	0,00	0,00	0,00	0,00	1,00	8,00	0,00	2,00	1,00	
-+UndefinedVariableConstraints	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariableConstraints.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariableConstraints	0,00	6,00	0,50	5,00	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	10,00	0,00	0,00	0,00	0,00	0,00	0,00	10,00	0,00	1,00	0,00	
-+ConstraintDefault1Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.1-fail.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
-+ConstraintDefault2Fail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintDefault.2-fail.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaultsFail	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+ConstraintDefault1		REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	1,00	0,00	1,00	0,00	2,00	0,00	0,00	0,00	
-+ConstraintDefault2		REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintDefaults	0,00	1,75	0,38	0,75	0,00	1,00	1,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+UndefinedIf	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedIf.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testIfWithUndefinedValues	0,00	4,50	0,83	2,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
-+BooleanImplies	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/BooleanImplies.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testBooleanImplies	0,00	3,25	0,42	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	2,00	1,00	
-+OutOfBoundsIndex	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/OutOfBoundsIndex.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testOutOfBoundsIndex	0,00	3,25	0,63	1,25	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	1,00	0,00	
-+CompoundRefineConstraint	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundRefineConstraints.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundRefineConstraints	0,00	5,00	0,50	1,00	1,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	2,00	1,00	0,00	1,00	0,00	1,00	1,00	2,00	0,00	2,00	1,00	
-+ConstantInCustomOperation	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstantInCustomOperation.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstantInCustomOperation	0,00	0,75	0,38	0,75	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	0,00	1,00	
-+ConstraintEval	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/ConstraintEval.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testConstraintEvaluation	0,00	3,25	0,63	1,25	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	3,00	0,00	2,00	1,00	
-+SetAndSequenceTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SetAndSequenceTypedef.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	8,00	0,50	4,00	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	8,00	0,00	0,00	2,00	0,00	2,00	1,00	12,00	0,00	4,00	1,00	
-+SequenceTypedefWith	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/SequenceTypedefWith.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testSetAndSequenceTypedef	0,00	3,00	0,50	1,00	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	4,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
-+CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.1.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	5,00	1,50	3,00	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	0,00	0,00	0,00	1,00	3,00	0,00	2,00	1,00	
-+CompoundTypedef	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/CompoundTypedef.2.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testCompoundTypedef	0,00	7,00	1,50	3,00	0,00	0,00	0,00	4,00	4,00	2,00	4,00	4,00	1,00	4,00	4,00	1,00	0,00	1,00	0,00	1,00	1,00	6,00	0,00	3,00	1,00	
-+TypedefConstraintSequence	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/TypedefConstraintSequence.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testTypedefConstraintsInSequences	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	2,00	1,00	
-+UndefinedVariables	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/stresstest/UndefinedVariables.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StressTest.testUndefinedVariables	0,00	3,50	0,75	1,50	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	2,00	0,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	2,00	1,00	
-+test		REASONING	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	3,00	0,00	0,00	0,00	
-+test		REASONING	net.ssehub.easy.reasoning.core.reasoner.CodedTests.freezeCompoundTest	3,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	0,00	
-+BooleanIplicationTest		REASONING	net.ssehub.easy.reasoning.core.reasoner.CodedTests.testBooleanIplication	0,00	3,00	1,00	1,00	0,00	1,00	1,00	1,00	1,00	2,00	2,00	2,00	1,00	2,00	1,00	0,00	0,00	0,00	0,00	0,00	0,00	1,00	0,00	2,00	0,00	
-+BooleanDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanDefaultsTest	0,00	6,00	0,60	3,00	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	3,00	0,00	
-+BooleanRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanRefAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	2,00	2,00	2,00	2,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
-+BooleanInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAssignTest	0,00	6,50	0,70	3,50	0,00	3,00	3,00	0,00	0,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	2,00	0,00	2,00	1,00	5,00	1,00	3,00	1,00	
-+BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionAssignTest	0,00	18,75	2,75	13,75	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	1,00	
-+BooleanInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
-+BooleanInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCollectionDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCollectionDefaultsTest	0,00	18,25	2,65	13,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
-+CarExample	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/CarExample.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.carExampleTest	0,00	7,25	0,54	3,25	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,33	4,00	7,00	1,00	0,00	1,00	0,00	1,00	1,00	10,00	0,00	3,00	1,00	
-+BooleanImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanImpliesTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanImpliesTest	0,00	3,25	0,42	1,25	0,00	2,00	2,00	0,00	0,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	2,00	0,00	
-+BooleanAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	3,00	3,00	1,00	1,00	1,00	4,00	4,00	1,25	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
-+BooleanAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	2,00	30,00	0,00	19,00	2,00	
-+BooleanInCompoundImpliesTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/boolean/BooleanInCompoundImpliesTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.BooleanTests.booleanInCompoundImpliesTest	0,00	4,50	0,25	0,50	0,00	2,00	2,00	1,00	1,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	3,00	0,00	
-+RealRefAssignTest		REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.testConstraintDefaults	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
-+RealAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	1,00	30,00	0,00	19,00	1,00	
-+RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.realDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+RealInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	4,00	1,00	
-+RealAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.realAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	1,00	
-+RealRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealRefAssignTestFail.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.realReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	2,00	0,00	
-+RealInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+RealInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCompoundDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	1,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	4,00	1,00	
-+RealDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/real/RealInCollectionDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.RealTests.realInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+StringInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
-+StringInCollectionTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
-+StringInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCollectionAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	1,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+StringInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringInCompoundDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	1,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	4,00	1,00	
-+StringRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringRefAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
-+StringDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+StringAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/string/StringAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.StringTests.stringAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+IntegerDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerDefaultsTest	0,00	5,25	0,56	2,25	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAssignTest	0,00	5,75	0,69	2,75	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+IntegerRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerRefAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	1,00	
-+IntegerAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	1,00	30,00	0,00	19,00	1,00	
-+VariableFail	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/VariableFailTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.variableFailTest	0,00	1,75	0,38	0,75	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	1,00	1,00	2,00	0,00	0,00	0,00	0,00	0,00	0,00	2,00	0,00	0,00	0,00	
-+IntegerAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	1,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+IntegerInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCollectionDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	1,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+IntegerInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	1,00	6,00	0,00	4,00	1,00	
-+IntegerInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/integer/IntegerInCompoundAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.IntegerTests.integerInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
-+OrderedEnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumRefAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	0,00	0,00	0,00	0,00	0,00	0,00	8,00	0,00	2,00	0,00	
-+EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	1,00	30,00	0,00	19,00	1,00	
-+EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	1,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCollectionDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	1,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+EnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
-+EnumInCollectionAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionAssignTest	0,00	19,00	2,80	14,00	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	1,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+OrderedEnumInCompoundDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundDefaultsTest	0,00	5,50	0,25	0,50	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
-+EnumRefAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumRefAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumReferenceAssignTest	0,00	6,50	0,42	2,50	0,00	0,00	0,00	4,00	4,00	4,00	4,00	4,00	1,00	4,00	6,00	1,00	0,00	0,00	0,00	0,00	1,00	8,00	0,00	2,00	1,00	
-+EnumInCollectionDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCollectionDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCollectionDefaultsTest	0,00	18,50	2,70	13,50	0,00	1,00	1,00	2,00	2,00	3,00	3,00	3,00	1,67	5,00	5,00	1,00	0,00	2,00	0,00	2,00	1,00	5,00	0,00	4,00	1,00	
-+OrderedEnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumDefaultsTest	0,00	5,00	0,50	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+EnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumAssignTest	0,00	5,00	0,67	2,00	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
-+EnumDefaultsTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumDefaultsTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumDefaultsTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
-+OrderedEnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumInCompoundAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	6,00	0,00	4,00	0,00	
-+EnumAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderdEnumAnnotationTest	11,00	29,25	0,81	16,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	9,00	0,00	9,00	1,00	30,00	0,00	19,00	1,00	
-+EnumInCompoundAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/EnumInCompoundAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.enumInCompoundAssignTest	0,00	5,00	0,00	0,00	0,00	0,00	0,00	4,00	4,00	1,00	4,00	4,00	1,25	5,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	4,00	0,00	
-+OrderedEnumAssignTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/enums/OrderedEnumAssignTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.EnumTests.orderedEnumAssignTest	0,00	5,50	0,63	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	4,00	0,00	0,00	0,00	0,00	0,00	0,00	5,00	0,00	3,00	0,00	
-+CompoundAnnotationTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest2.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest2	4,00	6,25	0,25	0,25	0,00	1,00	1,00	3,00	3,00	1,00	4,00	4,00	1,50	6,00	8,00	0,00	0,00	0,00	0,00	0,00	1,00	8,00	0,00	0,00	1,00	
-+changingValuesBase	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/changingValues/changingValuesBase.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	14,00	0,25	2,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	12,00	0,00	0,00	0,00	0,00	0,00	0,00	12,00	0,00	5,00	0,00	
-+changingValues		REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.changingValuesTest	0,00	16,00	0,33	4,00	0,00	0,00	0,00	8,00	8,00	4,00	8,00	8,00	1,50	12,00	16,00	1,00	0,00	0,00	0,00	0,00	1,00	20,00	0,00	5,00	1,00	
-+CompoundCompoundTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundCompoundTest1.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundCompoundTest1	0,00	16,50	1,13	4,50	0,00	0,00	0,00	8,00	8,00	2,00	8,00	8,00	1,50	12,00	6,00	0,00	0,00	2,00	0,00	2,00	1,00	6,00	0,00	5,00	1,00	
-+CompoundRefAssignTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest1.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest1	0,00	12,75	0,96	6,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	7,00	0,00	0,00	0,00	0,00	0,00	0,00	9,00	0,00	3,00	0,00	
-+CompoundRefAssignTest3	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest3.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest3	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	0,00	0,00	0,00	0,00	0,00	1,00	4,00	0,00	5,00	1,00	
-+CompoundContainerTest1	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest1.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest1	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	9,00	0,00	0,00	2,00	0,00	2,00	0,00	9,00	0,00	7,00	0,00	
-+CompoundContainerTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundContainerTest2.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundContainerTest2	0,00	18,75	0,25	0,75	0,00	0,00	0,00	9,00	9,00	3,00	9,00	9,00	2,00	18,00	21,00	1,00	0,00	4,00	0,00	4,00	2,00	21,00	0,00	7,00	2,00	
-+DerivedCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/DerivedCompoundAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.derivedCompoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	1,00	0,00	0,00	0,00	0,00	1,00	30,00	0,00	20,00	2,00	
-+CompoundRefAssignTest2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundRefAssignTest2.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundReferenceAssignTest2Fail	0,00	17,75	2,69	10,75	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,40	7,00	4,00	1,00	0,00	0,00	0,00	0,00	1,00	4,00	0,00	5,00	1,00	
-+CompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundAnnotationTest	11,00	38,25	1,26	25,25	0,00	2,00	2,00	9,00	9,00	9,00	11,00	11,00	1,18	13,00	30,00	0,00	0,00	0,00	0,00	0,00	0,00	30,00	0,00	20,00	0,00	
-+ReferenceCompoundAnnotationTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/ReferenceCompoundAnnotationTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.referenceCompoundAnnotationTest	13,00	41,75	1,17	25,75	0,00	2,00	2,00	11,00	11,00	10,00	13,00	13,00	1,23	16,00	34,00	0,00	0,00	9,00	0,00	9,00	2,00	34,00	0,00	20,00	2,00	
-+Cfg		REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.slotReassignmentTest	5,00	7,25	0,25	1,25	0,00	0,00	0,00	5,00	5,00	1,00	5,00	5,00	1,20	6,00	13,00	1,00	0,00	0,00	0,00	0,00	1,00	18,00	0,00	5,00	1,00	
-+CompoundConstraintTest	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/compounds/CompoundConstraintTest.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.CompoundTests.compoundConstraintTest	0,00	10,00	0,67	2,00	0,00	0,00	0,00	6,00	6,00	2,00	6,00	6,00	1,33	8,00	5,00	0,00	0,00	2,00	0,00	2,00	0,00	5,00	0,00	4,00	0,00	
-+Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
-+Unfrozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Unfrozen.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.unfrozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
-+Basis	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Basis.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	4,50	0,50	1,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	3,00	0,00	0,00	0,00	0,00	0,00	0,00	4,00	0,00	3,00	0,00	
-+Frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/interfaces/Frozen.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.InterfaceTests.frozenTest	0,00	5,50	0,50	2,50	0,00	0,00	0,00	3,00	3,00	3,00	3,00	3,00	1,00	3,00	5,00	0,00	0,00	1,00	0,00	1,00	0,00	10,00	0,00	3,00	0,00	
-+PL_SimElevator_frozen_orig	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_orig.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTestFail	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
-+PL_SimElevator_frozen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/applications/PL_SimElevator_frozen_0.ivml	REASONING	net.ssehub.easy.reasoning.core.reasoner.ApplicationsTests.plSimElevatorTest	0,00	31,50	0,40	14,50	0,00	13,00	13,00	4,00	4,00	17,00	17,00	17,00	1,00	17,00	36,00	0,00	0,00	0,00	0,00	0,00	0,00	39,00	0,00	3,00	0,00	
-+SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignments.ivml	REASONING	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignments	0,00	4,00	0,00	0,00	0,00	0,00	0,00	3,00	3,00	1,00	3,00	3,00	1,33	4,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	6,00	0,00	3,00	1,00	
-+TypedefCollections	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollections.ivml	REASONING	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollections	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	5,00	0,00	3,00	1,00	
-+CompoundConstraintsInCollection	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollection.ivml	REASONING	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollection	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	3,00	0,00	4,00	0,00	
-+SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundSimpleAssignmentsWithConstraintVars.ivml	REASONING	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundSimpleAssignmentsWithConstraintVar	0,00	8,75	0,58	1,75	0,00	3,00	3,00	3,00	3,00	1,00	6,00	6,00	1,17	7,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	3,00	0,00	
-+TypedefCollectionsInCompound	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/TypedefCollectionsInCompound.ivml	REASONING	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.typedefCollectionsInCompound	0,00	4,25	0,25	0,25	0,00	0,00	0,00	2,00	2,00	1,00	2,00	2,00	2,00	4,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	4,00	1,00	
-+SimpleAssignments	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignments.ivml	REASONING	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignments	0,00	3,75	0,58	1,75	0,00	0,00	0,00	2,00	2,00	2,00	2,00	2,00	1,00	2,00	3,00	0,00	0,00	1,00	0,00	1,00	0,00	6,00	0,00	2,00	0,00	
-+SimpleAssignmentsWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/SimpleAssignmentsWithConstraintVars.ivml	REASONING	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.simpleAssignmentsWithConstraintVar	0,00	6,75	0,58	1,75	0,00	3,00	3,00	2,00	2,00	5,00	5,00	5,00	1,00	5,00	3,00	0,00	0,00	1,00	0,00	1,00	1,00	6,00	0,00	2,00	1,00	
-+CompoundConstraintsInCollectionWithConstraintVars	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/performanceModels/CompoundConstraintsInCollectionWithConstraintVars.ivml	REASONING	net.ssehub.easy.reasoning.core.performance.CaseStudyStats.compoundConstraintsInCollectionWithConstraintVars	0,00	2,50	0,50	0,50	0,00	0,00	0,00	1,00	1,00	1,00	1,00	1,00	2,00	2,00	3,00	1,00	0,00	1,00	0,00	1,00	1,00	3,00	0,00	4,00	1,00	
-+gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	4,00	0,00	150,00	0,00	150,00	12,00	400,00	1,00	100,00	12,00	
-+gr1_1_v100_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v100_c300_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	350,00	0,63	250,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	400,00	3,00	0,00	150,00	0,00	150,00	18,00	400,00	0,00	100,00	18,00	
-+gr1_1_v300_c900_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v300_c900_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1050,00	0,63	750,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	1200,00	9,00	0,00	438,00	0,00	438,00	26,00	1200,00	3,00	300,00	26,00	
-+gr1_1_v500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v500_c1500_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	1750,00	0,63	1250,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	2000,00	17,00	0,00	726,00	0,00	726,00	53,00	2000,00	7,00	500,00	53,00	
-+gr1_1_v1000_c3000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1000_c3000_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	3500,00	0,63	2500,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	4000,00	39,00	0,00	1518,00	0,00	1518,00	104,00	4000,00	11,00	999,00	106,00	
-+gr1_1_v1500_c4500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_1_v1500_c4500_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr11	0,00	5250,00	0,63	3750,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	6000,00	65,00	0,00	2236,00	0,00	2236,00	157,00	6000,00	12,00	1500,00	158,00	
-+gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	1,00	0,00	46,00	0,00	46,00	2,00	200,00	0,00	98,00	2,00	
-+gr1_2_v100_c100_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v100_c100_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	200,00	0,50	100,00	0,00	100,00	100,00	0,00	0,00	100,00	100,00	100,00	1,00	100,00	200,00	0,00	0,00	46,00	0,00	46,00	3,00	200,00	1,00	98,00	3,00	
-+gr1_2_v300_c300_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v300_c300_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	600,00	0,50	300,00	0,00	300,00	300,00	0,00	0,00	300,00	300,00	300,00	1,00	300,00	600,00	3,00	0,00	124,00	0,00	124,00	9,00	600,00	2,00	289,00	9,00	
-+gr1_2_v500_c500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v500_c500_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	1000,00	0,50	500,00	0,00	500,00	500,00	0,00	0,00	500,00	500,00	500,00	1,00	500,00	1000,00	4,00	0,00	266,00	0,00	266,00	11,00	1000,00	1,00	481,00	11,00	
-+gr1_2_v1000_c1000_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1000_c1000_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	2000,00	0,50	1000,00	0,00	1000,00	1000,00	0,00	0,00	1000,00	1000,00	1000,00	1,00	1000,00	2000,00	12,00	0,00	504,00	0,00	504,00	28,00	2000,00	3,00	951,00	29,00	
-+gr1_2_v1500_c1500_b_l2	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/ssePerformance/gr1_2_v1500_c1500_b_l2_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.GeneratedStats.gr12	0,00	3000,00	0,50	1500,00	0,00	1500,00	1500,00	0,00	0,00	1500,00	1500,00	1500,00	1,00	1500,00	3000,00	34,00	0,00	739,00	0,00	739,00	55,00	3000,00	5,00	1419,00	55,00	
-+Project_gen	file:/W:/offlineFiles/git/EASyProducer/EASyProducer/Plugins/Reasoner/ReasonerCore/ReasonerCore.test/testdata/historyPerformance/d2d_v10_c1_bir_l1_0.ivml	REASONING	test.net.ssehub.easy.reasoning.sseReasoner.performance.HistoryStats.historyStatsTest	0,00	13,00	0,27	3,00	0,00	4,00	4,00	6,00	6,00	10,00	10,00	10,00	1,00	10,00	11,00	1,00	0,00	0,00	0,00	0,00	1,00	11,00	0,00	2,00	1,00	
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/frontend/ReasoningProcess.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/frontend/ReasoningProcess.java
-index 3148d17..b59f28c 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/frontend/ReasoningProcess.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/frontend/ReasoningProcess.java
-@@ -16,6 +16,8 @@
-  */
- public class ReasoningProcess implements Runnable {
- 
-+    private static final boolean LOG_RESULT = false;
-+
-     private ReasoningOperation desiredOperation;
-     private ReasoningResult result;
-     private Project project;
-@@ -82,18 +84,21 @@
-                 switch(desiredOperation) {
-                 case CONSITENCY_CHECK:
-                     result = reasoner.isConsistent(project, reasonerConfig, observer);
-+                    logResult();
-                     break;
-                 case VALIDATION:
-                     if (null == config) {
-                         setErrorResult("No configuration specified for reasoning");
-                     }
-                     result = reasoner.check(project, config, reasonerConfig, observer);
-+                    logResult();
-                     break;
-                 case PROPAGATION:
-                     if (null == config) {
-                         setErrorResult("No configuration specified for reasoning");
-                     }
-                     result = reasoner.propagate(project, config, reasonerConfig, observer);
-+                    logResult();
-                     break;
-                 default:
-                     result = new ReasoningResult();
-@@ -118,6 +123,16 @@
-     }
- 
-     /**
-+      * Performs the result logging as it was previously integrated into the reasoner but removed for performance 
-+      * reasons.
-+      */
-+    private void logResult() {
-+        if (LOG_RESULT) {
-+            result.logInformation(project, reasonerConfig);
-+        }
-+    }
-+    
-+    /**
-      * Returns the result of the reasoning, i.e. the result of the {@link #run()} method.
-      * This method should be used, if no {@link ReasoningResult} was used.
-      * @return The result of the reasoning.
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/GeneralMeasures.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/GeneralMeasures.java
-new file mode 100644
-index 0000000..c5d1bcb
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/GeneralMeasures.java
-@@ -0,0 +1,76 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+/**
-+ * General reasoner measures.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public enum GeneralMeasures implements IMeasurementKey {
-+    
-+    /**
-+     * Time (in ms) spent for constraint translation.
-+     */
-+    EVALUATION_TIME("Evaluation time"),
-+
-+    /**
-+     * Time (in ms) spent for translating the model - collected only if the approach performs translation.
-+     */
-+    TRANSLATION_TIME("Translation time"),
-+
-+    /**
-+     * Total time (in ms) spent for reasoning.
-+     */
-+    REASONING_TIME("Total time"),
-+    
-+    /**
-+     * Total number of re-evaluations.
-+     */
-+    REEVALUATION_COUNT("Number of reevaluations"),
-+    
-+    /**
-+     * Total number of constraints.
-+     */
-+    CONSTRAINT_COUNT("Number of constraints"),
-+    
-+    /**
-+     * Total number of evaluation problems.
-+     */
-+    PROBLEMS("Number of problems");
-+    
-+    private String explanation;
-+    
-+    /**
-+     * Creates a measures constant.
-+     * 
-+     * @param explanation the headline/explanation
-+     */
-+    private GeneralMeasures(String explanation) {
-+        this.explanation = explanation;
-+    }
-+
-+    @Override
-+    public String getExplanation() {
-+        return explanation;
-+    }
-+
-+    @Override
-+    public int outputPos() {
-+        return ordinal();
-+    }
-+
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/IMeasurementKey.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/IMeasurementKey.java
-new file mode 100644
-index 0000000..6b768c3
---- /dev/null
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/IMeasurementKey.java
-@@ -0,0 +1,46 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.reasoning.core.reasoner;
-+
-+/**
-+ * Base type for measurement keys.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public interface IMeasurementKey {
-+    
-+    /**
-+     * An explanation/headline for this key.
-+     * 
-+     * @return the explanation
-+     */
-+    public String getExplanation();
-+    
-+    /**
-+     * Returns the name of the key.
-+     * 
-+     * @return the name
-+     */
-+    public String name();
-+    
-+    /**
-+     * Intended output position for printing.
-+     * 
-+     * @return an integer number; the higher the earlier the output
-+     */
-+    public int outputPos();
-+    
-+}
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasonerConfiguration.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasonerConfiguration.java
-index ee747f9..364273c 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasonerConfiguration.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasonerConfiguration.java
-@@ -10,20 +10,31 @@
-  */
- public class ReasonerConfiguration {
- 
-+    public static final IAdditionalInformationLogger ADDITIONAL_INFO_LOG_SYSOUT = new IAdditionalInformationLogger() {
-+
-+        @Override
-+        public void info(String text) {
-+            System.out.println(text);
-+        }
-+        
-+    };
-+
-+    public static final IAdditionalInformationLogger ADDITIONAL_INFO_LOG_NONE = new IAdditionalInformationLogger() {
-+
-+        @Override
-+        public void info(String text) {
-+        }
-+
-+    };
-+
-+    
-     private AttributeValues attributeValues;
-     private int timeout;
-     private ReasonerDescriptor defaultReasoner;
-     private boolean customMessages;
-     private boolean runtime;
-     private boolean freshConfig;
--    private IAdditionalInformationLogger logger = new IAdditionalInformationLogger() {
--
--        @Override
--        public void info(String text) {
--            System.out.println(text); // the legacy behavior
--        }
--        
--    };
-+    private IAdditionalInformationLogger logger = ADDITIONAL_INFO_LOG_SYSOUT; // the legacy behavior
- 
-     /**
-      * Describes an information logger.
-diff --git a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningResult.java b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningResult.java
-index a976ffc..8415625 100644
---- a/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningResult.java
-+++ b/Plugins/Reasoner/ReasonerCore/ReasonerCore/src/net/ssehub/easy/reasoning/core/reasoner/ReasoningResult.java
-@@ -1,10 +1,15 @@
- package net.ssehub.easy.reasoning.core.reasoner;
- 
- import java.util.ArrayList;
-+import java.util.HashMap;
- import java.util.List;
-+import java.util.Map;
-+import java.util.Set;
- 
- import net.ssehub.easy.basics.messages.Status;
-+import net.ssehub.easy.reasoning.core.reasoner.ReasonerConfiguration.IAdditionalInformationLogger;
- import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.model.Project;
- 
- /**
-  * Result of (one) reasoning step.
-@@ -16,6 +21,7 @@
-     private List<IDecisionVariable> affected = null;
-     private List<Message> messages = new ArrayList<Message>();
-     private boolean hasConflict;
-+    private Map<IMeasurementKey, Number> measures;
- 
-     /**
-      * General constructor for new ReasoningResults.
-@@ -150,4 +156,60 @@
-         return affected.get(index);
-     }
-     
-+    /**
-+     * Sets a reasoner-specific measure.
-+     * 
-+     * @param key the key (<b>null</b> is ignored)
-+     * @param value the measure (may be <b>null</b>)
-+     */
-+    public void setMeasure(IMeasurementKey key, Number value) {
-+        if (null != key) {
-+            if (null == measures) {
-+                measures = new HashMap<IMeasurementKey, Number>();
-+            }
-+            measures.put(key, value);
-+        }
-+    }
-+
-+    /**
-+     * Returns the measure for a specific <code>key</code>.
-+     * 
-+     * @param key the key (<b>null</b> is ignored)
-+     * @return the measure (may be <b>null</b>)
-+     */
-+    public Number getMeasure(IMeasurementKey key) {
-+        return (null == key || null == measures) ? null : measures.get(key);
-+    }
-+    
-+    /**
-+     * Returns all measurement keys.
-+     * 
-+     * @return the keys, may be <b>null</b> if there are none
-+     */
-+    public Set<IMeasurementKey> measurementKeys() {
-+        return null == measures ? null : measures.keySet();
-+    }
-+    
-+    /**
-+     * Logs reasoning summary based on <code>prj</code>, the measures and the messages. Reasoners shall not produce
-+     * output except for debugging stuff. If explicit output is required, call this method after reasoning.
-+     * 
-+     * @param prj the project representing the model
-+     * @param rConfig the configuration containing the information logger
-+     */
-+    public void logInformation(Project prj, ReasonerConfiguration rConfig) {
-+        logInformation(prj, rConfig.getLogger());
-+    }
-+
-+    /**
-+     * Logs reasoning summary based on <code>prj</code>, the measures and the messages. Reasoners shall not produce
-+     * output except for debugging stuff. If explicit output is required, call this method after reasoning.
-+     * 
-+     * @param prj the project representing the model
-+     * @param infoLogger the information logger
-+     */
-+    public void logInformation(Project prj, IAdditionalInformationLogger infoLogger) {
-+        // do nothing, just for interface compatibility
-+    }
-+
- }
-diff --git a/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementCollector.java b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementCollector.java
-new file mode 100644
-index 0000000..fea3ab3
---- /dev/null
-+++ b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementCollector.java
-@@ -0,0 +1,867 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.varModel.varModel.testSupport;
-+
-+import java.util.ArrayList;
-+import java.util.Collection;
-+import java.util.HashMap;
-+import java.util.HashSet;
-+import java.util.List;
-+import java.util.Map;
-+import java.util.Set;
-+
-+import net.ssehub.easy.basics.logger.EASyLoggerFactory;
-+import net.ssehub.easy.varModel.confModel.AbstractConfigurationStatisticsVisitor;
-+import net.ssehub.easy.varModel.confModel.AbstractConfigurationStatisticsVisitor.ConfigStatistics;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.varModel.testSupport.MeasurementStatisticsVisitor.MeasurementStatistics;
-+
-+/**
-+ * Extensible measurements collection mechanism to be applied while running a test suite. Aims at collecting 
-+ * performance data, potentially also detecting performance regression in the future. 
-+ * <p/>
-+ * Measurements are identified by {@link IMeasurementIdentifier} defined in testing scope only. For practical reasons, 
-+ * it is sometimes easier to use different identifiers, e.g., defined in production code. Therefore, the measurement
-+ * collector allows registering a global mapping between identifiers using 
-+ * {@link #registerMapping(Object, IMeasurementIdentifier)} and the respective method accept an Object that is mapped
-+ * internally (nothing happens if no mapping is possible, directly passing in a {@link IMeasurementIdentifier} 
-+ * is permitted).
-+ * <p/>
-+ * Some measurements can be done automatically, e.g., aggregation, averaging or measuring the entire (wall) response
-+ * time {@link DefaultMeasurementIdentifier#RESPONSETIME}. For automatic measurements, collectors can be registered
-+ * globally {@link #registerAutoCollector(IAutoCollector), which are called when starting or stopping a measurment.
-+ * <p/>
-+ * There are two ways of collecting measurement data:
-+ * <ol>
-+ *     <li>All values at once, call {@link #recordMeasurements(Configuration, String, Map) or on the actual instance
-+ *         {@link #record(Configuration, String, Map).</li>
-+ *     <li>Within the brackets of {@link #startMeasurement(Configuration, String, boolean)} 
-+ *         and {@link #endMeasurement(MeasurementRecord)} returning a unique identifier to be used with further calls. 
-+ *         Individual measurements can be added by 
-+ *         {@link #setMeasurement(String, IMeasurementIdentifier, double)} and read out by 
-+ *         {@link #getMeasurement(String, IMeasurementIdentifier)}. For the actual instance, the methods are 
-+ *         {@link #start(Configuration, String)}, {@link #end()}, {@link #set(IMeasurementIdentifier, double)}, 
-+ *         and {@link #get(String, IMeasurementIdentifier)}.</li>
-+ * </ol>
-+ * The default implementation in this class does nothing rather than providing the infrastructure. Concrete subclasses
-+ * may e.g. log into a file or a database.
-+ *  
-+ * @author Holger Eichelberger
-+ */
-+public class MeasurementCollector {
-+
-+    private static MeasurementCollector instance = new MeasurementCollector("DEFAULT");
-+    private static Map<Object, IMeasurementIdentifier> idMapping = new HashMap<Object, IMeasurementIdentifier>();
-+    private static List<IAutoCollector> autoCollectors = new ArrayList<IAutoCollector>();
-+    private static Set<String> stackStop = new HashSet<String>();
-+    private Map<String, MeasurementRecord> records = new HashMap<String, MeasurementRecord>();
-+    private Set<IMeasurementIdentifier> disabledCollectors = null;
-+    private Object id;
-+    
-+    /**
-+     * Implements automatic collection for some measurement identifiers.
-+     * @author Holger Eichelberger
-+     *
-+     */
-+    public interface IAutoCollector {
-+        
-+        /**
-+         * Returns the identifier we are recording for.
-+         * 
-+         * @return the identifier
-+         */
-+        public IMeasurementIdentifier getIdentifier();
-+        
-+        /**
-+         * The actual code for start collecting.
-+         * 
-+         * @param record the record being recorded
-+         */
-+        public void start(MeasurementRecord record);
-+
-+        /**
-+         * The actual code for end collecting.
-+         * 
-+         * @param record the record being recorded
-+         */
-+        public void end(MeasurementRecord record);
-+
-+    }
-+    
-+    /**
-+     * Defines the type for (extensible) measurement identifier.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    public interface IMeasurementIdentifier {
-+        
-+        /**
-+         * Returns whether measurement data is obtained automatically, either as part of the 
-+         * start-/end bracket or also as part of a single record call.
-+         * 
-+         * @return <code>true</code> for automatic, <code>false</code> else
-+         */
-+        public boolean isAutomatic();
-+        
-+        /**
-+         * Returns the name of the identifier.
-+         * 
-+         * @return the name
-+         */
-+        public String name();
-+    }
-+
-+    /**
-+     * Defines default measurement identifier.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    public enum DefaultMeasurementIdentifier implements IMeasurementIdentifier {
-+        
-+        RESPONSETIME_AUTO(true),
-+        
-+        /**
-+         * Number of top-level variables in the model.
-+         * 
-+         * @see ConfigStatistics#noOfToplevelVariables()
-+         */
-+        MODEL_TOPLEVEL_VARIABLES(false), 
-+
-+        /**
-+         * Number of variables in the model.
-+         * 
-+         * @see ConfigStatistics#noOfVariables()
-+         */
-+        MODEL_VARIABLES(false),
-+
-+        /**
-+         * Number of variables without container in the model.
-+         * 
-+         * @see ConfigStatistics#noOfVariablesWithoutContainer()
-+         */
-+        MODEL_VARIABLES_WITHOUT_CONTAINER(false), 
-+
-+        /**
-+         * Number of normal variables in the model.
-+         * 
-+         * @see ConfigStatistics#noOfNormalVariables()
-+         */
-+        MODEL_NORMAL_VARIABLES(false),
-+
-+        /**
-+         * Number of normal variables without container in the model.
-+         * 
-+         * @see ConfigStatistics#noOfNormalVariablesNoContainer()
-+         */
-+        MODEL_NORMAL_VARIABLES_NO_CONTAINER(false),
-+
-+        /**
-+         * Number of constraint variables in the model.
-+         * 
-+         * @see ConfigStatistics#noOfConstraintVariables()
-+         */
-+        MODEL_CONSTRAINT_VARIABLES(false),
-+
-+        /**
-+         * Number of constraint variables without container in the model.
-+         * 
-+         * @see ConfigStatistics#noOfConstraintVariablesNoContainer()
-+         */
-+        MODEL_CONSTRAINT_VARIABLES_NO_CONTAINER(false),
-+
-+        /**
-+         * Number of constraints in the model.
-+         * 
-+         * @see ConfigStatistics#noOfConstraintInstances()
-+         */
-+        MODEL_CONSTRAINT_INSTANCES(false),
-+
-+        /**
-+         * Number of annotations in the model.
-+         * 
-+         * @see ConfigStatistics#noOfAnnotations()
-+         */
-+        MODEL_ANNOTATIONS(false),
-+
-+        /**
-+         * Average constraint complexity as calculated by {@link MeasurementStatisticsVistor}.
-+         */
-+        MODEL_CONSTRAINT_AVG_COMPLEXITY(false),
-+
-+        /**
-+         * Total constraint complexity as calculated by {@link MeasurementStatisticsVistor}.
-+         */
-+        MODEL_CONSTRAINT_COMPLEXITY(false),
-+
-+        /**
-+         * Average variable complexity as calculated by {@link MeasurementStatisticsVistor}.
-+         */
-+        MODEL_VARIABLE_AVG_COMPLEXITY(false),
-+        
-+        /**
-+         * Total variable complexity as calculated by {@link MeasurementStatisticsVistor}.
-+         */
-+        MODEL_VARIABLE_COMPLEXITY(false),
-+
-+        /**
-+         * Total model complexity as calculated by {@link MeasurementStatisticsVistor}.
-+         */
-+        MODEL_COMPLEXITY(false);
-+        
-+        private boolean isAutomatic;
-+
-+        /**
-+         * Creates an identifier.
-+         * 
-+         * @param isAutomatic whether the measurement is performed automatically
-+         */
-+        private DefaultMeasurementIdentifier(boolean isAutomatic) {
-+            this.isAutomatic = isAutomatic;
-+        }
-+
-+        @Override
-+        public boolean isAutomatic() {
-+            return isAutomatic;
-+        }
-+        
-+    }
-+    
-+    /**
-+     * Implements a measurement record.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    protected static class MeasurementRecord {
-+        
-+        private Map<IMeasurementIdentifier, Double> measurements = new HashMap<IMeasurementIdentifier, Double>();
-+        private Configuration cfg;
-+        private String tag;
-+        private int runCount;
-+        private String caller;
-+        private long start = -1;
-+        private long end = -1;
-+        
-+        /**
-+         * Creates a measurement record.
-+         * 
-+         * @param cfg the configuration we are recording for
-+         * @param tag the measurement tag
-+         * @param runCount the repetition number of the experiment
-+         */
-+        protected MeasurementRecord(Configuration cfg, String tag, int runCount) {
-+            this.cfg = cfg;
-+            this.tag = tag;
-+            this.runCount = runCount;
-+            this.caller = null;
-+            
-+            Throwable t = new Throwable();
-+            StackTraceElement[] stack = t.getStackTrace();
-+            String lastSignature = null;
-+            for (int s = 0; null == caller && s < stack.length; s++) {
-+                StackTraceElement elt = stack[s];
-+                String clsName = elt.getClassName();
-+                boolean stop = stackStop.contains(clsName);
-+                if (!stop) {
-+                    int innerPos = clsName.lastIndexOf('$');
-+                    if (innerPos > 0) {
-+                        clsName = clsName.substring(0, innerPos);
-+                    }
-+                    stop = stackStop.contains(clsName);
-+                }
-+                if (stop) {
-+                    caller = lastSignature;
-+                }
-+                lastSignature = clsName + "." + elt.getMethodName();
-+            }
-+        }
-+
-+        /**
-+         * Defines the start timestamp for automatically recording runtime. Starting shall explicitly happen after
-+         * creating the record for closer time recording.
-+         * 
-+         * @param start the start timestamp, invalid if negative
-+         */
-+        protected void setStart(long start) {
-+            this.start = start;
-+        }
-+        
-+        /**
-+         * Returns the start timestamp for automatically recording runtime.
-+         * 
-+         * @return the start timestamp, invalid if negative
-+         */
-+        protected long getStart() {
-+            return start;
-+        }
-+
-+        /**
-+         * Defines the end timestamp for automatically recording runtime.
-+         * 
-+         * @param end the end timestamp, invalid if negative
-+         */
-+        protected void setEnd(long end) {
-+            this.end = end;
-+        }
-+        
-+        /**
-+         * Returns the end timestamp for automatically recording runtime.
-+         * 
-+         * @return the end timestamp, invalid if negative
-+         */
-+        protected long getEnd() {
-+            return end;
-+        }
-+
-+        /**
-+         * Returns the recording tag.
-+         * 
-+         * @return the recording tag
-+         */
-+        protected String getTag() {
-+            return tag;
-+        }
-+
-+        /**
-+         * Returns the experiment run count.
-+         * 
-+         * @return the run count
-+         */
-+        protected int getRunCount() {
-+            return runCount;
-+        }
-+        
-+        /**
-+         * Returns the calling method if available.
-+         * 
-+         * @return the calling method or <b>null</b> for none
-+         */
-+        protected String getCaller() {
-+            return caller;
-+        }
-+        
-+        /**
-+         * Returns the related configuration.
-+         * 
-+         * @return the configuration
-+         */
-+        protected Configuration getConfiguration() {
-+            return cfg;
-+        }
-+
-+        /**
-+         * Sets a measurement value.
-+         * 
-+         * @param id the measurement id (ignored if <b>null</b>)
-+         * @param value the measurement value
-+         */
-+        protected void setMeasurement(IMeasurementIdentifier id, double value) {
-+            if (null != id) {
-+                measurements.put(id, value);
-+            }
-+        }
-+        
-+        /**
-+         * Returns the used measurement identifiers.
-+         * 
-+         * @return the used identifiers
-+         */
-+        protected Collection<IMeasurementIdentifier> getMeasurementIdentifiers() {
-+            return measurements.keySet();
-+        }
-+        
-+        /**
-+         * Returns the measurement for a given identifier.
-+         * 
-+         * @param id the identifier
-+         * @return the measurement <code>null</code> if not recorded or <code>id</code> was <b>null</b>
-+         */
-+        protected Double getMeasurement(IMeasurementIdentifier id) {
-+            return null == id ? null : measurements.get(id);
-+        }
-+        
-+        @Override
-+        public String toString() {
-+            return cfg.getProject().getName() + " " + tag + " " + runCount + " " + caller + " " + measurements;
-+        }
-+        
-+    }
-+    
-+    /**
-+     * Registers the default collectors.
-+     */
-+    static {
-+        registerAutoCollector(new IAutoCollector() {
-+            
-+            @Override
-+            public void start(MeasurementRecord record) {
-+            }
-+            
-+            @Override
-+            public void end(MeasurementRecord record) {
-+                long start = record.getStart();
-+                long end = record.getEnd();
-+                if (start >= 0 && end >= 0) {
-+                    record.setMeasurement(getIdentifier(), end - start);
-+                }
-+            }
-+
-+            @Override
-+            public IMeasurementIdentifier getIdentifier() {
-+                return DefaultMeasurementIdentifier.RESPONSETIME_AUTO;
-+            }
-+        });
-+        // stop stack at typical jUnit callers
-+        stackStop.add("jdk.internal.reflect.NativeMethodAccessorImpl");
-+        stackStop.add("java.lang.reflect.Method");
-+        stackStop.add("org.junit.runners.model.FrameworkMethod");
-+        stackStop.add("sun.reflect.NativeMethodAccessorImpl"); // JDK8
-+        stackStop.add("sun.reflect.DelegatingMethodAccessorImpl"); // JDK8
-+    }
-+    
-+    /**
-+     * Creates a measurement collector.
-+     * 
-+     * @param id the id of the collector for checking whether an appropriate one is installed
-+     */
-+    public MeasurementCollector(Object id) {
-+        this.id = id;
-+    }
-+    
-+    /**
-+     * Returns the id of this collector.
-+     * 
-+     * @return the id
-+     */
-+    public Object getId() {
-+        return id;
-+    }
-+     
-+    /**
-+     * Changes the actual instance. If the actual instance is changed, this method closes the old instance.
-+     * 
-+     * @param collector the new instance (ignored if <b>null</b>)
-+     * @see #close()
-+     */
-+    public static final void setInstance(MeasurementCollector collector) {
-+        if (null != collector) {
-+            instance.close();
-+            instance = collector;
-+        }
-+    }
-+
-+    /**
-+     * Returns the actual instance.
-+     * 
-+     * @return the actual instance
-+     */
-+    public static final MeasurementCollector getInstance() {
-+        return instance;
-+    }
-+
-+    /**
-+     * Starts a measurement on the actual collector and keeps it open until {@link #endMeasurement(MeasurementRecord)}.
-+     * {@link #setMeasurement(String, IMeasurementIdentifier, double)} and 
-+     * {@link #getMeasurement(String, IMeasurementIdentifier)} can be called.
-+     * 
-+     * @param cfg the configuration to measure for
-+     * @param tag a description what is being measured
-+     * @param runCount the repetition number of the experiment
-+     * @return a unique measurement id for subsequent functions
-+     */
-+    public static String start(Configuration cfg, String tag, int runCount) {
-+        return instance.startMeasurement(cfg, tag, runCount);
-+    }
-+    
-+    /**
-+     * Starts a measurement and keeps it open until {@link #endMeasurement(MeasurementRecord)}.
-+     * {@link #setMeasurement(String, IMeasurementIdentifier, double)} and 
-+     * {@link #getMeasurement(String, IMeasurementIdentifier)} can be called.
-+     * 
-+     * @param cfg the configuration to measure for
-+     * @param tag a description what is being measured
-+     * @param runCount the repetition number of the experiment
-+     * @return a unique measurement id for subsequent functions
-+     */
-+    public String startMeasurement(Configuration cfg, String tag, int runCount) {
-+        String baseId = "" + System.currentTimeMillis();
-+        String id = baseId;
-+        int count = 0;
-+        while (records.containsKey(id)) {
-+            id = baseId + "-" + (count++);
-+        }
-+        MeasurementRecord record = new MeasurementRecord(cfg, tag, runCount);
-+        records.put(id, record);
-+        recordStatistics(cfg, record);
-+        record.setStart(System.currentTimeMillis());
-+        processAutoCollectors(record, true);
-+        for (int i = 0; i < autoCollectors.size(); i++) {
-+            autoCollectors.get(i).start(record);
-+        }
-+        return id;
-+    }
-+    
-+    /**
-+     * Processes the registerd auto collectors.
-+     * 
-+     * @param record the record to process for
-+     * @param start <code>true</code> for starting the measurement, <code>false</code> for ending
-+     */
-+    private void processAutoCollectors(MeasurementRecord record, boolean start) {
-+        for (int a = 0; a < autoCollectors.size(); a++) {
-+            IAutoCollector collector = autoCollectors.get(a);
-+            if (null == disabledCollectors || !disabledCollectors.contains(collector.getIdentifier())) {
-+                if (start) {
-+                    collector.start(record);
-+                } else {
-+                    collector.end(record);
-+                }
-+            }
-+        }
-+    }
-+    
-+    /**
-+     * Records statistics for <code>cfg</code>.
-+     * 
-+     * @param cfg the configuration
-+     * @param record the measurement record
-+     */
-+    private void recordStatistics(Configuration cfg, MeasurementRecord record) {
-+        AbstractConfigurationStatisticsVisitor sVis = createStatisticsVisitor();
-+        cfg.accept(sVis);
-+        ConfigStatistics statistics = sVis.getStatistics();
-+        storeStatistics(statistics, record);
-+    }
-+
-+    /**
-+     * Changes a measurement on the actual instance. Does not permit 
-+     * {@link IMeasurementIdentifier#isAutomatic() automatic} measurements to be updated.
-+     * 
-+     * @param id the record identifier
-+     * @param identifier the measurement identifier
-+     * @param value the new value
-+     */
-+    public static void set(String id, Object identifier, double value) {
-+        instance.setMeasurement(id, identifier, value);
-+    }
-+    
-+    /**
-+     * Changes a measurement. Does not permit {@link IMeasurementIdentifier#isAutomatic() automatic}
-+     * measurements to be updated.
-+     * 
-+     * @param id the record identifier
-+     * @param identifier the measurement identifier
-+     * @param value the new value
-+     */
-+    public void setMeasurement(String id, Object identifier, double value) {
-+        IMeasurementIdentifier imIdentifier = obtainIdentifier(identifier);
-+        if (null != imIdentifier && !imIdentifier.isAutomatic()) {
-+            MeasurementRecord record = records.get(id);
-+            if (null != record) {
-+                record.setMeasurement(imIdentifier, value);
-+            }
-+        }
-+    }
-+
-+    /**
-+     * Returns a recorded measurement from the actual instance.
-+     * 
-+     * @param id the record identifier
-+     * @param identifier the measurement identifier
-+     * @return the current value or <b>null</b> if nothing was recorded so far
-+     */
-+    public static Double get(String id, Object identifier) {
-+        return instance.getMeasurement(id, identifier);
-+    }
-+    
-+    /**
-+     * Returns a recorded measurement.
-+     * 
-+     * @param id the record identifier
-+     * @param identifier the measurement identifier
-+     * @return the current value or <b>null</b> if nothing was recorded so far
-+     */
-+    public Double getMeasurement(String id, Object identifier) {
-+        Double result = null;
-+        IMeasurementIdentifier imIdentifier = obtainIdentifier(identifier);
-+        if (null != imIdentifier) {
-+            MeasurementRecord record = records.get(id);
-+            if (null != record) {
-+                result = record.getMeasurement(imIdentifier);
-+            }
-+        }
-+        return result;
-+    }
-+
-+    /**
-+     * Ends a measurement on the actual instance. <code>id</code> becomes invalid and operations based on 
-+     * <code>id</code> will not return results.
-+     * 
-+     * @param id the measurement identifier
-+     */
-+    public static void end(String id) {
-+        instance.endMeasurement(id);
-+    }
-+    
-+    /**
-+     * Completely ends a measurement. <code>id</code> becomes invalid and operations based on <code>id</code>
-+     * will not return results.
-+     * 
-+     * @param id the measurement identifier
-+     * @see #endAuto(String)
-+     */
-+    public void endMeasurement(String id) {
-+        endAutoMeasurements(id); // if not already done
-+        MeasurementRecord record = records.remove(id);
-+        if (null != record) {
-+            endMeasurement(record);
-+        }
-+    }
-+
-+    /**
-+     * Ends automatic measurements.
-+     * 
-+     * @param id the measurement identifier
-+     */
-+    public static void endAuto(String id) {
-+        instance.endAutoMeasurements(id);
-+    }
-+
-+    /**
-+     * Ends automatic measurements.
-+     * 
-+     * @param id the measurement identifier
-+     */
-+    public void endAutoMeasurements(String id) {
-+        long now = System.currentTimeMillis();
-+        MeasurementRecord record = records.get(id);
-+        if (null != record) {
-+            record.setEnd(now);
-+            processAutoCollectors(record, false);
-+        }
-+    }
-+
-+    /**
-+     * Records a complete set of measurements at once on the actual collector. Id-based measurement operations are not 
-+     * supported here. Automatic recording of runtime is not happening.
-+     * 
-+     * @param cfg the configuration to measure for
-+     * @param tag a description what is being measured
-+     * @param runCount the repetition number of the experiment
-+     * @param measurements the measurements to set, automatic measurements will be ignored, registered mappings will 
-+     * be applied
-+     */
-+    public static void record(Configuration cfg, String tag, int runCount, Map<?, Double> measurements) {
-+        instance.recordMeasurements(cfg, tag, runCount, measurements);
-+    }
-+    
-+    /**
-+     * Records a complete set of measurements at once. Id-based measurement operations are not supported here. 
-+     * Automatic measurements are not modified.
-+     * 
-+     * @param cfg the configuration to measure for
-+     * @param tag a description what is being measured
-+     * @param runCount the repetition number of the experiment
-+     * @param measurements the measurements to set, automatic measurements will be ignored, registered mappings will 
-+     * be applied
-+     */
-+    public void recordMeasurements(Configuration cfg, String tag, int runCount, Map<?, Double> measurements) {
-+        MeasurementRecord record = new MeasurementRecord(cfg, tag, runCount);
-+        recordStatistics(cfg, record);
-+        for (Map.Entry<?, Double> ent : measurements.entrySet()) {
-+            IMeasurementIdentifier identifier = obtainIdentifier(ent.getKey());
-+            if (null != identifier && !identifier.isAutomatic()) {
-+                record.setMeasurement(identifier, ent.getValue());
-+            }
-+        }
-+        endMeasurement(record);
-+    }
-+    
-+    /**
-+     * Closes this collector. Closes also all still open measurement records.
-+     */
-+    public void close() {
-+        for (MeasurementRecord record : records.values()) {
-+            endMeasurement(record);
-+        }
-+        records.clear();
-+    }
-+    
-+    /**
-+     * Creates a (configured) statistics visitor ready to use.
-+     * 
-+     * @return the statistics visitor instance
-+     */
-+    protected AbstractConfigurationStatisticsVisitor createStatisticsVisitor() {
-+        return new MeasurementStatisticsVisitor();
-+    }
-+    
-+    /**
-+     * Stores the given statistics result in <code>record</code.
-+     * >
-+     * @param statistics the statistics object
-+     * @param record the record to modify as a side effect
-+     */
-+    protected void storeStatistics(ConfigStatistics statistics, MeasurementRecord record) {
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_TOPLEVEL_VARIABLES, 
-+            statistics.noOfToplevelVariables());
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_VARIABLES, 
-+            statistics.noOfVariables());
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_VARIABLES_WITHOUT_CONTAINER, 
-+            statistics.noOfVariablesWithoutContainer());
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_NORMAL_VARIABLES, 
-+            statistics.noOfNormalVariables());
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_NORMAL_VARIABLES_NO_CONTAINER, 
-+            statistics.noOfNormalVariablesNoContainer());
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_VARIABLES, 
-+            statistics.noOfConstraintVariables());
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_VARIABLES_NO_CONTAINER, 
-+            statistics.noOfConstraintVariablesNoContainer());
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_INSTANCES, 
-+            statistics.noOfConstraintInstances());
-+        record.setMeasurement(DefaultMeasurementIdentifier.MODEL_ANNOTATIONS, 
-+            statistics.noOfAnnotations());
-+        // parameterization would be nice, requires parameterization of visitor
-+        if (statistics instanceof MeasurementStatistics) {
-+            MeasurementStatistics mStatistics = (MeasurementStatistics) statistics;
-+            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_AVG_COMPLEXITY, 
-+                mStatistics.getAverageConstraintComplexity());
-+            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_CONSTRAINT_COMPLEXITY, 
-+                mStatistics.getConstraintComplexity());
-+            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_VARIABLE_AVG_COMPLEXITY, 
-+                mStatistics.getAverageVariableComplexity());
-+            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_VARIABLE_COMPLEXITY, 
-+                mStatistics.getVariableComplexity());
-+            record.setMeasurement(DefaultMeasurementIdentifier.MODEL_COMPLEXITY, 
-+                mStatistics.getModelComplexity());
-+        }
-+    }
-+
-+    /**
-+     * Is called when a measurement record shall be ended.
-+     * 
-+     * @param record the record
-+     */
-+    protected void endMeasurement(MeasurementRecord record) {
-+    }
-+
-+    /**
-+     * Register arbitrary global key-identifier mappings. Values given for <code>key</code> will be recorded for 
-+     * <code>identifier</code>.
-+     * 
-+     * @param key the key
-+     * @param identifier the identifier
-+     */
-+    public static void registerMapping(Object key, IMeasurementIdentifier identifier) {
-+        if (null != key && null != identifier) {
-+            idMapping.put(key, identifier);
-+        }
-+    }
-+    
-+    /**
-+     * Registers a global collector for an automatic measurement.
-+     * 
-+     * @param collector the collector
-+     * @return <code>true</code> for success, <code>false</code> else
-+     */
-+    public static boolean registerAutoCollector(IAutoCollector collector) {
-+        boolean done = false;
-+        if (null != collector && collector.getIdentifier().isAutomatic()) {
-+            autoCollectors.add(collector);
-+            done = true;
-+        }
-+        return done;
-+    }
-+    
-+    /**
-+     * Turns an object into an identifier if possible / mapping is registered.
-+     * 
-+     * @param key the key/object to return the identifier for
-+     * @return the identifier or <b>null</b> of no translation is possible
-+     */
-+    public static IMeasurementIdentifier obtainIdentifier(Object key) {
-+        IMeasurementIdentifier identifier = null;
-+        if (key instanceof IMeasurementIdentifier) {
-+            identifier = (IMeasurementIdentifier) key;
-+        } else if (null != key) {
-+            identifier = idMapping.get(key);
-+        }
-+        return identifier;
-+    }
-+
-+    /**
-+     * Disables an automatic collector for the given <code>key</code> on the active measurement collector.
-+     * 
-+     * @param key the key to disable the collector for
-+     * @return <code>true</code> for success, <code>false</code> else
-+     */
-+    public static boolean disableAutoCollector(Object key) {
-+        return instance.disableCollector(key);
-+    }
-+
-+    /**
-+     * Disables an automatic collector for the given <code>key</code>.
-+     * 
-+     * @param key the key to disable the collector for
-+     * @return <code>true</code> for success, <code>false</code> else
-+     */
-+    public boolean disableCollector(Object key) {
-+        boolean done = false;
-+        IMeasurementIdentifier identifier = obtainIdentifier(key);
-+        if (null != identifier && identifier.isAutomatic()) {
-+            if (null == disabledCollectors) {
-+                disabledCollectors = new HashSet<IMeasurementIdentifier>();
-+            }
-+            disabledCollectors.add(identifier);
-+            done = true;
-+        }
-+        return done;
-+    }
-+    
-+    /**
-+     * Allows defining class names where searching for the caller shall stop.
-+     * 
-+     * @param clsName the class name (ignored if <b>null</b>)
-+     */
-+    public static void addStackStop(String clsName) {
-+        if (null != clsName) {
-+            stackStop.add(clsName);
-+        }
-+    }
-+
-+    /**
-+     * Returns a system property as integer.
-+     * 
-+     * @param key the property key
-+     * @param deflt the default value if the property is not set/cannot be parsed
-+     * @param min the minimum value to be returned
-+     * @return the value of the property
-+     */
-+    public static int getIntProperty(String key, int deflt, int min) {
-+        int result = deflt;
-+        String prop = System.getProperty(key, null);
-+        if (null != prop) {
-+            try {
-+                result = Integer.parseInt(prop);
-+            } catch (NumberFormatException e) {
-+                EASyLoggerFactory.INSTANCE.getLogger(MeasurementCollector.class, null).warn("Parsing env value for '" 
-+                    + key + "': Number Format Exception " + e.getMessage());
-+            }
-+        }
-+        return Math.max(min, result);
-+    }
-+    
-+    
-+}
-diff --git a/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementStatisticsVisitor.java b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementStatisticsVisitor.java
-new file mode 100644
-index 0000000..4c6063b
---- /dev/null
-+++ b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/MeasurementStatisticsVisitor.java
-@@ -0,0 +1,297 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.varModel.varModel.testSupport;
-+
-+import net.ssehub.easy.varModel.confModel.DefaultConfigurationStatisticsVisitor;
-+import net.ssehub.easy.varModel.confModel.IDecisionVariable;
-+import net.ssehub.easy.varModel.cst.AbstractConstraintTreeVisitor;
-+import net.ssehub.easy.varModel.cst.AttributeVariable;
-+import net.ssehub.easy.varModel.cst.BlockExpression;
-+import net.ssehub.easy.varModel.cst.CompoundAccess;
-+import net.ssehub.easy.varModel.cst.CompoundInitializer;
-+import net.ssehub.easy.varModel.cst.ConstantValue;
-+import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
-+import net.ssehub.easy.varModel.cst.ContainerInitializer;
-+import net.ssehub.easy.varModel.cst.ContainerOperationCall;
-+import net.ssehub.easy.varModel.cst.IfThen;
-+import net.ssehub.easy.varModel.cst.Let;
-+import net.ssehub.easy.varModel.cst.MultiAndExpression;
-+import net.ssehub.easy.varModel.cst.OCLFeatureCall;
-+import net.ssehub.easy.varModel.cst.Parenthesis;
-+import net.ssehub.easy.varModel.cst.Self;
-+import net.ssehub.easy.varModel.cst.Variable;
-+import net.ssehub.easy.varModel.model.Constraint;
-+import net.ssehub.easy.varModel.model.OperationDefinition;
-+import net.ssehub.easy.varModel.model.datatypes.Compound;
-+import net.ssehub.easy.varModel.model.datatypes.Container;
-+import net.ssehub.easy.varModel.model.datatypes.IDatatype;
-+
-+/**
-+ * Extended measurement statistics visitor calculating the average complexity of constraint expressions.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+class MeasurementStatisticsVisitor extends DefaultConfigurationStatisticsVisitor {
-+
-+    private static final double EXPR_CONSTANT_COMPLEXITY = 0.25;
-+    private static final double EXPR_ACCESSOR_COMPLEXITY = 1;
-+    private static final double EXPR_OP_COMPLEXITY = 0;
-+    private static final double EXPR_CONTAINER_COMPLEXITY = 5;
-+    private static final double EXPR_VAR_COMPLEXITY = 0.25;
-+
-+    private static final double TYPE_VARIABLE_COMPLEXITY = 1;
-+    private static final double TYPE_COMPOUND_COMPLEXITY = 2;
-+    private static final double TYPE_CONTAINER_COMPLEXITY = 2;
-+
-+    /**
-+     * Extended measurement statistics.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    public static class MeasurementStatistics extends ConfigStatistics {
-+        
-+        /**
-+         * All variables (non constraint variables + constraint variables), without nested variables.
-+         */
-+        private double constraintComplexitySum = 0;
-+        private int constraintComplexityCount = 0;
-+        private double variableComplexitySum = 0;
-+        private int variableComplexityCount = 0;
-+        
-+        /**
-+         * Returns the average constraint complexity.
-+         * 
-+         * @return the average constraint complexity
-+         */
-+        public double getAverageConstraintComplexity() {
-+            return 0 == constraintComplexityCount ? 0 : (constraintComplexitySum / constraintComplexityCount);
-+        }
-+
-+        /**
-+         * Returns the model constraint complexity (sum of all constraints).
-+         * 
-+         * @return the model constraint complexity  (sum of all constraints)
-+         */
-+        public double getConstraintComplexity() {
-+            return constraintComplexitySum;
-+        }
-+
-+        /**
-+         * Returns the average model variable complexity (sum of all variables).
-+         * 
-+         * @return the average model variable complexity  (sum of all variables)
-+         */
-+        public double getAverageVariableComplexity() {
-+            return 0 == variableComplexityCount ? 0 : variableComplexitySum / variableComplexityCount;
-+        }
-+
-+        /**
-+         * Returns the model variable complexity (sum of all variables).
-+         * 
-+         * @return the model variable complexity  (sum of all variables)
-+         */
-+        public double getVariableComplexity() {
-+            return variableComplexitySum;
-+        }
-+        
-+        /**
-+         * Returns the model complexity as sum of {@link #getVariableComplexity()} and {@link #getModelComplexity()}.
-+         * 
-+         * @return the model complexity
-+         */
-+        public double getModelComplexity() {
-+            return variableComplexitySum + constraintComplexitySum;
-+        }
-+
-+    }
-+
-+    /**
-+     * Calculates the complexity of a constraint. Currently, just a kind of McCabe without any empirical justification.
-+     * Initializers are maximized over contained complexities, constants are counted just by 1.
-+     * 
-+     * @author Holger Eichelberger
-+     */
-+    private static class ComplexityVisitor extends AbstractConstraintTreeVisitor {
-+
-+        private double complexity = 0;
-+        
-+        /**
-+         * Returns the complexity of the visited constraint and clears the visitor.
-+         * 
-+         * @return the complexity
-+         */
-+        private double getComplexityAndClear() {
-+            double result = complexity;
-+            complexity = 0;
-+            return result;
-+        }
-+        
-+        @Override
-+        public void visitVariable(Variable variable) {
-+            complexity += EXPR_VAR_COMPLEXITY;
-+            super.visitVariable(variable);
-+        }
-+
-+        @Override
-+        public void visitConstantValue(ConstantValue value) {
-+            complexity += EXPR_CONSTANT_COMPLEXITY;
-+            super.visitConstantValue(value);
-+        }
-+
-+        @Override
-+        public void visitParenthesis(Parenthesis parenthesis) {
-+            // currently just sum of contained expressions
-+            super.visitParenthesis(parenthesis);
-+        }
-+        
-+        @Override
-+        public void visitOclFeatureCall(OCLFeatureCall call) {
-+            complexity += EXPR_OP_COMPLEXITY;
-+            super.visitOclFeatureCall(call);
-+        }
-+        
-+        @Override
-+        public void visitMultiAndExpression(MultiAndExpression expression) {
-+            // currently just sum of contained expressions
-+            super.visitMultiAndExpression(expression);
-+        }
-+        
-+        @Override
-+        public void visitContainerOperationCall(ContainerOperationCall call) {
-+            complexity += EXPR_CONTAINER_COMPLEXITY;
-+            super.visitContainerOperationCall(call);
-+        }
-+
-+        @Override
-+        public void visitLet(Let let) {
-+            // currently just sum of contained expressions
-+            super.visitLet(let);
-+        }
-+
-+        @Override
-+        public void visitIfThen(IfThen ifThen) {
-+            // currently just sum of contained expressions
-+            super.visitIfThen(ifThen);
-+        }
-+
-+        @Override
-+        public void visitCompoundAccess(CompoundAccess access) {
-+            complexity += EXPR_ACCESSOR_COMPLEXITY;
-+            super.visitCompoundAccess(access);
-+        }
-+
-+        @Override
-+        public void visitCompoundInitializer(CompoundInitializer initializer) {
-+            // currently just sum of contained expressions
-+            super.visitCompoundInitializer(initializer);
-+        }
-+
-+        @Override
-+        public void visitContainerInitializer(ContainerInitializer initializer) {
-+            // currently just sum of contained expressions
-+            super.visitContainerInitializer(initializer);
-+        }
-+        
-+        @Override
-+        public void visitSelf(Self self) {
-+            complexity += EXPR_CONSTANT_COMPLEXITY;
-+            // currently nothing specific
-+            super.visitSelf(self);
-+        }
-+
-+        @Override
-+        public void visitAnnotationVariable(AttributeVariable variable) {
-+            complexity += EXPR_ACCESSOR_COMPLEXITY;
-+            super.visitAnnotationVariable(variable);
-+        }
-+
-+        @Override
-+        public void visitBlockExpression(BlockExpression block) {
-+            // currently just sum of contained expressions
-+            super.visitBlockExpression(block);
-+        }
-+        
-+    };
-+
-+    private MeasurementStatistics statistics;
-+    private ComplexityVisitor complexityVisitor = new ComplexityVisitor();
-+    
-+    /**
-+     * Creates an instance with a statistics object of type {@link MeasurementStatistics}.
-+     */
-+    public MeasurementStatisticsVisitor() {
-+        this(new MeasurementStatistics());
-+    }
-+    
-+    /**
-+     * Creates a statistics visitor with given statistics object (for extension, overriding).
-+     * 
-+     * @param statistics A data object to store the statistical information.
-+     */
-+    protected MeasurementStatisticsVisitor(MeasurementStatistics statistics) {
-+        super(statistics);
-+        this.statistics = statistics;
-+    }
-+
-+    @Override
-+    public MeasurementStatistics getStatistics() {
-+        return statistics; // could be avoided if parent type would be parameterized
-+    }
-+    
-+    @Override
-+    protected void visitConstraint(Constraint constraint) {
-+        processConstraintSyntaxTree(constraint.getConsSyntax());
-+    }
-+
-+    @Override
-+    protected void visitDefaultValue(ConstraintSyntaxTree constraint) {
-+        processConstraintSyntaxTree(constraint);
-+    }
-+
-+    @Override
-+    protected void visitOperationDefinition(OperationDefinition opdef) {
-+        processConstraintSyntaxTree(opdef.getOperation().getFunction());
-+    }
-+
-+    /**
-+     * Processes a constraint syntax tree.
-+     * 
-+     * @param cst the constraint syntax tree, may be <b>null</b>
-+     */
-+    private void processConstraintSyntaxTree(ConstraintSyntaxTree cst) {
-+        if (null != cst) {
-+            cst.accept(complexityVisitor);
-+            double tmp = complexityVisitor.getComplexityAndClear();
-+            statistics.constraintComplexitySum += tmp;
-+            statistics.constraintComplexityCount++;
-+        }
-+    }
-+    
-+    @Override
-+    public void visitVariable(IDecisionVariable variable, boolean nestedInContainer) {
-+        super.visitVariable(variable, nestedInContainer);
-+        IDatatype type = variable.getDeclaration().getType();
-+        if (Compound.TYPE.isAssignableFrom(type)) {
-+            statistics.variableComplexitySum += TYPE_COMPOUND_COMPLEXITY; 
-+        } else if (Container.TYPE.isAssignableFrom(type)) {
-+            statistics.variableComplexitySum += TYPE_CONTAINER_COMPLEXITY; 
-+        } else {
-+            statistics.variableComplexitySum += TYPE_VARIABLE_COMPLEXITY; 
-+        }
-+        statistics.variableComplexityCount++;
-+    }
-+    
-+}
-diff --git a/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/TSVMeasurementCollector.java b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/TSVMeasurementCollector.java
-new file mode 100644
-index 0000000..f6497d4
---- /dev/null
-+++ b/Plugins/VarModel/Model.tests/src/net/ssehub/easy/varModel/varModel/testSupport/TSVMeasurementCollector.java
-@@ -0,0 +1,244 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.varModel.varModel.testSupport;
-+
-+import java.io.File;
-+import java.io.FileOutputStream;
-+import java.io.IOException;
-+import java.io.PrintStream;
-+import java.util.ArrayList;
-+import java.util.Arrays;
-+import java.util.Collection;
-+import java.util.Comparator;
-+import java.util.List;
-+import java.util.Locale;
-+
-+import net.ssehub.easy.basics.io.FileUtils;
-+import net.ssehub.easy.basics.logger.EASyLoggerFactory;
-+import net.ssehub.easy.basics.modelManagement.ModelInfo;
-+import net.ssehub.easy.varModel.confModel.Configuration;
-+import net.ssehub.easy.varModel.management.VarModel;
-+import net.ssehub.easy.varModel.model.Project;
-+
-+/**
-+ * A measurement collector that stores to TSV (tab-separated-values) files.
-+ * Always appends to the given file. Might be clearing/deleting the target file before use is helpful.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class TSVMeasurementCollector extends MeasurementCollector {
-+
-+    private File file;
-+    private IMeasurementIdentifier[] columns;
-+
-+    /**
-+     * Creates a new measurement collector using <code>file</code> as id.
-+     * 
-+     * @param file the output file
-+     * @param columns the output columns - will be written in the given sequence, even duplicates; if not given, the 
-+     *     measurement identifiers of the first record will be taken and sorted alpha-numerically. However, if 
-+     *     <code>file</code> does already exist, the column sequence is not guaranteed to match.
-+     */
-+    public TSVMeasurementCollector(File file, Object... columns) {
-+        this(file, file, columns);
-+    }
-+
-+    /**
-+     * Creates a new measurement collector.
-+     * 
-+     * @param id the id of the collector for checking whether an appropriate one is installed
-+     * @param file the output file
-+     * @param columns the output columns - will be written in the given sequence, even duplicates; if not given, the 
-+     *     measurement identifiers of the first record will be taken and sorted alpha-numerically. However, if 
-+     *     <code>file</code> does already exist, the column sequence is not guaranteed to match.
-+     */
-+    public TSVMeasurementCollector(Object id, File file, Object... columns) {
-+        super(id);
-+        this.file = file;
-+        List<IMeasurementIdentifier> tmp = new ArrayList<IMeasurementIdentifier>();
-+        for (int c = 0; c < columns.length; c++) {
-+            IMeasurementIdentifier identifier = obtainIdentifier(columns[c]);
-+            if (null != identifier) {
-+                tmp.add(identifier);
-+            }
-+        }
-+        
-+        this.columns = new IMeasurementIdentifier[tmp.size()];
-+        tmp.toArray(this.columns);
-+    }
-+    
-+    /**
-+     * Ensures the installation of an appropriate measurement collector. If no collector exists, a new one is created
-+     * and a potentially existing file is deleted before.
-+     * 
-+     * @param out the file where to write the measurement data to - also used as identification of the collector
-+     * @param columns the output columns; if not given, the  measurement identifiers of the first record will be taken 
-+     * and sorted alpha-numerically. 
-+     */
-+    public static void ensureCollector(File out, Object... columns) {
-+        if (!out.equals(MeasurementCollector.getInstance().getId())) {
-+            out.delete();
-+            MeasurementCollector.setInstance(new TSVMeasurementCollector(out, columns));
-+        }
-+    }
-+
-+    @Override
-+    protected void endMeasurement(MeasurementRecord record) {
-+        if (null == columns || 0 == columns.length) {
-+            Collection<IMeasurementIdentifier> ids = record.getMeasurementIdentifiers();
-+            columns = new IMeasurementIdentifier[ids.size()];
-+            ids.toArray(columns);
-+            Arrays.sort(columns, new Comparator<IMeasurementIdentifier>() {
-+
-+                @Override
-+                public int compare(IMeasurementIdentifier o1, IMeasurementIdentifier o2) {
-+                    return o1.name().compareTo(o2.name());
-+                }
-+            });
-+        }
-+        boolean writeHeader = !file.exists() || 0 == file.length();
-+        PrintStream out = null;
-+        try {
-+            File parent = file.getParentFile();
-+            if (!parent.exists()) {
-+                parent.mkdirs();
-+            }
-+            out = new PrintStream(new FileOutputStream(file, true));
-+            if (writeHeader) {
-+                printSep(out, "model name");
-+                printSep(out, "URI");
-+                printSep(out, "tag");
-+                printSep(out, "runCount");
-+                printSep(out, "caller");
-+                for (IMeasurementIdentifier identifier : columns) {
-+                    printSep(out, identifier.name());
-+                }
-+                printEOL(out);
-+            }
-+            Configuration cfg = record.getConfiguration();
-+            out.print(cfg.getProject().getName());
-+            printSeparator(out);
-+            ModelInfo<Project> info = VarModel.INSTANCE.availableModels().getModelInfo(cfg.getProject());
-+            if (null != info) {
-+                out.print(info.getLocation());
-+            }
-+            printSeparator(out);
-+            printSep(out, record.getTag());
-+            printSep(out, record.getRunCount());
-+            printSep(out, record.getCaller());
-+            for (IMeasurementIdentifier identifier : columns) {
-+                Double measurement = record.getMeasurement(identifier);
-+                if (null != measurement) {
-+                    printSep(out, measurement);
-+                }
-+            }
-+            printEOL(out);
-+        } catch (IOException e) {
-+            FileUtils.closeQuietly(out); // works with null
-+            EASyLoggerFactory.INSTANCE.getLogger(TSVMeasurementCollector.class, 
-+                "net.ssehub.easy.varModel.tests").error(e.getMessage());
-+        }
-+    }
-+
-+    /**
-+     * Prints a separator to <code>out</code>.
-+     * 
-+     * @param out the output stream
-+     */
-+    private static void printSeparator(PrintStream out) {
-+        out.print("\t");
-+    }
-+
-+    /**
-+     * Prints an End-Of-Line to <code>out</code>.
-+     * 
-+     * @param out the output stream
-+     */
-+    private static void printEOL(PrintStream out) {
-+        out.println();
-+    }
-+
-+    /**
-+     * Prints a string value.
-+     * 
-+     * @param out the output stream
-+     * @param value the string value
-+     */
-+    private static void print(PrintStream out, String value) {
-+        out.print(value);
-+    }
-+
-+    /**
-+     * Prints an integer value.
-+     * 
-+     * @param out the output stream
-+     * @param value the integer value
-+     */
-+    private static void print(PrintStream out, int value) {
-+        out.print(value);
-+    }
-+
-+    /**
-+     * Prints a string value and a separator.
-+     * 
-+     * @param out the output stream
-+     * @param value the string value
-+     * 
-+     * @see #printSeparator(PrintStream)
-+     */
-+    private static void printSep(PrintStream out, String value) {
-+        print(out, value);
-+        printSeparator(out);
-+    }
-+
-+    /**
-+     * Prints an integer value and a separator.
-+     * 
-+     * @param out the output stream
-+     * @param value the integer value
-+     * 
-+     * @see #printSeparator(PrintStream)
-+     */
-+    private static void printSep(PrintStream out, int value) {
-+        print(out, value);
-+        printSeparator(out);
-+    }
-+    
-+    /**
-+     * Prints a double value.
-+     * 
-+     * @param out the output stream
-+     * @param value the double value
-+     */
-+    private static void print(PrintStream out, Double value) {
-+        String tmp = String.format(Locale.ROOT, "%.2f", value).replace('.', ','); // for Excel
-+        out.print(tmp);
-+    }
-+
-+    /**
-+     * Prints a double value and a separator.
-+     * 
-+     * @param out the output stream
-+     * @param value the double value
-+     * 
-+     * @see #printSeparator(PrintStream)
-+     */
-+    private static void printSep(PrintStream out, Double value) {
-+        print(out, value);
-+        printSeparator(out);
-+    }
-+
-+}
-diff --git a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/AbstractConfigurationStatisticsVisitor.java b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/AbstractConfigurationStatisticsVisitor.java
-index 4131591..e1b133f 100644
---- a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/AbstractConfigurationStatisticsVisitor.java
-+++ b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/AbstractConfigurationStatisticsVisitor.java
-@@ -15,12 +15,34 @@
-  */
- package net.ssehub.easy.varModel.confModel;
- 
-+import java.util.HashSet;
-+
-+import net.ssehub.easy.varModel.cst.ConstraintSyntaxTree;
-+import net.ssehub.easy.varModel.model.AbstractVisitor;
-+import net.ssehub.easy.varModel.model.Attribute;
-+import net.ssehub.easy.varModel.model.AttributeAssignment;
-+import net.ssehub.easy.varModel.model.Comment;
-+import net.ssehub.easy.varModel.model.CompoundAccessStatement;
-+import net.ssehub.easy.varModel.model.Constraint;
-+import net.ssehub.easy.varModel.model.DecisionVariableDeclaration;
-+import net.ssehub.easy.varModel.model.FreezeBlock;
-+import net.ssehub.easy.varModel.model.IDecisionVariableContainer;
-+import net.ssehub.easy.varModel.model.OperationDefinition;
-+import net.ssehub.easy.varModel.model.PartialEvaluationBlock;
- import net.ssehub.easy.varModel.model.Project;
-+import net.ssehub.easy.varModel.model.ProjectImport;
-+import net.ssehub.easy.varModel.model.ProjectInterface;
- import net.ssehub.easy.varModel.model.datatypes.Compound;
- import net.ssehub.easy.varModel.model.datatypes.ConstraintType;
- import net.ssehub.easy.varModel.model.datatypes.Container;
-+import net.ssehub.easy.varModel.model.datatypes.DerivedDatatype;
-+import net.ssehub.easy.varModel.model.datatypes.Enum;
-+import net.ssehub.easy.varModel.model.datatypes.EnumLiteral;
- import net.ssehub.easy.varModel.model.datatypes.IDatatype;
-+import net.ssehub.easy.varModel.model.datatypes.OrderedEnum;
- import net.ssehub.easy.varModel.model.datatypes.Reference;
-+import net.ssehub.easy.varModel.model.datatypes.Sequence;
-+import net.ssehub.easy.varModel.model.datatypes.Set;
- 
- /**
-  * Visitor for a {@link Configuration} to generate statistics of the configuration.
-@@ -155,6 +177,117 @@
-     }
-     
-     private ConfigStatistics statistics;
-+    private AbstractVisitor projectVisitor = new AbstractVisitor() {
-+
-+        private java.util.Set<Project> done = new HashSet<Project>();
-+        
-+        @Override
-+        public void visitProject(Project project) {
-+            if (!done.contains(project)) {
-+                done.add(project);
-+                super.visitProject(project);
-+            }
-+        }
-+        
-+        @Override
-+        public void visitEnum(Enum eenum) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitOrderedEnum(OrderedEnum eenum) {
-+            // not needed
-+        }
-+        
-+        @Override
-+        public void visitCompound(Compound compound) {
-+            // done via instances
-+        }
-+        
-+        @Override
-+        public void visitProjectImport(ProjectImport pImport) {
-+            Project res = pImport.getResolved();
-+            if (null != res) {
-+                res.accept(this);
-+            }
-+        }
-+
-+        @Override
-+        public void visitDecisionVariableDeclaration(DecisionVariableDeclaration decl) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitAttribute(Attribute attribute) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitConstraint(Constraint constraint) {
-+            AbstractConfigurationStatisticsVisitor.this.visitConstraint(constraint);
-+        }
-+
-+        @Override
-+        public void visitFreezeBlock(FreezeBlock freeze) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitOperationDefinition(OperationDefinition opdef) {
-+            AbstractConfigurationStatisticsVisitor.this.visitOperationDefinition(opdef);
-+        }
-+
-+        @Override
-+        public void visitPartialEvaluationBlock(PartialEvaluationBlock block) {
-+            AbstractConfigurationStatisticsVisitor.this.processEvalConstraints(block);
-+        }
-+
-+        @Override
-+        public void visitProjectInterface(ProjectInterface iface) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitComment(Comment comment) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitAttributeAssignment(AttributeAssignment assignment) {
-+            AbstractConfigurationStatisticsVisitor.this.visitAssignment(assignment);
-+        }
-+
-+        @Override
-+        public void visitCompoundAccessStatement(CompoundAccessStatement access) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitDerivedDatatype(DerivedDatatype datatype) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitEnumLiteral(EnumLiteral literal) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitReference(Reference reference) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitSequence(Sequence sequence) {
-+            // not needed
-+        }
-+
-+        @Override
-+        public void visitSet(Set set) {
-+            // not needed
-+        }
-+        
-+    };
-     
-     /**
-      * Sole constructor of this class.
-@@ -166,7 +299,9 @@
-     
-     @Override
-     public void visitConfiguration(Configuration configuration) {
--        specialTreatment(configuration.getProject());
-+        Project prj = configuration.getProject();
-+        prj.accept(projectVisitor);
-+        specialTreatment(prj);
-         super.visitConfiguration(configuration);
-     }
-     
-@@ -179,7 +314,7 @@
-     /**
-      * Recursive part to visit all (nested) variables.
-      * @param variable The visited decision variable instance.
--     * @param nestedInContainer <tt>true</tt> if the parent is a container, <tt>false</tt> otherwiese.
-+     * @param nestedInContainer <tt>true</tt> if the parent is a container, <tt>false</tt> otherwise.
-      */
-     public void visitVariable(IDecisionVariable variable, boolean nestedInContainer) {
-         statistics.nVariables++;
-@@ -208,6 +343,7 @@
-                 visitRefines((Compound) dereferedType);
-             }
-         }
-+        visitDefaultValue(variable.getDeclaration().getDefaultValue());
-         
-         nestedInContainer |= Container.TYPE.isAssignableFrom(type);
-         
-@@ -226,9 +362,56 @@
-     private void visitRefines(Compound cmp) {
-         for (int r = 0; r < cmp.getRefinesCount(); r++) {
-             Compound cType = cmp.getRefines(r);
--            statistics.nConstraintInstances += cType.getConstraintsCount();
-+            visitVariableContainer(cmp);
-+            for (int i = 0; i < cmp.getModelElementCount(); i++) {            
-+                if (cmp.getModelElement(i) instanceof PartialEvaluationBlock) {
-+                    processEvalConstraints((PartialEvaluationBlock) cmp.getModelElement(i));
-+                }
-+            }
-             visitRefines(cType);
-         }
-+    }
-+    
-+    /**
-+     * Processes constraints within an eval-block.
-+     * 
-+     * @param evalBlock the block to process
-+     */
-+    protected void processEvalConstraints(PartialEvaluationBlock evalBlock) {
-+        for (int i = 0; i < evalBlock.getNestedCount(); i++) {
-+            processEvalConstraints(evalBlock.getNested(i));
-+        }
-+        for (int i = 0; i < evalBlock.getEvaluableCount(); i++) {
-+            if (evalBlock.getEvaluable(i) instanceof Constraint) {
-+                statistics.nConstraintInstances += 1;
-+                visitConstraint((Constraint) evalBlock.getEvaluable(i));
-+            }
-+        }
-+    }
-+    
-+    /**
-+     * Processes elements within a variable container.
-+     * 
-+     * @param cnt the container
-+     */
-+    protected void visitVariableContainer(IDecisionVariableContainer cnt) {
-+        // do not count declarations - counted twice w.r.t. nested configuration variables
-+        statistics.nConstraintInstances += cnt.getConstraintsCount();
-+        for (int c = 0; c < cnt.getConstraintsCount(); c++) {
-+            visitConstraint(cnt.getConstraint(c));
-+        }
-+        for (int a = 0; a < cnt.getAssignmentCount(); a++) {
-+            visitAssignment(cnt.getAssignment(a));
-+        }
-+    }
-+    
-+    /**
-+     * Processes attribute assignments.
-+     * 
-+     * @param assng the assignment
-+     */
-+    protected void visitAssignment(AttributeAssignment assng) {
-+        visitVariableContainer(assng); // recursion included
-     }
-     
-     /**
-@@ -251,5 +434,29 @@
-      * @param mainProject {@link Configuration#getProject()}.
-      */
-     protected abstract void specialTreatment(Project mainProject);
-+    
-+    /**
-+     * Processes a constraint. Added later, so default implementation is empty.
-+     * 
-+     * @param constraint the constraint to process (contained constraint may be <b>null</b>)
-+     */
-+    protected void visitConstraint(Constraint constraint) {
-+    }
-+
-+    /**
-+     * Processes a default value. Added later, so default implementation is empty.
-+     * 
-+     * @param constraint the constraint to process (may be <b>null</b>)
-+     */
-+    protected void visitDefaultValue(ConstraintSyntaxTree constraint) {
-+    }
-+
-+    /**
-+     * Processes an operation definition. Added later, so default implementation is empty.
-+     * 
-+     * @param opdef the operation definition
-+     */
-+    protected void visitOperationDefinition(OperationDefinition opdef) {
-+    }
- 
- }
-diff --git a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/DefaultConfigurationStatisticsVisitor.java b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/DefaultConfigurationStatisticsVisitor.java
-new file mode 100644
-index 0000000..233c1c6
---- /dev/null
-+++ b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/confModel/DefaultConfigurationStatisticsVisitor.java
-@@ -0,0 +1,52 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.varModel.confModel;
-+
-+import net.ssehub.easy.varModel.model.Project;
-+
-+/**
-+ * A default implementation of the {@link AbstractConfigurationStatisticsVisitor} with empty implementation
-+ * of special treatments.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class DefaultConfigurationStatisticsVisitor extends AbstractConfigurationStatisticsVisitor {
-+
-+    /**
-+     * Creates an instance with a statistics object of type {@link ConfigStatistics}.
-+     */
-+    public DefaultConfigurationStatisticsVisitor() {
-+        super(new ConfigStatistics());
-+    }
-+    
-+    /**
-+     * Creates a statistics visitor with given statistics object (for extension, overriding).
-+     * 
-+     * @param statistics A data object to store the statistical information.
-+     */
-+    protected DefaultConfigurationStatisticsVisitor(ConfigStatistics statistics) {
-+        super(statistics);
-+    }
-+
-+    @Override
-+    protected void specialTreatment(IDecisionVariable variable) {
-+    }
-+
-+    @Override
-+    protected void specialTreatment(Project mainProject) {
-+    }
-+
-+}
-diff --git a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/cst/MultiAndExpression.java b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/cst/MultiAndExpression.java
-index 9be6cec..85d7dc8 100644
---- a/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/cst/MultiAndExpression.java
-+++ b/Plugins/VarModel/Model/src/net/ssehub/easy/varModel/cst/MultiAndExpression.java
-@@ -28,7 +28,7 @@
-     private OCLFeatureCall[] expressions;
-     
-     /**
--     * Creates a multi-and expression.
-+     * Creates a chained (multi-and) expression.
-      * 
-      * @param expressions the individual expressions
-      * @throws CSTSemanticException if <code>expressions</code> or an expression within is <b>null</b>
-diff --git a/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/test/AbstractTest.java b/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/test/AbstractTest.java
-index 788ffd6..3bf0b95 100644
---- a/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/test/AbstractTest.java
-+++ b/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/test/AbstractTest.java
-@@ -160,6 +160,7 @@
-                     fc.size());
-             /* Instead of using default, pass in a decoder. */
-             fileAsString = Charset.defaultCharset().decode(bb).toString();
-+            fc.close();
-         } finally {
-             stream.close();
-         }
-diff --git a/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/translation/LogMessageReceiver.java b/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/translation/LogMessageReceiver.java
-new file mode 100644
-index 0000000..0166088
---- /dev/null
-+++ b/Plugins/VarModel/de.uni_hildesheim.sse.dslCore/src/net/ssehub/easy/dslCore/translation/LogMessageReceiver.java
-@@ -0,0 +1,105 @@
-+/*
-+ * Copyright 2009-2018 University of Hildesheim, Software Systems Engineering
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ * 
-+ *   http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+package net.ssehub.easy.dslCore.translation;
-+
-+import org.eclipse.emf.common.util.URI;
-+import org.eclipse.emf.ecore.EObject;
-+import org.eclipse.emf.ecore.EStructuralFeature;
-+import org.eclipse.emf.ecore.resource.Resource.Diagnostic;
-+
-+import net.ssehub.easy.basics.logger.EASyLoggerFactory;
-+import net.ssehub.easy.basics.logger.EASyLoggerFactory.EASyLogger;
-+import net.ssehub.easy.basics.messages.IMessage;
-+
-+/**
-+ * A simple fallback receiver that does not store messages.
-+ * 
-+ * @author Holger Eichelberger
-+ */
-+public class LogMessageReceiver extends MessageReceiver {
-+    
-+    private EASyLogger logger;
-+    private URI locationHint;
-+    
-+    /**
-+     * Creates a log message receiver.
-+     * 
-+     * @param origin the origin where the messages shall be reported for
-+     * @param bundleName the bundle name (may be <b>null</b>)
-+     */
-+    public LogMessageReceiver(Class<?> origin, String bundleName) {
-+        logger = EASyLoggerFactory.INSTANCE.getLogger(origin, bundleName);
-+    }
-+
-+    @Override
-+    public void error(String message, EObject cause, EStructuralFeature causeFeature, int code) {
-+        logger.error(message + " in " + getLocation(null));
-+    }
-+
-+    @Override
-+    public void warning(String message, EObject cause, EStructuralFeature causeFeature, int code) {
-+        logger.warn(message + " in " + getLocation(null));
-+    }
-+
-+    @Override
-+    public void collect(IMessage message, EObject cause, EStructuralFeature causeFeature, int code) {
-+    }
-+
-+    @Override
-+    public int getMessageCount() {
-+        return 0;
-+    }
-+
-+    @Override
-+    public int getErrorCount() {
-+        return 0;
-+    }
-+
-+    @Override
-+    public Message getMessage(int index) {
-+        return null;
-+    }
-+
-+    @Override
-+    public void error(Diagnostic diagnostic) {
-+        logger.error(diagnostic.getMessage() + " in " + getLocation(diagnostic) + " line " 
-+            + diagnostic.getLine() + " col " + diagnostic.getColumn());
-+    }
-+    
-+    /**
-+     * Returns the location of diagnostic taking the location hint as fallback.
-+     * 
-+     * @param diagnostic the diagnostic (may be <b>null</b>)
-+     * @return the location
-+     */
-+    private String getLocation(Diagnostic diagnostic) {
-+        String location = null == diagnostic ? null : diagnostic.getLocation();
-+        if (null == location && null != locationHint) {
-+            location = locationHint.toString();
-+        }
-+        return location;
-+    }
-+
-+    /**
-+     * Defines a location hint in case that diagnostics do not carry this information. Reset if not used.
-+     * 
-+     * @param locationHint the location hint, may be <b>null</b> for none
-+     */
-+    public void setLocationHint(URI locationHint) {
-+        this.locationHint = locationHint;
-+    }
-+    
-+};
-diff --git a/Tools/EASy-ANT/EASyLoader/.gitignore b/Tools/EASy-ANT/EASyLoader/.gitignore
-index ae3c172..92145bc 100644
---- a/Tools/EASy-ANT/EASyLoader/.gitignore
-+++ b/Tools/EASy-ANT/EASyLoader/.gitignore
-@@ -1 +1,2 @@
- /bin/
-+/target/
-\ No newline at end of file
-diff --git a/Tools/StandaloneModelLoader/.gitignore b/Tools/StandaloneModelLoader/.gitignore
-new file mode 100644
-index 0000000..09e3bc9
---- /dev/null
-+++ b/Tools/StandaloneModelLoader/.gitignore
-@@ -0,0 +1,2 @@
-+/bin/
-+/target/
